diff --git a/scripts/web_app.py b/scripts/web_app.py new file mode 100644 index 0000000..6170ac7 --- /dev/null +++ b/scripts/web_app.py @@ -0,0 +1,190 @@ +from flask import Flask, request, Response, render_template_string +import json +from openai import OpenAI +import logging + +# 配置日志 +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + +app = Flask(__name__) + +# 初始化OpenAI客户端 +client = OpenAI( + api_key="none", + base_url="http://localhost:8998/v1" +) + +# 对话配置 +MODEL_NAME = "model-identifier" +SYSTEM_PROMPT = "你是一个有帮助的AI助手,请用中文回答" +MAX_HISTORY = 6 # 保留最近3轮对话 + +class ChatManager: + def __init__(self): + self.conversations = {} # 存储对话历史的字典 + + def get_conversation(self, session_id): + """获取或初始化对话历史""" + if session_id not in self.conversations: + self.conversations[session_id] = [ + {"role": "system", "content": SYSTEM_PROMPT} + ] + return self.conversations[session_id] + + def update_conversation(self, session_id, user_input, assistant_response): + """更新对话历史""" + conv = self.conversations[session_id] + conv.extend([ + {"role": "user", "content": user_input}, + {"role": "assistant", "content": assistant_response} + ]) + # 保留最近N轮对话(考虑系统提示) + self.conversations[session_id] = conv[-MAX_HISTORY*2:] + +chat_manager = ChatManager() + +@app.route('/') +def home(): + return render_template_string(''' + + + + AI Chat + + + +
+
+ + +
+ + + + + ''') + +@app.route('/chat', methods=['POST']) +def chat(): + try: + data = request.json + user_message = data.get('message', '') + session_id = 'default' # 实际应用中应使用真实会话ID + + if not user_message: + return json.dumps({"error": "空输入"}), 400 + + # 获取对话历史 + conversation = chat_manager.get_conversation(session_id) + conversation.append({"role": "user", "content": user_message}) + + # 创建流式响应 + response = client.chat.completions.create( + model=MODEL_NAME, + messages=conversation, + temperature=0.7, + max_tokens=512, + stream=True + ) + + def generate(): + full_response = '' + for chunk in response: + content = chunk.choices[0].delta.content or "" + full_response += content + yield json.dumps({"content": content}) + "\n" + + # 更新对话历史 + chat_manager.update_conversation(session_id, user_message, full_response) + logger.info(f"会话 {session_id} 更新,历史长度: {len(conversation)}") + + return Response(generate(), content_type='text/event-stream') + + except Exception as e: + logger.error(f"请求失败: {str(e)}") + return json.dumps({"error": str(e)}), 500 + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5000, debug=True)