ADR-006: MCP 协议迁移预留
修改记录
日期 |
变更 |
|---|---|
2026-07-18 |
初始创建 |
ADR-006++
状态 |
项 |
说明 |
验证 |
|---|---|---|---|
⏸ |
MCP 迁移 |
工具数增长到 3-5 个时迁移 |
未开始 |
状态
⏸ 待触发(工具数达 3-5 个时迁移)。
当前维持手写 Function Calling。原决策见 ADR-005 § 决策 3。
背景
当前 Agent 的工具调用采用手写 Function Calling 方式:
工具定义在
prompts.py:POI_TOOL_DEF(1 个工具poi_lookup)注册在
tools/__init__.py:TOOL_REGISTRY调用链路在
routes.py聊天端点:两阶段——先非流式检测tool_call→ 执行工具 → SSE 发tool_result→ 再流式输出 LLM 回复
当前工具数仅 1 个时,这套手写方案明确够用。但当工具数增长到 3-5 个时,管理和扩展的开销会上升。
现状 vs MCP
维度 |
手写 FC(现状) |
MCP 协议 |
|---|---|---|
工具注册 |
|
通过 MCP Server 动态发现 |
调用协议 |
硬编码 HTTP→高德 API |
标准化 JSON-RPC |
工具拆分 |
所有函数同进程 |
每个工具可独立部署 |
扩展新工具 |
改 routes.py + TOOL_REGISTRY |
加 MCP Server |
依赖 |
无额外依赖 |
|
复杂度 |
简单直接 |
引入序列化/传输/协议层 |
迁移路径(预留方案)
当工具数增长到 3-5 个时,按以下步骤迁移:
创建 MCP Server:包装
TOOL_REGISTRY中的函数,通过FastMCP暴露为标准工具MCP Client 替换:
routes.py聊天端点改用 MCP Client 调用,替代手写tool_call检测逐步迁移:新旧并存,新工具通过 MCP Server 注册,旧工具保持手写
全量切换:确认所有工具通过 MCP 运作后,移除手写 FC 路径
数据流
TOOL_REGISTRY ──→ MCP Server ──→ MCP Client ──→ routes.py chat 端点
↓
SSE tool_result