我正在使用OpenAI助手API(Python)。到目前为止,运行良好。但有时候API返回的是我发送给助手的消息,而不是助手的回复。
from openai import OpenAIfrom os import environOPEN_API_KEY = environ.get('OPEN_API_KEY')assistant_id = "xxxxxxx"client = OpenAI(api_key=OPEN_API_KEY)assistant = client.beta.assistants.retrieve(assistant_id)def ask_assistant(message_text): print(f'received message: {message_text}') thread = client.beta.threads.create() message = client.beta.threads.messages.create( thread_id=thread.id, role="user", content=message_text ) run = client.beta.threads.runs.create( thread_id=thread.id, assistant_id=assistant_id ) run_retrieve = client.beta.threads.runs.retrieve( thread_id=thread.id, run_id=run.id ) messages = client.beta.threads.messages.list(thread.id) final_text = messages.data[0].content[0].text.value try: final_text = messages.data[0].content[0].text.value print(final_text) except Exception as e: print(e) final_text = '' return final_text if __name__ == "__main__": ask_assistant('How are you?')
作为临时解决方案,我实现了一个睡眠函数,在获取回复前等待3秒。这种方法有效,但我不认为这是最佳解决方案(或者完全可靠)。有什么方法可以等到助手真正回复吗?
非常感谢。
更新:
这个方法有效:
from openai import OpenAIfrom os import environOPEN_API_KEY = environ.get('xxxxx')assistant_id = "xxxxx"client = OpenAI(api_key=OPEN_API_KEY)assistant = client.beta.assistants.retrieve(assistant_id)def get_answer(run, thread): while not run.status == "completed": print("Waiting for answer...") run = client.beta.threads.runs.retrieve( thread_id=thread.id, run_id=run.id ) messages = client.beta.threads.messages.list(thread.id) answer = messages.data[0].content[0].text.value try: answer = messages.data[0].content[0].text.value except Exception as e: print(e) answer = '' return answerdef ask_assistant(message_text): print(f'sending to assistant: {message_text}') thread = client.beta.threads.create() message = client.beta.threads.messages.create( thread_id=thread.id, role="user", content=message_text ) run = client.beta.threads.runs.create( thread_id=thread.id, assistant_id=assistant_id ) answer = get_answer(run, thread) print(f'assistant response: {answer}') return answer if __name__ == "__main__": ask_assistant('Hello')
回答:
这应该有效:
run = openai.beta.threads.runs.create( thread_id=thread.id, assistant_id=assistant.id)print(run)while run.status !="completed": run = openai.beta.threads.runs.retrieve( thread_id=thread.id, run_id=run.id ) print(run.status)messages = openai.beta.threads.messages.list( thread_id=thread.id)print(messages.data[0].content[0].text.value)
感谢@[隐藏人名]