iT邦幫忙

2024 iThome 鐵人賽

0
生成式 AI

運用生成式 AI 服務 所提供的API 實做應用開發(以Gemini及ChatGPT為例)系列 第 32

8-2 Chat API 介紹 及 運用 chatGPT playground 做基本串接

  • 分享至 

  • xImage
  •  

8-2 Chat API 介紹 及 運用 chatGPT playground 做基本串接

https://ithelp.ithome.com.tw/upload/images/20240811/20046160Lxnp1jT3Gi.png

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(systemuserassistant)和內容 content:

  • 系統 system message:可選,用於設定助手的行為。
  • 使用者 user messages :提供請求或評論給助手回應。
  • 助手 Assistant messages :儲存先前的助手回應,也可用於編寫範例以展示期望的行為(稱為 few-shot 範例)。

預設情況下,系統消息為 "You are a helpful assistant"。雖然你可以在使用者消息中定義指令,但在系統消息中設置指令更為有效。每個對話只能設置一條系統消息。

開始使用

Chat 模型接受消息列表作為輸入,並返回模型生成的消息作為輸出。雖然聊天格式旨在使多輪對話變得容易,但它對於沒有對話的單輪任務也同樣有用。

Chat Completions API 呼叫示例

以下是使用 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 回應格式

以下是 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 回應仍在進行或不完整。

根據輸入參數,模型回應可能包含不同的信息。

Playground

通常我們在開發時不太可能直接用 rest API 去呼叫 來測試結果, 因呼叫為一次就是一個費用。

所以先在 playground 測試 prompt 並且獲得預期的成果

https://ithelp.ithome.com.tw/upload/images/20240801/20046160qrXrEoVkXT.png

  1. 例如你設定好你想要的 system 後
  2. 直接點 view code
  3. 就可以看到程式, 目前有四種 預設的程式語言可以選

https://ithelp.ithome.com.tw/upload/images/20240801/20046160dntJj4grNG.png

後記

大概對於 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年 講座 紀錄

最後這篇文章若有切合你的需求,敬請訂閱按讚分享


上一篇
8-1 ChatGPT 的 API Playground 教學
下一篇
8-3 試作 Google Apps Script 呼叫 Chat API 與小結
系列文
運用生成式 AI 服務 所提供的API 實做應用開發(以Gemini及ChatGPT為例)36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言