""" 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()