OpenAI DevDay 2024 重點整理

這是 OpenAI DevDay 2024 舊金山場 10/1 的四大重點 🔥🔥🔥🔥

  1. Realtime API 你也可以做出 ChatGPT 進階語音模式在你的 app 了,這將帶來一整個新世代的語音 app
  2. Prompt caching 不用額外設置,命中快取就自動有 50% 折扣
  3. Vision fine tuning 視覺圖片微調 gpt-4o
  4. Model distillation & eval tools! 模型蒸餾和評估工具

以下細節解讀:

1. Realtime API 即時語音

  • 官方公告: openai.com/index/introducing-the-realtime-api
  • 官方 API 文件: platform.openai.com/docs/guides/realtime
  • 之前要做語音助手,需要用 whisper 先做語音辨識,轉文字後呼叫 API,得到文字後再用 TTS API 轉成語音回給用戶,但這樣不但速度較慢,而且失去情感、重音和口音。
  • 現在用 Realtime API 可以完整處理整個過程,直接串流音訊輸入和輸出,使對話體驗更加自然,還可以在接收音訊時用 API 提前中斷。
  • 就是前幾天 ChatGPT 的 Advanced Voice mode 的 API 版本,現在大家自己的 app 也可以做了
  • 實作上,Realtime API 使用 WebSocket 連接,整個 API 都是基於 websoket 事件來處理,包括音訊也是用 base64 編碼後塞進 json 傳遞
  • 支援 function calling,可以用來透過語音來呼叫 tool 工具
  • 新模型叫做是 gpt-4o-realtime-preview 今天應該就會開放給大家
  • 還有另有一個 gpt-4o-audio-preview 模型接下來幾週會釋出,我不太確定差別是什麼,看起來是一個非 realtime 的版本(和 Chat Completions API 一樣的 HTTP API),可以輸出和輸出 文字或語音
  • 價錢: 每分鐘語音輸入約 0.06 美元,每分鐘語音輸出約 0.24 美元,目前還是不便宜的
  • 官方的 demo app: github.com/openai/openai-realtime-console 這個全用前端做的,瀏覽器直接 WebSocket 去連接 OpenAI 後端,API key 也存在前端上,因此只是 demo 用途。實務上 production 是用戶瀏覽器連接我們的 app server,我們 server 再連接 OpenAI 後端 (這 repo 中也有後端方案 Relay Server 的範例 code)。

2. Prompt caching 快取

  • 官方公告: openai.com/index/api-prompt-caching/
  • 官方 API 文件: platform.openai.com/docs/guides/prompt-caching
  • 適用 gpt-4o, gpt-4o-mini, o1-preview, o1-mini
  • 只有在 prompt prefix 符合時才有作用,因此請把不會變的 prompt 文字放前面,會變的內容放後面
  • 會被快取的長度至少要有 1024 tokens,並且 128 tokens 累加,例如 1024, 1152, 1280….
  • 回傳 response 的 usage 會有 cached_tokens 告訴你命中多少 tokens,可以便宜一半價錢 (不過相比其他家例如 Claude 如果命中快取是省90%啦)
  • image, tool use, structured outputs json schema 這些也可以算在 快取,讚讚
  • 快取的 expire 時間是 5~10 分鐘(如果沒作用就會被清掉),非高峰時間最多幫你活一小時

3. Vision fine tuning 視覺微調

4. Model distillation 模型蒸餾

  • 官方公告: openai.com/index/api-model-distillation/
  • 官方 API 文件: platform.openai.com/docs/guides/distillation
  • 官方 API 評估文件: platform.openai.com/docs/guides/evals
  • 其實就是做微調,只是 openai 針對這個蒸餾場景把流程做的更順
  • 新的 Stored Completions 功能: 在 gpt-4o 或 o1 的 API 呼叫中,用 store: true, metadata: {“tag”: “my-app-1”} 可以把結果在 openai 後台儲存下來,並搭配 metadata 一起,例如 metadata 寫這是你的哪一個 app 的 prompt
  • 在後台透過 metadata 找出這些 input/output pairs,用這些 pairs 去微調 gpt-4o-mini !!!
  • 搭配後台新出的評估工具,你就可以把一個平常你用 gpt-4o 做特定任務的 app,跑一陣子收集數據之後,就可以換成微調好的 gpt-4o-mini 來省錢啦!!

Whisper large-v3-turbo

另外還有一個 keynote 沒講的更新是 Whisper large-v3-turbo model 釋出 github.com/openai/whisper/pull/2361/files

這是 large-v3 的蒸餾版本,速度更快,犧牲一點點準確性。

又仔細看了 Realtime API 文件

除了 OpenAI 的官方文件,也推薦 Azure github.com/azure-samples/aoai-realtime-audio-sdk README 寫的不錯可以一看

  1. 輸入可以是 text 或 audio,你可以只打字輸入不講話
  2. 輸出可以是 audio 或 (audio+text) (也就是同時串流聲音跟文字都給你),但是不能只輸出 text,這個參數叫做 modalities,預設是 [“text”, “audio”]
  3. 輸入是 audio 時,輸出可以多 transcription 文字 (也就是你講話聲音的逐字稿),這個參數是 input_audio_transcription 可以開關
  4. 可以設定是否打開 VAD (voice activity detection) 模式,也就是始終在串流對話並讓 AI 判斷自動回話。可以設定 activation threshold, prefix_padding_ms, silence_duration_ms 來調整敏感度。
    這也可以關閉,用在你自己做個通話按鈕,手動控制串流對話的開始跟結束。
  5. 同一個 websocket session 連線 AI會記得你講過什麼。但是如果 user 中斷重連,AI 不會記得之前講過啥,你可以把對話紀錄透過 websocket 事件先傳給 AI,但是這裡不支援傳語音! 因此你得自己存下所有對話文字(難怪這個 API 都有功能可以拿到 text)
  6. 想手動提前中斷AI輸出的話,除了呼叫 response.cancel 事件之外,還有一個 conversation.item.truncate 事件可以呼叫,用途是可以刪掉 AI 還沒講到的話 (因為 AI 很可能已經生成好內容塞進對話 歷史紀錄了,但是因為語音講不夠快,用戶其實還沒聽到)
  7. 小結: 輸出的文字有兩種:
    • 一種是透過 response.content_part.* 事件串流回來的,這種是 gpt-4o-realtime-preview 模型的輸出
    • 一種是透過 conversation.item.input_audio_transcription.completed 事件回來的,這種是用 whisper 模型把你的語音輸入轉成逐字稿。

發佈留言

發表迴響