---
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)
