我的目标是创建一个聊天机器人,我可以上传一个包含一堆文本的文件,然后使用 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
,还是不需要?
如何做到这一点?
我创建了一个 客户支持聊天机器人 并制作了一个关于它的 YouTube 教程。
流程如下:
第 1 步:上传具有“助手”用途的文件
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="You are a customer support chatbot. Use your knowledge base to best respond to customer queries.",
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="What can I buy in your online store?",
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
)
第七步:当运行状态为“完成”时,检索助手添加到线程的消息
all_messages = client.beta.threads.messages.list(
thread_id=my_thread.id
)
print(f"User: {my_thread_message.content[0].text.value}")
print(f"Assistant: {all_messages.data[0].content[0].text.value}")
助理有时可能表现得很奇怪。 Assistants API 仍处于测试阶段,OpenAI 似乎在保持其可靠性方面遇到了困难,正如官方OpenAI 论坛上所讨论的那样。
助手有时可能会回答说无法访问您上传的文件。您可能认为自己做错了什么,但如果您稍后或第二天运行相同的代码,助手将成功访问所有文件并给您答案。
我得到的奇怪回复如下: