第16章:Agent 工具——AI 的分身��

一个 AI 不够用怎么办?

有时候一个任务太复杂,需要同时做很多事情。比如:

"帮我重构项目中所有的数据库查询,用新的 ORM 替换旧的 SQL 语句。同时更新所有相关的测试。"

这个任务涉及几十个文件。如果 AI 一个一个处理,要花很长时间。而且它的上下文窗口可能放不下所有文件。

解决方案?创建"分身"。

Agent 工具是什么?

Agent 工具让 AI 可以创建子智能体(Sub-agent)——新的 AI 实例,有自己的上下文窗口、自己的任务、自己的工具集。


// AI 调用 Agent 工具
{
  name: "Agent",
  input: {
    description: "重构数据库查询",
    prompt: "请将 src/db/ 目录下所有文件中的原生 SQL 查询替换为 Prisma ORM 调用。...",
    subagent_type: "general-purpose",
  }
}

就像《火影忍者》里的"影分身术"——每个分身可以独立工作,完成后把结果报告回来。

子智能体的工作方式


主智能体
├── 接收用户任务
├── 分析任务复杂度
├── 决定创建几个子智能体
│
├── 子智能体 A: "重构 src/db/users.ts"
│   ├── 有自己的上下文窗口
│   ├── 可以使用 FileRead, FileEdit 等工具
│   ├── 独立完成任务
│   └── 返回结果给主智能体
│
├── 子智能体 B: "重构 src/db/posts.ts"
│   ├── 有自己的上下文窗口
│   ├── 可以使用同样的工具
│   ├── 独立完成任务
│   └── 返回结果给主智能体
│
└── 主智能体汇总结果,回复用户

子智能体的类型

Claude Code 支持几种预定义的子智能体类型:


// 通用型:什么都能做
{
  subagent_type: "general-purpose"
}

// 探索型:专门用于搜索和研究代码
{
  subagent_type: "Explore"
}

// 规划型:专门用于设计实施方案
{
  subagent_type: "Plan"
}

general-purpose(通用型)

拥有所有工具(除了不能再创建子智能体),可以执行任何操作。适合需要修改代码的任务。

Explore(探索型)

只有搜索和读取工具,不能修改文件。专门用于快速探索代码库。比如:


"帮我了解这个项目的认证系统是怎么实现的"
→ 创建一个 Explore 型子��能体
→ 它会搜索相关文件、读取代码、整理报告
→ 返回一份全面的分析报告

Plan(规划型)

同样只有搜索和读取工具,但专注于设计实施方案。适合:


"帮我规划一下怎么把这个项目从 JavaScript 迁移到 TypeScript"
→ 创建一个 Plan 型子智能体
→ 它会分析项目结构、识别依赖关系
→ 返回一份详细的迁移计划

子智能体的上下文隔离

每个子智能体有自己独立��上下文窗口。这意味着:


主智能体的上下文:
  [用户的原始请求]
  [之前的对话历史]
  [系统提示词]
  共占用 50,000 tokens

子智能体 A 的上下文:
  [子任务描述]            ← 从主智能体传来
  [系统提示词(缓存)]     ← 重用主智能体的缓存
  [��立的工具调用历史]     ← 自己产生的
  共占用 30,000 tokens    ← 不受主智能体的历史影响

好处:

  1. 1. 子智能体不会被主智能体的对话历史"污染"
  2. 2. 子智能体有"新鲜"的上下文空间
  3. 3. 主智能体的上下文不会因为子任务的细节而膨胀

并行 vs 串行

子智能体可以并行运行:


// AI 可以同时启动多个子智能体
[
  {
    name: "Agent",
    input: { prompt: "重构 users.ts", ... }
  },
  {
    name: "Agent",
    input: { prompt: "重构 posts.ts", ... }
  },
  {
    name: "Agent",
    input: { prompt: "更新测试文件", ... }
  },
]
// 三个子智能体同时工作!

也可以在后台运行:


{
  name: "Agent",
  input: {
    prompt: "...",
    run_in_background: true  // 后台运行
  }
}

后台运行的子智能体不会阻塞主智能体——主智能体可以继续和用户对话。子智能体完成后,主智能体会收到通知。

Git Worktree 隔离

对于可能有冲突的并行任务,子智能体可以在独立的工作目录中运行:


{
  name: "Agent",
  input: {
    prompt: "重构认证模块",
    isolation: "worktree"  // 在独立的 git worktree 中运行
  }
}

Git worktree 是 Git 的一个功能——它让你同时有多个工作目录,每个在不同的分支上。子智能体在自己的 worktree 里修改文件,不会影响主工作目录。


主工作目录:    /Users/alice/project  (main 分支)
子���能体 A:    /tmp/worktree-a/      (feature-auth 分支)
子智能体 B:    /tmp/worktree-b/      (feature-db 分支)

完成后,子智能体的修改可以通过 Git 合并回主分支。

自定义智能体

除了预定义的类型,用户还可以创建自定义智能体:


# ~/.claude/agents/security-reviewer.md

---
name: security-reviewer
description: 安全代码审查专家
tools: ["FileRead", "Grep", "Glob"]
---

你是一个安全代码审查专家。你的任务是:
1. 查找 OWASP Top 10 安全漏洞
2. 检查输入验证
3. 检查身份认证和授权
4. 检查敏感数据处理
5. 给出修复建议

这个文件定义了一个专门做安全审查的智能体。AI 可以这样调用它:


{
  name: "Agent",
  input: {
    subagent_type: "security-reviewer",
    prompt: "审查 src/api/ 目录下的所有接口"
  }
}

子智能体之间的通信

子智能体不能直接互相通信——它们只能通过文件系统间接交互:


子智能体 A 修改了 config.ts
子智能体 B 读取了 config.ts
→ B 看到了 A 的修改

这种"通过共享状态通信"的模式避免了复杂的消息传递,但也意味着如果两个子智能体同时修改同一个文件,可能会冲突。这就是为什么有 worktree 隔离模式。

本章小结

  • - Agent 工具让 AI 创建子智能体来处理复杂任务
  • - 子智能体有独立的上下文窗口和工具集
  • - 三种预定义类型:通用型、探索型、规划型
  • - 子智能体可���并行运行、后台运行
  • - Git worktree 隔离防止并行修改冲突
  • - 用户可以创建自定义智能体
  • - 子智能体通过文件系统间接通信

思考题

  1. 1. 如果一个子智能体的任务失败了,主智能体应该怎么处理?
  2. 2. 子智能体能不能创建自己的子智能体?这样做的风险是什么?
  3. 3. 什么样的任务适合用子智能体,什么样的任务不适合?

多智能体的类比:软件开发团队

多智能体系统和真实的软件开发团队惊人地相似:

真实团队多智能体
项目经理分配任务主智能体分配子任务
开发者各自写代码子智能体各自执行
用 Git 分支隔离工作用 Worktree 隔离修改
Code Review 检查质量主智能体汇总审查
最终合并到 main 分支合并所有修改

这不是巧合——多智能体系统本身就是在模拟人类团队的协作方式。理解了团队协作的原则(明确分工、减少耦合、统一标准),你就理解了多智能体系统的设计精髓。

下一章,我们将进入安全与权限篇——Claude Code 最重要的防线。


本书由 everettjf 使用 Claude Code 分析泄露源码编写 | 保留出处即可自由转载