📋 工具注册与发现
随着 Agent 系统规模增长,工具数量从十几个增长到数百个。工具注册中心负责统一管理工具的元数据、版本、权限和生命周期,实现工具的动态发现与安全调用。
🏛️ 注册中心设计
工具注册中心是工具系统的"服务目录",存储所有可用工具的元信息和配置。
核心数据结构
{
"tool_id": "weather_api_v2",
"name": "get_weather",
"display_name": "天气查询",
"description": "获取指定城市的实时天气信息",
"version": "2.1.0",
"category": "external_api",
"schema": { /* JSON Schema */ },
"handler": {
"type": "mcp", // mcp | http | local | grpc
"endpoint": "mcp://weather-server/tools/get_weather"
},
"permissions": ["read:weather"],
"rate_limit": { "max_per_minute": 60 },
"timeout_ms": 5000,
"retry": { "max_retries": 2, "backoff": "exponential" },
"status": "active", // active | deprecated | disabled
"owner": "platform-team",
"created_at": "2025-01-15T08:00:00Z",
"updated_at": "2025-05-20T10:30:00Z"
}
注册中心架构模式
| 模式 | 描述 | 适用场景 |
|---|---|---|
| 本地配置 | 工具定义写在代码/YAML 配置文件中 | 工具数 < 20,单机部署 |
| 集中式注册中心 | 独立的注册中心服务,工具提供者主动注册 | 工具数 20-200,多服务共享 |
| 分布式注册 | 基于 etcd/Consul 的分布式注册发现 | 大规模微服务架构,需高可用 |
| MCP 原生发现 | 通过 MCP 协议的 tools/list 自动发现 | 全面采用 MCP 生态 |
🔍 动态工具发现
动态发现让 Agent 无需重启即可感知新工具的加入和旧工具的变更。
1
推送模式(Push)
工具提供者注册/更新时主动通知注册中心,注册中心广播变更事件。适合实时性要求高的场景。
2
拉取模式(Pull)
Agent 定期轮询注册中心,获取工具列表的增量变更。简单可靠,但有一定延迟。
3
混合模式
正常情况通过事件推送实时更新,同时保留定期全量同步作为兜底。兼顾实时性和可靠性。
| 发现方式 | 实时性 | 复杂度 | 可靠性 |
|---|---|---|---|
| Push(事件驱动) | ✅ 实时 | 🔴 高(需消息队列) | ⚠️ 需处理断连重推 |
| Pull(定期轮询) | ⚠️ 延迟(秒-分钟) | 🟢 低 | ✅ 高 |
| 混合(Push + Pull) | ✅ 准实时 | 🟡 中 | ✅ 高 |
📦 工具版本管理
| 策略 | 描述 | 优点 | 缺点 |
|---|---|---|---|
| 语义化版本 | MAJOR.MINOR.PATCH,兼容性由版本号表达 | ✅ 业界标准 | ⚠️ 依赖开发者遵守规范 |
| 多版本并存 | 同时运行 v1、v2,逐步迁移调用方 | ✅ 平滑升级 | 🔴 维护成本高 |
| Schema 兼容检测 | 自动检测新版本 Schema 是否向后兼容 | ✅ 自动化 | ⚠️ 仅检测结构,不检测语义 |
| 灰度发布 | 按比例将部分流量切到新版本 | ✅ 风险可控 | ⚠️ 实现复杂 |
🛡️ 权限控制
工具系统的安全核心在于谁(Agent/用户)可以调用哪个工具的哪些操作。
权限模型
🔹 RBAC(基于角色)
- 角色:admin / developer / viewer
- 权限:绑定到角色而非用户
- 适用:组织架构清晰的企业场景
- 优点:管理简单,符合直觉
🔹 ABAC(基于属性)
- 属性:用户标签、请求时间、数据敏感度
- 策略:动态计算是否允许
- 适用:细粒度、动态的授权场景
- 优点:灵活,支持上下文感知
关键安全措施
1
最小权限原则
Agent 默认无任何工具权限,显式授予所需的最小权限集
2
用户确认门禁
高风险操作(删除、写入、支付)需用户二次确认
3
调用审计日志
全程记录工具调用的请求参数、返回结果、耗时、调用方身份
4
速率限制
按工具/用户/Agent 维度设置调用频率上限,防止滥用
📊 方案对比总览
| 方案 | 注册方式 | 发现机制 | 版本管理 | 权限模型 | 适用规模 | 成熟度 |
|---|---|---|---|---|---|---|
| LangChain Tool | 代码定义 | 无(手动管理) | 无内置 | 无内置 | 小 | 成熟 |
| MCP Server | 进程启动 | tools/list 自动 | 协议协商 | Host 层控制 | 中 | 快速成长 |
| 自定义注册中心 + DB | API 注册 | 轮询/事件 | 版本字段 | RBAC | 大 | 定制化 |
| 服务网格(如 Istio) | Sidecar 注入 | 自动服务发现 | 路由规则 | mTLS + RBAC | 超大 | 成熟 |