Claude Code 为什么如此优秀,以及如何在你的代理中重现其魔力。
MinusX 基于对 Claude Code 的使用经验和日志分析,探讨了 Claude Code(一款 AI 编码代理工具)为什么使用起来如此愉快和高效,并提供构建类似 LLM(大语言模型)代理的实用指南。
核心观点是:
Claude Code 的成功源于其简单性、针对模型优缺点的设计,以及对 LLM 的巧妙引导。作者强调“保持简单”(Keep Things Simple),避免多代理系统或复杂框架,以提升可调试性和鲁棒性。
TL;DR
- 保持简单:LLM 本身就难调试,避免多代理、复杂 RAG(检索增强生成)或过度工程化。将一切放在一个文件中,便于迭代和重构。
- 关键实现:采用一个主控制循环;使用小模型(如 Claude-3-5-Haiku)处理 50% 以上的任务(如读取文件、总结历史),节省成本;详细提示(prompts)和工具设计;增强可操控性(steerability)。
- 总体哲学:像端到端自动驾驶一样,让模型承担重任,遵循“苦涩教训”(Bitter Lesson)——依赖模型的通用改进而非复杂架构。
一. 控制循环设计(Control Loop Design)
- 单一主循环:Claude Code 只用一个主线程,避免多代理系统的复杂性。消息历史保持平坦列表;对于复杂任务,通过创建“子代理”(最多一个分支)处理子问题,结果合并回主历史。这确保了可调试性和对最终目标的专注。
- 使用小模型:如 Haiku 处理文件读取、网页解析、Git 历史总结和实时标签生成,成本低 70-80%,效率高。
二. 提示设计(Prompts)
- 详细系统提示:约 2800 令牌长,包含语气、风格、主动性、任务管理、工具使用政策等部分。附加工具描述达 9400 令牌,用户提示总是包含 claude.md 文件(1000-2000 令牌),提供日期、目录、OS 等上下文。
- claude.md 文件:用于协作用户上下文和偏好(如忽略某些文件夹、使用特定库)。MinusX 引入类似 minusx.md,提升性能。
- 结构化技巧:使用 XML 标签(如 提醒模型、 和 对比示例)和 Markdown 标题(如“Tone and style”、“Tool use policy”)来组织提示。包含大量启发式规则和示例,帮助模型决策。
三. 工具设计(Tools)
- 拒绝 RAG,转向 LLM 搜索:不使用向量搜索,而是让模型像人类一样用 ripgrep、jq、find 等命令搜索代码。这减少了隐藏故障(如相似度函数问题),并利用模型的代码理解能力。更易于 RL(强化学习)优化。
- 工具层级:结合低级(Bash、Read、Write)、中级(Edit、Grep、Glob)和高级工具(Task、WebFetch、exit_plan_mode)。高级工具确定性强,减少模型的多步操作。工具描述包含详细示例和使用时机指导。
- 代理管理 Todo 列表:模型自己维护 Todo 列表(用 TodoWrite 工具),防止上下文丢失和任务偏离。比多代理切换更灵活,利用模型的交错思考(interleaved thinking)动态调整。
四. 可操控性(Steerability)