
30天259个PR这个数字一开始我是怀疑的。平均一天8.6个PR相当于每个工作日要合入差不多9次代码变更而且每一笔变更都得经得起审查、测试、合并这一整套流程。如果换成一个喜欢憋大招的开发者可能一个月下来就一两个巨型PR合并那天整个团队加班到深夜。所以当我看到这个数据的时候第一反应不是这人手速快而是这人跟Claude Code的协作方式肯定跟大多数人不一样。Claude Code是Anthropic官方出品的命令行编程代理近两年开源社区里热度最高的AI编程工具之一。PR就是Pull Request软件项目里最常见的代码合入机制——开发写完代码发起请求经过审查和测试再合并进主干。把这两样东西放在同一个标题里其实讲的是一个更底层的问题当AI帮你写代码变成日常怎么让产出速度和质量同时在线。这篇文章会把这位创造者的效率法则完整拆开从任务拆解到PR流水线从上下文管理到工作流自动化一共13个技巧不管是刚装好Claude Code的新手还是已经写了几百个PR的老手都能直接照着调。1. 30天259个PR先算清楚这笔账1.1 259个PR背后是每天8.6次可验证的进步先做一道简单的算术题。30个自然日259个PR平均每天8.6个如果按22个工作日算每天将近12个。不管按哪种算法这个节奏都意味着一天工作8小时的话平均每40到55分钟就要完成一个PR从任务分解、写代码、跑测试、发起PR到通过审查整个循环都必须压缩到小时以内。有人说这个数据是刷出来的PR内容可能只是改了个文档或者挪了个括号。我不完全赞同这个判断。我自己有过一段类似的节奏持续两周平均每天5到6个PR每个PR基本控制在100行以内。那种状态下你根本不敢接改一个配置文件影响全系统的大活你会本能地把所有任务切成小块每一块都能在半小时内完成、都能独立运行、都能被同事快速看懂。实际上259个PR最大的价值不是数字本身而是它作为一面镜子照出了大多数开发者的反方向问题一次任务太大、一次改动太多、一次合并太慢。这个矛盾在跟AI协作之后会被成倍放大因为AI生成代码的速度远远超过人类理解代码的速度。如果不在流程上做约束你一天能生成几千行代码但最后能合进主干的几乎没有。1.2 小PR才是AI编程的正确单位为什么小PR特别契合AI编程三个原因都很实际。第一审查成本可控。一个200行的diff和一个2000行的diff审查难度的差距不是10倍是30倍。AI生成的代码再快最终责任人还是你你必须一行一行看明白。diff越小你越有信心说这段我懂。第二出错的爆炸半径小。AI有时候会给出看似合理实则离谱的实现如果这个实现混在一个2000行的大PR里排查起来生不如死。小PR里出了问题定位、回滚、重来都在几分钟内完成。第三反馈循环快。小PR合并后测试、lint、类型检查、代码审查这些反馈会立刻回来你可以马上进入下一个任务。这种高频反馈对AI尤其重要因为AI的上下文是有限的上一次任务的反馈越快越能修正它接下来的行为。维度巨型PR小型PR代码量1000行以上50-200行review时间数小时甚至跨天10-20分钟冲突概率高合并时容易爆炸低快速合入回滚成本高可能牵连多个功能低几乎无副作用适合AI程度极差AI容易迷失上下文极好每个步骤都可验证所以整篇文章的核心逻辑就是把大拆成小再让Claude Code在每个小上发挥最大价值。后面这13个技巧全都是围绕这个核心展开的。2. 技巧1-4任务拆解与上下文管理的底层逻辑2.1 技巧一把目标写进第一句话很多人用Claude Code的方式是打开终端输入帮我修个bug然后就没有然后了。这种含糊的任务描述AI只能凭猜猜出来的结果你大概率不满意然后你来一句不是这个意思AI再猜反复几个来回半小时就没了。正确的打开方式是把第一句话当成PR标题来写要解决什么问题、在哪个模块、期望什么行为。比如claude 在 auth 模块里用户登录后 token 过期时间是 2 小时但实测 1 小时就失效。请定位问题并修复同时补一个单元测试对比一下这个任务描述里包含了边界auth模块、现象1小时失效、期望2小时、验证方式单元测试AI就不需要到处乱翻代码直接往token校验逻辑里钻。实测下来任务描述越精确AI的首次改动命中率越高返工次数直线下降。这个技巧的本质是终端里的提示词就是你给AI的PR任务单。你写清楚需求它才能产出可合并的代码。这跟你给同事写任务单没什么两样——你肯定不会跟后端同事说帮我把登录搞好对吧2.2 技巧二一个终端只干一件事Claude Code是基于会话的每个终端Tab就是一条独立的上下文。如果你在同一个会话里又让它改登录页又有局修接口文档AI会把两件事的上下文搅在一起然后给你一个四不像的改动。我现在的习惯是每接到一个任务新建终端Tab启动一个全新会话任务完成、PR合并之后直接关掉这个Tab。多个任务之间绝不共享会话。听起来很浪费实际上反而是最省时间的——因为省掉了切换思维的成本。如果你是那种喜欢把所有事都堆在一个会话里的类型你一定会碰到AI突然忘了项目结构改A功能把B功能带崩了这些典型症状原因就是上下文污染。AI不是人它不会主动说哎我们是不是跑题了它会顺着你的话题继续编直到编不下去。2.3 技巧三动手前先要计划Claude Code提供了/plan模式或者你可以在提示词里直接要求先输出实施计划等我确认后再动手。这一步很多人嫌麻烦直接跳过但它是控制AI修改范围最有效的手段。具体做法让AI先给出要改哪些文件、每个文件怎么改、有没有风险、要不要动数据库迁移你看完觉得没问题再让它执行。如果计划里有你不认可的部分直接在这个阶段纠正比等它写完一片代码再回头返工省的时间是数量级的。有一次我让AI优化一个导出功能它的计划里突然冒出来重构整个数据访问层我一看不对立刻打断把任务缩小到只改导出模块。如果没这个计划环节它可能真的会把底层全部重写一遍然后给你留一个巨型的、没法审查的PR。更麻烦的是这种过度发挥的代码往往表面能跑实际上藏着各种你没预料到的边界问题。2.4 技巧四小步提交的粒度控制用Git管理AI生成代码最忌讳的就是攒一把大的。很多人的流程是让AI改完所有问题然后一次性git add . git commitPR瞬间变成一个大杂烩。审查者看到这种PR第一反应就是打回去重提。正确做法是把一个任务拆成多个逻辑单元每完成一个逻辑单元就提交一次。比如修复一个bug拆成修复核心逻辑和补充单元测试两个提交开发一个新接口拆成实现数据访问层实现业务逻辑层补接口测试三个提交。提交信息建议用Conventional Commits的格式配合AI生成的代码PR的审查者能一眼看清改动脉络git add src/auth/token.ts git commit -m fix(auth): 修复 token 刷新时的竞态条件 git add tests/auth/token.test.ts git commit -m test(auth): 补充 token 过期场景的单测这样每个提交都小而完整任何一步出了差错git revert也只会回滚那一个逻辑单元不会牵连其他功能。这里有个小技巧完成一个提交后立刻让AI基于新的git diff继续下一步这样AI的上下文始终跟着最新状态走不会基于旧代码瞎折腾。3. 技巧5-8让AI写出的代码可审查、可合并3.1 技巧五先写测试再写实现我承认让AI先补测试再写实现刚开始会觉得很别扭甚至会怀疑测试都让AI写了那测试还能信吗。但用久了你就会发现这是防止AI瞎写的最佳护栏。流程是把需求连同测试要求一起丢给AI让它先编写失败的测试再实现功能逻辑最后跑通测试。这样做的意义在于测试就是验收标准AI自己写的测试它自己会努力去满足写出来的代码天然就自洽。而且有了测试你在review时不用凭空判断这逻辑对不对直接看测试用例就知道它覆盖了哪些场景。我一般会要求AI在最后输出测试结果。看到3 passed这样的输出心里就踏实了大半。测试挂了也没关系直接让它自己修通常在两三轮内能稳定下来。这里有个细节如果某个测试特别难写或者经常写完就挂那大概率不是测试难写而是这个需求本身就模糊这时候回到技巧一把需求重新拆清楚。3.2 技巧六PR描述自动化259个PR意味着一天要写8个PR描述。如果每个PR描述都要手动从零写光这步就能把人磨死。所以PR描述必须让AI来写。我的做法是在项目的CLAUDE.md里放一个PR描述模板要求AI在改动完成后按这个格式输出## 改动背景 这个 PR 解决了什么问题为什么需要改 ## 改动内容 核心文件是哪些每个文件做了什么 ## 测试方法 运行了哪些测试命令结果如何 ## 影响范围 会影响哪些模块或接口有无破坏性变更然后直接把这段内容复制到GitHub或GitLab里发PR。少数需要微调的地方人工改一下就好。实测下来AI生成的PR描述在改动内容和测试方法这两节表现最好改动背景偶尔需要你补充业务上下文这本来也是人的职责AI替代不了。这个技巧真正的价值在于它逼着AI在发PR之前自己先梳理一遍改动思路。很多时候AI写PR描述的时候才发现自己漏了某个影响点这时候它会主动提出来等于又多了一层自查。3.3 技巧七代码审查时先看差异再问为什么PR合并之前我习惯让AI自己当一次review官。方法是把git diff的结果发给它让它站在审查者的角度找问题。这一步往往会发现一些真实的边界问题比如空指针、并发安全、异常没处理AI自己揪自己的错特别积极。但这里有个经验不要让AI只解释改了什么要让它在diff上直接指出哪一行可能有问题。因为解释改了什么是陈述句AI会下意识地合理化自己的改动而让它带着找茬的心态去看diff输出会诚实得多。git diff HEAD -- src/auth/token.ts | claude 作为资深代码审查者请找出这个 diff 里的潜在问题按严重程度排序等你真的开始人工review抓住两个核心点就够了一是这个改动是否符合任务目标二是它有没有引入预期之外的行为变化。至于代码风格、命名规范这类橡皮筋问题交给lint和格式化工具去管不用占用大脑带宽。3.4 技巧八把重复劳动沉淀为斜杠命令如果你发现某个prompt每周要重复用三次那就把它做成slash command。Claude Code支持自定义命令只要在项目根目录创建.claude/commands/目录放入一个个markdown文件就行。比如我常用的这几个.claude/commands/pr-summary.md # 根据 git diff 生成 PR 描述 .claude/commands/add-test.md # 为目标函数补单元测试 .claude/commands/fix-lint.md # 修复 lint 报错 .claude/commands/review-diff.md # 让 AI 审查当前 diff做完这个沉淀后面所有PR的统一动作就变成改完代码 → 敲 /pr-summary 生成描述 → 敲 /review-diff 自查 → 提交。整套流程稳定到可以交给任何人执行。这背后是一条很朴素的经验AI编程的效率不是靠某一次超长发挥而是靠把高频动作标准化、模板化。你每写一个slash command就等于把一次成功经验固化下来下次不会再重新摸索。4. 技巧9-13工作流自动化与记忆沉淀4.1 技巧九用agent模式并行推进独立任务Claude Code的agent模式适合那些相互独立的子任务。比如做一次版本升级你可以同时开两个会话一个负责升级前端依赖一个负责升级后端SDK两个会话互不干扰你只需要在最后各自review和合并PR。并行前有一个硬性约束任务之间不能改同一个文件否则Git冲突会教你做人。我踩过一次坑两个会话同时改了同一个配置文件的相邻行结果合并时爆出一堆冲突花了一个小时才理清。后来我规定并行任务开始前先画好文件所有权边界——每个会话只允许碰它自己的那份文件。并行不是目的效率才是。如果任务之间存在隐性的逻辑依赖强行并行只会带来更多的沟通成本和合并成本。判断标准很简单两个PR能不能独立合并而不破坏构建能就并行不能就串行。4.2 技巧十CLAUDE.md的工程化组织CLAUDE.md相当于给AI看的项目操作手册它的组织质量直接决定AI产出质量的上限。你可以把它理解为项目级记忆AI每次启动会话都会读它。写CLAUDE.md要遵守两个原则一是写操作相关不写业务故事二是保持精简不写论文。我自己常用的模板大概是这样# 项目指南 ## 技术栈 - 后端: Python FastAPI, PostgreSQL - 前端: React Vite ## 常用命令 - 启动: npm run dev - 测试: npm test - 构建: npm run build - lint: npx eslint src ## 编码约定 - 使用 TypeScript 严格模式 - 错误处理统一返回 Result 类型 - 日志使用项目封装的 logger不要直接 console.log ## 禁止事项 - 不要修改 src/migrations 下的历史迁移文件 - 不要自动执行数据库迁移 - 不要重构公共组件库之外的代码 ## PR 与提交规范 - 使用 Conventional Commits - PR 描述按模板输出背景/内容/测试/影响范围注意CLAUDE.md分三级全局的~/.claude/CLAUDE.md记录你个人的通用偏好项目根目录的CLAUDE.md记录该项目约定某些子目录还可以放局部的CLAUDE.md覆盖全局规则。合理分层之后AI上手新项目的时间会明显缩短——换一个上下文它也不必从头摸索。4.3 技巧十一编辑器集成把循环压缩到最短CLI虽然强大但大多数人日常工作都在编辑器里。Claude Code的VSCode扩展我用下来最大的价值是可以把选中代码 → 发送给AI → 接受建议这个循环压到几秒钟。具体操作是在编辑器里框选一段函数用快捷键把上下文发送给扩展里的Claude它会返回diff建议你再用快捷键接受或拒绝。这个交互链路短反馈即时特别适合小步改代码。另外我建议把编辑器底部的输出面板打开AI执行命令时你能看到它的实时输出。这不仅仅是监控有时候你会在输出里发现它正在做计划外的事比如偷偷装依赖包这时候可以立即打断。这个习惯帮我避免了好几次AI自作主张改了一堆无关文件的悲剧。4.4 技巧十二上下文压缩该喊停就喊停Claude Code有/compact命令用来压缩当前会话的上下文。很多人不会主动用等对话长到一定程度才发现AI响应越来越慢、越来越答非所问这才意识到上下文爆了。我的经验是主动管理一个会话只要超过20到30轮交互或者感觉AI开始重复问你同样的问题就果断/compact一次或者直接开新会话。别心疼历史记录每次任务结束真正需要保留的经验应该写进CLAUDE.md或slash command对话本身没那么重要。这里还有一个容易忽略的点你在同一个会话里连续处理多个无关任务即便没撞上下文上限任务之间也会互相干扰AI可能把上一个任务的思路带到下一个任务里。所以更稳妥的做法是任务切换会话就切换。配合技巧二使用基本能避免80%以上AI变笨的问题。4.5 技巧十三建立个人反馈循环让AI越用越懂你最后一个技巧也是我认为最难坚持但回报最大的一条让AI的每次输出反过来优化你自己的工具链。每次任务完成时我会让AI额外输出一小段工作总结这次任务在哪个环节卡住了、你下次希望我怎么提示你、CLAUDE.md需不需要补充。然后把有价值的信息沉淀下来。每周再花20分钟复盘一下这周哪些任务AI帮了大忙哪些任务AI完全使不上劲。使不上劲的任务要么是任务描述不清楚要么是缺少项目上下文对应的调整动作就明确了。这套闭环跑起来之后你会发现同样的工具、同样的模型越用越顺手因为它已经根据你的项目、你的代码习惯、你的踩坑记录悄悄变成了你的专属工作台。技巧这东西最怕停留在纸面上一定要让它在你的工作流里生根发芽。5. 实战中的坑与排查实录5.1 高频翻车场景排查速查表用了这么久Claude Code遇到的坑基本能归类成下面几种。整理成一个速查表大家遇到问题直接对号入座症状可能原因处理方式生成的代码改错了模块任务描述太宽泛回到技巧一重写任务描述一个会话内越改越乱上下文污染/compact 或直接开新会话并行会话产生文件冲突文件所有权没划分先定边界再并行测试一直跑不过AI 对项目测试约定不了解在 CLAUDE.md 补充测试命令与写法PR 合并后出现行为回归缺少小步提交的验证拆小 PR合并一个验证一个提示登录或认证问题API Key 配置不对或已过期检查环境变量与账号订阅状态沙箱或会话异常版本更新或旧配置残留更新 CLI 版本重置本地配置除了表格里的这些实操中还有个容易被忽略的细节AI生成的代码里偶尔会包含它自己脑补出来的公共函数或预留接口导致diff里出现项目里不存在的新抽象。这种代码多半属于过度设计可以直接要求它删掉别让PR变大。判断标准很简单这个函数有没有被当前改动实际调用没有就删。5.2 一套可以直接照抄的每日工作流最后分享我参考这套效率法则之后稳定跑了一个季度的每日工作流早上花15分钟把当天的任务拆成3到5个独立小块每块对应一个PR。每小块任务启动一个新会话任务描述写成PR级别的一句话目标。让AI先给实施计划确认后执行执行完先让它跑测试、写PR描述、自查diff。直接发起PR及时合入不等任务攒满一周。下午最后一小时做代码审查收尾并更新CLAUDE.md中本次发现的新约定。每周复盘一次把AI拖后腿的任务挑出来改成slash command或补充进项目记忆。这套流程跑下来最大的感受是PR变多不是目标但当你真的做到每个PR都小而可验证它自然就变多了。节奏感对了一天的产出是能见底的焦虑感反而少了。最后再分享一个小技巧Claude Code这类工具更新迭代非常快官方的更新日志和CLI里的/help输出一定要定期看很多好用的新命令就藏在里面。保持工具链常新比多写一百行业务代码更重要。别的不说我自己就是某次版本更新后才开始用自定义slash command效率提升非常直观。工具永远是死的工作流才是活的。希望这13个技巧能帮你搭出属于自己的一套节奏在跟AI结对编程的路上少踩几个坑。