⚠️ 时效说明(2026-08): Assistants API 已弃用,并计划于 2026-08-26 下线。新项目应使用 Responses API + Conversations API;下面的 Assistant / Thread / Run 内容只用于维护和迁移旧系统。参见 OpenAI 官方迁移说明。
🧠 图解记忆: 旧系统用 Assistant、Thread、Run;新系统用 Response 承载模型与工具调用,用 Conversation 或应用数据库管理连续会话。
💡 答案要点
当前选型:
| 维度 | Responses API(新项目) | Assistants API(旧项目迁移) |
|---|---|---|
| 状态管理 | Conversation、previous response 或应用自管状态 | Thread |
| 工具支持 | 内置工具与自定义函数工具 | File Search、Code Interpreter、函数工具 |
| 适用场景 | 新的多轮、工具调用和 Agent 应用 | 仅维护存量集成 |
| 生命周期 | OpenAI 当前推荐方向 | 已弃用,计划 2026-08-26 下线 |
旧 Assistants API 四大核心概念(仅用于迁移识别):
展开 Python 代码示例(37 行)
python
from openai import OpenAI
client = OpenAI()
# 1. 创建 Assistant(类似定义一个 Agent 配置)
assistant = client.beta.assistants.create(
name="法律顾问",
instructions="你是一个专业法律顾问,...",
model="gpt-4o",
tools=[
{"type": "file_search"}, # 文件检索工具
{"type": "code_interpreter"} # 代码执行工具
],
tool_resources={
"file_search": {
"vector_store_ids": ["vs_legal_docs"]} # 关联知识库
}
)
# 2. 创建 Thread(每个用户会话一个 Thread)
thread = client.beta.threads.create(
messages=[{"role": "user", "content": "这份合同有什么风险?"}]
)
# 3. 创建 Run(让 Assistant 处理这个 Thread)
run = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id
)
# 4. 轮询 Run 状态直到完成
import time
while run.status in ["queued", "in_progress"]:
run = client.beta.threads.runs.retrieve(thread_id=thread.id, run_id=run.id)
time.sleep(0.5)
# 5. 获取 Assistant 的回复
messages = client.beta.threads.messages.list(thread_id=thread.id)旧 API 的 File Search 用法(迁移参考):
python
# 上传文档到 Vector Store
vector_store = client.beta.vector_stores.create(name="法律文档库")
# 上传文件
file_paths = ["合同1.pdf", "合同2.pdf", "判例.docx"]
file_streams = [open(fp, "rb") for fp in file_paths]
client.beta.vector_stores.file_batches.upload_and_poll(
vector_store_id=vector_store.id,
files=file_streams
)
# Assistant 关联 Vector Store
assistant = client.beta.assistants.create(
..., # 基础配置
tools=[{"type": "file_search"}],
tool_resources={
"file_search": {
"vector_store_ids": [vector_store.id]}
}
)
# 运行时,Assistant 自动判断是否需要检索知识库旧 API 的 Code Interpreter 用法(迁移参考):
展开 Python 代码示例(31 行)
python
# 1. 开启 Code Interpreter
assistant = client.beta.assistants.create(
name="数据分析师",
instructions="你是一个数据分析专家,可以用 Python 分析数据。",
model="gpt-4o",
tools=[{"type": "code_interpreter"}]
)
# 2. 上传数据文件给 Code Interpreter
data_file = client.files.create(
file=open("sales_data.csv", "rb"),
purpose="assistants"
)
# 3. 在 Thread 中使用
thread = client.beta.threads.create(
messages=[{
"role": "user",
"content": "分析这份销售数据,预测下季度收入"
}],
tool_resources={
"code_interpreter": {
"file_ids": [data_file.id]}
}
)
# 4. Run 执行时会自动:
# - 生成 Python 代码
# - 在沙箱中执行
# - 返回结果(文本/图表)
# - 生成的临时文件可在下一轮继续使用Thread + Run 的状态机:
Run 状态流转:
queued → in_progress → requires_action → completed
↓ ↓
failed/expired requires_action(需工具调用)
↓ ↓
queued in_progress(工具返回后)
↓ ↓
in_progress → completed(再次)
关键点:
- requires_action = 需要调用工具(Function Calling/File Search/Code Interpreter)
- 工具返回后,创建新的 Run 继续
- 每次 Run 都是一次完整的"思考-执行"循环新项目选型决策树:
新项目是否使用 OpenAI 模型或内置工具?
├── 是 → 优先 Responses API
│ ├── 需要平台管理连续会话 → 配合 Conversations API
│ └── 需要自主管理数据 → 应用数据库保存状态并显式传入上下文
└── 存量 Assistants API → 盘点 Assistant/Thread/Run/Tool 映射,迁移后做回归测试
复杂多 Agent 编排仍需在应用层或 Agent SDK / 工作流框架中设计状态、权限、重试与可观测性。面试话术:
"新项目应以 Responses API 为主:它统一承载模型输出和工具调用,连续会话可交给 Conversations API 或由应用自己持久化。Assistants API 的 Assistant、Thread、Run 只作为迁移知识掌握;面试时要能说清状态归属、工具副作用、幂等重试和迁移回归测试。"
