# 流式输出 from django.http import StreamingHttpResponse from dashscope import Generation from rest_framework.decorators import action
# 定义一个生成服务器发送事件(SSE)的函数 def generate_sse(responses): # 遍历每个响应 for response in responses: # 检查响应状态码是否为OK(HTTP 200) if response.status_code == HTTPStatus.OK: # 提取响应中的内容 data1 = response.output.choices[0]['message']['content'] # 格式化数据,准备发送 data = f"data: {data1}\n\n" # 如果有有效数据,则将其编码为字节串后发送 if data1: yield data.encode('utf-8') # 必须编码为字节串 else: # 如果没有有效数据,则返回错误信息 return "no mes"
@action(methods=['get'], detail=False) def chat_sse(request): # 从GET请求中获取用户输入的内容 content = request.GET.get('content') # 打印接收到的内容,以便于调试 print(content) # 初始化消息列表,用于存储对话记录 messages = [] # 将用户的消息添加到消息列表中 messages.append({"role": "user", "content": content}) # 调用生成式模型获取响应,使用流式输出方式 responses = Generation.call(model="qwen-turbo", messages=messages, result_format='message', stream=True, # 设置输出方式为流式输出 incremental_output=True # 增量式流式输出 ) # 创建一个流式HTTP响应对象,将生成的响应内容以事件流格式返回 response = StreamingHttpResponse( generate_sse(responses), content_type="text/event-stream", ) # 设置缓存控制头,避免客户端缓存响应内容 response["Cache-Control"] = "no-cache" # 返回流式响应对象 return response