使用OpenAI Assistant流式响应报错:'AsyncStream'对象不可迭代
问题:OpenAI Assistant流式响应报错TypeError: 'AsyncStream' object is not iterable
按照OpenAI Assistant官方文档实现流式响应时,始终无法正常运行,持续抛出以下错误:
File "/home/vscode/.local/lib/python3.12/site-packages/openai/lib/streaming/_assistants.py", line 404, in __stream__ for event in stream: TypeError: 'AsyncStream' object is not iterable
我的FastAPI后端API端点代码如下:
@router.post("/new") async def post_new(request: Request): """Start a new chat.""" ... thread = await client.beta.threads.create() await client.beta.threads.messages.create( thread_id=thread.id, content=content_start, role="user", metadata={"type": "hidden"}, ) # 创建流式线程运行实例 async with client.beta.threads.runs.stream( thread_id=thread.id, assistant_id=request.state.assistant_id, event_handler=EventHandler(), ) as stream: print("\n\nStream started") # 该行能正常打印 stream.until_done() # 调用此方法时触发报错
如果不在with语句前添加async,会出现以下警告:
/workspace/backend/routers/chat.py:54: RuntimeWarning: coroutine 'AsyncAPIClient.post' was never awaited with client.beta.threads.runs.stream(
环境信息:
- Python 3.12
- OpenAI SDK版本1.25.1(也尝试过低版本)
- 基于FastAPI开发后端
解决方案
问题出在事件处理器的实现上,需改用异步版本的事件处理器,而非官方示例中的同步实现。代码示例如下:
from openai import AsyncAssistantEventHandler from typing_extensions import override class EventHandler(AsyncAssistantEventHandler): def __init__(self, response_stream) -> None: super().__init__() self.response_stream = response_stream @override async def on_text_delta(self, delta, snapshot): print("\n on_text_delta", delta.value, end="", flush=True) return delta.value ...
内容的提问来源于stack exchange,提问作者cookieDope
相关产品推荐
相关产品推荐

