首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >别让 AI 写完代码就跑了:Hooks + Pre-commit,给 AI 编码装上刹车

别让 AI 写完代码就跑了:Hooks + Pre-commit,给 AI 编码装上刹车

作者头像
用户5602664
发布2026-06-05 20:21:40
发布2026-06-05 20:21:40
10
举报

"AI 写的代码又快又多,但合进去之后才发现——有人在 commit 里留下了云服务密钥,有人让 AI 把生产库的表给改了,还有个同事的 Prompt 里暴露了客户手机号。这些问题不是 AI 的错,是我们的流程没拦住。"

在AI Coding阶段容易被低估的功能就是 Hooks机制——它不是让 AI 写得更快,而是让 AI 写得更安全。本文帮你在 AI 编码的五个关键时刻插入安全检查。

01 | 为什么光靠"人盯着"不够

AI 编码的速度是人的 5-10 倍。一个开发者在 IDE 里聊几句就能生成上百行代码。但问题也出在这里:

写得太快,快到人来不及检查。

传统的防线是这样的:代码写完了 → 提交 → PR → 人工 Review → 发现问题 → 打回修改。这条链路的平均时长是 2-4 小时。AI 呢?生成 100 行代码只要 30 秒。防线速度跟不上生成速度。

所以问题的本质不是"AI 写的代码质量差",而是"旧流程的设计假设是代码生产速度慢"。当生产速度翻了 10 倍,你不应该在终点加更多审查者,而应该在过程中就装上自动刹车。

这就是 Pre-commit Hooks 和 Qoder Hooks 要解决的问题。

02 | 防线要装在五个关键时刻

很多AI IDE引入了 Hook 机制,允许在 AI Agent 执行流程中插入自定义脚本。五个关键时刻:

时机

事件名

能干什么

能阻断吗

用户提交 Prompt 后

UserPromptSubmit

检查 Prompt 是否含敏感信息

✅ 能阻断

工具调用前

PreToolUse

拦截危险命令(rm -rf 等)

✅ 能阻断

工具调用后

PostToolUse

自动格式化代码、跑 Lint

不阻断

工具调用失败后

PostToolUseFailure

记录日志、发送告警

不阻断

Agent 停止时

Stop

保存对话历史、生成摘要

不阻断

把这五个时刻和传统的 Git Pre-commit 结合起来,你就有了一张完整的拦截网:

代码语言:javascript
复制
写代码时      L0  写时约束(Spec、Rules)
保存时        L1  IDE 检查(语法、类型)
commit 时     L2  Pre-commit Hook(Lint、单元测试)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
push 前       L3  Qoder Hook · 用户Prompt提交 → 敏感信息检查
              L3  Qoder Hook · 工具调用前 → 危险命令拦截
              L3  Qoder Hook · 工具调用后 → 自动格式化 + Lint
PR 时         L5  代码评审(AI Review + 人工 Review)
上线前        L6  部署前扫描

L2 和 L3 是"AI 编码场景"下最关键的两层。传统的 L2(Pre-commit)只能拦住常规问题(格式、基础安全),但 AI 特有的风险——Prompt 泄露敏感数据、生成危险命令、写入不该写的路径——必须在 L3 层拦截。

03 | 三个最有用的 Hook 脚本

脚本一:拦截危险命令

AI 有时候会在写代码的过程中执行 Shell 命令。如果一个 Prompt 让它"清理一下临时文件",它可能执行 rm -rf /tmp/cache。但这行命令如果少了 /tmp,后果不堪设想。

代码语言:javascript
复制
#!/bin/bash
# 保存为 ~/.lingma/hooks/block-dangerous.sh
# chmod +x ~/.lingma/hooks/block-dangerous.sh
input=$(cat)
command=$(echo "$input" | jq -r '.tool_input.command // ""')
# 黑名单:这些命令不管什么参数都拦截
if echo "$command" | grep -qE 'rm\s+-rf\s+/|DROP\s+TABLE|mkfs|dd\s+if=.*of='; then
  echo "🚫 危险命令已被 Qoder Hook 拦截: $command" >&2
  echo "如需执行此操作,请手动在终端中运行并确认。" >&2
  exit 2
fi
exit 0

配置到 AI IDE:

