Agent 如何使用工具注册中心并动态加载工具?
未标记
考查重点:工具发现、按需加载与调用回填。按任务发现候选并过滤权限,只加载本轮所需 Schema;模型选工具后运行时校验调用,将结果按调用 ID 回填
本题目录
参考答案
核心回答
Agent 使用工具注册中心,通常按发现候选 → 过滤可用范围 → 加载完整定义 → 提供给模型 → 执行并回填这条链路工作。
注册中心保存工具能力描述、参数契约及执行入口。应用根据当前任务、阶段和调用者范围找出候选,只把本轮需要的工具 Schema 提供给模型;模型选择工具并生成参数后,执行器再按注册信息校验和调用,将结果按调用 ID 交回模型。
这里要区分两种“动态”:**工具已经注册,只按需展示给模型;或者运行时发现新工具,再接入它的定义和执行适配。**后者不能只加一份 Schema,还必须让执行器知道如何真正调用它。
展开说明
1. 先发现工具,再决定这一轮提供哪些
注册信息可以来自本地函数清单、配置、内部能力服务或 MCP Server,不一定要先建设一个独立注册中心服务。工具少时,内存映射就可以;跨团队、工具较多或能力经常变化时,再增加检索、版本和健康管理。
收到任务后,应用根据意图、任务阶段及当前状态召回候选,并按可信身份、业务范围和可用性过滤。检索可以用分类、关键词或语义匹配,重点是找得到正确能力,而不是固定使用某种算法。
如果工具来自 MCP,Client 可通过 tools/list 取得工具定义,宿主再做筛选与模型接口适配。协议发现与“本轮提供给模型”是两个环节,具体 Schema 流转可见MCP 工具 Schema 如何交给模型。
2. 按需加载要说明发生在哪一轮
一种简单做法是:执行器预先注册全部工具,每次调用模型前只挑相关的一组提供。这种方式改变的是模型可见工具集合,工具实现早已准备好。
另一种做法是先提供能力目录或工具搜索入口。模型发现缺少能力后请求搜索,程序查到候选,取得完整参数 Schema 和说明,再把候选工具加入下一轮模型请求。模型看到真实参数契约后,才生成相应的业务调用,不能只凭简短能力摘要猜参数。
若工具是在运行时才从外部发现的,还需同时接上执行适配器、连接和必要配置。模型可见定义与执行器可调用入口必须一致,否则就会出现“模型能选中,程序却找不到工具”的问题。
3. 用一个具体任务串起来
以“查询某订单物流”为设计示例,当前 Agent 只有通用问答和工具搜索入口:
- 模型或路由器识别需要订单与物流查询能力,向目录检索候选。
- 程序筛出当前用户可用的查询工具,排除取消订单等无关能力,加载完整参数定义。
- 下一轮模型根据定义生成查询请求,执行器核对工具标识、参数和订单访问范围,再调用对应函数或服务。
- 查询结果带着调用关联信息返回,模型继续判断是否还需要查物流,最后据实际结果回答。
检索没找到合适工具时,可以补充关键词、扩大合理候选范围或说明能力缺口;不能编造工具名继续调用。候选描述相近时,要在用途、输入和副作用上写清差异,并用易混淆请求验证选择结果。
4. 动态变更不能让执行契约悄悄变化
记录本次实际采用的工具标识、版本或定义摘要,使模型看到的 Schema 与执行器采用的实现相匹配。兼容更新可以刷新目录;不兼容变更则应在明确边界重新加载并让模型重新决策,不能把按旧参数生成的请求直接交给新接口。
工具被下线、调用者被撤权或服务不可用时,执行前仍需检查;先前的能力快照不能永久保留访问权。缓存也要区分版本和身份范围,避免把其他调用者可用的工具或旧参数契约带进当前任务。
MCP 当前规范支持工具列表变化通知,但需要相应能力声明和客户端订阅支持。收到通知后仍由宿主刷新、过滤和适配,它不会自动把全部新工具塞进正在进行的模型调用。
5. 教程中的基础与扩展
Tools 教程通过工具定义、bind_tools 和程序执行展示了“能力声明”和“实际调用”的区别;MCP 教程通过获取远程工具再交给 Agent,展示了发现与接入过程。
在此基础上,可以增加本轮候选选择、按需披露及版本管理。研搜参考实现则是在代码中明确注册工具和三个业务专家,适合解释基础组装;动态工具注册中心属于可进一步设计的能力。
常见追问
把工具说明放进 Prompt 就算加载了吗?
它可能只是提供了文字描述。要让模型生成受约束的调用,通常还需按模型接口提供完整工具定义;要真正执行,还需存在对应的处理函数或远程适配。三者要连起来。
工具不展示给模型,就一定不能调用吗?
不一定。模型可见性主要影响选择和上下文大小;执行器是否允许调用,要单独检查当前任务的允许集合与资源权限。不能把隐藏 Schema 当作授权机制。
新工具上线必须重启 Agent 吗?
取决于实现。静态列表可能需要重建实例;支持目录刷新和动态执行适配的系统可在后续调用时发现并启用。无论哪种,都要明确生效时机、版本和连接生命周期,不能仅凭“动态加载”四个字承诺热更新。
动态加载会不会增加延迟?
可能。额外检索、读取定义和一次模型决策都有成本,可缓存兼容定义或对常用工具直接预加载。应同时看候选召回、工具选择、参数正确性、输入 Token 和端到端耗时,不能只看少发了多少 Schema。
对应教程
- Tools 工具调用:阅读工具定义、绑定与程序执行的边界,理解动态加载最终需要接到哪两个位置。
- MCP 模型上下文协议:阅读获取 MCP 工具并交给 Agent 的过程,再扩展本轮筛选、延迟加载和刷新策略。
参考资料
- 国内:JavaGuide:MCP:参考宿主、Client 与 Server 的调用链,说明远程能力发现以后仍需适配和实际执行。
- 国内:zero2Agent:工具管理:采用分阶段披露、候选检索和版本范围管理,解释完整 Schema 何时取得、何时重新交给模型。
- 国内:WeThinkIn:MCP 与 A2A:参考工具用途、参数及错误契约,说明候选工具应如何描述,以及执行前为什么还需业务校验。
- 国外:MCP:2026-07-28 Tools 规范:依据
tools/list、工具定义与列表变更通知,说明正文中动态工具发现、目录刷新与宿主上下文管理的职责。 - 国外:LangChain:渐进披露工具:依据先注册执行工具、再按轮筛选模型可见工具的示例,区分正文中动态展示与运行时新增实现。
