""" main.py 项目入口 —— 启动 Agent 交互式对话 或 MCP Server stdio 模式 用法: python main.py # 启动 Agent 交互式对话(默认) python main.py --mode agent # 同上 python main.py --mode mcp # 启动本地 MCP Server(stdio 模式) python main.py --mode check # 检查配置和依赖 """ import argparse import atexit import sys def run_agent() -> None: """启动 Agent 交互式对话""" from agent.agent import create_agent from config.settings import settings print(settings.display()) agent, registry = create_agent() atexit.register(registry.close) print(agent.show_tools()) print("─" * 60) print("💡 命令: exit=退出 reset=清空历史 tools=查看工具列表") print("─" * 60) while True: try: user_input = input("\n🧑 You: ").strip() except (EOFError, KeyboardInterrupt): print("\n👋 再见!") break if not user_input: continue match user_input.lower(): case "exit" | "quit": print("👋 再见!") break case "reset": agent.reset() print("🔄 对话历史已清空") case "tools": print(agent.show_tools()) case _: reply = agent.chat(user_input) print(f"\n🤖 Agent: {reply}") def run_mcp_server() -> None: """启动本地 MCP Server(stdio 模式)""" from mcp.mcp_server import MCPServer with MCPServer() as server: server.run_stdio() def run_check() -> None: """检查配置和依赖完整性""" print("=" * 60) print(" 🔍 项目依赖检查") print("=" * 60) checks = [ ("pyyaml", "yaml", "pip install pyyaml"), ("openai", "openai", "pip install openai>=1.0.0"), ("httpx", "httpx", "pip install httpx>=0.27.0"), ("httpx-sse", "httpx_sse", "pip install httpx-sse>=0.4.0"), ("paramiko", "paramiko", "pip install paramiko>=3.0.0"), ] all_ok = True for pkg_name, import_name, install_cmd in checks: try: __import__(import_name) print(f" ✅ {pkg_name:<15} 已安装") except ImportError: print(f" ❌ {pkg_name:<15} 未安装 → {install_cmd}") all_ok = False print() # 配置检查 try: from config.settings import settings print(" ✅ config/settings.py 加载成功") print(f" LLM : {settings.llm.provider} / {settings.llm.model_name}") print(f" 本地工具: {settings.mcp.enabled_tools}") skills = settings.enabled_mcp_skills if skills: print(f" 在线Skill: {[s.name for s in skills]}") else: print(" 在线Skill: (未配置)") except Exception as e: print(f" ❌ 配置加载失败: {e}") all_ok = False print() # 工具注册检查 try: from mcp.skill_registry import SkillRegistry from tools.calculator import CalculatorTool from tools.code_executor import CodeExecutorTool from tools.file_reader import FileReaderTool from tools.ssh_docker import SSHDockerTool from tools.static_analyzer import StaticAnalyzerTool from tools.web_search import WebSearchTool registry = SkillRegistry() registry.register_local_many( CalculatorTool(), WebSearchTool(), FileReaderTool(), CodeExecutorTool(), StaticAnalyzerTool(), SSHDockerTool(), ) tools = registry.list_all_tools() print(f" ✅ 本地工具注册 共 {len(tools)} 个:") for t in tools: print(f" 🔵 {t['name']}: {t['description'][:50]}") except Exception as e: print(f" ❌ 工具注册失败: {e}") all_ok = False print() print("=" * 60) if all_ok: print(" ✅ 所有检查通过,项目可正常运行") else: print(" ⚠️ 存在问题,请按提示安装缺失依赖") print("=" * 60) def main() -> None: parser = argparse.ArgumentParser( description="Agent Demo —— 支持本地工具 + 在线 MCP Skill" ) parser.add_argument( "--mode", choices=["agent", "mcp", "check"], default="agent", help="运行模式: agent(交互对话)| mcp(MCP Server)| check(依赖检查)", ) args = parser.parse_args() match args.mode: case "agent": run_agent() case "mcp": run_mcp_server() case "check": run_check() if __name__ == "__main__": main()