Claude Code 学习站

内置工具选型

考点 2.5 · Built-in tool selection · 所属域权重 18% · 工具设计与 MCP 集成

本页目录5

这个考点是什么

内置工具选型考的是:面对一个具体任务,该用 Anthropic 提供的哪一类工具去完成,而不是不假思索地用 Bash 或 Read 硬解决一切。这里有两条正交的辨析轴。

第一条轴是“工具在哪里执行”:web_searchweb_fetchcode_executiontool_search(以及 advisor 类工具)是服务器工具(server tools),声明进 tools 参数后,Claude 发出查询、Anthropic 的基础设施负责执行并把结果直接回填为内容块,你的应用不写任何处理逻辑,也不需要返回 tool_result

bashtext_editor、computer use、memory 这些“Anthropic 定义 schema 的工具”看起来也是官方出品,但执行主体仍是你的应用——Claude 只吐出一个 tool_use 块,真正跑命令、改文件、维护记忆文件的是你自己的处理器,跑完还要显式回一个 tool_result。这条轴最容易被“官方定义”四个字带偏,误以为官方定义 schema 就等于官方执行。

第二条轴是“文件类操作该选哪个内置工具”:

  • 大规模按内容查找用 Grep(支持按文件类型/glob 过滤,一次遍历整个代码库),而不是逐文件 Read 或绕开专用工具去 Bash 里拼 find/grep

  • 精确定点修改用 Edit,靠 old_string 的唯一匹配定位,匹配不到或匹配到多处时的正确应对是回 Read 拿到更大的上下文重试 Edit,而不是退化成整文件覆盖写或者用 sed 批量替换。

两条轴看似不相关,实则都在考同一件事:识别每个内置工具真正的能力边界和执行归属,按边界选型,而不是凭工具的“权威感”或“万能感”去选。

为什么考

出题角度集中在两类陷阱。

一类是概念混淆题,专挑“Anthropic 定义了 schema”和“Anthropic 执行”这两个相似说法做选择题干扰项,考察能否把 bash/text_editor/computer use/memory 这些客户端工具,和 web_search/web_fetch/code_execution/tool_search 这些服务器工具准确分组,常见问法是“哪些不需要你写 handler 返回 tool_result”或反过来问“哪些必须由你的应用执行并回 tool_result”。

另一类是场景选型题,给一个具体任务(海量文件查找、Edit 匹配冲突报错、区分读写工具边界),让你在 Grep/Read/Edit/Bash/写工具之间挑最合适的一个,重点考“专用工具优先于通用工具模拟”和“最小权限——只读场景不挂写工具”这两条原则。

核心辨析

  1. 1

    server tool vs client tool 的判定标准不是看“谁发布了 schema”,而是看“谁执行、谁要回 tool_result”。

    web_search/web_fetch/code_execution/tool_search 由 Anthropic 基础设施执行,结果直接回填,你不写代码也不回 tool_result;bash/text_editor/computer use/memory 虽然 schema 和使用范式由 Anthropic 定义并训练过 Claude,但落地执行和回 tool_result 仍在你的应用里,判定时永远问“这一步谁真正跑了操作”。

  2. 2

    自定义工具(如 get_weather)和 Anthropic-schema 客户端工具同属“client tool”大类,区别只在 schema 由谁写、Claude 有没有被专门训练过用法,不影响执行主体的判断——两者都要你写 handler、都要回 tool_result,不要因为后者是“官方工具”就误判成服务器工具。

  3. 3

    Grep vs Bash grep/find vs 逐文件 Read 的边界

    海量文件按内容检索时,Grep 是专用工具,内置类型/glob 过滤,一次遍历完成;绕到 Bash 里拼 shell 命令等于放弃了工具本身的过滤和效率优势,对每个文件单独 Read 更是把本该一次完成的搜索拆成大量调用,三者的取舍原则就是“有专用工具就不要用通用工具去模拟”。

  4. 4

    Edit 报“匹配不唯一”时的正确回退,是先 Read 拿到完整上下文,扩大 old_string 的包裹范围直到唯一定位目标行,再重试 Edit;不是把匹配范围改小到能命中多处后用 Bash sed 批量替换(会改坏其他本该保持不变的行),Edit 也不支持按行号定位,它始终按文本内容匹配。

  5. 5

    读写工具的边界按“是否产生副作用/改变状态”划分,不按“是否访问外部系统”划分——查询只读的分析看板即使要访问外部服务,本质仍是读操作,只应挂读工具;创建日历事件、发邮件、改数据库记录都真正改变了状态,才是写/mutation 工具的合法场景,给纯读场景配写权限是对最小权限原则的违反。

反模式对照

常见做法

把发布了官方 schema 的 bash/text_editor/memory 当成服务器工具,认为 Anthropic 会替你执行。

正确做法

只按“谁执行、谁回 tool_result”判定:bash/text_editor/computer use/memory 都要你的应用写 handler 并显式返回 tool_result。

schema 由 Anthropic 定义不等于由 Anthropic 执行,这是该考点最高频的干扰项设计。

常见做法

海量代码库按内容查找时用 Bash 拼 find+grep,或对每个文件单独 Read 逐一查看。

正确做法

直接使用 Grep,并用文件类型/glob 过滤限定到目标文件范围。

专用工具内置了遍历和过滤能力,绕开它去用通用工具模拟,在效率和实现上都是弯路。

常见做法

Edit 报“匹配不唯一”后,改用 sed 把匹配到的几处一并替换,或尝试传行号来定位。

正确做法

先用 Read 获取完整上下文,扩大 old_string 使其唯一匹配目标位置,再重试 Edit。

批量替换会误改不该变动的其他行;Edit 是文本匹配语义,本身不支持行号参数。

常见做法

给只读查询场景(如查询分析看板)也配上写/mutation 工具,图省事一个工具打通读写。

正确做法

按操作是否产生副作用分配读/写工具,纯读场景只给读权限。

违反最小权限原则,无谓扩大误操作和滥用的影响面。

练这个考点