代码语言:javascript
复制
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.qoder/hooks/block-dangerous.sh"
          }
        ]
      }
    ]
  }
}

脚本二:Prompt 敏感信息检查

工程师有时候会在 Prompt 中粘贴包含客户数据的日志、带有 API Key 的配置文件、甚至数据库连接串。这些内容一旦上传到云端 AI 服务,就是合规事故。

代码语言:javascript
复制
#!/bin/bash
# 保存为 ~/.lingma/hooks/check-prompt.sh
input=$(cat)
prompt=$(echo "$input" | jq -r '.prompt // ""')
# 检测常见敏感信息模式
patterns=(
  'password\s*[:=]\s*\S+'
  'api_key\s*[:=]\s*\S+'
  'secret\s*[:=]\s*\S+'
  'token\s*[:=]\s*\S+'
  '1[3-9]\d{9}'
  'AKIA[0-9A-Z]{16}'
)
for pattern in "${patterns[@]}"; do
  if echo "$prompt" | grep -qiE "$pattern"; then
    echo "⚠️  你的 Prompt 可能包含敏感信息(匹配模式: $pattern)" >&2
    echo "请检查并脱敏后重新提交。这会触发合规风险。" >&2
    exit 2
  fi
done
exit 0

脚本三:自动格式化 AI 生成的代码

AI 生成的代码有时缩进、换行和项目的 ESLint 规则不一致。让 Hook 在 AI 写完文件后自动格式化:

代码语言:javascript
复制
#!/bin/bash
# 保存为 .lingma/hooks/auto-format.sh
input=$(cat)
file=$(echo "$input" | jq -r '.tool_input.file_path // ""')
# 只对前端项目生效
if [[ "$file" == *.tsx ]] || [[ "$file" == *.ts ]] || [[ "$file" == *.js ]]; then
  npx prettier --write "$file" 2>/dev/null
  echo "✓ 已自动格式化: $file"
fi
exit 0

04 | Pre-commit 和 Hooks 怎么配合

Pre-commit 管"提交前的那一瞬间",Hooks 管"AI 执行过程中的每一个关键节点"。两者不是替代关系,是上下游:

代码语言:javascript
复制
开发者写 Prompt → [UserPromptSubmit Hook: 检查敏感信息]
    ↓
AI 开始执行 → [PreToolUse Hook: 拦截危险命令]
    ↓
AI 写文件 → [PostToolUse Hook: 自动格式化]
    ↓
开发者 git add
    ↓
git commit → [Pre-commit Hook: Lint + 单元测试]
    ↓
git push → [CI 流水线]

一个完整的项目级 .pre-commit-config.yaml可能是这样的:

代码语言:javascript
复制
repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.6.0
    hooks:
      - id: trailing-whitespace
      - id: end-of-file-fixer
      - id: check-yaml
      - id: detect-private-key
      - id: detect-aws-credentials
  - repo: local
    hooks:
      - id: eslint
        name: ESLint
        entry: npx eslint --fix
        language: system
        types: [javascript]
      - id: qoder-review
        name: Qoder AI Review
        entry: qodercli review --staged
        language: system
        pass_filenames: false

配合 Qoder 的 settings.json,你给 AI 编码装了五道自动刹车。

05 | 从 Demo 到生产的最后一公里

很多团队卡在这里:Demo 跑通了,AI 确实能写代码。但要上生产,CTO 问的第一个问题就是——"安全吗?出了事谁负责?"

Hooks + Pre-commit 就是这个问题的答案。它不靠人盯着,不靠"我相信我的工程师不会犯错",而是靠机制

而且这套体系的部署成本很低:三个脚本加起来不到 50 行,复制粘贴、改权限、重启 IDE,15 分钟搞定。投入 15 分钟,给所有 AI 生成的代码装上一套免疫系统。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 沐然云计算 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01 | 为什么光靠"人盯着"不够
  • 02 | 防线要装在五个关键时刻
  • 03 | 三个最有用的 Hook 脚本
    • 脚本一:拦截危险命令
    • 脚本二:Prompt 敏感信息检查
    • 脚本三:自动格式化 AI 生成的代码
  • 04 | Pre-commit 和 Hooks 怎么配合
  • 05 | 从 Demo 到生产的最后一公里
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档