Azure OpenAI 中的 Assistant API 功能

過去,如果你有用 Azure OpenAI 開發對談機器人,其中最麻煩的事情之一,大概就是記錄和處理歷史對談訊息。但歷史對談訊息對於AI的正確回覆佔有舉足輕重的角色,不記錄不行。

這是因為本質上API的呼叫是無狀態的(Stateless)

因此,在與API交談的過程中,你每次呼叫API都必須把過去的訊息,當作參數重新傳到後端,這樣API後面的AI Model才會知道先前跟用戶說過了什麼。但如此一來,對談越多,不就得花費愈多Token嗎? 是的,沒錯,這是過去透過OpenAI開發對談機器人時的一個難題。

2023年11/06,OpenAI舉辦了DevDay,在keynote的場次中,Sam Altman介紹了新的API --> Assistants API,把對談機器人的開發,再繼續優化到更簡單的步驟。

搭配Assistants API,你可以輕易建立出一個智能助理(或客服機器人),除了讓開發人員更省事之外,還包含了類似RAG的功能,可以將企業內的資訊先餵給這個AI助理。

如今,Azure OpenAI也提供了這個服務,在美國東部2澳大利亞東部瑞典中部率先提供了這個服務(Preview),同樣的,他提供了一個遊樂場後台:
圖片

初次進入,畫面上出現『找不到任何佈署』? 那你就給他來個新的佈署:
圖片

系統會引導你建立一個獨立的模型:
圖片

接著就可以透過該模型來建立助理了:
圖片

填寫完智能助理的名稱、提示(system prompt) 之後,就可以儲存和測試了。

乍看之下,和原本的聊天對談沒什麼不同,但背後有一個很大的差異,那就是,過去的聊天對談,前後文(Context)的實踐是透過把先前與機器人的互動(訊息),每次重新回傳給API來實現的,而現在這個助理(Assistant API)則是透過一個新的物件,叫做Thread(執行緒),來保存這些對話記錄。簡單的說就是,你不用再自己保存對話記錄了:
圖片

Thread(執行緒)聽起來有點抽象,你可以把一個執行緒想成一連串的對話記錄,其中有一則一則的訊息(Messages):
圖片

當用戶輸入一則訊息(放上Thread)給機器人(assistant),機器人回覆這則訊息(也放上Thread),這樣就構成了一個Run。

也因此,透過 Assistant api 操作的對談流程,原則上大概是底下這樣的順序:

  1. 建立Assistant
  2. 建立Thread
  3. 建立訊息(Message)
  4. 把訊息增添到Thread上
  5. 執行(Run)這個Thread
  6. 取得Thread上助理回覆的結果

對應到的就是底 Assistants API 的執行:
圖片

也就是說,透過這個 Thread 物件,你不用再把歷史訊息存入資料庫或是檔案系統裡,你可以直接透過建立一個新的 Thread物件來保存用戶跟機器人之間的對談紀錄。

一般來說,我們會為機器人的每一個用戶,都至少建立一個 Thread,來保存過去的對談紀錄。或是在每一個新的對談情境開始的時候,建立一個新的對談紀錄。

透過Thread,我們可以減少 Token 的浪費,也無需特別篩選哪些對談訊息要保存與否,只需要把每一個用戶的訊息都丟上 Thread 即可,開發連續性對談的機器人助理變得更加容易。


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

留言

這個網誌中的熱門文章

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

專業的價值...

VS Code Terminal 的編碼問題

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

在Windows Phone (WP8) 中使用SignalR