如何构建专属 Agent Team — 实战方法论
Phase 1 领域建模 识别"只有你知道的" 产出:知识清单Phase 2 架构设计 四层体系 + 最小启动集 产出:目录结构Phase 3 内容编写 信任分层 + @source 锚点 产出:SKILL.md 文件Phase 4 行为准则 CLAUDE.md 规则 + 验证协议 产出:CLAUDE.mdPhase 5 质量约束 从 L1 开始,遇到问题才往下加 产出:lint 脚本 / 评分卡
如何构建专属 Agent Team — 实战方法论
从 UAR Agent Team(44→33 文件,10,444→8,343 行)的构建与精简中提炼的通用方法论。
适用于任何需要 AI agent 深度参与的领域项目。
前置判断:你需要 Agent Team 吗?
不是所有项目都需要 agent team。先过三个条件:
| 条件 | 不满足时的替代方案 |
|---|---|
| 项目有 领域专属知识(LLM 不自带的) | 写几条 CLAUDE.md 规则就够 |
| 项目有 多个协作角色(不同视角的产出) | 单个 agent prompt 就够 |
| 项目是 持续迭代的(不是一次性任务) | 写一次性 prompt 就够 |
三个都满足 → 值得投入建 agent team。
只满足一两个 → 用 CLAUDE.md + 少量 SKILL.md 就够。
Phase 1:领域建模 — 识别"只有你知道的"
核心问题:什么知识是 LLM 不自带的?
做减法,不做加法。不要想"我需要教 agent 什么",而是问"如果不告诉 agent,它会搞错什么"。
四象限分类法
项目专属
↑
┌────────────┼────────────┐
│ ② 必写 │ ① 核心 │
低变化率 │ 架构约束 │ 业务规则 │ 高变化率
│ 术语定义 │ 状态机 │
│ │ 实体模型 │
├────────────┼────────────┤
│ ④ 不写 │ ③ 写锚点 │
│ 设计模式 │ 枚举值 │
│ 框架用法 │ 方法签名 │
└────────────┼────────────┘
↓
通用知识
| 象限 | 策略 | 示例 |
|---|---|---|
| ① 核心 | 详细写入 SKILL.md,持续维护 | 你项目的状态机、业务流程、实体关系 |
| ② 必写 | 写入后基本不变,低维护成本 | 架构分层规则、领域术语、角色定义 |
| ③ 写锚点 | 只写语义 + @source 指向代码,不缓存精确值 | 枚举 code 值、接口方法签名 |
| ④ 不写 | LLM 本身就知道,写了浪费 context | RICE 框架、SOLID 原则、设计模式 |
检验方法:把你准备写的内容直接问 LLM,如果它不看文件就能给出 80% 正确的答案 → 不写。
识别领域知识的实操步骤
Step 1: 列出项目中"新人入职第一周会搞错的事"
→ 这些就是你的领域专属知识
Step 2: 把它们分成"概念层"和"实现层"
概念层(稳定):业务规则、流程、约束
实现层(易变):代码值、方法名、字段名
Step 3: 概念层 → 直接写入知识文件
实现层 → 只写 @source 锚点,指向源码位置
Phase 2:架构设计 — 四层文件体系
文件命名即架构
{project}-agent-teams/
├── {project}-orchestrator-* # L0 编排层:路由、调度、协调
├── {project}-agent-* # L1 角色层:产品经理、开发、测试等
├── {project}-skill-* # L2 技能层:可执行的具体指导
├── {project}-knowledge-* # L3 知识层:只读参考事实
└── scripts/ # L4 自动化:lint、检查、部署
每层的职责边界:
| 层 | 包含什么 | 不包含什么 |
|---|---|---|
| Orchestrator | 角色分工、路由规则、工作流时序、门禁条件 | 具体实现细节 |
| Agent | 角色定义、输出模板、工作方法、检查清单 | 通用技能(LLM 自带的) |
| Skill | 项目专属的实现指导、代码模板、最佳实践 | 通用编程知识 |
| Knowledge | 领域事实(实体、状态机、业务流程、术语) | 实现建议(那是 Skill 的事) |
最小启动集
不要一开始就建 40 个文件。最小启动集只需要:
必建(Day 1):
1 个 knowledge 文件 — 核心领域模型(实体 + 状态机 + 业务流程)
1 个 agent 文件 — 开发者角色(你的 agent 最常扮演的角色)
CLAUDE.md — 行为准则
按需扩展(遇到问题再建):
orchestrator — 当角色超过 3 个,需要协调时
更多 knowledge — 当单文件超过 500 行,需要拆分时
skill 文件 — 当某类任务反复出现且需要具体指导时
scripts — 当某条规则可以自动化检查时
反模式:先设计完美架构再填内容。正确做法是从最小集开始,遇到问题再扩展。
Phase 3:内容编写 — 只存语义,锚点指向代码
核心原则:知识文件只放 agent 直接用不会出错的内容
不要用"信任分层协议"告诉 agent 哪些要验证 — 那是规则,agent 可以不遵守。
正确做法是从结构上消除错误源头:知识文件里根本不放易变的代码值。
直接写入知识文件(语义层,稳定) 从知识文件删除(实现层,易变)
├── 业务术语定义 ├── 枚举数字值(code = 1, 2, 3...)
├── 架构约束 ├── 方法签名精确参数
├── 实体层次关系 ├── 字段精确类型/长度
├── 状态转换方向 └── 级联更新的具体字段列表
└── 业务规则 / 判断标准
删除的内容怎么办? 用 @source 锚点替代 — 告诉 agent 去哪里读,而不是缓存一份在知识文件里。
@source 锚点模式
### Mission 状态码
> **@source** `src/main/java/.../consts/MissionConstant.java`
> **@verify** 实现代码前必须 Read 源文件确认精确值。
| 枚举名 | 业务含义 |
|--------|---------|
| PENDING | 待发布(新创建默认值) |
| PROCESSING | 进行中(已发布) |
| COMPLETED | 已完成 |
> ⚠️ 精确 code 数值从源文件获取,不从本表获取。
好处:
- 知识文件不会因为代码改枚举值而过期
- Agent 被明确引导去读源码,而不是用缓存值
- 维护成本趋近于零(语义层很少变)
内容编写三原则
原则 1:写"会搞错的",不写"能搜到的"
❌ "Spring Boot 使用 @Transactional 管理事务"
✅ "UAR 中所有状态变更必须在 @Transactional 内完成,且同一事务内写审计日志"
原则 2:写约束,不写教程
❌ "乐观锁的原理是通过 version 字段实现 CAS 操作..."(教程)
✅ "UserPermission 实体使用 @Version 乐观锁,并发冲突时最多重试 3 次"(约束)
原则 3:写判断标准,不写流程描述
❌ "首先创建 ReviewCycle,然后创建 Mission,接着..."(流程)
✅ "Mission 完成条件:该 Mission 下所有 UserPermission 状态为 APPROVED/REVOKED"(判断标准)
Phase 4:行为准则 — CLAUDE.md vs SKILL.md 分工
CLAUDE.md:放行为规则(每次对话都生效)
# CLAUDE.md 应该包含的内容
## 第一性原理
- 代码即真相(不信文档信代码)
- 从源头验证(改代码前先看原始版本)
- 最小必要变更(每行 diff 对应需求条目)
## 项目专属行为约束
- 状态变更必须通过 IXxxStatusService
- Job Handler 只做参数解析 + 委托调用
- 开发阶段不写单测
## 构建 / 测试命令
- mvn clean package ...
- mvn test -pl ...
SKILL.md:放领域知识(按需加载)
CLAUDE.md 和 SKILL.md 的判断标准:
"如果 agent 不遵守这条,每次都会出错" → CLAUDE.md
"如果 agent 不知道这个,特定任务会出错" → SKILL.md
CLAUDE.md 是"做人规矩",SKILL.md 是"专业知识"。
Phase 5:质量约束 — 三层有效性模型
核心洞见:约束 AI agent 的最有效手段不是"告诉它该做什么"(规则),
而是"让错误不可能发生"(结构)和"让正确路径最短"(摩擦)。
评分卡和 checklist 对 AI agent 基本无效 — agent 可以自评满分、自行打勾。
三层约束,按有效性排序
第一层:结构性消除 ─── 让错误源头不存在
│ 知识文件不放易变的代码值(枚举数字、方法签名精确参数)
│ 只放语义层内容(枚举名 + 业务含义、状态转换方向)
│ 效果:源头无错误数据 → agent 无从用错
│
第二层:降低正确路径摩擦 ─── 让正确行为比错误行为更省事
│ @source 锚点标注源码路径,agent 读知识文件时自然看到
│ "去 Read 源码"比"凭记忆猜"更省事 → 自然走正确路径
│ 效果:不是靠规则逼它验证,是让验证成为阻力最小的路
│
第三层:关键路径自动化检查 ─── 只卡最危险的口
lint 脚本检查最容易出事的模式(如 .setStatus() 出现在非 StatusService 中)
pre-commit hook 阻断违规提交
效果:不需要全覆盖,只拦截高危操作
无效手段(避免投入)
| 手段 | 为什么对 AI agent 无效 |
|---|---|
| 评分卡 | agent 自评,本质是自说自话 |
| 流程 checklist | agent 可自行打勾,无约束力 |
| “MUST verify” 文字协议 | 写在文件里的规则,agent 可以不遵守 |
| 验证分层协议(MAY/MUST) | 过度复杂,不如直接用 @source 锚点 |
投入优先级
第一步(Day 1):结构性消除 — 重构知识文件,删除缓存的代码值
第二步(Day 2):降摩擦 — 给易变小节加 @source 锚点
第三步(遇到问题时):自动化检查 — 对高危模式写 lint 脚本
不做的事比做的事更重要。不写评分卡、不写验证协议、不写 checklist。
Phase 6:持续精简 — 迭代修剪
精简三问法
对每个文件问:
Q1: 这个知识 LLM 本身就知道吗?
→ 是 → 删除(RICE 框架、SOLID 原则、设计模式教程)
Q2: 这个知识和具体项目有绑定吗?
→ 没有 → 删除(通用 UX 原则、通用安全 checklist)
Q3: 删掉这个文件,agent 产出质量会下降吗?
→ 不会 → 删除
合并判断标准
信号 1:完成一项任务需要读 3+ 个文件才能凑齐信息 → 合并
信号 2:两个文件有 30%+ 内容重叠 → 合并
信号 3:某个文件从未被 agent 引用 → 考虑删除
精简节奏
第 1 轮(项目启动 1 周后):
删除"写了但从没用过"的文件
第 2 轮(项目启动 1 月后):
用精简三问法逐文件审查
合并重叠的 skill 文件
统计各文件被引用频率
第 3 轮(每季度):
重新评估知识文件是否过期
检查 @source 锚点是否还指向正确路径
清理不再使用的角色 agent
反模式清单
| 反模式 | 为什么错 | 正确做法 |
|---|---|---|
| 教 LLM 它已经知道的 | 浪费 context window,降低信噪比 | 只写项目专属知识 |
| 在知识文件中缓存代码值 | 代码改了但文件没同步 → agent 用错值 | 用 @source 锚点,让 agent 去读源码 |
| 先设计完美架构再填内容 | 你不知道 agent 实际需要什么 | 最小启动集 + 按需扩展 |
| 用 checklist 约束 AI | AI 可以自行打勾,约束力为零 | 用自动化 lint 或验证协议 |
| 一个职责一个文件 | 过度碎片化,信噪比低,维护成本高 | 按"完成一项任务需要读几个文件"来组织 |
| 把通用框架当 skill | RICE、MoSCoW、OWASP Top 10 不需要教 | 只写项目中"用这个框架时的特殊规则" |
| 产品侧和技术侧同等投入 | AI agent 的核心价值在代码实现,不在管理流程 | 技术侧 > 知识库 > 产品侧 |
| 一次精简到位 | 没有使用数据支撑的精简是猜测 | 铺开 → 使用 → 观察 → 精简 → 循环 |
完整生命周期总结
Phase 1 领域建模 识别"只有你知道的" 产出:知识清单
Phase 2 架构设计 四层体系 + 最小启动集 产出:目录结构
Phase 3 内容编写 信任分层 + @source 锚点 产出:SKILL.md 文件
Phase 4 行为准则 CLAUDE.md 规则 + 验证协议 产出:CLAUDE.md
Phase 5 质量约束 从 L1 开始,遇到问题才往下加 产出:lint 脚本 / 评分卡
Phase 6 持续精简 精简三问 + 合并信号 + 季度审查 产出:更精简的文件集
核心循环:铺开 → 使用 → 观察 → 精简 → 铺开 ...
最终衡量标准:不是文件数量或行数,而是 agent 在你的项目中产出的代码质量。
如果加一个文件能让 agent 少犯一类错误 → 加。
如果删一个文件 agent 产出不变 → 删。
更多推荐


所有评论(0)