<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Claude Code on 姚玉亮的网络日志</title><link>https://yusanwen-code.github.io/tags/claude-code/</link><description>Recent content in Claude Code on 姚玉亮的网络日志</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><lastBuildDate>Sun, 30 Aug 2026 18:00:00 +0800</lastBuildDate><atom:link href="https://yusanwen-code.github.io/tags/claude-code/index.xml" rel="self" type="application/rss+xml"/><item><title>高低模型分工：用最少的 token 做最难的任务</title><link>https://yusanwen-code.github.io/posts/post-74/</link><pubDate>Sun, 30 Aug 2026 18:00:00 +0800</pubDate><guid>https://yusanwen-code.github.io/posts/post-74/</guid><description>&lt;img src="https://yusanwen-code.github.io/images/post-74-cover.jpg" alt="Featured image of post 高低模型分工：用最少的 token 做最难的任务" /&gt;&lt;h2 id="我最初的做法高模型出计划低模型执行"&gt;我最初的做法：高模型出计划，低模型执行&#10;&lt;/h2&gt;&lt;p&gt;在炼丹炉（&lt;a class="link" href="https://github.com/yusanwen-code/alchemy-furnace" target="_blank" rel="noopener"&#10; &gt;Alchemy Furnace&lt;/a&gt;，我的开源项目）上开发大功能时，我的模型分工一开始是这样的：高模型出计划，低模型去试执行。逻辑听起来无懈可击：计划是最费脑子的活，给最强模型；执行是照着做，给便宜模型省 token。&lt;/p&gt;&#10;&lt;p&gt;跑了几轮之后我意识到，这不是最佳实践：省下的 token 在别的地方加倍还了回去。坑在哪、后来怎么分，一条条说。&lt;/p&gt;&#10;&lt;h2 id="三个坑为什么计划高执行低不够"&gt;三个坑：为什么&amp;quot;计划高、执行低&amp;quot;不够&#10;&lt;/h2&gt;&lt;p&gt;坑一：计划里的任务难度不均。&lt;/p&gt;&#10;&lt;p&gt;一个实施计划拆出来的任务，难度天差地别。同一个计划里，既有&amp;quot;写一个纯函数渲染器&amp;quot;这种机械活，也有&amp;quot;设计 SSRF 校验 + 提供者熔断 + 证据等级判定&amp;quot;这种高难活。一刀切全丢给低模型，难任务在低模型手里反复试错，每次失败都是一轮&amp;quot;试错 + 看错误 + 再试&amp;quot;，token 没省多少，时间翻倍，最后往往还是得升级。&lt;/p&gt;&#10;&lt;p&gt;坑二：低模型失败没有出口。&lt;/p&gt;&#10;&lt;p&gt;低模型试了，失败了，然后呢？如果升级路径不存在，低模型只有两个选项：硬编一个成功（最危险，测试都可能一起编出来），或者卡死空转。我早期踩过前者，代价是返工整个文件。&lt;/p&gt;&#10;&lt;p&gt;坑三：验证被一起降级了。&lt;/p&gt;&#10;&lt;p&gt;执行降级了，自测也跟着降级：低模型自己测自己，绿灯也不能全信。判断性工作（&amp;ldquo;这样测算不算数&amp;rdquo;）和机械性工作（&amp;ldquo;跑一遍测试&amp;rdquo;）不是一回事，不能一起降级。&lt;/p&gt;&#10;&lt;p&gt;模型分级的问题不在&amp;quot;分级&amp;quot;本身，而在分级的依据：按角色分（计划/执行）是错的，按难度分（任务）才对。&lt;/p&gt;&#10;&lt;h2 id="正确框架按难度分级--三个旋钮"&gt;正确框架：按难度分级 + 三个旋钮&#10;&lt;/h2&gt;&lt;p&gt;Claude Code 的 Workflow 里每个子 Agent 可以独立指定模型档位和努力度，这就是三个旋钮：&lt;/p&gt;&#10;&lt;p&gt;旋钮一：模型档位。高（Opus）/ 中（Sonnet）/ 低（Haiku）。&lt;/p&gt;&#10;&lt;p&gt;旋钮二：努力度（effort）。从 low 到 max。很多任务根本不用换模型：同一个模型把 reasoning 预算拧低，就是廉价版本。换模型是换&amp;quot;能力上限&amp;quot;，调 effort 是调&amp;quot;用力程度&amp;quot;，两回事。&lt;/p&gt;&#10;&lt;p&gt;旋钮三：任务边界清晰度。这是最便宜的杠杆：spec 拆得越细、验收标准写得越死，任务越接近&amp;quot;机械执行&amp;quot;，能用的模型档位就越低。&lt;/p&gt;&#10;&lt;p&gt;我的任务分配表：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;难度&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;模型&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;例子&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;判断型&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;高模型 + 高 effort&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;需求探索与脑暴、接口契约设计、代码评审、根因定位、安全核对&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;常规型&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;中模型 + 中 effort&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;常规功能实现、测试编写、中等重构、普通调试&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;机械型&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;低模型 + low effort&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;模板化改动、纯函数实现、i18n 文案、跑测试与验证&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;img alt="按难度分级的三个模型档位与三个旋钮" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://yusanwen-code.github.io/images/post-74-tiers.svg"&gt;&lt;/p&gt;&#10;&lt;h2 id="用最少的-token-做最难的任务"&gt;用最少的 token 做最难的任务&#10;&lt;/h2&gt;&lt;p&gt;说白了就一条：把大部分任务变简单，让高模型 token 只花在&amp;quot;决定&amp;quot;上，不花在&amp;quot;执行&amp;quot;上。&lt;/p&gt;&#10;&lt;p&gt;几个真实管用的杠杆：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;计划是高模型性价比最高的投资。计划阶段多花的高模型 token，换来的是执行阶段任务边界清晰、可降级给便宜模型。这是&amp;quot;1 单位的贵，换 100 单位的省&amp;quot;。不是精确数字，是量级感受。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;低模型任务必须满足三个条件，缺一不可：&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;边界明确：任务描述到文件级，依赖关系写清&lt;/li&gt;&#10;&lt;li&gt;测试兜底：TDD 红→绿，失败能被测试抓住&lt;/li&gt;&#10;&lt;li&gt;终止条件：做不了就停，明确写&amp;quot;连续失败就停止报告，不许编成功&amp;quot;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;第三条最重要。我在炼丹炉的 Workflow 脚本里给每个子 Agent 都注入了终止条件段（A3：文件不存在、依赖无法确认、连续 3 次修复失败，立即停止报告）。允许低模型说&amp;quot;我卡住了&amp;quot;，比让它硬编一个成功安全一个量级。&lt;/p&gt;&#10;&lt;ol start="3"&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;升级路径要显式。低模型失败不是终点：带着&amp;quot;红测试 + 尝试过程 + 卡点描述&amp;quot;升级给高模型。高模型拿到的是完整上下文，一次到位给解法或改计划，而不是重新摸底。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;评审和验证分开降级。跑回归（机械）可以低模型；安全核对、代码评审（判断）留给高模型。炼丹炉的验收任务里，回归和&amp;quot;ZIP 解压检查有没有泄露 key&amp;quot;是两件事：前者低模型跑，后者高模型过。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="炼丹炉实例一个计划怎么分"&gt;炼丹炉实例：一个计划怎么分&#10;&lt;/h2&gt;&lt;p&gt;以女娲蒸馏 + Skill 导出的开发为例（6 个任务、4 个波次）：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;计划本身（文件级任务清单）：高模型出。这是唯一一个&amp;quot;必须先花&amp;quot;的成本。&lt;/li&gt;&#10;&lt;li&gt;Task3 Skill 渲染器：纯函数、格式明确（slug 规则、SKILL.md 结构、ZIP 命名全写死）、测试完备，典型的机械型任务，低模型 + low effort 就能扛。&lt;/li&gt;&#10;&lt;li&gt;Task2 Python 蒸馏链路：SSRF 校验、来源熔断、证据等级判定，属于判断与工程混合，配中模型 + 中高 effort，比低模型反复试错便宜得多。&lt;/li&gt;&#10;&lt;li&gt;Task6 端到端验收：回归跑测低模型，产物安全核对（解压查 sk-、token、内部日志）高模型。&lt;/li&gt;&#10;&lt;li&gt;A3 终止条件：给每个&amp;quot;低模型试&amp;quot;的任务一个明确出口，试不动就停，升级。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="收尾"&gt;收尾&#10;&lt;/h2&gt;&lt;p&gt;用下来我的感觉是：判断性的活给最贵的模型，机械的活给最便宜的；任务写得清就可以降档，失败超过两次就升级，别耗着。&lt;/p&gt;&#10;&lt;p&gt;模型分级省的不是高模型的钱，是浪费在错模型上的钱。最难的活依然要最贵的模型，但反过来也成立：大部分活之所以难，是因为你没把它写清楚。把任务写清楚，是高模型 token 花得最值的地方。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;封面图：&lt;a class="link" href="https://commons.wikimedia.org/wiki/File:Clock_gears_in_the_St_Maximus_church_in_Magnac-Laval_02.jpg" target="_blank" rel="noopener"&#10; &gt;Krzysztof Golik / Wikimedia Commons&lt;/a&gt; · CC BY-SA 4.0&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;</description></item><item><title>复杂任务的快速实现：我的 Claude Code 工作流</title><link>https://yusanwen-code.github.io/posts/post-72/</link><pubDate>Thu, 27 Aug 2026 21:00:00 +0800</pubDate><guid>https://yusanwen-code.github.io/posts/post-72/</guid><description>&lt;img src="https://yusanwen-code.github.io/images/post-72-cover.jpg" alt="Featured image of post 复杂任务的快速实现：我的 Claude Code 工作流" /&gt;&lt;h2 id="复杂任务为什么难"&gt;复杂任务为什么难&#10;&lt;/h2&gt;&lt;p&gt;先说结论：复杂任务难的不是写代码，是下面四件事。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;需求模糊：说需求的人自己都没想清楚。&amp;ldquo;文档核验要留痕&amp;rdquo;，留什么痕？按什么查？入口放哪？全要靠推。&lt;/li&gt;&#10;&lt;li&gt;代码陌生：改的不是自己写的代码库，路由注册在哪、DAO 怎么组织、有没有现成的组件，一无所知。&lt;/li&gt;&#10;&lt;li&gt;链路长：一个需求横跨后端服务、管理后台、上层服务三个仓库，联调对不上是常态。&lt;/li&gt;&#10;&lt;li&gt;步骤多：建表、写记录、加接口、做页面、上层同步，十几步里漏掉任何一步，都要返工。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;过去我处理复杂任务靠&amp;quot;经验 + 加班&amp;quot;：经验让我少踩坑，加班补上流程损耗。现在我用 Claude Code 的 workflow 跑，发现上面四类复杂度可以分别拆掉。&lt;/p&gt;&#10;&lt;h2 id="一需求模糊先探索再一次一个问题"&gt;一、需求模糊？先探索，再一次一个问题&#10;&lt;/h2&gt;&lt;p&gt;需求模糊是复杂任务的第一个坑，也是最贵的坑：设计错了，后面全白做。&lt;/p&gt;&#10;&lt;p&gt;我的做法是两段式：先让 AI 探索代码，再让它一次只问一个问题。&lt;/p&gt;&#10;&lt;p&gt;拿最近一个&amp;quot;核验记录&amp;quot;需求举例。AI 先翻了两个仓库，带回几个关键事实：文档表上已经有&amp;quot;核验状态&amp;quot;字段，核验逻辑集中在文档服务的一个方法里，前端代码里已经有现成的下拉加载 hook。这些事实直接改变了设计：记录表和状态字段是两回事，但很多人第一版会把它们混在一起。&lt;/p&gt;&#10;&lt;p&gt;然后进入提问环节，一次一个问题：&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;我：核验记录存哪些字段？&#10;AI：除了核验人和核验时间，要不要存版本号？这决定表结构。&#10;我：先只存核验人和核验时间。&#10;AI：好。那列表按数据集 ID 过滤、分页返回，对吗？&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;每个答案都在修正下一个问题。一次抛十个问题，AI 只能靠猜排优先级，猜错一半就得返工。模糊需求最怕的不是问得少，而是问得乱。&lt;/p&gt;&#10;&lt;h2 id="二代码陌生子代理并行探索"&gt;二、代码陌生？子代理并行探索&#10;&lt;/h2&gt;&lt;p&gt;复杂任务往往意味着大型代码库。让主会话把每个文件都读一遍，上下文直接爆炸；不让它读，问的问题全是空对空。&lt;/p&gt;&#10;&lt;p&gt;我用子代理解决：只读的探索型子代理，各自负责一个方向，跑完只把结论带回来。&lt;/p&gt;&#10;&lt;p&gt;还是那个需求。两个仓库，我开了两个子代理并行：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;一个查后端：核验逻辑在哪个方法里？用什么 ORM？表结构长什么样？&lt;/li&gt;&#10;&lt;li&gt;一个查前端：数据管理页面结构？有没有现成的分页/下拉加载组件？&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;主会话的上下文只收到两条结论，干净利落。复杂任务拆给子代理，等于给主会话外挂了好几个只读大脑。&lt;/p&gt;&#10;&lt;h2 id="三步骤多用-spec-锚定用计划兜底"&gt;三、步骤多？用 spec 锚定，用计划兜底&#10;&lt;/h2&gt;&lt;p&gt;十几步的任务，光靠&amp;quot;记住&amp;quot;一定会漏。我的流程里有两个强制环节：&lt;/p&gt;&#10;&lt;p&gt;第一步，设计获批后写 spec 文档。表结构、接口定义、前端改动点、上层同步点全部落盘。这份文档是后续所有工作的锚点：代码评审不再对着记忆逐条想，而是对着 spec 逐条核对。&lt;/p&gt;&#10;&lt;p&gt;第二步，用计划技能把设计翻译成有序任务。先改什么、后改什么、每个任务做完怎么验证，都拆成文件级清单。执行阶段照着走，不会顾此失彼。&lt;/p&gt;&#10;&lt;p&gt;复杂任务最怕的不是步子慢，而是做完了发现做的是另一个需求。spec 就是防这件事的。&lt;/p&gt;&#10;&lt;h2 id="四链路长add-dir-多项目一个会话挂三个仓库"&gt;四、链路长？add-dir 多项目，一个会话挂三个仓库&#10;&lt;/h2&gt;&lt;p&gt;跨仓库任务的真正成本不在写代码，在于两边对不上：前端叫 &lt;code&gt;page&lt;/code&gt; 后端叫 &lt;code&gt;current&lt;/code&gt;，接口路径差一个斜杠，联调半天。&lt;/p&gt;&#10;&lt;p&gt;Claude Code 的 add-dir 可以把多个项目目录加进同一个会话，三个仓库的上下文同时可见。字段名、接口路径、分页参数在计划阶段就定死，代码照着写就行，联调成本趋近于零。&lt;/p&gt;&#10;&lt;p&gt;以前这种需求：拉群 → 各自开工 → 联调发现对不上 → 返工。现在：一个会话、一份 spec、三份代码同时改。&lt;/p&gt;&#10;&lt;h2 id="五改错返工hooks-门禁--验证闭环"&gt;五、改错返工？hooks 门禁 + 验证闭环&#10;&lt;/h2&gt;&lt;p&gt;复杂任务最容易在最后一步翻车：改完了、自测过了，忘了检查脱敏、忘了跑构建、忘了验证线上。&lt;/p&gt;&#10;&lt;p&gt;我的解法是 hooks：把检查前置到事件本身。比如写文件前必须声明事实（这个文件被谁引用、里面有没有敏感内容），执行破坏性命令前必须给出回滚方案。检查不是&amp;quot;记得就做&amp;quot;，而是流程的必经环节，不做就卡住。&lt;/p&gt;&#10;&lt;p&gt;收尾阶段再加一道验证：构建无错误、线上返回 200、关键内容比对通过，才算完成。质量不是最后检查出来的，是流程逼出来的。&lt;/p&gt;&#10;&lt;h2 id="我的工作流时间线"&gt;我的工作流时间线&#10;&lt;/h2&gt;&lt;p&gt;一个复杂任务在我这里是这样的节奏（示意）：&lt;/p&gt;&#10;&#10;&lt;pre class="mermaid"&gt;&#10;flowchart LR&#10; T1[&amp;#34;探索 + 脑暴&amp;#34;] --&amp;gt; T2[&amp;#34;方案 + spec&amp;#34;] --&amp;gt; T3[&amp;#34;实施计划&amp;#34;] --&amp;gt; T4[&amp;#34;执行三仓&amp;#34;] --&amp;gt; T5[&amp;#34;评审 · 验证 · 部署&amp;#34;]&#10;&lt;/pre&gt;&#10;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;环节&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;干什么&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;用时&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;探索 + 脑暴&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;读代码、一次一个问题澄清需求&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;一个上午&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;方案 + spec&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2-3 个方案对比，获批后落盘设计文档&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;半小时&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;实施计划&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;设计翻译成文件级任务清单&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;十分钟&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;执行&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;按清单改三个仓库&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;主工作量&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;评审 + 验证 + 部署&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;对着 spec 评审，构建、线上验证&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;收尾&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;对比以前的节奏：需求评审会一轮、文档两轮、联调两轮、返工一轮，光流程损耗就吃掉一半时间。&lt;/p&gt;&#10;&lt;h2 id="收尾"&gt;收尾&#10;&lt;/h2&gt;&lt;p&gt;复杂任务的复杂度分布大概是这样：需求 &amp;gt; 链路 &amp;gt; 步骤 &amp;gt; 代码。Claude Code 的 workflow 没有任何魔法，它只是把&amp;quot;该问的、该查的、该记的、该验的&amp;quot;变成了流程的默认动作，让 AI 和人的精力都集中在真正难的地方。&lt;/p&gt;&#10;&lt;p&gt;真正快的不是写代码那一下，而是不返工。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;封面图：&lt;a class="link" href="https://www.flickr.com/photos/jurvetson/6858583426" target="_blank" rel="noopener"&#10; &gt;jurvetson / Flickr&lt;/a&gt; · CC BY 2.0&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;</description></item><item><title>Cursor 与 Claude Code 对比：我的 AI 编程实战配置</title><link>https://yusanwen-code.github.io/posts/post-56/</link><pubDate>Mon, 12 Jan 2026 10:30:00 +0800</pubDate><guid>https://yusanwen-code.github.io/posts/post-56/</guid><description>&lt;img src="https://yusanwen-code.github.io/images/post-56-cover.jpg" alt="Featured image of post Cursor 与 Claude Code 对比：我的 AI 编程实战配置" /&gt;&lt;h2 id="两个工具两种脾气"&gt;两个工具，两种脾气&#10;&lt;/h2&gt;&lt;p&gt;过去一年我同时深度使用 Cursor 和 Claude Code。一个是 IDE，一个是 CLI 加 Agent，定位并不重叠。在某科技公司的统一认证中心、知识库问答服务后端，以及 alchemy-furnace 全栈项目里，我慢慢形成了「日常写代码用 Cursor，复杂重构和跨服务任务用 Claude Code」的组合，而不是二选一。&lt;/p&gt;&#10;&lt;h2 id="各干各的活"&gt;各干各的活&#10;&lt;/h2&gt;&lt;p&gt;Cursor 的 Tab 补全和 Cmd+K 内联编辑最跟手。写熟悉的业务代码、前端 JSX、SQL 时效率极高，适合「我知道要写什么，只是想快一点」。Claude Code 的 Plan 模式、子任务和工具调用（Bash/Read/Edit）适合另一类活：「我知道目标，但需要它自己摸代码、跑测试、改一轮」，比如跨多个微服务加一个字段、批量修复 lint、写数据迁移脚本。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="一个任务进来，按性质分流给两个工具" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://yusanwen-code.github.io/images/post-56-cursor-vs-claude.svg"&gt;&lt;/p&gt;&#10;&lt;h2 id="两份规则文件"&gt;两份规则文件&#10;&lt;/h2&gt;&lt;p&gt;Cursor 的 &lt;code&gt;.cursorrules&lt;/code&gt;：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&#10;&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;&#10;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;1&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;2&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;3&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;4&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;5&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;6&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;&#10;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- You are an expert Go backend engineer.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- Prefer table-driven tests.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- Never ignore returned errors; wrap with fmt.Errorf(&amp;#34;...: %w&amp;#34;, err).&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- Use zap for structured logging, no fmt.Println in business code.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- For GORM, always pass ctx and specify table name explicitly.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- Frontend: Next.js App Router, shadcn/ui, Tailwind. Keep components server by default.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;Claude Code 的 &lt;code&gt;CLAUDE.md&lt;/code&gt; 在上一篇已经展示过，重点是项目结构、命令和领域术语。两份文件内容不同，思路一致：把团队约定固化下来，而不是每次靠 prompt 提醒。&lt;/p&gt;&#10;&lt;p&gt;两个工具我都要求同一件事：改完代码自己跑测试。Cursor 用 Composer 执行 &lt;code&gt;go test ./...&lt;/code&gt;，Claude Code 直接调 Bash 工具，看到失败再回头改。&lt;/p&gt;&#10;&lt;h2 id="踩过的坑"&gt;踩过的坑&#10;&lt;/h2&gt;&lt;p&gt;第一，上下文管理思路不同。Cursor 靠 &lt;code&gt;@file&lt;/code&gt;、&lt;code&gt;@git&lt;/code&gt;、&lt;code&gt;@docs&lt;/code&gt; 手动引用，精确，但前提是你得知道该引用什么；Claude Code 会自己 grep 和 read，容易把上下文撑爆，得靠 Plan 模式和子任务控制范围。&lt;/p&gt;&#10;&lt;p&gt;第二，补全质量。Cursor 在短片段补全上更跟手，尤其前端 props；Claude Code 不做实时补全，但整段生成和跨文件重构更强。&lt;/p&gt;&#10;&lt;p&gt;第三，价格与合规。Cursor 可以切不同模型，但企业代码要考虑合规；Claude Code 走我自己的 API Key 或订阅，代码不外传到第三方索引，对公司项目更安心。我们在统一认证中心项目里明确禁止把含密钥或客户数据的文件贴到任何 SaaS 工具。&lt;/p&gt;&#10;&lt;p&gt;第四，终端场景。Claude Code 在服务器、容器、tmux 里能直接跑，改 KubeSphere 部署脚本、调试线上 Pod 时比 SSH 加本地 IDE 方便；Cursor 需要本地有仓库或 Remote-SSH。&lt;/p&gt;&#10;&lt;p&gt;第五，别迷信任何一个工具。我见过同事一路 Tab 出几百行没跑过的代码，也见过让 Agent 自主改一下午、最后全是幻觉 API 的。生成越顺手，检查越不能省。&lt;/p&gt;&#10;&lt;p&gt;第六，两者都需要一份清晰的项目规则文件。没有 &lt;code&gt;.cursorrules&lt;/code&gt; 或 &lt;code&gt;CLAUDE.md&lt;/code&gt;，它们都会按「通用最佳实践」写，和你项目的真实风格完全不搭。&lt;/p&gt;&#10;&lt;h2 id="我的组合"&gt;我的组合&#10;&lt;/h2&gt;&lt;p&gt;Cursor 当主力编辑器，处理日常 CRUD 和前端；Claude Code 当 Agent，处理跨文件、跨服务、需要自己跑命令的任务。两个工具都配好项目规则，都要求改完自跑测试，都不让它碰密钥。这三个「都」，比选哪个工具更重要。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;封面图：&lt;a class="link" href="https://www.flickr.com/photos/48126477@N05/6036720300" target="_blank" rel="noopener"&#10; &gt;MattsMacintosh / Flickr&lt;/a&gt; · CC BY 2.0&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;</description></item><item><title>AI Vibe Coding 工作流：用 Claude Code 全栈交付</title><link>https://yusanwen-code.github.io/posts/post-55/</link><pubDate>Sun, 28 Dec 2025 10:30:00 +0800</pubDate><guid>https://yusanwen-code.github.io/posts/post-55/</guid><description>&lt;img src="https://yusanwen-code.github.io/images/post-55-cover.jpg" alt="Featured image of post AI Vibe Coding 工作流：用 Claude Code 全栈交付" /&gt;&lt;h2 id="一个人三套技术栈"&gt;一个人，三套技术栈&#10;&lt;/h2&gt;&lt;p&gt;2026 年初我开源了 alchemy-furnace（炼丹炉），一个多人格融合 Agent 系统：Go(Gin+GORM) 做网关，Python(FastAPI) 做合成引擎，Next.js 做前端，三套技术栈一个人全栈交付。按传统写法，光是在语言和框架之间切上下文，就要吃掉大量业余时间。我拿 Claude Code 当主力开发助手，慢慢攒出了一套自己的 Vibe Coding 工作流。&lt;/p&gt;&#10;&lt;h2 id="先给-agent-立规矩"&gt;先给 Agent 立规矩&#10;&lt;/h2&gt;&lt;p&gt;第一步，先写 &lt;code&gt;CLAUDE.md&lt;/code&gt;，把项目结构、技术栈、启动命令、代码规范和关键领域概念（金丹、丹炉、血统追溯）写清楚，作为 Agent 的长期记忆。&lt;/p&gt;&#10;&lt;p&gt;第二步，复杂功能（Promptbreeder 变异算子、合成提示词缓存、多供应商适配）先用 Plan 模式让它出实施计划，我审完再让它动手写代码。&lt;/p&gt;&#10;&lt;p&gt;第三步，小步提交，每个子任务一个 commit，方便 review，也方便回滚。&lt;/p&gt;&#10;&lt;p&gt;第四步，测试先行。让 Claude 按函数签名写 table-driven tests，我负责补边界 case。&lt;/p&gt;&#10;&lt;p&gt;第五步，用 Task 跟踪多步任务，让它自己跑 &lt;code&gt;go build&lt;/code&gt;、&lt;code&gt;go test&lt;/code&gt;，失败了读报错自己修。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Claude Code 全栈交付的五步工作流与分工边界" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://yusanwen-code.github.io/images/post-55-claude-workflow.svg"&gt;&lt;/p&gt;&#10;&lt;h2 id="两份配置"&gt;两份配置&#10;&lt;/h2&gt;&lt;p&gt;项目根的 &lt;code&gt;CLAUDE.md&lt;/code&gt; 片段：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&#10;&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;&#10;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 1&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 2&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 3&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 4&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 5&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 6&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 7&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 8&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 9&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;10&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;11&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;12&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;13&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;14&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;&#10;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#79c0ff;font-weight:bold"&gt;# alchemy-furnace&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#79c0ff"&gt;## 架构&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;-&lt;/span&gt; gateway/ : Go 1.22, Gin + GORM, 负责 API Key 鉴权、路由、计费&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;-&lt;/span&gt; engine/ : Python 3.11, FastAPI, 多人格融合 + Promptbreeder 变异&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;-&lt;/span&gt; web/ : Next.js 14 App Router, Tailwind, shadcn/ui&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;-&lt;/span&gt; deploy/ : docker-compose, 单机部署&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#79c0ff"&gt;## 约定&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;-&lt;/span&gt; Go 代码通过 &lt;span style="color:#a5d6ff"&gt;`make lint`&lt;/span&gt; 检查，禁止裸 ignore error&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;-&lt;/span&gt; Python 用 ruff + mypy，接口模型必须用 Pydantic&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;-&lt;/span&gt; 所有外部供应商调用走统一 provider 抽象&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;-&lt;/span&gt; API Key 入库前必须 AES-GCM 加密&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;-&lt;/span&gt; DEMO_MODE 下不调真实 LLM，返回内存 mock&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;&lt;code&gt;settings.json&lt;/code&gt; 里放行高频命令，减少权限弹窗：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&#10;&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;&#10;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 1&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 2&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 3&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 4&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 5&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 6&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 7&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 8&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 9&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;10&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;11&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;12&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;&#10;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;#34;permissions&amp;#34;&lt;/span&gt;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;#34;allow&amp;#34;&lt;/span&gt;: [&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a5d6ff"&gt;&amp;#34;Bash(go build ./...)&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a5d6ff"&gt;&amp;#34;Bash(go test ./...)&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a5d6ff"&gt;&amp;#34;Bash(go vet ./...)&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a5d6ff"&gt;&amp;#34;Bash(ruff check *)&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a5d6ff"&gt;&amp;#34;Bash(pytest -q)&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a5d6ff"&gt;&amp;#34;Bash(docker compose config)&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="坑是真坑"&gt;坑是真坑&#10;&lt;/h2&gt;&lt;p&gt;第一，上下文是稀缺资源。我不会把整个仓库丢给 Claude，而是用子任务切给它：&amp;ldquo;只看 &lt;code&gt;gateway/internal/provider&lt;/code&gt; 目录，给 OpenAI 兼容层加一个 DeepSeek 适配&amp;rdquo;。大范围重构先让它列影响文件清单，再逐个改。&lt;/p&gt;&#10;&lt;p&gt;第二，Vibe Coding 不等于不看代码。写完让它自己跑测试，但 API Key 加密、变异算子的血统追溯这类关键路径，我逐行 review。能跑通不代表逻辑对，尤其涉及金额、权限、加密的时候。&lt;/p&gt;&#10;&lt;p&gt;第三，幻觉 API 是真问题，它会编出不存在的 eino 函数签名。我的要求是先 &lt;code&gt;go doc&lt;/code&gt; 或直接读 vendor 源码确认，不许凭印象写。&lt;/p&gt;&#10;&lt;p&gt;第四，多语言项目在同一会话里容易串味。我一般按服务分会话，或者明确说&amp;quot;接下来只写 Python，别把 Go 的错误处理风格带进来&amp;quot;。&lt;/p&gt;&#10;&lt;p&gt;第五，尽量用增量 Edit 而不是整体 Write。diff 清晰，跑偏了当场就能发现。&lt;/p&gt;&#10;&lt;h2 id="后来"&gt;后来&#10;&lt;/h2&gt;&lt;p&gt;Claude Code 让我这种以后端为主的人，敢一个人扛前端和算法服务。它最擅长样板代码、测试用例、跨文件重构和根据报错自修复；我负责架构、边界和验收。alchemy-furnace 能在业余时间快速做到 46 star，靠的就是这套工作流。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;封面图：&lt;a class="link" href="https://www.flickr.com/photos/39027808@N00/1423312308" target="_blank" rel="noopener"&#10; &gt;recursion_see_recursion / Flickr&lt;/a&gt; · CC BY 2.0&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;</description></item></channel></rss>