工具很多时,如何通过工具索引、子 Agent 或小模型筛选工具?
未标记
考查重点:工具索引与候选重排。索引召回候选,权限/领域过滤后小模型或子Agent重排,只加载必要完整Schema,未命中有界扩展
本题目录
参考答案
核心回答
我会把工具管理拆成索引召回、候选筛选、完整定义加载和受控执行,让主模型每一步只看到与当前任务有关的能力。
工具索引保存名称、用途、适用条件、参数摘要、版本和权限等信息。先按用户权限、业务领域和任务阶段缩小范围,再用关键词或语义检索召回候选;需要时用小模型判断相关性与差异,加载少量工具的完整 Schema,让主模型选择并填写参数。没有合适候选或信息不足时,应扩大检索、澄清或回退,而不是强行选一个。
子 Agent 则适合承担较完整的领域子任务,例如数据库分析专家自己完成查结构、查询和结果解释。工具多不一定需要多 Agent:只是候选太多,索引和筛选可能足够;需要独立上下文、工具组合与执行过程时,再考虑委派。
展开说明
1. 工具索引要能表达“什么时候用”
为工具设置稳定标识,记录能力描述、输入输出契约、所属领域、版本、权限范围和可用状态。索引摘要应写清适用与不适用场景,并补常见问法;完整参数约束和执行入口保存在可信注册表中,不让模型根据自然语言描述自行拼接任意接口地址。
例如“查询退款进度”和“创建退款申请”都与退款有关,但一个查询现状,一个发起业务动作。索引若只有“处理退款”四个字,语义相似度很难表达它们的区别。应突出查询或写入、前置条件及返回内容,而非只增加更多同义词。
目录特别大时,轻量索引也不必全部塞进提示词。可以在宿主侧检索,只给模型必要候选;保留少量常用导航能力,便于后续步骤发现新工具。
2. 召回候选与加载定义分开
根据当前用户目标、已有状态和待执行步骤构造检索条件,在允许使用的工具范围内召回。明确工具名、业务编号和动作词适合关键词匹配,表达多样时可补语义检索;候选排序还要看工具是否真正满足输入条件和任务要求。
候选确定后,从注册表加载对应版本的完整说明、Schema 和结果语义,交给模型支持的工具接口。模型调用前要拿到准确契约,不能只给名称就允许它猜参数,也不宜把所有定义复制成一大段普通系统提示词来代替正式接口。
一个任务可能需要多个有依赖的工具,不能把每次筛选都简化为只保留相似度最高的一个。拿到新线索后可以重新筛选;执行中的参数契约应明确版本,工具更新需要兼容检查,权限撤销则应及时生效。
3. 小模型筛选和子 Agent 委派分别解决什么?
小模型筛选可以只返回允许集合中的工具 ID、相关性判断和需要补充的条件,由程序检查结果是否合法。它适合候选语义相近、规则难以完全覆盖的情况,但应允许“没有合适工具”,不能强迫每次都选中。
若索引已能稳定召回少量候选,再加一次模型筛选可能增加延迟和成本。反过来,直接让小模型阅读全量庞大目录,也只是把上下文问题搬到了前一层。应比较检索直达、规则筛选和模型筛选的整体效果。
子 Agent 接收的是任务目标、必要材料、约束和验收要求,而不只是一个工具排序请求。它在自己的能力范围内执行多步工作,返回结果、证据与状态,主 Agent 再整合。专业分工能减少主上下文负担,也引入委派、重复材料和失败恢复成本;分开上下文并不自动形成操作系统安全隔离。
4. 没有召回正确工具怎么办?
区分“没有这项能力”“工具暂不可用”“用户无权限”和“检索漏了”。信息不清时先补问;检索不足时可以在权限范围内扩大领域、换关键词或增加候选,并限制重复搜索预算。权限不足不能通过换个 Agent 绕过。
执行前仍需检查工具标识、参数、当前权限与可用性。索引缓存要包含目录或工具版本及权限作用域,避免把旧 Schema 或其他用户的候选带入当前任务。多 Server 工具重名时,用稳定命名空间映射到具体实现,不能只靠一个模糊显示名路由。
5. 验证筛选是否值得
分别检查候选中是否包含完成任务所需的工具、最终是否选对、参数是否正确,以及任务是否真的完成。对于需要多个工具的任务,应检查必要工具集合,而不仅是某一个工具命中。
问题集应包含近义工具、查询与写入、跨领域、多步依赖、冷门工具、无合适工具和缺参数情况。同时比较上下文用量、筛选自身成本、整体费用与 P95 耗时。候选数量应按这些结果调整,不存在所有工具库通用的固定 Top-K。
常见追问
用 LangChain 的工具选择中间件,就一定用了小模型吗?
不一定。LLMToolSelectorMiddleware 在主模型调用前筛选工具,可以单独配置选择模型和候选上限;当前官方说明默认使用主模型。想用小模型,需要明确配置,并把这次筛选调用的质量、费用和延迟一起评估。
延迟加载工具,是不是连请求里都不用传完整定义?
取决于实现。自建宿主可以先检索再发送候选;Anthropic 当前 Tool Search 的 defer_loading 控制定义何时进入模型上下文,但请求仍要提供相应完整工具定义,供服务端搜索和展开引用。不能把减少模型上下文直接等同于减少所有网络载荷。
把全部工具按业务分给子 Agent,就解决了吗?
还要处理主 Agent 如何选领域、跨领域任务怎样拆分,以及子 Agent 内部的工具选择。分组错误或领域边界模糊仍会漏掉能力;工具索引与子 Agent 可以组合,但不必为了数量机械增加一层 Agent。
对应教程
- 研搜项目:中间件机制与 Skills 配置:概览介绍
LLMToolSelectorMiddleware用于在长工具列表中筛选相关能力;百级工具索引、召回回退与效果评估可以围绕实际工具库继续设计。
参考资料
- 国内:JavaGuide:上下文工程:依据任务阶段可见工具与错选、漏选、成本指标,说明正文中按需加载仍需导航和验证的原因。
- 国内:zero2Agent:工具管理:借鉴分级路由、候选召回、完整 Schema 加载与版本缓存,说明正文中每轮工具筛选的流程。
- 国内:WeThinkIn:企业级 Agent 平台:采用工具资产、Server 和 Agent 注册信息的区分,说明正文中权限、版本与可用性如何约束候选范围。
- 国外:Anthropic:Tool Search:依据按需发现和展开工具定义的约定,说明正文中延迟进入上下文与请求仍需提交完整定义的区别。
- 国外:LangChain:LLM tool selector:依据结构化筛选、选择模型与保留工具配置,说明正文中小模型筛选如何衔接主模型调用。

