Agent 工具数量变多、上下文被工具定义占满时使用——设计工具发现与渐进式披露机制、实现 discover_tools 元工具与两层语义路由、选择索引式/检索式/主动发现/Skills 方案、处理动态加载破坏 KV Cache 的问题、评估 token 成本与工具选择准确率时查阅。含渐进式加载五步流程、工具数量阈值与
复制下面这句话,粘贴给 Claude Code、Codex、Cursor 等 AI 编程工具,它会读取安装说明并在你确认后完成安装。
请阅读 https://ai.atlankj.com/install/asset/gh-tool-discovery-1d74304253a1 ,按照其中的说明把「tool-discovery」安装到你(当前 AI 工具)中。执行前先告诉我将运行的命令和写入的位置,等我确认。
查看 AI 将读取的安装说明正在读取 GitHub 原文…
内容来自 GitHub 原始文件,由原作者维护。在 GitHub 查看
| 工具规模 | 推荐方案 |
|---|---|
| 十几个 | 全量注入,无需额外机制 |
| 几十个 | 只暴露索引,按需查定义 |
| 上百个 | 检索式预筛选(top-k 后注入) |
| 上百至上千 | 主动工具发现(元工具 + 两层语义路由)或 Skills 渐进式披露 |
| 上千 | Skills / Skill Hub;专用工具须另建索引层 |
层次化组织按信息源性质分类,并在系统提示词中显式说明,帮助 LLM 快速定位工具组:搜索工具(主动查找:网络/知识库/文件搜索)、读取工具(从已知位置提取:网页阅读、文档读取、DB 查询)、解析工具(处理非结构化数据:OCR、视频分析、音频转录)、查询工具(访问结构化数据源:天气、股票、公开数据库 API)。
name + description(数百 token),不注入完整 schema。<tool_request>server: GitHub for repository operations; tool: search repositories by keyword</tool_request>。系统提示词中只保留少数基础工具(web_search、code_interpreter)加一个 discover_tools 元工具。两层匹配候选相似度都低于阈值时,明确返回"未找到",让 Agent 改写需求重试、用基础工具手工实现,或创造新工具。
| 策略 | 注入内容 | 适用 |
|---|---|---|
| 全量注入(all-tools) | 全部 N 个 schema,token 随目录规模线性增长 | 工具少的基线 |
| 检索预筛选(retrieval) | 按初始查询语义 top-k | 工具上百、需求可预估 |
| 主动发现(active) | Agent 迭代声明需求,上下文按需增长 | 工具上千、多步骤跨领域任务 |
实测(top-k=5):全量注入 35 个工具 3,857 token,且 400 个工具时涨到 40,258 token;retrieval 恒为约 540-550 token 且 recall 保持 100%——按需选择把"选哪个工具"变成"查哪条资料",且成本不随生态规模膨胀。
tool_search + defer_loading(要求后续请求保持 tool_search_output 项的原位置,同一工具无需重复加载);Anthropic tool_reference(在会话历史原位置内联展开 block,官方文档明确后续每轮保持缓存命中);Codex CLI 默认开启 tool_search。不需要嵌入索引、检索元工具、tool_search/tool_reference 这类基础设施。Agent 启动时只看到一份薄目录(每个 skill 的 name + description),当前上下文真的需要某种能力时,才读取对应 sub-skill,并顺着引用再往下读具体脚本或子文档。类比:没人会把工具书从第一页读到最后一页,而是顺着索引按需查词条。专用工具要达到同样的渐进式披露,必须在工具之外另建一层基础设施——这正是那些机制存在的理由。
实验 4-1 的做法(Qwen3-4B 面对 120+ 工具):
web_search、code_interpreter、discover_tools;discover_tools 收自然语言需求,经嵌入相似度返回 3-5 个候选及完整 schema;新定义追加到对话历史,状态栏更新工具名列表;提示词引导模型在遇到能力缺口时主动调用 discover_tools。chapter4/active-tool-discovery/ — 在 126 个跨领域工具上对比全量注入 / 检索预筛选 / 主动发现;python demo.py --offline 跑通机制,run_exact_experiment.py 是正式实验入口。chapter4/active-tool-selection/ — MCP-Zero 风格教学实现:<tool_request> 结构化请求、服务器级→工具级两层语义路由、demo_comparison.py --offline 输出 recall/token/规模曲线。book/chapter4.md「工具太多怎么办:层次化组织与主动工具发现」