You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用OpenAI Assistants API上传文件作为知识库并实现聊天查询?

OpenAI Assistants API 正确实现方案

你代码里的client.assistants.query不是合法的API方法,Assistants API的核心交互逻辑必须基于**Threads(线程)**完成,所有对话上下文、文件关联都要在Thread容器中处理。以下是完整的正确实现步骤:

1. 准备工作

确保安装了最新版OpenAI Python SDK:

pip install --upgrade openai

初始化客户端:

from openai import OpenAI
client = OpenAI(api_key="你的API密钥")

2. 上传文件(你的这部分代码可保留)

file_response = client.files.create(
    file=open("website_content.txt", "rb"),
    purpose="assistants"
)
file_id = file_response.id

3. 创建对话线程并添加带文件的查询

Thread是对话的上下文载体,所有消息和文件都要绑定到Thread:

# 创建新线程
thread = client.beta.threads.create()

# 在线程中添加用户查询,同时关联上传的文件
# 注意:必须通过attachments关联文件,并指定file_search工具
client.beta.threads.messages.create(
    thread_id=thread.id,
    role="user",
    content="Tell me about xxx?",
    attachments=[{"file_id": file_id, "tools": [{"type": "file_search"}]}]
)

4. 触发助手处理查询

通过Run来让助手处理线程中的消息(异步操作,需要轮询等待完成):

run = client.beta.threads.runs.create(
    thread_id=thread.id,
    assistant_id="my_assistant_id"
)

# 等待Run执行完成
while run.status not in ["completed", "failed"]:
    run = client.beta.threads.runs.retrieve(
        thread_id=thread.id,
        run_id=run.id
    )

5. 获取助手的回复

Run完成后,从线程中提取助手的回复内容:

messages = client.beta.threads.messages.list(thread_id=thread.id)
# 消息按时间倒序排列,取最新的助手回复
assistant_reply = next(msg for msg in messages if msg.role == "assistant").content[0].text.value
print(assistant_reply)

重要注意事项

  • 你在仪表盘创建的助手必须启用File Search工具,否则无法读取上传的文件内容。
  • 文件上传后会存储在你的OpenAI账户中,若文件内容不变,后续查询可直接复用已有的file_id,无需重复上传。
  • 不要使用非官方的assistants.query方法,所有交互严格遵循Thread → Message → Run的流程。

内容的提问来源于stack exchange,提问作者bobthebuilder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 01:07:28