这是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聊天
发送