Part III: 工具系统 -- Agent 的手和脚

没有工具的 LLM 只能说话。有了工具,它才能做事。


这个 Part 要解决什么问题

LLM 唯一能做的事情是输出文本。工具系统的使命,是把文本输出变成真实世界的操作——读文件、执行命令、搜索代码、访问网页。

但这不是「给每个功能写个函数」那么简单。当你有 40 多个功能各异的工具,你需要回答一连串架构问题:如何定义统一的接口让工具之间互操作?如何注册和发现工具,让 LLM 知道自己有哪些能力?当系统启动时就加载全部 40 个工具的 Schema,对 token 预算的冲击有多大?多个工具同时被调用时怎么并行?工具输出几千行文本怎么控制预算?

Part III 从接口设计讲到注册调度,从每类工具的设计取舍讲到并发编排,完整覆盖工具系统的三个层面:工具长什么样(定义)、工具怎么被找到(注册与调度)、工具怎么一起工作(编排)

包含章节

Chapter 6: 工具的设计哲学 -- 接口、注册与调度。 Tool 接口为什么用结构类型而不用类继承?三个泛型参数(Input、Output、Progress)分别约束什么?延迟加载的 Deferred Schema 模式如何将 token 成本从「启动时全部支付」变为「按需支付」?这一章是理解整个工具系统的关键转折点。

Chapter 7: 40 个工具巡礼 -- 从文件读写到浏览器。 文件操作工具为什么要限制单次读取的行数?Bash 工具如何在给予操作系统级能力的同时保持可控?搜索工具的 Glob 和 Grep 为什么要分开而不合并?Web 工具、Agent 工具、MCP 工具各自的设计取舍是什么?

Chapter 8: 工具编排 -- 并发、流式进度与结果预算。 当 LLM 一次返回多个 tool_use 块时,哪些工具可以并行、哪些必须串行?流式进度(ToolCallProgress)如何让用户在工具执行期间不会面对黑屏?工具输出太大时,结果预算(result budget)和结果裁剪策略如何在保留关键信息的前提下控制 token 开销?

与其他 Part 的关系

  • 前置知识:Part I 的心智模型(工具系统在 Harness 中的角色),Part II 的 Agent Loop(工具执行发生在循环内部)。Chapter 6 可以在只读完 Chapter 1 的情况下独立阅读。
  • 后续延伸:工具的权限检查机制在 Part IV 中深入展开。子 Agent 工具(AgentTool)和团队工具(TeamCreate、SendMessage)是 Part V 多智能体的入口。MCP 工具(Chapter 7 中提及)在 Part VII Chapter 18 中详细拆解。Skill 工具在 Part VII Chapter 19 中展开。