第十三章:可行动洞察:从中能学到什么
导读|读完这章能做什么
- 29 条建议按 7 类索引,对照自己的项目逐条检查
- 重点看 Prompt 工程和安全的 9 条
- 5 个核心要点作为设计原则
本章从 Claude Code 源码中提炼出具有实际参考价值的工程实践。
一、Prompt 工程 (5 条)
1. "先读后改"原则
Claude Code 的 prompt 反复强调: 修改代码前必须先读取。
自己的 Agent 也应该: 在任何修改操作前,强制模型先获取当前状态。
2. 反过度工程 Prompt
LLM 倾向于过度工程化 (加注释、提取函数、增加错误处理)。
Agent 需要: 明确告诉模型"只做被要求的事"。
3. 不暴力重试
LLM Agent 常见反模式: 遇到错误就无脑重试相同操作。
Agent 需要: prompt 中明确禁止,要求分析原因后尝试不同方法。
4. 权限不扩散
一次授权不等于永久授权。
Agent 需要: 每次敏感操作单独确认。
5. 动态 Prompt 组装
不要用一个巨大的静态 prompt。
Agent 应该: 分段缓存 + 动态拼装 + 按需注入上下文。
二、架构设计 (5 条)
6. 工具结果大小管理
这是 Agent 系统中常见的问题: 工具返回太多数据撑爆上下文。
解决方案: 设定 maxResultSize,超出存磁盘,只给模型摘要,内容哈希去重。
7. 上下文压缩策略
长对话必然超出 Token 限制。
三层方案:
- 手动压缩 (
/compact) - 自动压缩 (超阈值触发)
- 增量压缩 (只压缩新增部分)
8. 多层权限系统
Agent 安全不能只靠一层检查。
推荐架构: Deny → Allow → Hook → 分类器 → 用户确认
9. Feature Flags + 死代码消除
大型 Agent 项目需要管理大量实验性功能。
建议: 编译期 feature flags,未启用的功能不进入产物。
10. Context Object 模式
工具执行需要传递大量上下文。
建议: 单一上下文对象,方便子 Agent 上下文克隆。
三、多 Agent 协作 (4 条)
11. Fork Agent 的 Cache 共享
如果 Agent 需要生成子 Agent:保持子 Agent 的 system prompt 与父相同,利用 API 侧 prompt cache 节省成本。
12. Worker 工具集限制
后台 Agent 不应该有完整权限。
建议: 定义受限的工具子集,防止失控。
13. Scratchpad 模式
多 Agent 间数据交换: 通过共享目录 (Scratchpad) 而不是消息传递。更高效,支持大数据量。
14. 任务自动转后台
长时间运行的任务不应阻塞用户交互。
建议: 超时后自动转后台 + 完成通知。
四、用户体验 (4 条)
15. 权限疲劳检测
频繁弹权限确认会让用户烦躁。
建议: 检测连续拒绝模式,升级为批量权限请求。
16. 流式输出 + 进度反馈
工具执行超过 2 秒就应显示进度。
建议: 流式回调 + 进度指示器。
17. 命令语义折叠
安全的搜索/读取命令可以在 UI 中折叠。
建议: 基于命令语义分类决定 UI 展示粒度。
18. 多语言自适应
检测用户语言,用相同语言回复。
建议: system prompt 中包含语言偏好段。
五、性能优化 (4 条)
19. 并行预取
CLI 启动时将可并行的 I/O 提前到 import 解析之前。
建议: 不要等模块加载完才发起网络请求。
20. 懒加载重型模块
OpenTelemetry、React 组件、分析模块等按需加载。
建议: 只在首次使用时加载重型依赖。
21. Memoized Prompt Sections
System prompt 段按需计算,缓存到显式清除。
建议: 将 prompt 分为静态和动态部分,分别缓存。
22. Git 状态快照
会话内不更新 Git 状态,避免缓存失效。
权衡: 实时性 vs 性能,Claude Code 选择了性能。
六、记忆系统 (3 条)
23. 分层记忆架构
MEMORY.md (索引, 200行限制)
└── 子文件 (详细内容, 按主题组织)
└── Agent 记忆 (user/project/local 三级)
24. 记忆漂移保护
记忆可能过期,prompt 要求模型使用前先验证。
建议: 在 prompt 中明确要求 "verify before acting on memories"。
25. 自动记忆提取
不依赖用户主动说"记住这个",自动从对话中提取。
建议: 会话结束时运行记忆提取流程。
七、安全 (4 条)
26. Bash AST 级分析
不是正则匹配命令字符串,而是解析 Bash AST。
优势: 不会被简单的字符串混淆绕过,理解管道、重定向、子 shell。
27. 分类器 + 人工双重审核
ML 分类器作为第一道过滤: 高置信度 → 自动决策,低置信度 → 上报用户。
28. 沙盒执行
Bash 命令在沙盒中执行,限制文件系统和网络访问。
建议: 任何执行外部代码的 Agent 都应考虑沙盒。
29. 设备文件阻止
阻止读取 /dev/zero 等设备文件。
要点: 安全防护需要考虑边缘情况。
总结: 5 个核心要点
1. Prompt 是产品。 Claude Code 的 prompt 不是随手写的,而是经过大量迭代的产品工件。投入与代码同等的精力在 prompt 上。
2. 安全是多层的。 单点安全检查不够。需要 Deny → Allow → Hook → Classifier → User 的决策链。
3. 上下文是有限的。 工具结果管理、压缩策略、磁盘持久化——围绕"上下文窗口有限"这个核心约束的一整套工程。
4. 子 Agent 需要隔离。 权限隔离、工具集限制、上下文隔离——子 Agent 不应继承父的全部能力。
5. 性能源于架构。 并行预取、懒加载、缓存分段、prompt cache 共享——性能不是事后优化,而是架构内建。