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)