我正在Heroku上运行一个Python / Django应用程序,它调用OpenAI聊天完成API。前端是一个React应用程序,也在Heroku上。前端向后端发送一个请求,然后后端调用OepnAI API,后端接收流响应并将其流到前端。
流可能需要很长时间(>30秒)才能完成。它在本地工作正常。当在生产中的Heroku上运行它时,正好30秒后,我在日志中得到一个错误"[CRITICAL] WORKER TIMEOUT"
,并且流错误。
根据heroku的这篇文章,30秒的超时不应该应用于流请求,而应该是一个滚动的55秒窗口(我正好在这个范围内)。
然而,它似乎不起作用。我尝试了使用OpenAI的python库和直接使用requests
:
url = "https://api.openai.com/v1/chat/completions"
headers = {
"Authorization": f"Bearer {OPENAI_KEY}",
"Content-Type": "application/json"
}
body = {
'model':'gpt-4-1106-preview',
'messages':messages,
'temperature':temperature,
'stream':True
}
r = requests.post(url, headers=headers, json=body, stream=True)
for line in r.iter_lines():
if line:
l = json.loads(line.decode("utf-8").split('data: ')[1].strip())
yield l['choices'][0]['delta']['content']
字符串
当我通过python控制台在后端运行它时,它需要30多秒,但运行和完成都很好,我在前端看到的错误是host-rrweb-network.js:1 POST <...backend url...> net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)
1条答案
按热度按时间h9vpoimq1#
通过将
--keep-alive 3000 --timeout 3000
添加到我的procfile修复