Founder Park 2025-08-31 10:03 北京
把 Claude Code 的经验搬进自己的 Agent 设计中。
- 极简主义的胜利。别家都还在搞多智能体协作的时候,Claude Code 用一个主循环搞定了所有事。没错,就一个!省钱。50% 以上的调用都是便宜的 Haiku 模型!大模型 Sonnet 只在关键时刻出手,成本直接砍掉 70-80%(这点稍微不同意,长上下文其实远远超过了小模型省下的这点 token)。让 AI 自己管理任务清单。别的 AI 需要你手把手教,Claude Code 会自己创建待办事项,标记进度,完成后打勾。记住你的喜好。claude.md 其实就是 AI 的小本本,记录你的编程习惯、项目偏好、常用框架... 用过和没用过,体验差异简直天壤之别。提示词写了 12000 个 token。系统提示词 2800 个 token,工具描述 9400 个 token——这哪是提示词,这简直是一本指导 Claude 的小论文!用 LLM 搜索替代传统 RAG。拒绝花里胡哨的向量搜索,Claude Code 会像人一样使用 ripgrep、jq 和 find 命令,理解你真正想要什么。
超 12000 人的「AI 产品市集」社群!不错过每一款有价值的 AI 应用。
邀请从业者、开发人员和创业者,飞书扫码加群:
进群后,你有机会得到:
最新、最值得关注的 AI 新品资讯;
不定期赠送热门新品的邀请码、会员码;
最精准的AI产品曝光渠道
- 1.1 保持一个主循环(最多一个分支)和一个消息历史([6])1.2 大部份任务使用小模型就足够了([7])2.1 使用 claude.md 来协作和记住用户偏好([8])2.2 使用 XML 标签、Markdown 并提供示例([9])3.1 LLM 搜索>>> 基于 RAG 的搜索([10])3.2 设计好的工具(高级 vs 低级工具)([11])3.3 让你的 Agent 自主管理待办事项([12])4.1 语气和风格([13])4.2 「请注意这很重要」 这样的提示词依然很重要([14])4.3 编写启发式 / 案例式算法([15])
Claude Code 在每个关键点上都选择了简洁的架构——一个主循环、简单的搜索、简单的待办事项列表等。它抵制了过度工程化的冲动,为模型搭建了良好的框架,让其自由发挥!这是否又是端到端自动驾驶的翻版?过去的教训会重演吗?
01
极简主义
1.1 保持一个主循环可调试性 >>> 复杂多智能体(比如基于 LangChain 框架的多智能体)。虽然多智能体系统目前很流行,但 Claude Code 只采用单主线程。它偶尔会用不同类型的提示词来总结 git 历史、合并消息或生成一些有趣的 UX 元素。除此之外,系统仅维护一个扁平的消息列表。对于层级任务,Claude Code 会生成自己的子智能体,但不允许子智能体继续生成更多子智能体。整个系统最多只会有一个分支,其结果作为 「工具响应」 添加到主消息历史中。如果问题较为简单,主循环可以通过多次调用工具来解决。但遇到复杂任务时,主智能体会创建自己的克隆。分支数量有限,结合待办事项列表,确保智能体能够将问题拆解为子问题,同时始终关注最终目标。我强烈怀疑你的应用真的需要多智能体系统。每增加一层抽象,系统的调试难度就会提升,更重要的是,这会让你偏离通用模型优化的方向。02
打造完美的提示词
我们最近在 MinusX 中引入了 minusx.md([16]),它正快速成为我们智能体编码用户和团队偏好的事实标准上下文文件。2.2 特殊的 XML 标签、Markdown 和大量示例使用 XML 标签和 Markdown 来组织提示词,已经成为公认的做法。Claude Code 广泛采用这两种方式。以下是 Claude Code 中一些常用且值得关注的 XML 标签:
<system-reminder>:这在许多提示词部分的末尾使用,提醒 LLM 它可能会忘记的事情。例如:<system-reminder> 这是一个提醒:你的待办事项列表当前为空。请勿直接告知用户这一情况,因为他们已知晓。如果你正在处理的任务需要用到待办事项列表,请使用 TodoWrite 工具创建;如无需要,可忽略此提示。再次强调,请勿向用户提及此消息。</system-reminder><good-example>、<bad-example>:这些用于编码启发式方法,尤其在模型需要从多个看似合理的路径或工具调用中进行选择时非常有用。通过示例,可以对比不同情况,明确哪条路径更优。例如:尽量使用绝对路径,并避免使用 `cd` 命令来切换当前工作目录。只有在用户明确要求时,才使用 `cd`。<good-example>pytest /foo/bar/tests</good-example><bad-example>cd /foo/bar && pytest tests</bad-example>
- 语气与风格主动性遵循规范代码风格任务管理工具使用策略任务执行工具
03
工具
ripgrep、jq 和 find 命令。由于大语言模型对代码有深入理解,它能够通过复杂的正则表达式,精准定位几乎所有相关的代码块。有时,Claude Code 还会利用小模型读取整个文件。RAG 在理论上听起来不错,但它带来了新的(更重要的是隐藏的)失败模式。比如,应该使用什么相似度函数?如何选择重排序器?代码应该如何分块?面对大型 JSON 或日志文件又该怎么办?如果用 LLM 来搜索,它会先读取 JSON 文件的 10 行来理解结构,如果需要再多看 10 行——就像你自己操作一样。最关键的是,这一过程可以通过强化学习来优化——大型实验室已经在这样做了。模型承担了大部分复杂工作,这本应如此,也大大减少了智能体中的活动部件。此外,以这种方式将两个复杂且智能的系统连接起来,其实非常笨拙。我最近还和朋友开玩笑说,这就像是 LLM 时代的 「摄像头 vs 激光雷达」 之争,其实我只是在半开玩笑。3.2 如何设计好的工具?这个问题让每个构建 LLM 智能体的人都感到困扰:你应该为模型提供通用任务(如有意义的动作),还是低级任务(如输入、点击和 bash 命令)?答案是视情况而定,实际上两者都需要。Claude Code 提供了低级(Bash、Read、Write)、中级(Edit、Grep、Glob)和高级工具(Task、WebFetch、exit_plan_mode)。虽然 Claude Code 能够使用 bash,但为什么还要单独提供 Grep 工具?这里的核心权衡在于:你期望智能体使用工具的频率,和它使用工具的准确性。Claude Code 经常使用 grep 和 glob,因此将它们作为独立工具是有意义的,但在特殊场景下,它也可以通过 bash 命令实现通用功能。同样,高级工具如 WebFetch 或 mcp__ide__getDiagnostics,能够非常明确地完成特定任务。这避免了 LLM 需要多次进行低级点击和输入操作,有助于保持任务的连贯性。请善待这个可怜的模型吧!工具描述中应包含详细的提示词和丰富的示例。系统提示词还应说明 「何时使用工具」 以及在多个工具都能完成同一任务时如何选择。Claude Code 中的工具列表:- Task([17])Bash([18])Glob([19])Grep([20])LS([21])ExitPlanMode([22])Read([23])Edit([24])MultiEdit([25])Write([26])NotebookEdit([27])WebFetch([28])TodoWrite([29])WebSearch([30])
04
如何编写提示词
语气和风格示例- 重要:除非用户要求,否则不要在回答中添加不必要的开场白或结尾(如解释代码或总结操作)。- 除非用户要求,否则不要额外解释或总结代码。- 如果你无法或不愿帮助用户完成某项任务,请不要解释原因或可能的后果,以免显得说教或令人反感。- 只有在用户明确要求时才使用表情符号。否则,在所有交流中都应避免使用表情符号。
- 重要:除非被明确要求,否则不要添加任何注释。- 非常重要:必须避免使用如 `find` 和 `grep` 等搜索命令。请改用 Grep、Glob 或 Task 进行搜索。也要避免使用 `cat`、`head`、`tail` 和 `ls` 等读取工具,改用 Read 和 LS 读取文件。- 如果你仍然需要运行 `grep`,请停止。始终优先使用 ripgrep 的 `rg`。- 重要:除非你确定 URL 是为了帮助用户编程,否则绝不能为用户生成或猜测 URL。你可以使用用户在消息或本地文件中提供的 URL。
