八個(gè)用于R編程的ChatGPT工具
譯文譯者 | 李睿
審校 | 重樓
ChatGPT無需進(jìn)行微調(diào)或接受特定主題的訓(xùn)練,就可以回答有關(guān)各種技術(shù)主題的問題——包括如何編寫R代碼。這意味著任何R語言編程人員都可以使用ChatGPT的功能,即使是那些對(duì)大型語言模型知之甚少的編程人員也是如此。大型語言模型(LLM)是OpenAI公司的ChatGPT等人工智能聊天機(jī)器人的基礎(chǔ)技術(shù)。
圍繞ChatGPT和R語言的生態(tài)系統(tǒng)正在形成,這使得將人工智能技術(shù)整合到R語言工作流程中變得很容易。但是在人們開始在R中使用ChatGPT和與之相關(guān)的工具之前,有一些重要的事情需要記?。?/span>
(1)用戶對(duì)這些工具的所有要求都會(huì)被發(fā)送到OpenAI公司的服務(wù)器,因此不要使用ChatGPT工具處理敏感信息。
(2)ChatGPT可以自信地返回錯(cuò)誤的答案。即使是錯(cuò)誤的響應(yīng)也可以作為節(jié)省時(shí)間的起點(diǎn),但不要假設(shè)代碼將完全按照用戶的期望執(zhí)行。德克薩斯基督教大學(xué)副教授、流行的tidycensus R軟件包的開發(fā)者Kyle Walker最近在推特上表示,“ChatGPT可以在用戶很好地理解一個(gè)主題的情況下為其工作提供助力,也可能讓用戶暴露出他們不知道自己在做什么”。其區(qū)別在于知道什么時(shí)候人工智能輸出不正確。而用戶需要檢查ChatGPT的響應(yīng)。
(3)ChatGPT可以對(duì)同一個(gè)查詢生成不同的響應(yīng),有些答案可能是準(zhǔn)確的,而另一些則不是。例如,當(dāng)多次請(qǐng)求一個(gè)帶有藍(lán)色條形圖的ggplot2條形圖時(shí),其代碼有時(shí)會(huì)生成一個(gè)帶有藍(lán)色條形圖,但有時(shí)不會(huì),即使提交了完全相同的請(qǐng)求。如果需要一個(gè)可再現(xiàn)的工作流,這種結(jié)果顯然不太理想。
(4)如果用戶正在使用的軟件包最近進(jìn)行了更新,ChatGPT也不會(huì)知道,因?yàn)樗挠?xùn)練數(shù)據(jù)截止到2021年。
(5)本文中的大多數(shù)資源都要求用戶擁有自己的OpenAI API密鑰,并且這一API并不是免費(fèi)使用的。雖然目前價(jià)格很低,但不能保證它會(huì)一直保持這種狀態(tài)。ChatGPT 3.5渦輪模型目前的定價(jià)是每10,000個(gè)令牌為0.2美分。那么令牌能帶來什么?例如,從234行mpg數(shù)據(jù)集創(chuàng)建散點(diǎn)圖的請(qǐng)求花費(fèi)38個(gè)令牌。
(6)向ChatGPT尋求編碼幫助不太可能讓用戶陷入人工智能種族和性別偏見的倫理困境。然而,關(guān)于向OpenAI公司提供更多數(shù)據(jù)是否明智的討論也很激烈。例如,訓(xùn)練數(shù)據(jù)如何被抓取和重新利用的倫理問題;如果使用開源的大型語言模型(例如H2O.ai的h2oGPT)而不是OpenAI公司的問題。這些問題需要組織和個(gè)人自己去分析。然而在撰寫本文時(shí),根本沒有特定于R語言的大型語言模型(LLM)工具可以與圍繞ChatGPT構(gòu)建的工具相媲美。
現(xiàn)在了解目前可用的一些最著名的以R為中心的ChatGPT資源。
1.RTutor
這個(gè)應(yīng)用程序是一種優(yōu)雅而簡(jiǎn)單的方法來對(duì)ChatGPT和R進(jìn)行采樣。用戶上傳一個(gè)數(shù)據(jù)集,問一個(gè)問題,然后看著它生成R代碼和結(jié)果,其中包括圖形。雖然它被命名為RTutor,但這個(gè)應(yīng)用程序也可以生成Python代碼。
RTutor的網(wǎng)址是https://rtutor.ai/。它是目前列出的唯一一個(gè)不需要ChatGPT API密鑰使用的應(yīng)用程序或軟件包,但用戶需要為大量使用提供自己的密鑰,以免向創(chuàng)建者的帳戶收費(fèi)。
圖1要求RTutor創(chuàng)建條形圖時(shí)的結(jié)果
該應(yīng)用程序的“關(guān)于”頁面解釋說,“RTutor的主要目標(biāo)是幫助有R語言使用經(jīng)驗(yàn)的人學(xué)習(xí)R或提高工作效率……RTutor可以用來加快使用R的編碼過程。它為用戶提供了一個(gè)測(cè)試和完善的代碼草案。小心出現(xiàn)漏洞和錯(cuò)誤。”
RTutor的代碼是開源的,可以在GitHub上找到,所以用戶可以安裝自己的本地版本。然而,許可只允許用戶使用應(yīng)用程序用于非營(yíng)利或非商業(yè)用途,或用于商業(yè)測(cè)試。RTutor是南達(dá)科他州立大學(xué)生物信息學(xué)教授Steven Ge博士個(gè)人創(chuàng)建的項(xiàng)目。
2.CodeLingo
這個(gè)多語言應(yīng)用程序可以將代碼從一種編程語言“翻譯”到另一種語言??捎玫恼Z言包括Java、Python、JavaScript、C、C++、PHP等,包括R。這只是一個(gè)Web應(yīng)用程序,可在https://analytica.shinyapps.io/codelingo/上獲得。用戶需要輸入OpenAI API密鑰才能使用它(用戶可能希望在測(cè)試后重新生成密鑰)。
圖2 CodeLingo應(yīng)用程序中的ChatGPT嘗試將ggplot2圖形代碼轉(zhuǎn)換為Python
將ggplot2 R圖的代碼轉(zhuǎn)換為JavaScript生成輸出的請(qǐng)求使用相當(dāng)難學(xué)的D3 JavaScript庫,而不是JavaScript新手更可能想要的內(nèi)容,例如Observable Plot或Vega-Lite。
轉(zhuǎn)換為Python的請(qǐng)求(如圖2所示)更為直接,并且使用了用戶所期望的庫。然而,ChatGPT不明白“Set1”是一個(gè)ColorBrewer調(diào)色板,不能直接在Python中使用。與許多ChatGPT使用的情況一樣,在編程語言之間翻譯代碼可能會(huì)給用戶提供一個(gè)有用的起點(diǎn),但是需要知道如何修復(fù)錯(cuò)誤。
這款應(yīng)用由Analytica Data Science Solutions開發(fā)。
3.askgpt
這個(gè)軟件包可以在https://github.com/JBGruber/askgpt獲得,對(duì)于在控制臺(tái)中首次使用ChatGPT的用戶來說,這可能是一個(gè)很好的起點(diǎn),部分原因是它在初次啟動(dòng)時(shí)會(huì)給出一些指示。加載帶有庫的包(askgpt),它的響應(yīng)是:
Hi, this is askgpt ?.
- To start error logging, run `log_init()` now.
- To see what you can do use `?askgpt()`.
- Or just run `askgpt()` with any question you want!
在不存儲(chǔ)密鑰的情況下使用login()函數(shù),將看到一條關(guān)于如何獲取API密鑰的消息:
It looks like you have not provided an API key yet.
- Go to <https://platform.openai.com/account/api-keys>
- (Log into your account if you haven't done so yet)
- On the site, click the button + Create new secret key to create an API key
- Copy this key into R/RStudio
看起來用戶還沒有提供API密鑰。
系統(tǒng)會(huì)要求用戶將密鑰保存在密匙環(huán)中,然后就可以為以后的會(huì)話做好準(zhǔn)備了。如果用戶的密鑰已經(jīng)存儲(chǔ),login()將不返回任何消息。
Askgpt的默認(rèn)設(shè)置是將查詢結(jié)果存儲(chǔ)為一個(gè)對(duì)象,這樣就可以將它們保存到一個(gè)變量中,如下所示:
barchart_instructions <- askgpt("How do I make a bar chart with custom colors with ggplot2?")
提交一個(gè)查詢,用戶會(huì)首先看到:
GPT is thinking ?
這樣,用戶就知道其請(qǐng)求已經(jīng)被發(fā)送了,并且應(yīng)該會(huì)得到答復(fù),而不是想知道在用戶點(diǎn)擊提交后會(huì)發(fā)生什么。
除了軟件包的通用askgpt()函數(shù)外,還有一些特定于編碼的函數(shù),例如annstate_code()、explain_code()和test_function()。這將涉及到將響應(yīng)剪切并粘貼回源代碼中。
對(duì)于那些熟悉OpenAI API的人員來說,軟件包的chat_api()函數(shù)允許用戶設(shè)置API參數(shù),例如想要使用的模型、每個(gè)請(qǐng)求愿意花費(fèi)的最大令牌以及所需的響應(yīng)溫度(將在本文后面詳細(xì)解釋)。
chat_api()函數(shù)返回一個(gè)列表,其中響應(yīng)的文本部分在YourVariableName$choices[b[1]]$message$content中。其他有用的信息也存儲(chǔ)在列表中,例如使用的令牌數(shù)量。
askgpt包是由阿姆斯特丹自由大學(xué)的博士后研究員Johannes Gruber創(chuàng)建的。它可以從CRAN安裝。
4.gptstudio
這個(gè)軟件包和gpttools(如下所述)具有RStudio插件可以與ChatGPT一起使用,盡管也有一些命令行函數(shù)可以在任何IDE或終端中使用。
用戶可以從代碼源窗格上方的插件下拉菜單或通過RStudio命令調(diào)色板(Ctrl-shift-p)搜索插件來訪問RStudio中的外接工具。
根據(jù)軟件包網(wǎng)站的介紹,“gptstudio是一個(gè)通用的助手,讓R程序員可以輕松地將大型語言模型(LLM)的使用整合到他們的項(xiàng)目工作流中?!?/span>
其中一個(gè)插件ChatGPT啟動(dòng)了一個(gè)基于瀏覽器的應(yīng)用程序,用于詢問用戶的R編碼問題,并提供編程風(fēng)格(整潔、基礎(chǔ)或無偏好)和熟練程度(初學(xué)者、中級(jí)、高級(jí)和天才)的選項(xiàng)。
在下面的截圖中,用戶詢問了作為一個(gè)具有整潔(tidyverse)風(fēng)格的中級(jí)程序員,如何在R中創(chuàng)建散點(diǎn)圖,
圖3查詢gptstudio的ChatGPT插件
使用基本編程風(fēng)格詢問相同的問題,生成的代碼使用基礎(chǔ)R的plot函數(shù)作為答案。
雖然gptstudio是為R編碼提供幫助而設(shè)計(jì)的,但它可以利用更多的ChatGPT功能,所以可以問它任何問題,就像最初的基于Web的ChatGPT一樣。例如,該應(yīng)用程序的工作原理與ChatGPT工具一樣好,可以編寫Python代碼并回答諸如“什么行星離太陽最遠(yuǎn)?”之類的一般問題。
gptstudio包的另一個(gè)插件,Source插件中的ChatGPT似乎最接近魔法。用戶可以像往常一樣在源代碼窗格中編寫代碼,在代碼中添加請(qǐng)求更改的注釋,選擇包含注釋的代碼塊,然后應(yīng)用插件。然后所要求的更改已完成。
當(dāng)將插件應(yīng)用到以下代碼時(shí):
# Sort bars by descending Y value, rotate x-axis text 90 degrees, color bars steel blue
ggplot(states, aes(x = State, y = Pop_2020)) +
geom_col()
代碼被替換為圖4中突出顯示的選擇:
圖4 Source插件中的ChatGPT示例
太酷了,但是如果運(yùn)行這段代碼,這些條就不會(huì)顯示為鋼藍(lán)色。在geom_col()中移動(dòng)fill = "steelblue"使其工作。這個(gè)錯(cuò)誤與這個(gè)特定的插件無關(guān),而是與ChatGPT本身的變幻莫測(cè)有關(guān)。正如以上提到的,在其他時(shí)間運(yùn)行了相同的請(qǐng)求,其結(jié)果是準(zhǔn)確的。
將以下代碼發(fā)送到ChatGPT的源代碼插件生成了一個(gè)Shiny應(yīng)用程序的完整指令和代碼:
# Create an R Shiny app with this data
states<- readr::read_csv("https://raw.githubusercontent.com/smach/SampleData/main/states.csv")
然而,兩次提交請(qǐng)求返回了兩個(gè)完全不同的結(jié)果——第一個(gè)是兩個(gè)文件的應(yīng)用程序,在使用它之前忘記加載ggplot2庫:第二個(gè)調(diào)用的列實(shí)際上不在數(shù)據(jù)中。編寫處理現(xiàn)有數(shù)據(jù)集細(xì)節(jié)的查詢需要更多的工作,但是代碼仍然可以作為構(gòu)建的框架。
gptstudio由Michel Nivard和James Wade撰寫。
5.gpttools
據(jù)軟件包網(wǎng)站介紹,gpttools軟件包的目的“是為R軟件包開發(fā)人員擴(kuò)展gptstudio,使其更容易將大型語言模型(LLM)的使用納入項(xiàng)目工作流程”。截至本文撰寫之時(shí),gpttools包還沒有在CRAN上發(fā)布。與其相反,用戶可以從JamesHWade/gptools GitHub repo或R Universe安裝gpttools,其方法如下:
# Enable repository from jameshwade
options(repos = c(
jameshwade = "https://jameshwade.r-universe.dev",
CRAN = "https://cloud.r-project.org"
))
# Download and install gpttools in R
install.packages("gpttools")
該軟件包的插件包括:
- ChatGPT檢索
- 將腳本轉(zhuǎn)換為函數(shù)
- 將roxygen添加到Function(記錄一個(gè)函數(shù))
- 建議進(jìn)行單元測(cè)試
- 文檔數(shù)據(jù)
- 提出改進(jìn)建議
要運(yùn)行插件,突出顯示其代碼,然后從RStudio Addins下拉菜單中選擇該插件,或者在命令調(diào)色板中搜索它(在RStudio Addins菜單中使用Tools >顯示命令調(diào)色板,在Windows上使用Ctrl-Shift-P,在Mac上使用Cmd-Shift-P)。
當(dāng)用戶運(yùn)行插件時(shí),并不總是看到消息告訴他發(fā)生了什么,所以要有耐心。
建議改進(jìn)插件在一個(gè)R文件中的函數(shù)下面生成了未注釋的文本,后面跟著修改的代碼。有些建議并不是很有幫助。例如,對(duì)于下面的代碼:
if (exportcsv) {
filename_root <- strsplit(filename, "\\.")[[1]][1]
filename_with_winner <- paste0(filename_root, "_winners.csv")
rio::export(data, filename_with_winner)
}
推薦的插件
Use `paste()` instead of `paste0()` to ensure a space is included between the names of the winners.
用戶不想要文件名中有空格!盡管如此,還是無法否認(rèn)書中的所有建議。以下建議似乎是合理的:
Use a switch statement instead of multiple if statements, to allow for additional functionality in the future
在這種情況下,用戶更有可能使用dplyr的case_hen()或data.table的fcase(),而不是baseR的switch()。
如果用戶正在使用任何軟件包的ChatGPT插件,請(qǐng)確保有代碼的原始副本,因?yàn)榇a有被覆蓋的風(fēng)險(xiǎn),而用戶不一定想要這樣做。
6.ChatGPT
ChatGPT包提供了在R中使用ChatGPT的函數(shù)和RStudio插件,在測(cè)試時(shí)記錄了10個(gè)插件。
特定于代碼的函數(shù)包括comment_code()、complete_code()、create_unit_tests()、document_code()、find_issues_in_code()和refactor_code()。還有一個(gè)通用的ask_chatgpt()函數(shù)和插件,如果用戶想將ChatGPT用于與代碼無關(guān)的內(nèi)容。
將密鑰存儲(chǔ)在.Renviron文件中:
OPENAI_API_KEY="your key"
如果用戶試圖在存儲(chǔ)密鑰之前運(yùn)行其中一個(gè)插件,將得到一條錯(cuò)誤消息,告訴他如何進(jìn)行密鑰設(shè)置。
該包位于CRAN上,或者可以使用
remotes::install_github("jcrodriguez1989/chatgpt", build_vignettes = TRUE)
當(dāng)用戶在沒有加載軟件包的情況下嘗試加載插件時(shí),什么也沒有發(fā)生。然后用庫(chatgpt)加載了這個(gè)包,得到了這個(gè)消息:
Warning message:
In run_addin("document_code") :
Please set one of `OPENAI_ADDIN_REPLACE=TRUE` or `OPENAI_VERBOSE=TRUE`
按照R環(huán)境文件中的說明操作,將verbose選項(xiàng)設(shè)置為TRUE,因?yàn)椴幌M鎿Q初始代碼。
這導(dǎo)致在控制臺(tái)中顯示對(duì)ChatGPT的查詢,并在控制臺(tái)中顯示響應(yīng)。
在R環(huán)境文件中使用OPENAI_ADDIN_REPLACE=TRUE選項(xiàng),并且在RStudio中選擇了代碼,當(dāng)添加文檔時(shí),用戶的一些初始代碼偶爾會(huì)消失。用戶最終堅(jiān)持使用這個(gè)包的命令行函數(shù)而不是插件,但是可能會(huì)發(fā)現(xiàn)插件很有用,只要記住在試驗(yàn)之前復(fù)制其代碼。
這個(gè)聊天軟件包由Juan Cruz Rodriguez創(chuàng)建。
7.gptchatteR
gptchatteR號(hào)稱“一個(gè)實(shí)驗(yàn)性的非官方包裝器,用于在R中與OpenAI GPT模型進(jìn)行交互,其中一個(gè)優(yōu)點(diǎn)是它的chatter.plot()函數(shù)。
安裝軟件包:
remotes::install_github("isinaltinkaya/gptchatteR", build_vignettes = TRUE, dependencies = TRUE)
這確保了它還安裝了所需的openai包。然后,可以加載這個(gè)包并使用:
library(gptchatteR)
chatter.auth("YOUR KEY")
在完成之后,使用chatter.create()啟動(dòng)一個(gè)聊天會(huì)話。
chatter_create()參數(shù)包括OpenAI模型的模型(默認(rèn)為text-davinci-003), max_tokens用于用戶希望使用的最大令牌數(shù)量(默認(rèn)為100),以及使用如下參數(shù)設(shè)置的“溫度”:
chatter.create(temperature = 0)
根據(jù)OpenAI文檔,溫度設(shè)置可以在0到1之間,表示“模型輸出不太可能的令牌的頻率”。
溫度越高,輸出就越隨機(jī)(通常也是創(chuàng)造性的)。然而,這與“真實(shí)”是不一樣的。對(duì)于大多數(shù)實(shí)際用例,例如數(shù)據(jù)提取和真實(shí)問答,溫度為0是最好的。
包的默認(rèn)值是中性的0.5。除非想要娛樂而不是獲得可用的代碼,否則將溫度設(shè)置為0是值得的。
當(dāng)進(jìn)行測(cè)試的時(shí)候,這個(gè)包是工作的,但是生成了以下警告:
The `engine_id` argument of `create_completion()` is deprecated as of openai 0.3.0.
? Please use the `model` argument instead.
? The deprecated feature was likely used in the gptchatteR package.
Please report the issue to the authors.
用戶可以創(chuàng)建一個(gè)“隨意”的聊天。聊天(“你的輸入”)。如果用戶認(rèn)為需要在初始請(qǐng)求之后進(jìn)行后續(xù)操作,可以使用chatter.feed(),它將存儲(chǔ)用戶的第一個(gè)查詢以便在第二個(gè)問題中使用,以此類推。
運(yùn)行以下代碼后:
library(gptchatteR)
chatter.auth(Sys.getenv("OPENAI_API_KEY"))
chatter.create(temperature = 0)
chatter.feed('I have the following data in R mydf <- data.frame(State = c("CT", "NJ", "NY"), Pop = c(3605944, 9288994, 20201249))')
myplot <- chatter.plot("Make a graph with State on the x axis and Pop on the Y axis")
一個(gè)圖表出現(xiàn)在RStudio視圖窗格中。圖形代碼存儲(chǔ)在myplot$code中。
gptchatteR軟件包是由哥本哈根大學(xué)的博士Isin Altinkaya創(chuàng)建的。
8.chatgptimages
這個(gè)R包不是為了幫助用戶編寫代碼而設(shè)計(jì)的。與其相反,它使用熟悉的R和Shiny界面來訪問ChatGPT的另一個(gè)功能:創(chuàng)建圖像。目前,基于用于訓(xùn)練模型的人工智能圖像創(chuàng)建中存在許多道德知識(shí)產(chǎn)權(quán)問題,如果用戶想將此軟件包用于娛樂以外的任何內(nèi)容,務(wù)必記住這一點(diǎn)。
也就是說,如果想嘗試,需要注意它不會(huì)像通常的軟件包那樣安裝。首先,確保其系統(tǒng)上也安裝了shiny、golem、shinydashboard、openai、config和test。然后,在https://github.com/analyticsinmotion/chatgpt-images-r-shiny上下載整個(gè)GitHub repo,或者在https://github.com/analyticsinmotion/chatgpt-images-r-shiny上下載并解壓縮.zip文件。打開chatgtimages。在RStudio中打開run_dev. Rproj文件。R文件放到項(xiàng)目的dev文件夾中,然后逐行運(yùn)行這個(gè)短文件。這個(gè)應(yīng)用程序應(yīng)該在默認(rèn)瀏覽器中打開:
圖5 chatgtimages應(yīng)用程序在瀏覽器中運(yùn)行
按照存儲(chǔ)ChatGPT API密鑰的說明,用戶就可以開始創(chuàng)建和保存圖像。
其結(jié)果如圖6所示:
圖6從chatgtimages保存的圖像
超越ChatGPT
如果用戶想測(cè)試其他開源的大型語言模型,Chat with open large language models這個(gè)非R特定的工具非常有趣。在撰寫本文時(shí),它提供了9種不同的模型,還有一個(gè)“競(jìng)技場(chǎng)”,用戶可以同時(shí)測(cè)試兩種模型,并選出最佳模型。
用戶需要注意其使用條款:“僅用于非商業(yè)用途。它只提供有限的安全措施,并可能產(chǎn)生令人反感的內(nèi)容。它不得用于任何非法、有害、暴力、種族主義或性目的。該服務(wù)收集用戶對(duì)話數(shù)據(jù),用于未來的研究?!?/span>
最后提醒一下,H2o. ai有一個(gè)網(wǎng)站,可以在https://gpt.h2o.ai/上測(cè)試它的模型。
原文標(biāo)題:8 ChatGPT tools for R programming,作者:Sharon Machlis