?譯者 | 崔皓
審校 | 重樓
OpenAI剛剛宣布了ChatGPT插件——一種讓ChatGPT在Web上執(zhí)行操作的方法。這不僅意味著ChatGPT可以訪問互聯(lián)網(wǎng)并瀏覽最新內(nèi)容和新聞,還可以代替我們執(zhí)行一些操作,比如購買雜貨、預(yù)訂機(jī)票等等。
實(shí)現(xiàn)過程非常簡單:?
插件提供者使用OpenAPI標(biāo)準(zhǔn)編寫API規(guī)范。這是一個(gè)已經(jīng)存在了一段時(shí)間的標(biāo)準(zhǔn),是類似Swagger API文檔工具的支持者。?
然后,將這個(gè)規(guī)范編譯成提示,向ChatGPT解釋它如何使用API來增強(qiáng)答案。想象一下詳細(xì)的提示,包括每個(gè)可用端點(diǎn)的描述。?
最后,用戶提出新的問題。如果ChatGPT需要從API中獲取信息,它將在回答之前進(jìn)行請(qǐng)求并添加到上下文中。?
盡管在撰寫本文時(shí),這個(gè)過程已經(jīng)在官方OpenAI文檔中有所記錄,但訪問受到了限制。由于還沒有獲取訪問權(quán)限,我決定根據(jù)以上內(nèi)容實(shí)現(xiàn)自己的機(jī)制。因此,下面是我嘗試實(shí)現(xiàn)自己的ChatGPT插件機(jī)制。?
鄭重聲明:我也只能通過公開信息了解ChatGPT插件,并沒有其他渠道了解額外的信息。本文的演示是為了說明實(shí)現(xiàn)的概念,并不能代表實(shí)現(xiàn)之后的樣子。?
選擇API規(guī)范?
第一步是了解如何指定API。OpenAI提供了一些樣本API規(guī)范,因此我決定使用相同的輸入來實(shí)現(xiàn)自己的解決方案,并為單個(gè)端點(diǎn)編寫了一個(gè)簡單規(guī)范。?
我使用DummyJSON,一個(gè)專門用于測(cè)試的簡單API,特別是“獲取所有代辦事項(xiàng)”的端點(diǎn)。我編寫了以下YAML文件作為規(guī)范。?
如上面配置文件所示,一個(gè)端點(diǎn)有兩個(gè)參數(shù): "limit" 和 "skip"。?
現(xiàn)在,我需要將上面的?
經(jīng)過反復(fù)討論,最終得到了以下結(jié)果:?
我會(huì)告訴ChatGPT以特定的語法回應(yīng),并告訴它用戶將提供響應(yīng)。這是因?yàn)锳I模型不會(huì)執(zhí)行任何API調(diào)用——它必須將該操作委托給不同的系統(tǒng)。由于我們無法訪問ChatGPT的內(nèi)部組件,于是要求它將HTTP請(qǐng)求委托給用戶。只要隱藏對(duì)話轉(zhuǎn)換對(duì)最終用戶不可見就行了,用戶甚至感知不到HTTP請(qǐng)求,就萬事大吉了。?
編排?
ChatGPT是一個(gè)通過REST API公開的AI模型。向OpenAI模型發(fā)出請(qǐng)求只是端到端聊天機(jī)器人體驗(yàn)中的一步。這意味著可以設(shè)置模型傳遞的信息,以及向最終用戶顯示的信息。?
為了使用ChatGPT實(shí)現(xiàn)虛擬助手的功能,我使用了Bot Framework Composer,這是一種基于UI的工具,允許我們構(gòu)建對(duì)話體驗(yàn)并將其發(fā)布到不同的渠道。以下是高級(jí)別的解決方案架構(gòu):?
我用Bot Framework Composer構(gòu)建了這個(gè)虛擬助手,因?yàn)樗梢钥焖俨渴鸬蕉鄠€(gè)終端用戶渠道,且只需要很少的代碼。如果您想要復(fù)制這個(gè)解決方案,您可能還需要考慮使用Power Virtual Agents,尤其是在生產(chǎn)中使用。?
以下是對(duì)話流程的構(gòu)建方式:
1. 用戶提問
2.ChatGPT用預(yù)格式化的消息進(jìn)行回復(fù):
3.Azure Bot檢測(cè)到這種格式,并將請(qǐng)求提交給DummyJSON API,而不會(huì)牽扯到最終用戶。
4.Azure Bot代表用戶向ChatGPT發(fā)出新請(qǐng)求,以獲取響應(yīng)正文。
5.ChatGPT格式化響應(yīng):"這是你的前5個(gè)待辦事項(xiàng):..."
6.Azure Bot回復(fù)給用戶。
有一件事情立即引起了我的注意產(chǎn)品可以阻止它通過生成代碼的方式調(diào)用其他網(wǎng)站或者應(yīng)用。出于這個(gè)原因,我應(yīng)用了一個(gè)簡單的域名允許列表,這樣保證所有請(qǐng)求只能發(fā)送到DummyJSON API,而且只能一次發(fā)送一條 – 從而保證消息發(fā)送的安全性。
以上就是設(shè)計(jì)部分的整體思路。?
最終結(jié)果?
上面跳過了一些實(shí)現(xiàn)的細(xì)節(jié),直到體驗(yàn)完美為止。這是一個(gè)統(tǒng)計(jì)工具,預(yù)計(jì)需要一些試錯(cuò),直到找到正確的提示。但最終,這是我與機(jī)器人的最終版本進(jìn)行的對(duì)話。?
結(jié)論?
ChatGPT插件功能的實(shí)現(xiàn)比上面的快速演示要更加復(fù)雜。這次Demo的目的是展示如何完成ChatGPT的集成——相信我,我和你一樣對(duì)實(shí)現(xiàn)過程非常好奇。這個(gè)Demo給ChatGPT集成HTTP的能力提供了可能性,我迫不及待想看看社區(qū)能夠拋出什么新鮮花樣。?
同時(shí),我們作為該技術(shù)的用戶,也有一種責(zé)任感:如果一個(gè)有惡意的提示讓Azure Bot向一個(gè)未知的服務(wù)器發(fā)出請(qǐng)求會(huì)發(fā)生什么?現(xiàn)在有哪些新的攻擊向量?在我編寫的機(jī)器人中,應(yīng)用了簡單的域名白名單——隨著新的用例不斷出現(xiàn),這是否足夠?我還設(shè)法在后續(xù)的提示中重寫了API規(guī)范——是否存在與此可能相關(guān)的風(fēng)險(xiǎn)?有許多與AI相關(guān)的安全問題需要考慮,而OpenAI當(dāng)然也意識(shí)到了這一點(diǎn)。?
總的來說,這次Demo讓我印象深刻。ChatGPT的可能性確實(shí)是無限的,我一定會(huì)關(guān)注這個(gè)功能,看它在未來幾周和幾個(gè)月內(nèi)的發(fā)展。我也希望盡快在Azure OpenAI中看到它!?
譯者介紹?
崔皓,51CTO社區(qū)編輯,資深架構(gòu)師,擁有18年的軟件開發(fā)和架構(gòu)經(jīng)驗(yàn),10年分布式架構(gòu)經(jīng)驗(yàn)。?
原文標(biāo)題:??How ChatGPT Plugins (could) work??,作者:MarcoCardoso?