OpenAI api - 异步 API 调用

Dan*_*elG 9 python python-asyncio openai-api

我使用 OpenAI API。我从 PowerPoint 演示文稿中提取了幻灯片文本,并为每张幻灯片编写了提示。现在,我想进行异步 API 调用,以便同时处理所有幻灯片。

这是异步主函数的代码:

for prompt in prompted_slides_text:
    task = asyncio.create_task(api_manager.generate_answer(prompt))
    tasks.append(task)
results = await asyncio.gather(*tasks)
Run Code Online (Sandbox Code Playgroud)

这是generate_answer函数:

@staticmethod
    async def generate_answer(prompt):
        """
        Send a prompt to OpenAI API and get the answer.
        :param prompt: the prompt to send.
        :return: the answer.
        """
        completion = await openai.ChatCompletion.create(
                model="gpt-3.5-turbo",
                messages=[{"role": "user", "content": prompt}]

        )
        return completion.choices[0].message.content
Run Code Online (Sandbox Code Playgroud)

问题是:

对象 OpenAIOb​​ject 不能在“await”表达式中使用

我不知道如何等待generate_answer函数中的响应

将不胜感激任何帮助!

Shi*_*iva 14

注意:在 v1 版本中,API 已更改,此答案不再有效,请参阅Graciela对新 API 的回答。


您必须openai.ChatCompletion.acreate异步使用 api。

它记录在他们的 Github 上 - https://github.com/openai/openai-python#async-usage


Gra*_*llo 6

对于那些登陆这里的人来说,这里的错误可能是对象的实例化。它一定要是:

client = AsyncOpenAI(api_key=api_key)
Run Code Online (Sandbox Code Playgroud)

然后你可以使用:

        response = await client.chat.completions.create(
        model="gpt-4",
        messages=custom_prompt,
        temperature=0.9
    )
Run Code Online (Sandbox Code Playgroud)