前言
最近 OpenAI 有推出 GPTs 可以很方便的讓人直接上傳文件做人知識庫並建立 Bot 來對話,
對話的理解能力還不輸之前自已將文件內容拆分一段段轉成 Embedding 後再跟使用者的問來來比較相似度。
但因為目前 GPTs 還不 Support API 存取,所以改用 OpenAI Assistants API 來試試。
另外 OpenAI Assistants API 是用多少算多少$,可以從 usage 看到目前的花費(預設有給 5
美元)。
體驗
如果要手動測試的話,可以直接到 Assistants playground ,
建立新的 Assistant、上傳文件、設定 Model (gpt-3.5-turbo-1106
or …) 、啟用 Tools Retrieval
)後,就可以進行對話。
說明
開始之前,先來了解什麼是 Assistant, Thread, Message, Run 及 File。
Assistant | 就是一個知識助理,包含要使用的 instructions, model, files 及 tools |
---|---|
Thread | 使用者的 Session,所有的對話都會在這裡面。以前在 Chat 需要多輪對話時,需要自已將多次的對話訊息包含在一起,現在則不需要,會自動被記錄在 Thread 之中。 |
Message | 使用者發送的問題及 Assistant 回覆的內容 |
Run | 當使用者發送問題後,透過 Run 來讓 Assistant 回覆使用者的問題 |
File | 要給 Fine-tuning 或 Assistants 使用的檔案 |
使用 API
以下介紹使用 C# HttpClient 呼叫 Assistants API 來建立 Assistant 並對話及取得 Assistant 回覆內容。
要達到這樣子的過程有以下幾個步驟,
- 取得 API Key
- 上傳要做為知識庫的文件
- 建立 Assistant
- 為一個使用者建立 Thread
- 在這個 Thread 中發送使用者 Message
- 發送 Run 來讓 Assistant 處理使用者詢問的問題
- 取回 Message
- 最後跟使用者結束所有對話時,可以將 Thread 刪除掉
以下我們一步步展開來看,
0. 取得 API Key
到 API Keys 建立 Secretkey ,並將它 Copy 下來
1. 上傳要做為知識庫的文件
這裡的文件格式目前只支援 'c', 'cpp', 'csv', 'docx', 'html', 'java', 'json', 'md', 'pdf', 'php', 'pptx', 'py', 'rb', 'tex', 'txt', 'css', 'jpeg', 'jpg', 'js', 'gif', 'png', 'tar', 'ts', 'xlsx', 'xml', 'zip'
1 | string jsonContentType = "application/json"; |
結果如下,
1 | { |
2. 建立 Assistant
1 | var file1Id = "file-9xpwQr4rni98mUcrQtlkDkvc"; |
執行結果如下,
1 | { |
3. 為一個使用者建立 Thread
1 | var assistantId = "asst_zsAKidrHJw3GwgI0mtsLFTnf"; |
執行結果如下,
1 | { |
4. 在這個 Thread 中發送使用者 Message
1 | var threadId = "thread_CwNorPHLj7eGt7UmoCEp7PxV"; |
執行結果如下,
1 | { |
5. 發送 Run 來讓 Assistant 處理使用者詢問的問題
1 | await CreateRun(assistantId, threadId); |
1 | //剛建立時 status 是 ("status": "queued"),要 RetrievesRun 到 completed |
結果如下,
1 | { |
1 | { |
6. 取回 Message
取得最後回 2 個訊息
1 | await ListMessages(threadId); |
結果如下,
1 | { |
可以發現,第一個內容就是 Assistant 的回覆。
7. 最後跟使用者結束所有對話時,可以將 Thread 刪除掉
1 | //清除使用者的 Thread |
結論
從整個測試下來,只要給文件就幫忙做成知識庫,
省去了之前建立 Bot 時,要依不同文件格式,切節章、轉成 Embedding 再跟使用者問題比對相似度的成本。
透過 Thread 來掌控 Bot 與 使用者對話的內容,不需要將所有的對話一直附加到對話中,導致 Token 逾來逾多的問題。
不過要 loop 看 Run
是否執行完成對使用 API 來說,不是很方便。
- 註: 要看 HTTP 的過程,可以在 Assistants playground 的
Log
中查看哦~
- 註: 如果要使用到
GPT 4
,會員等級起碼要是Tier 1
以上,就是起碼要付 5 美元
參考資源
Assistants API
OpenAI’s Assistants API — A hands-on demo
Assistants API - Rate limits