PS: 參考 https://platform.openai.com/docs/guides/chat-completions 還是寫作 Chat Completions 但是 playground 那裡已經獨立一個 Chat 頁, 且原本的 Completions 考慮要被取消? 很有可能 原本 呼叫的網址 chat/completion 也會有變動嗎?大家注意看看囉。 畢竟 OpenAI 和態度是希望開發者往 Assistant API 靠近。Chat API 所以還在也還有可能是因為還有許多的套件還有再用,例如: langChain
OpenAI 的 Chat Completions API 支援文字和圖像輸入,並可以輸出文字內容(包括程式碼和 JSON)。該 API 主要透過 messages
參數接收輸入,該參數是一個消息物件數組。
每個物件都有一個角色 role(system
、user
或 assistant
)和內容 content:
預設情況下,系統消息為 "You are a helpful assistant"。雖然你可以在使用者消息中定義指令,但在系統消息中設置指令更為有效。每個對話只能設置一條系統消息。
Chat 模型接受消息列表作為輸入,並返回模型生成的消息作為輸出。雖然聊天格式旨在使多輪對話變得容易,但它對於沒有對話的單輪任務也同樣有用。
以下是使用 curl
呼叫 Chat Completions API 的示例:
curl <https://api.openai.com/v1/chat/completions> \\
-H "Content-Type: application/json" \\
-H "Authorization: Bearer $OPENAI_API_KEY" \\
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Who won the world series in 2020?"
},
{
"role": "assistant",
"content": "The Los Angeles Dodgers won the World Series in 2020."
},
{
"role": "user",
"content": "Where was it played?"
}
]
}'
在上面的示例中,使用者的最終問題 "Where was it played?" 只有在瞭解之前關於 2020 年世界大賽的消息時才有意義。由於模型沒有記憶過去的請求,因此必須在每個請求中提供所有相關信息作為對話歷史。如果對話超出了模型的 token 限制,則需要以某種方式縮短對話。
如果希望模擬 ChatGPT 中文本迭代返回的效果,可以將 stream
參數設置為 true
。
以下是 Chat Completions API 回應的示例:
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "The 2020 World Series was played in Texas at Globe Life Field in Arlington.",
"role": "assistant"
},
"logprobs": null
}
],
"created": 1677664795,
"id": "chatcmpl-7QyqpwdfhqwajicIEznoc6Q47XAyW",
"model": "gpt-3.5-turbo-0613",
"object": "chat.completion",
"usage": {
"completion_tokens": 17,
"prompt_tokens": 57,
"total_tokens": 74
}
}
回應:
message = completion.choices[0].message.content
每個回應都包含 finish_reason
,其可能的值包括:
stop
:API 返回完整消息,或消息被提供的 stop
參數中的某個終止序列終止。length
:由於 max_tokens
參數或 token 限制導致的未完成模型輸出。function_call
:模型決定調用一個函數。content_filter
:由於內容過濾器的標誌而省略的內容。null
:API 回應仍在進行或不完整。根據輸入參數,模型回應可能包含不同的信息。
通常我們在開發時不太可能直接用 rest API 去呼叫 來測試結果, 因呼叫為一次就是一個費用。
所以先在 playground 測試 prompt 並且獲得預期的成果
大概對於 Chat API 有基礎的了解之後, 就可以發現 Gemini API 非常的相像, 所以前面章節用 Gemini API 所開發的應用,只要將 CallAPI 裡面的 code 換成這裡的 code 可以了。
Chat API 不像 Gemini API 有 RAG 和 function calling 是因為OpenAI 這樣這兩個部分的開發移到了 Assistant API 上了。
我是 Wolke。我是一名專業程式開發者,專長是開發 AI 和程式解決方案。
•
我投入了不少時間在專業發展上。我是多本書的作者,其中包括《LINE聊天機器人+AI+雲端+開源+程式:輕鬆入門到完整學習》和《ChatGPT來襲,未來人人都需具備的運算思維!應用詠唱工程來釋放程式生產力—程式學習/開發篇》。也有出版線上課程,我熱衷於分享我的經驗和技術,幫助其他開發者更好地利用 AI 工具。
•
也在許多知名大學、論壇、社團擔任講者,如果貴方有需要也歡迎與我聯繫。
2023年 講座 紀錄
最後這篇文章若有切合你的需求,敬請訂閱按讚分享