base_agent/main.py

159 lines
4.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
main.py
项目入口 —— 启动 Agent 交互式对话 或 MCP Server stdio 模式
用法:
python main.py # 启动 Agent 交互式对话(默认)
python main.py --mode agent # 同上
python main.py --mode mcp # 启动本地 MCP Serverstdio 模式)
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 Serverstdio 模式)"""
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交互对话| mcpMCP 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()