base_agent/main.py

159 lines
4.8 KiB
Python
Raw Normal View History

2026-02-28 08:21:35 +00:00
"""
main.py
2026-03-30 08:48:36 +00:00
项目入口 启动 Agent 交互式对话 MCP Server stdio 模式
2026-03-09 05:37:29 +00:00
2026-03-30 08:48:36 +00:00
用法:
python main.py # 启动 Agent 交互式对话(默认)
python main.py --mode agent # 同上
python main.py --mode mcp # 启动本地 MCP Serverstdio 模式)
python main.py --mode check # 检查配置和依赖
2026-02-28 08:21:35 +00:00
"""
2026-03-30 08:48:36 +00:00
import argparse
import atexit
2026-02-28 08:21:35 +00:00
import sys
2026-03-09 05:37:29 +00:00
2026-02-28 08:21:35 +00:00
2026-03-30 08:48:36 +00:00
def run_agent() -> None:
"""启动 Agent 交互式对话"""
from agent.agent import create_agent
from config.settings import settings
2026-02-28 08:21:35 +00:00
2026-03-30 08:48:36 +00:00
print(settings.display())
2026-02-28 08:21:35 +00:00
2026-03-30 08:48:36 +00:00
agent, registry = create_agent()
atexit.register(registry.close)
2026-02-28 08:21:35 +00:00
2026-03-30 08:48:36 +00:00
print(agent.show_tools())
print("" * 60)
print("💡 命令: exit=退出 reset=清空历史 tools=查看工具列表")
print("" * 60)
2026-02-28 08:21:35 +00:00
while True:
try:
2026-03-30 08:48:36 +00:00
user_input = input("\n🧑 You: ").strip()
except (EOFError, KeyboardInterrupt):
2026-02-28 08:21:35 +00:00
print("\n👋 再见!")
break
if not user_input:
continue
match user_input.lower():
2026-03-30 08:48:36 +00:00
case "exit" | "quit":
2026-02-28 08:21:35 +00:00
print("👋 再见!")
break
2026-03-30 08:48:36 +00:00
case "reset":
agent.reset()
print("🔄 对话历史已清空")
2026-02-28 08:21:35 +00:00
case "tools":
2026-03-30 08:48:36 +00:00
print(agent.show_tools())
2026-03-09 05:37:29 +00:00
case _:
2026-03-30 08:48:36 +00:00
reply = agent.chat(user_input)
print(f"\n🤖 Agent: {reply}")
2026-03-09 05:37:29 +00:00
2026-03-30 08:48:36 +00:00
def run_mcp_server() -> None:
"""启动本地 MCP Serverstdio 模式)"""
from mcp.mcp_server import MCPServer
with MCPServer() as server:
server.run_stdio()
2026-04-15 08:20:22 +00:00
# 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)
2026-03-30 08:48:36 +00:00
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()
2026-04-15 08:20:22 +00:00
# case "check":
# run_check()
2026-02-28 08:21:35 +00:00
if __name__ == "__main__":
main()