Assistants API

freedragon發表於2024-03-10

Assistants API 允許您在自己的應用程式中構建 AI 助手。助手有指令,可以利用模型、工具和知識來響應使用者查詢。Assistants API 目前支援三種型別的工具:程式碼直譯器、檢索和函式呼叫。未來,我們計劃釋出更多 OpenAI 構建的工具,並允許您在我們的平臺上提供自己的工具。

您可以使用Assistants Playground或透過構建本指南中概述的分步整合來探索 Assistants API 的功能。從較高層面來看,Assistants API 的典型整合具有以下流程:

  1. 透過定義其自定義指令並選擇模型來在 API 中建立助手。如果有幫助,請啟用程式碼直譯器、檢索和函式呼叫等工具。
  2. 當使用者開始對話時建立一個執行緒。
  3. 當使用者提問時將訊息新增到執行緒中。
  4. 線上程上執行助手以觸發響應。這會自動呼叫相關工具。
Assistants API 處於測試階段,我們正在積極努力新增更多功能。在我們的開發者論壇中分享您的反饋
呼叫 Assistants API 要求您傳遞 beta HTTP 標頭。如果您使用 OpenAI 的官方 Python 或 Node.js SDK,則會自動處理此問題。
OpenAI-Beta: assistants=v1

本入門指南逐步介紹了建立和執行使用程式碼直譯器的助手的關鍵步驟

助理遊樂場

除了Assistants API之外,我們還提供Assistants Playground(需要登入)。Playground 是探索 Assistants API 功能並學習如何在不編寫任何程式碼的情況下構建自己的 Assistant 的好方法。

第 1 步:建立助手

助手代表一個實體,可以配置為使用多個引數響應使用者的訊息,例如:

  • 說明:助理和模特應如何表現或回應
  • 型號:您可以指定任何 GPT-3.5 或 GPT-4 型號。檢索工具至少需要gpt-3.5-turbo-1106(支援較新版本)或 個gpt-4-turbo-preview模型。
    • 注意:Assistants API 中對微調模型的支援即將推出
  • 工具:API 支援由 OpenAI 構建和託管的程式碼直譯器和檢索。
  • 函式:API 允許您定義自定義函式簽名,其行為與我們的函式呼叫功能類似。

在此示例中,我們將建立一個作為個人數學導師的助手,並啟用程式碼直譯器工具。

Python
1
2
3
4
5
6
assistant = client.beta.assistants.create(
    name="Math Tutor",
    instructions="You are a personal math tutor. Write and run code to answer math questions.",
    tools=[{"type": "code_interpreter"}],
    model="gpt-4-turbo-preview"
)

第 2 步:建立執行緒

一個執行緒代表一個對話。我們建議在使用者發起對話後立即為每個使用者建立一個執行緒。透過建立 Messages在此執行緒中傳遞任何特定於使用者的上下文和檔案

Python
thread = client.beta.threads.create()

執行緒沒有大小限制。您可以向話題新增任意數量的訊息。助手將使用相關的最佳化技術(例如我們已經使用 ChatGPT 進行了廣泛測試的截斷)來確保對模型的請求適合最大上下文視窗。當您使用 Assistants API 時,您可以委託控制針對任何給定執行傳遞給模型的輸入令牌數量,這意味著在某些情況下您對執行 Assistant 的成本的控制較少,但不必處理複雜性自己管理上下文視窗。

已啟用“執行緒”頁面的組織可以檢視透過助手 API 和助手遊樂場建立的執行緒。執行緒頁面許可權可以在組織設定中進行管理

第 3 步:向主題新增訊息

訊息包含文字,還可以選擇允許使用者上傳的任何檔案。訊息需要新增到特定的 Thread 中目前不支援透過訊息物件新增影像,例如使用 GPT-4 和 Vision 在聊天完成中新增影像,但我們計劃在未來幾個月內新增對它們的支援。您仍然可以上傳影像並透過檢索對其進行處理

Python
1
2
3
4
5
message = client.beta.threads.messages.create(
    thread_id=thread.id,
    role="user",
    content="I need to solve the equation `3x + 11 = 14`. Can you help me?"
)

現在,如果您在 Thread 中列出訊息,您將看到該訊息已被附加。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
  "object": "list",
  "data": [
    {
      "created_at": 1696995451,
      "id": "msg_abc123",
      "object": "thread.message",
      "thread_id": "thread_abc123",
      "role": "user",
      "content": [{
        "type": "text",
        "text": {
          "value": "I need to solve the equation `3x + 11 = 14`. Can you help me?",
          "annotations": []
        }
          }],
        ...

第四步:執行助手

為了讓助手響應使用者訊息,您需要建立一個 Run這使得助手讀取執行緒並決定是呼叫工具(如果啟用了)還是簡單地使用模型來最好地回答查詢。隨著執行的進行,助手將訊息附加到帶有role="assistant". 助手還將自動決定要在模型的上下文視窗中包含哪些先前的訊息。這對定價和模型效能都有影響。目前的方法已經根據我們在構建 ChatGPT 時所學到的知識進行了最佳化,並且可能會隨著時間的推移而發展。

您可以選擇在建立執行時將新指令傳遞給助手,但請注意,這些指令會覆蓋助手的預設指令。

Python
1
2
3
4
5
run = client.beta.threads.runs.create(
  thread_id=thread.id,
  assistant_id=assistant.id,
  instructions="Please address the user as Jane Doe. The user has a premium account."
)

第五步:檢查執行狀態

預設情況下,執行進入queued狀態您可以定期檢索執行以檢查其狀態,看看它是否已移至completed.

Python
1
2
3
4
run = client.beta.threads.runs.retrieve(
  thread_id=thread.id,
  run_id=run.id
)

第 6 步:顯示助理的響應

執行完成後,您可以列出助手新增到執行緒的訊息。

Python
1
2
3
messages = client.beta.threads.messages.list(
  thread_id=thread.id
)

最後,將它們顯示給使用者!在此執行期間,助理向執行緒新增了兩條新訊息。下面是一個示例:

角色內容
user 我需要解方程3x + 11 = 14你能幫助我嗎?
assistant 當然,簡·多伊。(3x + 11 = 14)要求解的方程(x),您需要(x)在方程的一側進行隔離。您可以按照以下方法執行此操作:
  1. 等式兩邊同時減去11,得到(3x = 3)
  2. 然後,兩邊除以 3 即可解出(x)
(x)讓我為您計算一下價值。
assistant 方程的解(3x + 11 = 14)(x = 1)

相關文章