FastAPI OpenAI 服务器端事件阻塞主线程

问题描述 投票:0回答:1

我正在构建一个 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
python asynchronous fastapi openai-api starlette
1个回答
0
投票

在事件生成器解决之前以某种方式删除

async

© www.soinside.com 2019 - 2024. All rights reserved.