我的目标是创建一个聊天机器人,我可以向其提供一个包含大量文本的文件,然后使用OpenAI Assistants API在查询聊天机器人时实际使用该文件。我将使用gpt-3.5-turbo
模型来回答问题。
我目前的代码如下:
file_response = client.files.create( file=open("website_content.txt", "rb"), purpose="assistants")query_response = client.assistants.query( assistant_id="my_assistant_id", input="Tell me about xxx?", files=[file_response['id']] )
然而,这并不起作用,我认为可能有几个原因。首先,我并不完全理解它应该如何工作,所以我在寻找一些指导。我已经通过仪表板创建了一个助手,但现在我想只上传一个文件然后查询它。我是否需要使用其他东西,比如通过API的“threads”,还是不需要?
我该怎么做?
回答:
注意:下面的代码适用于OpenAI Assistants API v1
。在2024年4月,OpenAI Assistants API v2
发布。请查看迁移指南。
我创建了一个客户支持聊天机器人,并制作了一个关于它的YouTube教程。
过程如下:
步骤1:上传一个带有“assistants”用途的文件
my_file = client.files.create( file=open("knowledge.txt", "rb"), purpose='assistants')
步骤2:创建一个助手
my_assistant = client.beta.assistants.create( model="gpt-3.5-turbo-1106", instructions="您是一个客户支持聊天机器人。使用您的知识库来最佳地回应客户查询。", name="Customer Support Chatbot", tools=[{"type": "retrieval"}])
步骤3:创建一个线程
my_thread = client.beta.threads.create()
步骤4:向线程添加消息
my_thread_message = client.beta.threads.messages.create( thread_id=my_thread.id, role="user", content="在您的在线商店里我可以买到什么?", file_ids=[my_file.id])
步骤5:运行助手
my_run = client.beta.threads.runs.create( thread_id=my_thread.id, assistant_id=my_assistant.id,)
步骤6:定期获取运行状态以检查其是否已完成
keep_retrieving_run = client.beta.threads.runs.retrieve( thread_id=my_thread.id, run_id=my_run.id)
步骤7:一旦运行状态为“completed”,检索助手添加到线程中的消息
all_messages = client.beta.threads.messages.list( thread_id=my_thread.id)print(f"用户: {my_thread_message.content[0].text.value}")print(f"助手: {all_messages.data[0].content[0].text.value}")
查看完整代码。
重要说明
助手有时可能会表现得有些奇怪。Assistants API仍处于测试阶段,似乎OpenAI在保持其可靠性方面遇到了困难,正如官方OpenAI论坛上所讨论的那样。
助手有时可能会回答说它无法访问您上传的文件。您可能会认为自己做错了什么,但如果您稍后或第二天运行相同的代码,助手将成功访问所有文件并给出答案。
我得到的奇怪回应如下:
- 助手: 我目前无法访问您上传的文件。您能提供一些关于您销售的产品或您有什么具体问题吗?
- 助手: 我目前无法直接访问您上传的文件内容。但是,如果您能提供一些细节或具体问题,我很乐意帮助您找到所需的信息。
- 助手: 我目前无法查看您上传的文件的具体内容。您能提供更多关于文件或其内容的细节,以便我进一步帮助您吗?
- 助手: 我看到您上传了一个文件。我可以如何帮助您处理它?