我正在尝试将 OpenAI 响应从 Django 服务器传输到浏览器。
我在 Django 中有一个看起来像这样的视图(假设
generate_thing
从 OpenAI 返回一个流):
@api_view(['POST'])
def generate(request):
data = json.loads(request.body.decode('utf-8'))
result = generate_thing(data)
return StreamingHttpResponse(result)
每当我在本地运行它时,它都会完全按照预期工作。
当我将 Django 代码上传到 EC2 并尝试直接在其 IP 地址上调用它时,它完全按照预期工作。
但是,当我通过 API Gateway 或 Nginx 等代理运行它时,它会等到流完全完成才返回响应。
我尝试将
Content-Type
设置为 text/event-stream
,然后再返回
response = StreamingHttpResponse(result)
response['Content-Type'] = 'text/event-stream'
return response
而且没有效果。
您最好将其设置为套接字连接。您通常不想在常规 http 响应上阻塞连接。
我遇到了同样的问题,如果您在 EC2 中使用 nginx 作为反向代理,则需要添加 proxy_buffering 关闭;在 nginx 配置文件中,对我来说,配置文件位置是 /etc/nginx/sites-available/default。配置示例
server {
listen 80;
server_name YOUR_INSTANCE_IP_ADDRESS;
proxy_buffering off;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/ubuntu/<YOUR-PROJECT>;
}
location /media/ {
root /home/ubuntu/<YOUR-PROJECT>;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}