如何使用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
相关产品推荐
相关产品推荐

