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