Agent 工具发现

agent_tool_discovery2026-09-07 10:11:53

Agent 工具发现是当可用工具数量很大时,组织、检索并按需向模型提供当前任务所需能力的机制。它解决的是“模型此刻应该看见哪些工具”,而 Agent 工具调用 解决的是“模型怎样从已经可见的工具中发起一次调用”。

为什么需要工具发现

把全部工具 Schema 放入每次模型请求,会占用上下文,降低缓存稳定性,并增加名称重叠和误选。随着多个服务、插件和 Skill 被接入,工具目录本身需要版本、权限、索引和质量治理。

能力采用专用工具、通用执行器还是 Skill,决定单项能力的接口和维护方式;工具发现决定同时暴露哪些能力。两项决策相互影响,但不能混为一谈。

层次化组织与按需加载

最基础的方法是只向模型提供轻量索引,需要时再加载完整定义。工具可以按服务、领域或操作性质分组,例如搜索、读取、解析、查询和执行。层次结构应帮助模型缩小候选范围,但不能依赖含糊分类掩盖工具自身的边界。

工具索引至少应包含稳定 ID、名称、用途摘要、所属服务、风险等级、权限要求和版本。完整定义加载后,应在后续轨迹中保持身份一致,避免同名工具悄然改变含义。

检索式预筛选

当目录更大时,可以根据用户请求或任务状态检索少量候选,再把候选 Schema 提供给模型。检索可以结合关键词、语义相似度、服务分类、权限和历史使用信息。

一次性预筛选只依据任务开始时的信息,可能漏掉执行中才暴露的能力需求。因此系统应允许继续搜索,而不是把第一批候选视为完整工具集。

主动工具发现

主动发现让 Agent 在执行过程中声明能力缺口,例如“需要读取某种文档格式”或“需要查询指定业务系统”。发现服务再匹配相关服务和工具,并返回候选定义。典型流程是:

  1. Agent 判断当前工具不足,并描述需要完成的动作、输入和期望输出;
  2. 系统先按服务或领域筛选,再在候选组内匹配具体工具;
  3. 权限层过滤当前身份不可用的能力;
  4. Harness 把选中的完整定义追加到当前轨迹;
  5. Agent 调用工具,并在结果不足时改写需求或继续发现。

发现结果应保留稳定工具 ID、来源、版本和加载位置。动态加载不应无提示地替换已出现的 Schema,否则历史调用将难以解释,缓存和复现也会失效。

Skills 作为轻量发现方式

Agent Skills 通常先暴露名称和描述,命中任务后再读取说明与资源,相当于用目录浏览实现渐进式发现。它不一定需要向量索引或正式 Schema 注入,但规模继续扩大时,仍需要分类、搜索、版本和权限过滤。

MCP 可以为工具提供统一的列举和调用协议,但接入多个服务器后仍可能得到很大的工具集合。是否使用 MCP,与是否按需披露工具是两个独立决定。

无匹配、降级与安全

没有足够匹配时,系统应明确返回“未找到”,并允许 Agent 缩小或改写需求、使用基础工具手工完成、请求安装可信能力,或向用户报告缺口。低相似度候选不能被包装成确定匹配。

发现层必须在返回候选前执行租户、身份、许可和风险过滤。工具描述和外部目录属于不可信输入,不能覆盖系统规则;安装新工具、授予权限或执行高风险操作仍需独立确认。

评测

工具发现应分别评估召回和任务结果:正确工具是否进入候选集、错误工具是否被排除、模型是否最终选择正确、发现轮数、上下文开销、延迟、缓存命中、无匹配判断和越权暴露。只测最终答案会掩盖发现层与调用层各自的问题。

相关词条

参考资料

本页目录