当前位置: 首页 > news >正文

MCP 工具数量爆炸后,如何高效做 Tool Selection?

MCP 工具数量爆炸后,如何高效做 Tool Selection?

背景:规模扩展带来的路由难题

在 MCP(Model Context Protocol)架构中,随着接入工具数量的增长,一个问题会越来越突出:LLM 开始选错工具。

典型的场景是这样的:你从 5 个工具扩展到 25+,早期还好,路由基本准确。但随着工具数量继续增加,特别是出现语义相近但实现不同的工具时,误路由开始频繁出现。

一个常见的应对方案是 RAG + LLM 两阶段:

  1. 用 RAG 对工具描述做语义检索,取 Top 5 候选
  2. 让 LLM 从候选中选最终工具

这个方案初期有效,但扩展性有限——工具继续增长后,混乱依然会回来。

那么,真正可扩展的 Tool Selection 策略是什么?


策略一:两阶段精简描述法(推荐)

这是目前社区中反馈最实用的方案,思路简单清晰:

第一阶段:粗筛

  • 给 LLM 提供所有工具的无参数 + 一行描述版本
  • 让 LLM 基于这个轻量信息快速过滤,输出候选工具列表

第二阶段:精调

  • 对被初步选中的工具,再提供完整定义和参数说明
  • LLM 基于完整信息做最终决策,精确调用
用户输入 ↓ [第一阶段] 全量工具 × 一行描述 → LLM 粗筛 → 候选 2-3 个 ↓ [第二阶段] 候选工具 × 完整定义 → LLM 精调 → 最终调用

优点:减少 LLM 在第一阶段消耗的 token,同时保留精确调用的能力。
注意:过度设计这种流程在工具继续扩展时仍有局限,需要配合描述质量的持续维护。


策略二:渐进式工具披露(Progressive Tool Disclosure)

MCP SDK 现已原生支持这个模式:不要一次把所有工具都暴露给 LLM,按需动态披露。

核心思路:

  • 根据当前任务上下文,只暴露与当前步骤相关的工具子集
  • 随着对话推进,逐步解锁更多工具
  • 避免 LLM 在无关工具中"迷路"

这个方案的本质是上下文收窄:给模型看到的选项越少,它出错的概率越低。


策略三:单端点 + 逐步上下文暴露

另一种经过实践验证的架构是:只暴露一个 MCP 入口,在每一步动态传入精确的上下文和工具范围。

具体做法:

  • 将整个任务拆成 step-by-step 的 workflow
  • 每一步只执行一个工具调用
  • 基于上一步的结果做分支判断,决定下一步的工具范围
Step 1: 只看工具 A → 执行 → 结果 ↓ Step 2: 基于结果,只看工具 B/C → 执行 → 结果 ↓ Step N: ...

这个方案在 Sonnet 级别的模型上执行稳定性非常高,也适用于 Haiku 这类轻量模型。


最被忽视的优化:工具描述质量

所有技术方案的底层,都依赖一个前提:工具描述要短、准、可区分。

几个实操建议:

  • 每个工具只做一件事,描述只说这件事
  • 避免模糊动词:不要写"处理"、“管理”,要写"创建"、“查询”、“删除”
  • 语义边界要清晰:两个功能相近的工具,描述里要明确说明区别
  • 描述长度控制:一行到两行,超过三行就要考虑是不是工具职责不清

工具描述质量越低,任何路由策略的效果都会打折扣。这是最便宜、最直接的优化手段。


策略对比

策略适用场景复杂度扩展性
两阶段精简描述法工具数量 10-50+,有语义重叠
渐进式工具披露任务流程清晰,上下文可预测
单端点逐步暴露复杂 workflow,步骤明确很好
优化工具描述所有场景必做

总结

MCP 工具路由问题的本质,是给 LLM 的选择空间太大。所有有效的策略,都在做同一件事:收窄上下文,减少无关干扰

如果你的 MCP 项目开始出现误路由:

  1. 先检查工具描述——最快见效的手段
  2. 引入两阶段路由——适合工具数量已经较多的情况
  3. 考虑渐进式披露——MCP SDK 原生支持,不需要额外开发
  4. 拆分 workflow——适合任务流程固定、对稳定性要求高的场景

工具越多,越需要让每一步的选择空间尽可能小。

http://www.jsqmd.com/news/672968/

相关文章:

  • 保姆级教程:手把手将赛元触摸库移植到你的Keil工程(SC95F8X1X系列)
  • 分享一个免费的阿贝云服务器搭建经验
  • 2026年3月水处理工厂推荐,中水回用水处理/工业水处理/锅炉水处理/地埋式污水处理/水处理/污水处理,水处理设备哪家好 - 品牌推荐师
  • 2026AI工具
  • 【入门C++语法】第11章 函数和变量作用域
  • 手把手教你排查STM32 SPI通信失败:从示波器看CLK信号到CubeMX代码审查
  • 2026 年 Debian 项目换帅:Sruthi Chandran 接棒 Andreas Tille 开启新任期
  • Mac上IDEA的PlantUML插件报错‘找不到Graphviz’?手把手教你用Homebrew搞定(附阿里云镜像避坑)
  • AI Agent行动规划算法:动态环境下的最优决策生成
  • 避开MAVROS视觉消息的坑:详解LANDING_TARGET消息的frame与type字段怎么选
  • MCP C# SDK v. 正式发布
  • HiveWE:重新定义魔兽争霸III地图制作的终极智能编辑器
  • 2026年金属离子络合剂行业代表性厂家/企业发展现状分析 - GrowthUME
  • 02华夏之光永存:黄大年茶思屋榜文解法「第10期第2题」计算资源利用率倍增难题:QoS保障下CPU/内存动态超分双路径破局
  • 用Jetson Nano跑通VINS-Fusion:嵌入式VI-SLAM开发避坑全记录
  • Excel跨表格查找神器:VLOOKUP+粘贴链接实现数据自动同步(附避坑指南)
  • 大数据处理技术选型
  • 终极指南:3步解锁百度网盘SVIP高速下载功能(macOS版)
  • 如何用Arduino精准监控家庭用电?PZEM-004T v3.0电力监测库实战指南
  • Android Studio开发集成:Phi-4-mini-reasoning助力移动端AI功能开发
  • Rhino 7 + Grasshopper 新手避坑指南:这5个隐藏设置不打开,效率直接减半
  • FlipIt翻页时钟屏保:3分钟打造Windows桌面复古时钟的终极指南
  • Ollama王炸更新!一行命令部署HermesAgent,本地AI秒变智能助手
  • 山东楼顶广告字技术白皮书:从选材到安装的完整实践指南
  • 计算机毕业设计:Python农产品电商数据可视化分析系统 Django框架 数据分析 可视化 大数据 大模型 机器学习(建议收藏)✅
  • 从集合到点云:深入浅出图解Deep Sets的置换不变性到底在说什么
  • 别再死记命令了!用Wireshark抓包带你理解华为交换机DHCP工作全过程
  • 手把手排查SSV6155/6255 WiFi模块不识别问题:从硬件检查到驱动加载
  • Python 入门
  • LVGL 8.x 集成FreeType矢量字体:启动闪退的排查与修复实录