""" Kaggle Flask 智能问答界面 在 Kaggle Notebook 中使用 Flask 创建交互式 RAG 系统 """ from flask import Flask, render_template_string, request, jsonify import sys import os import threading # 添加项目路径 if '/kaggle/working/adaptive_RAG' not in sys.path: sys.path.insert(0, '/kaggle/working/adaptive_RAG') from main import AdaptiveRAGSystem # 创建Flask应用 app = Flask(__name__) # 全局RAG系统实例 rag_system = None initialization_error = None # HTML模板 HTML_TEMPLATE = """ 🤖 自适应RAG智能问答

🤖 自适应RAG智能问答

基于 LangGraph 的检索增强生成系统

{{ '✅ 系统运行正常' if system_ok else '❌ 系统初始化失败: ' + error }}
🤖
你好!我是自适应RAG智能助手。我可以帮你回答关于LLM、Agent、Prompt Engineering等问题。请输入你的问题!

💡 示例问题

⏳ AI正在思考中...
""" @app.route('/') def index(): """主页""" return render_template_string( HTML_TEMPLATE, system_ok=(rag_system is not None), error=initialization_error or "" ) @app.route('/api/query', methods=['POST']) def query(): """处理查询请求""" if rag_system is None: return jsonify({ 'success': False, 'error': f'系统未初始化: {initialization_error}' }) try: data = request.get_json() question = data.get('question', '').strip() if not question: return jsonify({ 'success': False, 'error': '问题不能为空' }) # 查询RAG系统 result = rag_system.query(question, verbose=False) answer = result.get('answer', '无法生成答案') return jsonify({ 'success': True, 'answer': answer, 'metrics': result.get('retrieval_metrics') }) except Exception as e: return jsonify({ 'success': False, 'error': str(e) }) def initialize_rag(): """初始化RAG系统""" global rag_system, initialization_error print("🚀 正在初始化RAG系统...") try: rag_system = AdaptiveRAGSystem() print("✅ RAG系统初始化成功") except Exception as e: initialization_error = str(e) print(f"❌ RAG系统初始化失败: {e}") def run_flask(host='0.0.0.0', port=5000): """ 启动Flask应用 Args: host: 主机地址 port: 端口号 """ print("=" * 60) print("🚀 启动 Flask RAG 智能问答系统") print("=" * 60) # 初始化RAG系统 initialize_rag() # 检查是否在Kaggle环境 is_kaggle = os.path.exists('/kaggle/working') if is_kaggle: print("🎯 检测到 Kaggle 环境") print(f"💡 访问地址: http://localhost:{port}") print("⚠️ 注意: Kaggle无法从外部访问,只能在Notebook内查看") print(f"\n🌐 正在启动服务...") print(f" 地址: http://{host}:{port}") print("=" * 60) # 启动Flask app.run(host=host, port=port, debug=False, threaded=True) if __name__ == "__main__": run_flask(port=5000)