Vibe Coding工程化实战:用Git、规范、分层大模型驯服AI代码
原文:https://mp.weixin.qq.com/s/NCzHo4SxcuYOueyq2Q-2NQ
原标题:《面试官坏笑:“你用 AI 编程半年了,那怎么保证 Claude Code 写出来的代码是对的?”我:“直接用 Claude Opus 4.8!”》
Vibe Coding工程化实战:用Git、规范、分层大模型驯服AI代码
前言
体会到Vibe Coding的极致效率:AI自动生成整段代码,一天产出的工作量远超过去一周,甚至让人全身心投入编码。但纯粹凭感觉、无约束地让AI自由写代码,爽感褪去后会接连不断翻车。AI会擅自修改无关文件、脑补不符合业务的逻辑、写出存在权限漏洞与性能缺陷的代码,返工、回滚、线上故障层出不穷。
经过数年大量AI编程踩坑沉淀,我整理出一套完整可落地的工程化管控方案。不再依赖单纯和AI聊天提需求,而是借助Git、标准化需求Spec、项目规则文件、可复用Skill、分层大模型调度、上下文管理、多Agent协作、多层安全权限机制,把不受控的AI编码纳入传统软件工程体系。这套方案适用于长期维护的业务项目;仅用于快速验证想法的短期原型,可适度放宽规范。
一、Git:Vibe Coding不可或缺的核心兜底防线
如果只挑选一条最重要的AI编程技巧,一定是用好Git。AI一次性修改数十个文件后一旦方向出错,没有版本隔离会导致无法区分有效改动与垃圾代码。Git不能等到代码写完再提交,必须在AI动手前就位,全程管控所有改动。
1. 编码开工前置校验与分支隔离
- 执行
git status --short查看当前工作区改动
若本地存在未提交修改,先区分改动归属、确认是否保留,禁止让AI覆盖他人半成品、混合多任务代码,多人协作、多AI并行场景下该步骤必不可少。 - 任务专属独立分支
工作区确认干净后,新建独立功能分支:git switch -c feat/order-export,哪怕需求体量很小,也禁止直接在主分支运行AI编码。分支隔离可以将AI写偏、写坏的改动限制在当前分支,不会污染主代码基线。 - 多任务并行隔离:git worktree
同时开展多个开发任务时,使用worktree实现目录、分支、任务完全隔离:
git worktree add ../project-order-export -b feat/order-export
git worktree add ../project-refactor-user -b feat/refactor-user
每个AI Agent对应独立工作目录,不同任务的代码修改完全互不干扰。
2. AI完成修改后,先校验变更再提交
不要直接采信AI自我总结,仓库的变更记录才是真实依据:
- 先用
git diff --stat查看本次改动覆盖的文件规模,判断是否超出预期范围; - 再执行
git diff逐行核对代码细节,检查AI是否擅自修改未提及的模块、公共类; - 分块暂存、单次提交只做一件事
使用git add -p交互式分块暂存代码,一次提交仅承载单一功能逻辑,提交备注清晰区分任务:git commit -m "feat: add order export"。细分提交便于后续代码评审、精准回滚、快速定位缺陷。
3. 规范可控的回滚方案
针对不同场景选择对应回滚命令,避免粗暴操作丢失代码:
- 仅丢弃未提交文件的改动:
git restore path/to/file - 撤销已经暂存的文件:
git restore --staged path/to/file - 代码已提交并推送远程:优先使用反向提交
git revert <commit>,保留完整提交历史,不破坏协作基线; git reset --hard属于高风险操作,仅一次性实验分支可使用,常规业务分支禁止随意交给AI执行,极易抹掉未备份的有效改动。
二、三层规范体系,精准约束AI减少无效猜测
模糊的需求描述是AI写出不符合预期代码的核心根源。我们可以通过轻量Spec、项目永久规则文件、复用式Skill三层体系,从需求、项目约定、任务流程三个维度限制AI自主发挥。
1. Spec Coding:开工前写清轻量化需求规范
只说“帮我实现导出订单功能”,缺少字段、条数、索引、权限等约束,AI会自行脑补业务逻辑,后续返工成本极高。开工前撰写轻量Spec,根据任务体量调整文档完整度:
- 小型任务:仅写明目标、约束、验收标准三部分;
- 中等任务:补充接口定义、错误码、数据表结构;
- 大型需求:拆分为requirements.md、design.md、tasks.md多份文档。
订单导出Spec示例:
## 目标
实现订单导出接口,支持按时间范围导出CSV文件
## 约束
1. 单次最多导出5000条数据
2. 查询时间区间不可超过31天
3. 仅可查询当前租户所属订单,禁止越权
4. SQL查询强制使用索引order_tenant_time_idx
5. 导出失败记录精准报错原因,不返回笼统unknown error
## 验收标准
1. CSV导出字段固定顺序:order_no、amount、status、created_at
2. 超条数、超时间范围返回明确业务错误
3. 单元测试覆盖:无数据、租户越权、条数超限、时间超限4类场景
除此之外,相比“代码优雅、符合项目规范”这类空洞prompt,给AI提供项目内成熟代码样板约束效果更强。指定参考控制器、服务层、仓储层代码,要求AI统一分层结构、异常处理、返回体封装、日志打印格式,禁止新增全局异常、自定义返回格式、绕过现有鉴权逻辑。
2. 项目规则文件:永久沉淀团队约定与项目坑点
长期项目可把AI高频踩坑、团队强制规范写入工具可自动读取的规则文件,跟随仓库永久留存,避免每次对话重复提醒。不同AI工具对应专属规则文件:
- Claude Code:CLAUDE.md
- Cursor:.cursor/rules/*.mdc,搭配AGENTS.md
- GitHub Copilot / VSCode:.github/copilot-instructions.md
文件编写核心准则:不堆砌通用项目介绍,只记录“删除后AI极易出错”的内容,包含技术栈版本、项目架构取舍、固定启动命令、强制业务约定、历史踩坑点。每次AI重复出现同类错误,立刻补充进规则文件,永久规避同类问题。
3. Skill:固化高频任务标准化执行流程
规则文件管控全项目通用约束,Skill针对某一类固定任务定义完整执行步骤,适合代码审查、TDD开发、前端页面开发、技术文章撰写、网页调研等重复性工作,载体为SKILL.md。
- Skill编写规范
SKILL.md面向AI执行,区别于给人阅读的README,仅写明触发时机、执行步骤、禁止操作、失败兜底方案,官方建议正文控制在500行以内,内容过多则拆分独立文件按需读取; - 使用注意事项
第三方开源Skill不可直接加载运行,必须提前核查内置脚本、命令、权限逻辑,防止包含高危操作; - 核心价值
无需每次新建会话重复提醒AI流程,例如要求代码审查必须依次检查安全漏洞、事务边界、性能索引、边界用例、项目统一规范,一次写入Skill永久复用。
三、分层调度大模型:平衡开发成本与代码质量
不要一刀切使用最贵模型或廉价模型,不同能力的模型分配对应工作,兼顾成本与产出质量,标准分工流水线:
- 高端重型模型(Claude Opus 4.6/4.7/4.8)
仅负责高价值脑力工作:读取完整需求与仓库代码、输出技术方案、拆解细分开发任务、最终代码审计。不参与字段修改、补getter、调整CSS等简单搬砖工作,充分发挥深度逻辑分析能力。审计环节重点排查:业务越权、事务漏洞、性能缺陷、测试覆盖缺口。 - 平价高效模型(DeepSeek V4-Pro、GLM5.1等同级模型)
方案确认落地后,承接细分编码任务、补充单元测试、执行lint/单元测试命令,完成后输出变更diff摘要,大幅降低大模型调用成本。
配套分层审计策略:先由低价模型全量扫描项目,列出所有疑似缺陷;再使用高端模型复核问题真实性,过滤误报,相比直接用高价模型全量扫描,成本大幅降低。
四、拒绝AI口头承诺:所有修改必须提供客观验证证据
AI普遍会输出“代码已修复、性能已优化、全部验证通过”等结论,这类口头描述不具备可信度,必须提供三类可核查证据:
1. 单元测试:遵循轻量化TDD思路
修改功能前禁止直接编写业务实现,先根据Spec编写覆盖全边界的测试用例,保证测试初始运行失败,确认用例逻辑合理后,再开发业务代码直至测试全部通过。覆盖场景包含正常流程、参数非法、权限不足、并发重复请求、空数据等边界场景。
2. 执行命令原始输出
要求AI粘贴完整运行日志,包含mvn test、npm test、pnpm lint等校验命令输出;若依赖缺失、数据库未启动等原因无法执行测试,需如实标注“未运行”并说明原因,禁止编造测试通过结果。同时增加验收清单逐项核对:权限校验、统一错误格式、索引命中、敏感信息脱敏、全量测试通过。
3. 性能优化必须提供实测数据
若涉及接口、SQL性能优化,不能仅描述“速度提升明显”,必须附带优化前后SQL语句、EXPLAIN执行计划、测试数据量、P95/P99接口耗时等实测指标;无压测数据支撑的优化方案,仅标记为预期优化,备注后续验证,不直接认定生效。
五、上下文工程:解决会话信息混乱、模型失效问题
上下文窗口容量大不等于效果更好,杂乱冗余的对话历史会干扰模型抓取关键约束,需要系统性管理会话上下文:
- 按需加载代码,禁止一次性导入完整仓库
当前任务仅加载Spec、关联业务文件、报错日志、验收命令、少量参考实现,其余目录、文件仅记录路径,需要分析时再单独读取,减少无关信息噪声;Claude Code分析大型仓库同样采用先检索目录、再逐份读取文件的策略。 - 长会话及时压缩冗余内容
Claude Code可使用/compact压缩对话、/clear清空无效历史,其余AI Agent均有对应摘要、重置功能;压缩仅保留架构决策、已修改文件、遗留缺陷、下一步任务等核心信息,删除重复对话、无效工具输出。 - 长任务结构化留存进度
长期开发任务维护NOTES.md交接文档,记录两大模块:
- 已完成:修改文件清单、已执行测试、确认非Bug问题;
- 剩余任务:未修复用例、待验证边界场景、新会话优先读取文件清单。
新建会话可直接读取该文档,无需重复复述全部开发历史。
- 单会话单任务原则
一个对话仅处理一项独立需求;连续两次纠正AI仍产出错误代码,直接新开会话,仅携带Spec、相关代码、失败日志、NOTES交接文档;3000-8000 token高质量精简上下文,远优于几十万token杂乱对话。
六、多Agent协作与Subagent分工策略
多AI协作可提升开发效率,但新手切忌直接并行运行,不合理分工极易产生隐性代码冲突。
1. 新手优先串行化协作流程
固定流水线:Plan Agent(仅输出方案、拆分任务)→ Code Agent(单一任务编码)→ Test Agent(补充、运行测试)→ Review Agent(仅审计diff,不大量改写代码)
各Agent按顺序提交代码,提交备注标注阶段[plan]/[code]/[test]/[review],流程跑通、熟悉规范后,再尝试worktree并行开发。
2. 并行协作的隐藏风险与管控手段
表面无Git冲突是并行最大隐患:两个Agent同时修改公共DTO、底层工具类,一个新增字段、一个删除字段,合并代码无报错,但会破坏接口序列化、前端依赖逻辑。
并行开发必须提前划定文件修改范围、模块访问权限,每个变更diff人工复核,用分支、任务边界隔离风险。
3. Subagent专项任务委派
Subagent拥有独立上下文、专属提示词、独立工具权限,适合边界清晰的专项工作:代码安全审查、单元测试批量补齐、日志分析、文档整理。
主会话仅负责整体决策、需求把控,将局部细分工作委派给Subagent执行,执行完成后仅返回结论,大幅降低主会话上下文压力;任务体量过小、业务代码频繁改动时,不建议拆分Subagent,会增加沟通成本。
七、多层安全权限管控,规避AI高危操作风险
现代AI编码工具可读写文件、执行终端命令、调用外部MCP服务,风险不再只是代码逻辑错误,还包含误删文件、篡改生产配置、泄露密钥、推送敏感代码等严重问题,仅靠Prompt提醒无法规避,必须落地多层工程化权限管控。
1. 基础文件访问限制
生产环境.env配置、证书、密钥、secrets目录等敏感文件,默认配置为禁止AI读取、修改,从源头杜绝信息泄露。
2. 高危操作分级管控
删除文件、数据库迁移、git push推送远程、修改CI流水线配置等操作,设置人工确认(ask)或直接拦截(deny);仅git diff、单元测试、代码格式化等低风险命令自动放行(allow)。Claude Code可通过/permissions查看、调整工具权限规则。
3. 多层防护体系
- PreToolUse Hook:AI执行终端命令前触发自定义校验逻辑,识别rm -rf、find -delete等高危命令变体,直接拦截执行并返回风险提示;
- 沙箱环境隔离:限制Bash命令可访问的文件系统路径、外部网络访问范围;
- CI流水线+人工审批:高风险模块(支付、鉴权、数据迁移)改动,强制人工Review通过才可合并,自动化测试全部通过为合并前置条件。
权限黑名单存在绕过可能性,无法覆盖所有高危命令变体,必须结合路径限制、Hook拦截、沙箱隔离、人工审核多重手段组合防护。
八、完整标准化日常开发流程
针对长期维护业务项目,我固定使用这套标准化开发流程,兼顾效率与稳定性:
- 切换干净工作区,新建专属功能分支;
- 编写轻量化Spec,明确目标、约束、验收标准;
- 匹配对应业务Skill,加载项目规则文件;
- 使用Claude Opus高端模型阅读代码、输出完整技术方案,确认方案后再进入编码环节;
- 将细分开发任务分配给平价模型分步实现,每完成一小段执行测试、核对diff,小步提交代码;
- 全部编码完成后,交由高端模型完成全量代码评审;
- 修复评审提出的缺陷,重新运行全套单元测试;
- 合并前人工复核核心业务diff;
- 涉及租户权限、资金、数据迁移等核心模块,补充变更文档、回滚方案、灰度发布策略。
全文总结
短期验证原型可以放开限制自由Vibe Coding,快速跑通基础功能;但只要代码需要长期迭代、线上交付,Git、需求规范、单元测试、代码评审等传统软件工程实践,不仅不能舍弃,还要用来约束AI生成代码。
AI代码生成速度越快,工程管控体系的价值就越高。过去规范、流程用来约束人的开发行为,如今新增一层作用:管控不受控的AI,从根源减少缺陷、降低返工、规避线上故障,实现高效、稳定、可维护的AI辅助开发。
更多推荐
所有评论(0)