原文地址: https://minusx.ai/blog/decoding-claude-code/
核心理念
保持简单(Keep Things Simple) - 这是最重要的原则。LLM 本身就很难调试和评估,任何额外的复杂性(多代理、代理切换或复杂的 RAG 搜索算法)只会让调试难度增加 10 倍。
一、控制循环设计
1.1 保持单一主循环
- 避免多代理系统:尽管多代理很流行,但 Claude Code 只使用一个主线程
- 最多一层分支:只在复杂任务时创建一个子代理(不能再创建子代理),结果会添加回主消息历史
- 扁平化消息历史:维护一个简单的消息列表,便于调试
- 原因:每增加一层抽象都会让系统更难调试,并偏离通用模型改进的轨道
1.2 大量使用小型模型
- 超过 50% 的重要调用使用 Claude-3.5-Haiku
- 应用场景:读取大文件、解析网页、处理 git 历史、总结长对话、生成单词标签(每次按键都用!)
- 成本优势:小模型比标准模型便宜 70-80%,可以大量使用
二、提示词设计
2.1 使用 claude.md 协作管理用户偏好
- 上下文文件:类似 Cursor Rules/agent.md
- 作用:让开发者传达无法从代码库推断的上下文,明确用户偏好
- 示例:强制 LLM 跳过某些文件夹或使用特定库
- 效果:有无 claude.md 的性能差异巨大
2.2 使用 XML 标签、Markdown 和大量示例
关键 XML 标签:
-
<system-reminder>: 提醒 LLM 容易遗忘的事项 -
<good-example>和<bad-example>: 对比正确和错误的做法,明确偏好路径
Markdown 结构化:使用标题组织系统提示(语气风格、主动性、遵循约定、代码风格、任务管理等)
提示词规模:
- 系统提示:~2800 tokens
- 工具描述:~9400 tokens
- claude.md:1000-2000 tokens
三、工具设计
3.1 LLM 搜索 >>> RAG 搜索
- 方法:使用复杂的 ripgrep、jq 和 find 命令直接搜索,就像人类开发者一样
-
优势:
- 避免 RAG 的隐藏故障模式(相似度函数、重排序、代码分块等问题)
- 可以像人类一样查看 10 行理解结构,需要时再看更多
- 可通过强化学习改进
- 减少系统复杂度
- 比喻:这是 LLM 时代的"相机 vs 激光雷达"之争
3.2 低级 vs 高级工具的选择
权衡标准:工具使用频率 vs 使用准确性
Claude Code 的工具层次:
- 低级:Bash, Read, Write
- 中级:Edit, Grep, Glob
- 高级:Task, WebFetch, exit_plan_mode
设计原则:
- 高频使用的操作应该有专门的工具(如 Grep、Glob)
- 特殊场景仍可使用通用 bash 命令
- 高级工具用于确定性强的操作,避免多次低级操作
工具列表:Task, Bash, Glob, Grep, LS, ExitPlanMode, Read, Edit, MultiEdit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, mcp__ide__getDiagnostics, mcp__ide__executeCode
3.3 让代理管理自己的待办事项
优势:
- 解决上下文衰减问题(长期运行的代理容易偏离目标)
- 保持 LLM 专注(提示词要求频繁参考待办列表)
- 保持灵活性:允许代理中途调整方向
- 利用模型的交错思考能力动态调整待办项
对比:优于多代理切换+验证模式(PRD/PM → 实现 → QA)
四、可控性
4.1 语气和风格
- 系统提示中专门有关于语气、风格和主动性的章节
-
示例规则:
- 不要不必要的开场白或结束语
- 不要添加额外的代码解释总结
- 拒绝帮助时不要说明原因(显得说教和烦人)
- 除非明确要求,否则不使用表情符号
4.2 "这很重要"仍是最先进方法
- 使用 IMPORTANT、VERY IMPORTANT、NEVER、ALWAYS 等强调词
-
示例:
- "IMPORTANT: 不要添加任何注释,除非被要求"
- "VERY IMPORTANT: 必须避免使用
find和grep,改用 Grep、Glob 或 Task" - "IMPORTANT: 永远不要猜测 URL"
4.3 编写算法(含启发式规则和示例)
关键做法:
- 识别 LLM 需要执行的最重要任务
- 为其编写明确的算法流程
- 使用流程图形式组织决策点
- 避免:一堆无组织的"做什么"和"不做什么"列表
Claude Code 的实践:任务管理、执行任务和工具使用策略章节清晰地描述了算法流程,包含大量启发式规则和场景示例。
额外收获:为什么关注大公司的提示词?
- 帮助逆向工程 LLM 的后训练/RLHF 数据分布
- 了解最佳实践:使用 JSON 还是 XML?工具描述放在哪?
- Claude Code 的设计非常有主见,可以参考借鉴
总结
再次强调核心原则:保持简单。过度的脚手架框架弊大于利。Claude Code 证明了"代理"可以既简单又极其强大。
关键教训是减少活动部件,让 LLM 承担大部分重任,建立良好的模型约束,然后让它发挥作用。这种端到端的方法是否会像自动驾驶领域一样最终胜出?值得关注。