--- title: "Dynamic ReAct:大规模 MCP 工具选择" created: 2026-06-19 updated: 2026-06-19 type: paper tags: [dynamic-tool-selection, mcp, react-agent, meta-tools, tool-retrieval] sources: - https://arxiv.org/abs/2509.20386 --- # Dynamic ReAct:大规模 MCP 工具选择 > **Nishant Gaurav, Adit Akarsh, Ankit Ranjan, Manoj Bajaj** · 2025 · arXiv:2509.20386 ## 核心问题 MCP 生态增长到数百/数千工具时,ReAct Agent 无法全量加载——上下文有限。需要**按需的动态工具选择**。 ## 五架构渐进演化 | # | 架构 | 核心机制 | 关键问题 | |---|------|---------|---------| | 1 | Direct Semantic Search | 用户查询→向量库→top-k | 噪声严重,跨域失效 | | 2 | Meta-Tool Query Construction | LLM 构造原子搜索查询 | 仍需大 k,精度有限 | | 3 | **Search and Load** ★ | search_tools + load_tools | **最优平衡** | | 4 | Application-Aware | 先搜 app 再搜 tool | 额外调用收益有限 | | 5 | Fixed Tool Set | 固定 meta-tool 动态访问 | 长对话退化 | ### ★ Search and Load(生产选择) ``` 用户查询 → LLM构造多查询 → search_tools(k1=20, k2=5/每应用) → 去重返回 → LLM精选 → load_tools(< 5个工具) → 执行 ``` 优势: - 多查询合并一次 `search_tools` 调用 - 去重 + 每应用上限 k2=5 控制候选规模 - LLM 精选后通常**加载不到 5 个**工具(vs baseline 的 10+) - 工具加载减少 **50%**,准确率保持 ## [[context-enriched-embeddings|上下文增强嵌入]] 从 baseline 的 Top-5 40% → 60%(+50% 相对提升): - Sonnet 4 生成增强描述(隐式功能 + 用例) - voyage-context-3 嵌入 + Sonnet context - BM25 混合提升 recall 但降 precision(关键词误匹配) ## [[meta-tools|Meta-Tool 设计]] 四个核心 meta-tool: - **search_tools**:两级搜索(k1 候选 → 去重 → k2 每应用上限) - **load_tools**:LLM 精选后显式加载 - **search_apps**:先定位应用(可选,收益有限) - **get_tool_info / call_tool**:Fixed Tool Set 模式的动态访问 ## [[default-tools|Default Tools]] **create_table** + **web_search** 始终可用——避免为通用任务浪费搜索(如 LLM 搜索 "financial APIs" 来找财报,有了 web_search 直接搜即可)。 ## 与 MCP-Zero 的对比 | | Dynamic ReAct | [[fei-mcp-zero-2025|MCP-Zero]] | |---|---|---| | 核心机制 | meta-tool + 语义搜索 | Agent 主动请求 + 层次路由 | | 工具加载 | search→load 两阶段 | 请求→路由→注入 | | 向量策略 | context-enriched embeddings | OpenAI text-embedding-3-large | | 多轮 | ReAct 框架内迭代 | Iterative Capability Extension | | 共性 | 都追求"按需而非全量" | 都反对被动注入 | Dynamic ReAct 论文直接引用了 MCP-Zero(ref [2])——两篇构成 MCP 工具选择的互补视角。 来源:[原始存档](raw/papers/gaurav-dynamic-react-2025.md)