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 操作的對談流程,原則上大概是底下這樣的順序:
- 建立Assistant
- 建立Thread
- 建立訊息(Message)
- 把訊息增添到Thread上
- 執行(Run)這個Thread
- 取得Thread上助理回覆的結果
對應到的就是底 Assistants API 的執行:
也就是說,透過這個 Thread 物件,你不用再把歷史訊息存入資料庫或是檔案系統裡,你可以直接透過建立一個新的 Thread物件來保存用戶跟機器人之間的對談紀錄。
一般來說,我們會為機器人的每一個用戶,都至少建立一個 Thread,來保存過去的對談紀錄。或是在每一個新的對談情境開始的時候,建立一個新的對談紀錄。
透過Thread,我們可以減少 Token 的浪費,也無需特別篩選哪些對談訊息要保存與否,只需要把每一個用戶的訊息都丟上 Thread 即可,開發連續性對談的機器人助理變得更加容易。
留言