Django StreamingHttpResponse 未在生产 API 上进行流传输

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

我正在尝试将 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

而且没有效果。

python django amazon-ec2 django-rest-framework openai-api
2个回答
0
投票

您最好将其设置为套接字连接。您通常不想在常规 http 响应上阻塞连接。


0
投票

我遇到了同样的问题,如果您在 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;
  }
 }
© www.soinside.com 2019 - 2024. All rights reserved.