使用 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 物件包含至少兩個關鍵屬性:rolecontent

這裡,我們先專注於 role 屬性的結構和用法:

  • role: 這個屬性表示發送消息的實體。在 Chat Completion API 中,role 參數主要有兩個可能的值:
    • user:代表使用者,即與 AI 對話的人。
    • assistant:代表 AI 助手,即 GPT 模型驅動的回應內容。

不過,該屬性除了上述常見的 userassistant 這兩個值之外,其實還有一個特殊的選項:system

system 主要用於控制對話流程,提供與後續對話直接相關的引導訊息。也可以用來發出指令,改變對話的方向或行為。例如,重置對話、引導對話進入特定主題,或給出特定的對話架構。我們也常用它來插入對話中的非直接回應資訊,例如設定對話的背景、指明特定的對話場景,或提供AI需要知道或遵守的資訊。

舉例來說,若你透過上述的 JSON Body 呼叫 API 之後,可能會得到底下的回應:
圖片

你會發現,Request中的 system role,告知AI的角色(此為引導),而user role則是用戶的提問。送出請求後, Chat Completion API 的回應 body 中的 message 物件,也包含了一組 role, content 結構,但 role 的值則是 assistant,表示它是 AI 收到訊息後的回應。

透過在 API 請求中指定 systemuser 角色,開發人員可以精確地控制對話的流程和內容。靈活運用 systemuser 角色,開發人員可以創建更精確、更符合用戶需求的對話體驗。這不僅提升了聊天機器人的效能,也為用戶帶來更加人性化和個性化的互動。


相關課程:
https://www.studyhost.tw/NewCourses/LineBot

留言

這個網誌中的熱門文章

在POC或迷你專案中使用 LiteDB

使用Qdrant向量資料庫實作語意相似度比對

專業的價值...

讓 LINE Bot 對談機器人顯示 "Loading..." 動畫

使用 Airtable 在小型需求上取代傳統資料庫