使用 OpenAI 的 Chat Completion API
OpenAI 在 ChatGPT 紅了之後,開始逐步把背後的 LLM(大型語言模型) 開放給開發人員使用(當然是收錢的),LLM 作為對談機器人實際的運算主體,它隱藏在雲端的某一個角落悄悄的運行著,而外部的 UI 則是透過 API 來存取這個大型語言模型(LLM):
ChatGPT 採用 Web 的方式實作此操作界面,背後也是透過 OpenAI 的 API 來叫用LLM。而當開發人員有了API可以呼叫LLM之後,我們(企業內的開發人員),也可以建立自己的界面,或在自己開發的應用程式中直接來使用AI,不管是 App、Web 或是ChatBot (像是 LINE Bot),都可以透過串接 OpenAI 的 API ,來叫用 LLM 實現各種 AI 加值功能。
其中, OpenAI 釋出的 Chat Completion API 就是作為對談機器人應用的主要API 。它讓開發人員可以直接叫用最新的 GPT 模型(GPT-3 or GPT-4),生成流暢、(與提示)關聯性高、且自然的回應對話。
在接下來的介紹當中,我們將深入檢視該功能的REST API 呼叫方式,並通過實際例子來展示其用法。
功能概述
從功能面來說,Chat Completion API 能夠理解用戶傳來的訊息(提示),並且以智能助理的角色來回應,由於LLM具有基礎知識,其回應範圍從日常對話到專業的主題,都可以很好的進行問題解答、情緒分析、故事講述等多種任務,甚至可以生成 JSON(這對於開發人員相當重要)。
要使用 Chat Completion API,開發人員可以通過 HTTP Request與之互動。該API標準的HTTP請求包括以下幾個部分:
- Endpoint: API 的 URL 端點,就Chat Completion API 來說,目前是 https://api.openai.com/v1/chat/completions。
- Headers: 包括用於認證的
Authorization
欄位,其值應為Bearer [您的API金鑰]
。 - Body: 包含請求參數,如
model
(指定 GPT 模型),messages
(包含一系列對話歷史和當前用戶消息的陣列),例如:
{
"model": "gpt-3.5-turbo",
"messages": [
{"role": "user", "content": "今天天氣如何?"}
]
}
這樣就可以呼叫Chat Completion API ,至於金鑰申請的方法請參考這裡:
https://studyhost.blogspot.com/2023/12/openai-api-step-by-step.html
具體例子
假設我們建立了一個簡單的聊天機器人,讓用戶詢問關於旅遊的問題,底下就是一個 HTTP 請求範例中的body:
{
"model": "gpt-3.5-turbo",
"max_tokens" : 500,
"temperature" : 0.8,
"messages":
[
{"role": "system", "content": "你是一個旅遊機器人,可以回答各種旅遊問題"},
{"role": "user", "content": "舉三個台灣好玩的地方"}
]
}
在 OpenAI Chat Completion API 中,messages
物件是對話處理的核心組件。其中的message
元素以陣列方式存在於messages
物件集合中,每個 message
物件包含至少兩個關鍵屬性:role
和 content
。
這裡,我們先專注於 role
屬性的結構和用法:
role
: 這個屬性表示發送消息的實體。在 Chat Completion API 中,role
參數主要有兩個可能的值:user
:代表使用者,即與 AI 對話的人。assistant
:代表 AI 助手,即 GPT 模型驅動的回應內容。
不過,該屬性除了上述常見的 user
和 assistant
這兩個值之外,其實還有一個特殊的選項:system
。
system
主要用於控制對話流程,提供與後續對話直接相關的引導訊息。也可以用來發出指令,改變對話的方向或行為。例如,重置對話、引導對話進入特定主題,或給出特定的對話架構。我們也常用它來插入對話中的非直接回應資訊,例如設定對話的背景、指明特定的對話場景,或提供AI需要知道或遵守的資訊。
舉例來說,若你透過上述的 JSON Body 呼叫 API 之後,可能會得到底下的回應:
你會發現,Request中的 system role,告知AI的角色(此為引導),而user role則是用戶的提問。送出請求後, Chat Completion API 的回應 body 中的 message 物件,也包含了一組 role, content 結構,但 role 的值則是 assistant,表示它是 AI 收到訊息後的回應。
透過在 API 請求中指定 system
和 user
角色,開發人員可以精確地控制對話的流程和內容。靈活運用 system
和 user
角色,開發人員可以創建更精確、更符合用戶需求的對話體驗。這不僅提升了聊天機器人的效能,也為用戶帶來更加人性化和個性化的互動。
留言