我正在构建一个 FastAPI 端点,它应该从 openAI python 库流式传输 GPT3.5 的 ChatCompletion。这是我的代码:
@app.post("/ai_re/")
async def read_item(request: Request):
base_prompt = "This is a prompt"
sources = []
response = await asyncify(openai.ChatCompletion.create)(
model = 'gpt-3.5-turbo',
messages = [{"role": "system", "content": base_prompt.strip()}],
max_tokens = 550,
temperature = 0.28,
stream = True,
n = 1
)
async def event_generator():
for event in response:
event_text = event.choices[0].delta.content if "content" in event.choices[0].delta else ""
event_data = {
"texte": event_text,
"source": sources
}
yield f"data: {json.dumps(event_data)}\n\n"
return StreamingResponse(event_generator(), media_type="text/event-stream")
我使用 Asyncify 使请求异步——作为一个简单的 post 端点(没有 sse),这很好用并且不会阻塞主线程。
但是在这种配置中,流媒体工作正常,但所有其他端点都被阻止,直到此请求成功。
我试过了:
coroutine object is not an iterator
在事件生成器解决之前以某种方式删除
async
。