譯者| 崔皓
#審查者| 重樓
審查學校| 重樓
OpenAI剛剛宣布了ChatGPT插件-一種讓ChatGPT在Web上執行操作的方法。這不僅意味著ChatGPT可以存取網路並瀏覽最新內容和新聞,還可以代替我們執行一些操作,例如購買雜貨、預訂機票等等。
實作過程非常簡單:
#外掛程式提供者使用OpenAPI標準來撰寫API規格。這是一個已經存在了一段時間的標準,也是類似Swagger API文件工具的支持者。
然後,將這個規範編譯成提示,向ChatGPT解釋它如何使用API來增強答案。想像一下詳細的提示,包括每個可用端點的描述。 #最後,使用者提出新的問題。如果ChatGPT需要
從API中獲取信息,它將在回答之前進行請求並添加到上下文中。
儘管在撰寫本文時,這個過程已經在官方OpenAI文件中有所記錄,但訪問受到了限制。由於還沒有取得存取權限,我決定根據以上內容實作自己的機制。因此,以下是我嘗試實作自己的ChatGPT插件機制。 #鄭重「我
#1 也只能透過公開資訊來了解ChatGPT外掛,並沒有其他管道了解
額外的
資訊。 本文的示範是為了說明實現的概念,
#########並不能代表實現之後的樣子。 ########################選擇API規格#############第一步是了解如何指定API。 OpenAI提供了一些樣本API規範,因此我決定使用相同的輸入來實現自己的解決方案,並為單一端點編寫了一個簡單規範。 ###############################我使用DummyJSON,一個專門用於測試的簡單API,特別是「取得所有代辦事項」的端點。我編寫了以下YAML檔案作為規格。 #####################openapi: 3.0.1 info: title: TODO Plugin description: A plugin that allows the user to create and manage a TODO list using ChatGPT. version: 'v1' servers: - url: https://dummyjson.com/todos paths: /todos: get: operationId: getTodos summary: Get the list of todos parameters: - in: query name: limit schema: type: integer description: Number of todos to return - in: query name: skip schema: type: integer description: Number of todos to skip from the beginning of the list responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/getTodosResponse' components: schemas: getTodosResponse: type: object properties: todos: type: array items: type: object properties: id: type: int todo: type: string completed: type: bool userId: type: string description: The list of todos.
You are a virtual assistant that helps users with their questions by relying on information from HTTP APIs. When the user asks a question, you should determine whether you need to fetch information from the API to properly answer it. If so, you will request the user to provide all the parameters you need, and then ask them to run the request for you. When you are ready to ask for a request, you should specify it using the following syntax: <http_request>{ "url": "<request URL>", "method": "<method>", "body": {<json request body>}, "headers": {<json request headers>} }</http_request> Replace in all the necessary values the user provides during the interaction, and do not use placeholders. The user will then provide the response body, which you may use to formulate your answer. You should not respond with code, but rather provide an answer directly. The following APIs are available to you: --- <OpenAPI Specification goes here>
我会告诉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用预格式化的消息进行回复:
2.<http_request>{ "url": "https://dummyjson.com/todos?limit=5", "method": "GET", "body": "", "headers": {} }</http_request>
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
####################################################以上是如何使用ChatGPT插件工作的詳細內容。更多資訊請關注PHP中文網其他相關文章!