求助大佬,flask流式输出怎么弄

查看 47|回复 2
作者:HerbertQ   
我用flask搭建了一个智谱清言api的调用小demo,学习练手的。运行app.py后,返回的信息要等全部信息结束后才显示。我希望返回多少显示多少,体验好些,我发现这种ai页面都是一个字一个字显示的,叫流式输出吧。我折腾了很久都实现不了,不是这里有错就是那里有错。请大佬不吝赐教,帮忙修改下代码,看看怎么实现的。
这是app.py的代码
[Python] 纯文本查看 复制代码from flask import Flask, render_template, request, jsonify
from zhipuai import ZhipuAI
app = Flask(__name__)
api_key = ""  # 替换为你的API密钥
model_name = "glm-4-0520"
# 初始化ZhipuAI客户端
client = ZhipuAI(api_key=api_key)
# 初始化对话上下文
context = [
    {
        "role": "system",
        "content": "你是一个乐于解答各种问题的助手,你的任务是为用户提供专业、准确、有见地的建议。"
    }
]
@app.route('/')
def index():
    return render_template('index.html')  # 渲染前端模板
@app.route('/chat', methods=['POST'])
def chat():
    global context
   
    # 获取前端发送的用户输入
    user_input = request.json.get('input', '')
   
    # 如果用户输入是'exit',则结束对话
    if user_input.lower() == 'exit':
        return jsonify({'response': '对话已结束。'})
    # 将用户输入添加到上下文中
    context.append({
        "role": "user",
        "content": user_input
    })
    # 发送请求到模型
    response = client.chat.completions.create(
        model="glm-4-0520",
        messages=context,
        top_p=0.7,
        temperature=0.95,
        max_tokens=4095,
        tools=[{"type":"web_search","web_search":{"search_result":True}}],
        stream=True,
    )
    # 处理响应并打印结果
    full_response = ""
    for chunk in response:
        for choice in chunk.choices:
            delta = choice.delta
            full_response += delta.content
            # 如果finish_reason是'stop',说明这是最后一个Chunk或者句子已经完成
            if choice.finish_reason == 'stop':
                break
        else:
            # 如果这个Chunk中没有finish_reason为'stop'的Choice,则继续下一个Chunk
            continue
        # 当找到一个finish_reason为'stop'的Choice时,打印完整的句子
        return jsonify({'response': full_response})
    # 清空full_response,准备下一次循环
    full_response = ""
    # 可以选择性地清理或保留部分上下文,这里简单地将“user”消息移除,保留系统消息和其他上下文
    context = [message for message in context if message["role"] != "user"]
if __name__ == '__main__':
    app.run(debug=True)
这是前端页面的代码:
[HTML] 纯文本查看 复制代码
   
    Flask Chat App
   

简易ai聊天
发送

大佬, 这是

HerbertQ
OP
  

请懂的大佬不吝赐教
HerbertQ
OP
  

等待大佬
您需要登录后才可以回帖 登录 | 立即注册

返回顶部