题意:使用 Python 从 Lambda 函数流式传输 OpenAI 结果
问题背景:
I'm trying to stream results from Open AI using a Lambda function on AWS using the OpenAI Python library. For the invoke mode I have: RESPONSE_STREAM. And, using the example provided for streaming, I can see the streamed results in the Function Logs (abbreviated below):
我正在尝试使用 OpenAI Python 库,通过 AWS 上的 Lambda 函数流式传输 OpenAI 的结果。在调用模式中,我使用了:`RESPONSE_STREAM`。并且,使用提供的流式传输示例,我可以在函数日志中看到流式传输的结果(下面是缩略版):
Response null
Function Logs START RequestId: 3e0148c3-1269-4e38-bd08-e29de5751f18 Version: $LATEST { "choices": [ { "finish_reason": null, "index": 0, "logprobs": null, "text": "\n" } ], "created": 1685755648, "id": "cmpl-7NALANaR7eLwIMrXTYJVxBpk6tiZb", "model": "text-davinci-003", "object": "text_completion" } { "choices": [ { "finish_reason": null, "index": 0, "logprobs": null, "text": "\n" } ],....
but, the Response is null. I've tested this by entering the URL in the browser and by performing a get request via cURL: both respond with null. Below is the exact code (with the secret key changed) that I used, but it can also be found on the link provided:
但是,响应结果是空的。我通过在浏览器中输入 URL 和使用 cURL 执行 GET 请求进行了测试,两者的响应都是空的。以下是我使用的确切代码(密钥已更改),但它也可以在提供的链接中找到:
import json
import openai
import boto3def lambda_handler(event, context):model_to_use = "text-davinci-003"input_prompt="Write a sentence in 4 words."openai.api_key = 'some-secret key'response = openai.Completion.create(model=model_to_use,prompt=input_prompt,temperature=0,max_tokens=100,top_p=1,frequency_penalty=0.0,presence_penalty=0.0,stream=True)for chunk in response:print(chunk)
问题解决:
You are having trouble because python runtimes do not currently support streaming responses. From 4/7/2023 AWS announcement of streaming responses:
你遇到问题是因为当前 Python 运行时不支持流式响应。根据 2023 年 4 月 7 日 AWS 对流式响应的公告:
Response streaming currently supports the Node.js 14.x and subsequent managed runtimes.
As of 6/8/2023 this is still true.
截至 2023 年 6 月 8 日,这仍然是事实。