#!/usr/bin/env python3 """系统诊断脚本 - 检查所有配置和依赖""" import sys import os from pathlib import Path def check_env_file(): """检查 .env 文件""" print("\n" + "="*60) print("1. 检查环境配置文件") print("="*60) env_path = Path(".env") if not env_path.exists(): print("❌ .env 文件不存在") return False print("✅ .env 文件存在") # 读取关键配置 with open(env_path, encoding='utf-8') as f: content = f.read() required_keys = ["OPENAI_API_KEY", "OPENAI_BASE_URL", "OPENAI_MODEL"] for key in required_keys: if key in content: print(f"✅ {key} 已配置") else: print(f"⚠️ {key} 未配置") return True def check_dependencies(): """检查依赖包""" print("\n" + "="*60) print("2. 检查依赖包") print("="*60) required_packages = [ "fastapi", "uvicorn", "hello_agents", "arxiv", "httpx", "asyncpg", "qdrant_client", "feedparser", "beautifulsoup4" ] missing = [] for package in required_packages: try: # 特殊处理包名映射 import_name = package.replace("-", "_") if package == "beautifulsoup4": import_name = "bs4" __import__(import_name) print(f"✅ {package}") except ImportError: print(f"❌ {package} - 缺失") missing.append(package) if missing: print(f"\n⚠️ 缺失的包: {', '.join(missing)}") print(f"安装命令: pip install {' '.join(missing)}") return False return True def check_config(): """检查配置加载""" print("\n" + "="*60) print("3. 检查配置加载") print("="*60) try: from core.config import get_config config = get_config() print(f"✅ 配置加载成功") print(f" - API Key: {'已设置' if config.llm.api_key else '未设置'}") print(f" - Base URL: {config.llm.base_url or '未设置'}") print(f" - Model: {config.llm.model_name}") print(f" - Debug: {config.debug}") return True except Exception as e: print(f"❌ 配置加载失败: {str(e)}") return False def check_api_routes(): """检查 API 路由""" print("\n" + "="*60) print("4. 检查 API 路由") print("="*60) try: from api.main import app routes = [] for route in app.routes: if hasattr(route, 'path'): routes.append(route.path) print(f"✅ API 加载成功,共 {len(routes)} 个路由") # 检查关键路由 key_routes = ["/", "/health", "/api/v1/papers/search", "/api/v1/analysis/analyze"] for route in key_routes: if route in routes: print(f" ✅ {route}") else: print(f" ❌ {route} - 缺失") return True except Exception as e: print(f"❌ API 加载失败: {str(e)}") import traceback traceback.print_exc() return False def check_frontend(): """检查前端文件""" print("\n" + "="*60) print("5. 检查前端文件") print("="*60) frontend_files = [ "frontend/index.html", "frontend/static/css/style.css", "frontend/static/js/app.js" ] all_exist = True for file_path in frontend_files: path = Path(file_path) if path.exists(): print(f"✅ {file_path}") else: print(f"⚠️ {file_path} - 不存在(可选)") return True def check_llm_connection(): """检查 LLM 连接""" print("\n" + "="*60) print("6. 检查 LLM 连接") print("="*60) try: import asyncio from hello_agents import HelloAgentsLLM from core.config import get_config config = get_config() if not config.llm.api_key: print("⚠️ API Key 未设置,跳过连接测试") return True async def test(): from core.llm_adapter import get_llm_adapter adapter = get_llm_adapter() response = await adapter.ainvoke("你好") return response print("正在测试 LLM 连接...") result = asyncio.run(test()) print(f"✅ LLM 连接成功") print(f" 模型响应: {result[:50]}...") return True except Exception as e: error_msg = str(e) # 如果是 API 格式错误,说明连接是通的,只是请求格式问题 if "400" in error_msg or "invalid_request" in error_msg: print(f"⚠️ LLM API 可访问,但请求格式需要调整") print(f" 错误信息: {error_msg[:100]}...") return True # 认为通过,因为连接本身是正常的 print(f"❌ LLM 连接失败: {error_msg[:100]}...") return False def main(): """主函数""" print("\n" + "="*60) print("InnoCore AI 系统诊断") print("="*60) results = [] results.append(("环境配置", check_env_file())) results.append(("依赖包", check_dependencies())) results.append(("配置加载", check_config())) results.append(("API 路由", check_api_routes())) results.append(("前端文件", check_frontend())) results.append(("LLM 连接", check_llm_connection())) # 总结 print("\n" + "="*60) print("诊断结果总结") print("="*60) for name, result in results: status = "✅ 通过" if result else "❌ 失败" print(f"{name}: {status}") all_passed = all(r[1] for r in results) if all_passed: print("\n🎉 所有检查通过!系统可以正常运行。") print("\n启动命令: python run.py") else: print("\n⚠️ 部分检查未通过,请根据上述提示修复问题。") if __name__ == "__main__": main()