ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

一个 Hook 让 AI 每次写文件前自动检查编码规范,违规代码再也提交不进来

2026/9/1 7:46:43 拓冰建站 浏览量
一个 Hook 让 AI 每次写文件前自动检查编码规范,违规代码再也提交不进来 AI 生成代码有个问题它偶尔会忘记你的规范。尤其是对话轮数多了之后之前 steering 里的约束可能被稀释。我写了一个 preToolUse Hook每次 AI 要写文件时自动检查。相当于给 AI 装了个写之前先 lint的闸门。从此 AI 产出的代码合规率从 85% 到接近 100%。问题场景第 1 轮对话AI 老老实实用 dayjs 第 5 轮对话AI 突然用了 moment上下文稀释 第 8 轮对话AI 用了 class 组件忘了你说只用函数组件 你发现的时候 ├── 要么在 CR 时才看到 → 已经提了 MR ├── 要么在构建时 lint 报错 → 要来回改 └── 总之发现越晚修复成本越高解决方案preToolUse Hook{name:Code Standards Check,version:1.0.0,description:AI 写文件前自动检查是否符合编码规范,when:{type:preToolUse,toolTypes:[write]},then:{type:askAgent,prompt:在写入文件前请检查以下编码规范\n1. 是否引入了 moment应使用 dayjs\n2. 是否使用了 class 组件应使用函数组件\n3. 是否使用了 var应使用 const/let\n4. 日期格式化是否用了 dayjs 而非 new Date\n5. 样式文件是否使用 .m.less 后缀CSS Modules\n6. import 路径是否使用了 或 别名\n\n如果有违规请修正后再写入。如果全部合规继续执行写入。}}工作原理AI 准备写文件 ↓ preToolUse Hook 触发 ↓ AI 自我审查即将写入的内容 ↓ ┌─────────┐ ┌────────────┐ │ 发现违规 │ │ 全部合规 │ └────┬────┘ └─────┬──────┘ ↓ ↓ 修正代码 继续写入 ↓ 再次写入实际拦截案例案例 1moment 引入被拦截AI 在第 6 轮对话中准备写入importmomentfrommomentconstformatDate(date:string)moment(date).format(YYYY-MM-DD)Hook 触发后 AI 自动修正为importdayjsfromdayjsconstformatDate(date:string)dayjs(date).format(YYYY-MM-DD)案例 2样式文件后缀AI 准备创建styles.lessHook 提醒后改为index.m.less。案例 3路径别名// 准备写入import{Button}from../../../components/Button// Hook 修正后import{Button}from/Button为什么不只靠 SteeringSteering软约束 ├── 写在配置文件里 ├── AI 应该遵守 ├── 上下文长了可能被忽略 ├── 效果~85% 合规率 └── 类比贴在工位上的规范海报 Hook硬约束 ├── 每次写文件都触发 ├── AI 必须通过检查 ├── 不受上下文长度影响 ├── 效果~99% 合规率 └── 类比门禁刷卡不符合进不去两者结合效果最好Steering 让 AI 一开始就按规范写Hook 在最后关口兜底。进阶按文件类型差异化检查不同文件的规范不同可以在 prompt 里加判断逻辑{then:{type:askAgent,prompt:检查即将写入的文件\n\n如果是 .tsx/.ts 文件\n- 检查 import 规范别名、dayjs、函数组件\n- 检查导出方式优先 named export\n\n如果是 .m.less 文件\n- 检查是否使用了全局选择器应该都是局部类名\n- 检查是否有 !important尽量避免\n\n如果是 services/ 下的文件\n- 检查请求函数是否有返回类型\n- 检查是否使用了统一的 request 实例}}性能影响每次写文件额外耗时约 1-2sAI 自检 每天写文件次数约 30-50 次 每天总额外耗时约 1-2min vs 不用 Hook 的代价 ├── CR 发现规范问题 → 来回改15min/次 ├── lint 报错 → 回去修5min/次 ├── 按每天 3 次规范问题计算45min/天 ROI每天省 40 分钟值。配置建议建议放进 Hook 的规则 ├── 高频违规的moment、var、class 组件 ├── 机械性的路径别名、文件后缀 └── 难以事后修复的全局样式污染 不建议放的 ├── 主观性强的这个变量名不够语义化 ├── 需要全局上下文的这个组件应该提取出去 └── 频繁变化的规则每周都在调整的 你们有没有遇到 AI 生成代码偶尔出格的问题用什么方法来兜底完整 Skills 源码已开源github.com/sleepyccat/ai-native-workflow欢迎 Star ⭐ 和 PR。