助手 API 是 OpenAI 的聊天补全 API 的有状态演进,旨在通过内置的长期会话和专用工具支持,简化类似助手的体验创建。本文档解释了助手 API 系统的架构、组件和使用模式。有关聊天补全等其他 OpenAI API 的信息,请参阅 高级 API 功能。
助手 API 提供了一种结构化的方式来构建可以
与需要手动管理会话历史记录和工具执行的更基础的聊天补全 API 不同,助手 API 通过有状态的架构自动处理这些细节。
来源: examples/Assistants_API_overview_python.ipynb13-15
聊天补全 API 是无状态的,它对单个 Messages 进行操作,您使用 Completion 和 Model。虽然功能强大,但它要求开发人员手动管理
助手 API 引入了三个关键原语来处理状态和执行
Assistants:封装基础模型、指令、工具和上下文文档Threads:表示会话状态(消息历史记录)Runs:为助手在线程上的执行提供动力,处理响应和多步工具使用来源: examples/Assistants_API_overview_python.ipynb28-38
来源: examples/Assistants_API_overview_python.ipynb33-38 examples/Assistants_API_overview_python.ipynb209-221 examples/Assistants_API_overview_python.ipynb273-275 examples/Assistants_API_overview_python.ipynb396-402
助手是一个持久化的对象,它封装了
gpt-4o,gpt-4o-mini)助手一旦创建,就可以在多个对话(线程)中重复使用。
助手对象结构示例
{
"id": "asst_qvXmYlZV8zhABI2RtPzDfV6z",
"created_at": 1736340398,
"description": null,
"instructions": "You are a personal math tutor. Answer questions briefly, in a sentence or less.",
"metadata": {},
"model": "gpt-4o",
"name": "Math Tutor",
"object": "assistant",
"tools": [],
"response_format": "auto",
"temperature": 1.0,
"top_p": 1.0
}
来源: examples/Assistants_API_overview_python.ipynb33-36 examples/Assistants_API_overview_python.ipynb182-222
线程代表了对话的状态。它包含
线程对象结构示例
{
"id": "thread_j4dc1TiHPfkviKUHNi4aAsA6",
"created_at": 1736340398,
"metadata": {},
"object": "thread",
"tool_resources": {"code_interpreter": null, "file_search": null}
}
来源: examples/Assistants_API_overview_python.ipynb34-35 examples/Assistants_API_overview_python.ipynb254-275
消息包含在线程中,代表用户和助手之间的通信。主要特点
role(“user”或“assistant”)消息对象结构示例
{
"id": "msg_1q4Y7ZZ9gIcPoAKSx9UtrrKJ",
"assistant_id": null,
"attachments": [],
"completed_at": null,
"content": [{"text": {"annotations": [], "value": "I need to solve the equation `3x + 11 = 14`. Can you help me?"}, "type": "text"}],
"created_at": 1736340400,
"incomplete_at": null,
"incomplete_details": null,
"metadata": {},
"object": "thread.message",
"role": "user",
"run_id": null,
"status": null,
"thread_id": "thread_j4dc1TiHPfkviKUHNi4aAsA6"
}
来源: examples/Assistants_API_overview_python.ipynb276-323 examples/Assistants_API_overview_python.ipynb489-541
运行是将助手连接到线程的操作,允许助手处理线程中的消息并生成响应。要点
status,该状态会随着处理的进行而改变queued(排队中)、in_progress(进行中)、completed(已完成)、failed(失败)等。运行对象结构示例
{
"id": "run_qVYsWok6OCjHxkajpIrdHuVP",
"assistant_id": "asst_qvXmYlZV8zhABI2RtPzDfV6z",
"cancelled_at": null,
"completed_at": 1736340406,
"created_at": 1736340403,
"expires_at": null,
"failed_at": null,
"instructions": "You are a personal math tutor. Answer questions briefly, in a sentence or less.",
"last_error": null,
"metadata": {},
"model": "gpt-4o",
"object": "thread.run",
"status": "completed",
"thread_id": "thread_j4dc1TiHPfkviKUHNi4aAsA6",
"tools": [],
"usage": {
"completion_tokens": 35,
"prompt_tokens": 66,
"total_tokens": 101
}
}
来源: examples/Assistants_API_overview_python.ipynb36-37 examples/Assistants_API_overview_python.ipynb342-348 examples/Assistants_API_overview_python.ipynb389-411
通过 client.beta.threads.runs.steps.list() 检索到的运行由步骤组成
| 步骤类型 | 描述 | step_details 结构 |
|---|---|---|
tool_calls | 工具执行(code_interpreter、file_search、function) | step_details.tool_calls[].code_interpreter.input/outputs |
message_creation | 助手消息生成 | step_details.message_creation.message_id |
step_details.tool_calls 结构包含
tool_call.id:工具调用的唯一标识符tool_call.type:工具类型(code_interpreter、file_search、function)tool_call.code_interpreter.input:执行的 Python 代码tool_call.code_interpreter.outputs:代码执行结果来源: examples/Assistants_API_overview_python.ipynb918-921 examples/Assistants_API_overview_python.ipynb928-977
助手 API 通过 tools 参数支持三种主要工具类型
在 tools 数组中使用 {"type": "code_interpreter"} 配置
功能
tool_resources.code_interpreter.file_ids 访问文件该工具使用 code_interpreter.input 和 code_interpreter.outputs 创建 step_details.tool_calls。
来源: examples/Assistants_API_overview_python.ipynb856-862 examples/Assistants_API_overview_python.ipynb928-943
使用 {"type": "file_search"} 和向量存储配置
功能
client.beta.vector_stores 管理向量存储client.files.create() 处理文件来源: examples/Assistants_API_overview_python.ipynb1052-1073 examples/Assistants_API_overview_python.ipynb1000-1012
使用 {"type": "function", "function": {...}} 模式配置
函数调用使 Assistants 能够在其 Run 执行中调用开发者定义的函数。函数定义遵循与 Chat Completions API 相同的模式,但通过 Run Steps 机制进行处理。
来源: examples/Assistants_API_overview_python.ipynb802-803
来源: examples/Assistants_API_overview_python.ipynb419-428 examples/Assistants_API_overview_python.ipynb396-402 examples/Assistants_API_overview_python.ipynb553-555
可以通过以下方式创建 Assistants:
client.beta.assistants.create() 的 APIclient.beta.assistants.create() 的关键参数
name:Assistant 的人类可读名称instructions:定义 Assistant 行为的指令model:基础模型(例如,gpt-4o)tools:工具对象数组(例如,[{"type": "code_interpreter"}])temperature:控制响应的随机性tool_resources:工具的可选文件资源来源: examples/Assistants_API_overview_python.ipynb209-221 examples/Assistants_API_overview_python.ipynb144-168
使用 client.beta.threads.create() 创建 Thread
使用 client.beta.threads.messages.create() 添加消息
使用 client.beta.threads.messages.list() 检索消息
来源: examples/Assistants_API_overview_python.ipynb273-275 examples/Assistants_API_overview_python.ipynb317-323 examples/Assistants_API_overview_python.ipynb553-555
使用 client.beta.threads.runs.create() 创建 Run
使用 client.beta.threads.runs.retrieve() 轮询完成
使用 client.beta.threads.runs.steps.list() 检索 Run 步骤
来源: examples/Assistants_API_overview_python.ipynb396-402 examples/Assistants_API_overview_python.ipynb419-428 examples/Assistants_API_overview_python.ipynb918-921
来源: examples/Assistants_API_overview_python.ipynb33-37 examples/Assistants_API_overview_python.ipynb182-222 examples/Assistants_API_overview_python.ipynb254-275 examples/Assistants_API_overview_python.ipynb389-411
Cookbook 演示了管理 Assistants API 工作流的关键辅助函数
此模式支持
submit_message() 和 wait_on_run() 进行异步对话管理get_response() 检索消息历史记录来源: examples/Assistants_API_overview_python.ipynb658-677 examples/Assistants_API_overview_python.ipynb694-707 examples/Assistants_API_overview_python.ipynb759-785
有状态 vs. 无状态:Assistants API 在 Threads 中维护对话状态,而 Chat Completions 要求在每次请求时都传递完整的对话历史。
异步 vs. 同步:Assistants API 中的 Run 是异步操作,可能需要一段时间才能完成,尤其是在涉及工具时。Chat Completions 会立即返回响应。
内置工具支持:Assistants API 为 Code Interpreter 和 File Search 提供了内置支持,在使用 Chat Completions 时需要手动实现这些功能。
多步推理:Run 可能涉及多个步骤,Assistant 在提供最终响应之前可能会多次使用工具。
消息顺序:默认情况下,Threads 中的消息按反向时间顺序排列,这与 Chat Completions 中使用的正向时间顺序不同。
来源: examples/Assistants_API_overview_python.ipynb28-38 examples/Assistants_API_overview_python.ipynb559-563
错误处理:始终通过检查 Run 的状态和任何错误消息来处理 Run 执行期间可能发生的错误。
超时和过期:Run 有一个过期时间(默认为 10 分钟);确保您的轮询逻辑包含适当的超时。
Thread 管理:为不同的对话创建新的 Threads;为继续现有对话而重用 Threads。
工具选择:仅启用 Assistant 所需的工具;不必要的工具可能导致意外行为。
消息解析:检索消息时,请记住它们默认按反向时间顺序排列;如果需要正向时间顺序,请使用 order="asc" 参数。
来源: examples/Assistants_API_overview_python.ipynb559-563 examples/Assistants_API_overview_python.ipynb389-411
Token 成本:每次运行都会产生整个对话历史的 Token 成本,即使您无需手动重新发送。
轮询开销:异步特性需要轮询,这与同步请求相比增加了复杂性。
工具限制:每个工具都有特定的限制(文件大小限制、代码解释器的执行时间限制等)。
持久化:助手、线程和消息存储在 OpenAI 的服务器上,并计入您组织的存储限制。
最大 Token 上下文:每个模型都有一个最大 Token 上下文,限制了对话历史加上响应的总大小。