# 管理工具上下文

在 tool search、编程式工具调用、prompt caching 和上下文编辑之间选择，以管理上下文膨胀。

---

工具定义和累积的 `tool_result` 块会消耗你的上下文窗口。拥有大量工具或大量轮次的长时间运行 agent 可能在任务完成之前就耗尽可用上下文。四种方法在管道的不同阶段解决这个问题。

## 四种方法

每种方法针对不同来源的上下文压力。选择与你的 token 消耗位置匹配的方法。

| 方法 | 减少的内容 | 适用场景 | 了解更多 |
| --- | --- | --- | --- |
| Tool search | 预加载的工具定义 | 大型工具集（20+ 个工具），大多数工具并非每轮都需要 | [Tool search tool](/docs/en/agents-and-tools/tool-use/tool-search-tool) |
| 编程式工具调用 | `tool_result` 往返 | 可以作为单个脚本执行的工具调用链 | [编程式工具调用](/docs/en/agents-and-tools/tool-use/programmatic-tool-calling) |
| Prompt caching | 重复工具定义的 token 成本 | 跨多个请求的稳定工具集 | [工具使用与 prompt caching](/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching) |
| 上下文编辑 | 历史记录中的旧 `tool_result` 块 | 早期结果不再相关的长对话 | [上下文编辑](/docs/en/build-with-claude/context-editing) |

### Tool search

Tool search 将工具定义保持在上下文窗口之外，直到 Claude 请求它们。你不需要预先发送 50 个工具 schema，而是发送一个 `tool_search` 工具，让 Claude 按需发现其余工具。这以少量延迟（查找工具需要额外一轮）换取基线上下文使用量的大幅减少。

### 编程式工具调用

编程式工具调用将一系列工具调用折叠为 Claude 编写并由 Anthropic 代码执行沙箱运行的单个代码块。Claude 不需要五轮 `tool_use` 和 `tool_result` 往返，而是发出一个脚本，从沙箱内部调用所有五个函数。中间结果永远不会进入对话历史。

### Prompt caching

Prompt caching 不会减少上下文中的 token 数量，但会减少后续请求中为它们支付的费用。如果你的工具定义是稳定的，缓存一次并在数千个请求中复用缓存前缀。当工具集很大但固定时，这是正确的选择。

### 上下文编辑

上下文编辑在旧的 `tool_result` 块完成其使命后从对话历史中移除它们。长时间运行的 agent 循环可能产生数百个当时有用但现在已成为累赘的中间结果。上下文编辑允许你在不重启对话的情况下修剪它们。

## 组合使用

这些方法可以组合使用。长时间运行的 agent 可能使用 tool search 保持工具集精简，使用 prompt caching 分摊剩余定义的成本，并使用上下文编辑在对话增长时修剪过时的结果。每个方法解决问题的不同部分，因此组合使用不会产生冲突。

高流量 agent 的合理起点：

1. 从第一天起就对工具定义启用 prompt caching。缓存写入比基础输入定价高出 25% 的费用，这在第二次命中缓存的请求中就会回本。
2. 当工具集增长到大约 20 个工具以上或基线上下文使用量变得明显时，添加 tool search。
3. 当单个对话运行时间足够长，使得早期结果变得无关紧要时，添加上下文编辑。
4. 如果你注意到重复的小型工具调用链可以作为单个批次运行，考虑使用编程式工具调用。

## 下一步

<CardGroup cols={2}>
  <Card
    title="Tool search tool"
    icon="magnifying-glass"
    href="/docs/en/agents-and-tools/tool-use/tool-search-tool"
  >
    按需加载工具定义，而非预先加载。
  </Card>
  <Card
    title="编程式工具调用"
    icon="code"
    href="/docs/en/agents-and-tools/tool-use/programmatic-tool-calling"
  >
    将工具调用链折叠为单个可执行脚本。
  </Card>
  <Card
    title="工具使用与 prompt caching"
    icon="database"
    href="/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching"
  >
    跨请求缓存工具定义以降低 token 成本。
  </Card>
  <Card
    title="上下文编辑"
    icon="scissors"
    href="/docs/en/build-with-claude/context-editing"
  >
    从长时间运行的对话中修剪过时的工具结果。
  </Card>
</CardGroup>
