5.2 反模式与防御金字塔
九种失败模式讲了「什么会出错」。这一节讲「为什么会出错」以及「怎么防」。
区分:失败模式是 Agent 写的代码出了问题(Agent 的问题),反模式是你和 Agent 互动的方式出了问题(你的问题)。反模式会放大失败模式——互动方式越错,代码质量越差。
六种实用反模式
反模式一:假设 Agent 理解了你的意图 🚫
小李:帮我优化一下这个页面
Agent:(优化了 CSS 动画)
小李:不是,我要的是优化性能
Agent:(优化了图片加载)
小李:也不是,我要的是优化用户体验问题:「优化」这个词太模糊了。Agent 会按自己的理解去「优化」,而它的理解通常和你不一样。
正确做法:提供精确的上下文——"优化首页加载速度,目标是 LCP 从 3s 降到 1.5s 以内"。
反模式二:在死胡同里坚持 🚫
小李:这段代码有个 Bug,帮我修
Agent:(尝试修了 3 次,每次都引入新问题)
小李:再试一次
Agent:(第 4 次尝试,还是不行)
小李:继续
……问题:连续 2-3 次修正失败后,Agent 的上下文已经被错误尝试污染,继续尝试只会更差。
正确做法:失败 2-3 次后,开新对话,换一种方式描述问题,或者人工介入定位。
反模式三:浪费 Token 在探索上 🚫
小李:帮我理解这个项目
Agent:(花了 50 步探索整个项目结构)问题:让 Agent 自己探索整个项目效率很低。你应该先定位关键文件,再让 Agent 分析。
正确做法:人类先花 2 分钟浏览项目结构,告诉 Agent "重点看 src/routes/ 和 src/models/",Agent 就能更快进入正题。
反模式四:接入太多 MCP Server 🚫
问题:每个 MCP Server 都是工具选项,选项越多,Agent 的决策越困难。而且每个 Server 都是安全风险点。
正确做法:只连接当前任务需要的 Server,按场景分组——开发场景用一组,部署场景用另一组。
反模式五:记忆文件过度膨胀 🚫
问题:CLAUDE.md / .cursorrules 里塞了太多信息,大部分对当前任务无用,反而干扰 Agent 决策。
正确做法:只保留真正需要持久化的信息——项目规范、技术栈、关键约束。定期清理过时内容。
反模式六:忠于单一工具/模型 🚫
问题:没有一款工具在所有场景下都是最优解。忠诚于单一工具意味着在某些场景下接受次优结果。
正确做法:根据任务特点选择工具。搜索用 Explore,创意用 Claude,批量操作用 Agent。
Simon Willison 的审查原则
知名开发者 Simon Willison 提出了几条 Agent 审查原则:
核心原则
- 永远不要不经审查就提交 Agent 生成的 PR
- 仍然要拆分小 PR——Agent 生成的也是代码,大 PR 同样难以审查
- PR 必须包含上下文和测试证据——Agent 的决策摘要、测试截图、哪些是 Agent 做的、哪些是人改的
Willison 的核心洞察:Agent 擅长实现,不擅长判断。它能把 80% 的活干完,但剩下 20% 的审查和判断必须由人类完成。
防御金字塔
把所有防御措施从底层到顶层排列,形成防御金字塔:
第 1 层:工具选择与配置
选择合适的工具,配置正确的权限。
- 只连接需要的 MCP Server
- 设置三级权限体系(自动/确认/禁止)
- 配置只读连接用于敏感操作
第 2 层:架构与上下文
在 CLAUDE.md / .cursorrules 中写清楚项目规范。
- 技术栈和约定
- 安全约束("禁止操作生产数据库")
- 代码风格规范
- 哪些模式不能用、哪些必须用
第 3 层:标准与约束
用 Skill / Rule 定义 Agent 的行为标准。
- 代码修改后必须跑测试
- 错误处理必须记录日志
- 安全相关代码必须人工审查
第 4 层:自动化测试
测试是 Agent 的安全网。
- 单元测试覆盖核心逻辑
- 集成测试验证端到端流程
- 安全扫描检测注入和漏洞
第 5 层:人工审查
最后一道防线,不可跳过。
- 审查 Agent 的执行轨迹
- 验证关键操作的输出
- 检查安全和业务逻辑
防御的成本
防御不是免费的。每增加一层防御,就增加一些成本:
| 防御层 | 时间成本 | 效果 |
|---|---|---|
| 工具配置 | 一次性 30 分钟 | 减少 30% 的问题 |
| 项目规范 | 一次性 1-2 小时 | 减少 40% 的问题 |
| Skills/规则 | 每个 15-30 分钟 | 减少 20% 的问题 |
| 自动化测试 | 持续投入 | 减少 80% 的回归问题 |
| 人工审查 | 每次任务 10-30 分钟 | 捕获 95%+ 的问题 |
投入建议
前两层(工具配置 + 项目规范)是必须的,投入小收益大。第三层按需添加。第四层(自动化测试)长期来看最划算。第五层不可跳过。
本节核心要点
- 失败模式 = Agent 代码问题;反模式 = 你与 Agent 互动问题;反模式会放大失败模式
- 6 种反模式:意图模糊、死胡同坚持、浪费 Token 探索、MCP 过多、记忆膨胀、忠于单工具
- Willison 原则:Agent 做 80%,人做 20% 审查
- 防御金字塔五层:工具配置 → 项目规范 → Skills/规则 → 自动化测试 → 人工审查
- 前两层是必须投入的,最后一层不可跳过
思考题:检查你当前的项目,防御金字塔的每一层你做到了几层?最薄弱的是哪一层?
下一节预告:理论够多了,来看看真实世界——好的 Agent 和坏的 Agent 到底长什么样?