AI生成Git提交信息:VSCode插件实现与踩坑指南
直接使用 AI 生成 Git 提交信息这件事我一开始是抗拒的。作为写了十几年代码的人git commit 是我每天重复最多的动作之一我一度觉得提交信息这种事情必须亲力亲为因为它代表了你对这次改动的理解。直到某次大版本重构我在一天内需要提交几十次增量改动每次都对着终端发呆最后憋出一堆 update xxx、fix bug 这种毫无营养的废话。那一刻我意识到我不是不想写好提交信息而是人脑在高频切换上下文时天然就不适合做这种回头总结的工作。所以我做了个 VSCode 插件让 AI 在本地读取暂存区staged的 diff自动分析改动的目的和影响生成一条结构清晰的 Commit Message。整套流程跑通之后我体验到了前所未有的舒畅代码写完CtrlShiftG 呼出提交面板插件自动生成信息我只需要扫一眼、改一改、按回车。这篇文章就把完整的实现思路、代码细节和踩坑记录分享出来尤其是那些官方文档里不会写的部分希望对正在做类似工具或者想改进 Git 工作流的朋友有帮助。1. 为什么 Commit Message 值得用 AI 生成而不该再手写Git 提交信息是代码协作中最容易被低估的资产。很多人觉得能看懂就行但真正经历过大型项目维护的人都清楚一条好的 commit message 在三个场景下有不可替代的价值代码评审阶段Reviewer 需要快速判断这次改动的意图。如果你提交的是 fix评审者必须去 diff 里逐行找答案效率极低如果是 fix: 修复订单金额在并发场景下扣减两次的问题一眼就能定位风险点。回溯定位git bisect当线上出问题你用二分查找定位到某个可疑提交时这条提交信息直接决定了你是花两分钟确认这不是问题来源还是花两小时把整个 diff 重新读一遍。自动生成 Changelog很多发布流程已经用 Conventional Commits 规范从提交记录里自动提取版本更新说明。提交信息不规范化整个发布流程都会被拖累。但手写高质量的提交信息有一个天然的矛盾写代码时你处于构建模式而写提交信息需要切换到总结模式。这种切换有认知成本尤其是在高频提交的场合比如 TDD 的红绿循环、修 Bug 时的快速迭代大多数人会本能地选择写短一点、写快一点,于是全世界的代码仓库里充斥着 update、fix、wip、aaa。AI 生成提交信息的核心价值不是替代你思考而是把总结这件事的成本降到接近零然后把你从懒得写好变成稍微看一眼改一下就好。我测过很多次大部分时候 AI 生成的第一版已经比你手写的质量高尤其是对改动意图的概括和 impact 的识别。注意很多人担心 AI 生成提交信息会导致开发者不理解自己的改动。实测下来这是个伪问题——因为 AI 分析的是你自己刚写出来的 diff你只是用 AI 代替了组织语言这个环节而不是替你做决策。最终提交前你仍然会看一眼、确认一下。1.1 Commit Message 的质量标准是什么在设计这个插件之前我先明确一条好信息的判定标准。否则 AI 生成得再多也只是把垃圾格式化得更整齐。我自己内部定的四层标准从低到高层级标准示例L1 区分度能看出改了哪个模块update→update user moduleL2 意图能看出为什么改fix: 修复登录后 token 失效时无提示的问题L3 影响面能看出改了哪里、涉及什么fix(auth): 修复刷新 token 竞态导致用户被登出L4 可追溯能关联到业务/需求上下文feat(order): 支持批量取消订单关联 #4521大多数手写的提交信息停留在 L1而 AI 只要给到足够的 diff 上下文和清晰的 prompt稳定达到 L2-L3 是完全可行的L4 需要额外注入分支名或 issue 信息我会在后面的配置章节展开。1.2 到底哪些类型的改动最适合 AI 生成我在实践过程中发现不同类型的改动AI 生成的收益截然不同最适合medium 规模的增量改动20-300 行 diff、跨文件小改动改了一个接口签名导致 N 个调用方跟着变、依赖升级。这类改动脉络清晰但总结耗时AI 一把梭就能给出非常好的概括。较适合新功能主体提交几百到上千行需要你在 prompt 里强调分点概括主要模块效果也不错。不太适合超大改动的 merge 提交、包含大量二进制文件或 lockfile 变更的提交。diff 太长会稀释语义AI 容易给出大而空的信息。我的做法是对这种情况自动降级为只列变更文件名。所以你一定要明白让 AI 生成提交信息不是在逃避思考而是把思考集中在最有价值的部分比如判断 AI 概括得对不对、补充业务上下文这是完全不同的工作方式。2. AI 分析 Commit 信息的技术链路从 diff 到规范信息弄明白为什么之后具体实现就清晰了。整个插件的核心链路可以拆成五步用户在 VSCode 里打开源代码管理面板或者按快捷键插件读取当前工作区中已暂存staged的文件变更内容将 diff 内容、文件列表和系统提示词system prompt组装成请求调用 AI 接口获取生成的提交信息把结果写回 VSCode 的提交输入框等待用户确认这条链路看起来简单真正实现过之后我才发现每一步都有比想象中更多的细节。下面逐一拆解。2.1 用 VSCode 原生 API 拿到精确的 diff 数据插件运行在 VSCode 扩展宿主中读取 git 状态最直接的方式是通过vscode.scm相关 API以及vscode.workspace.fs读取文件内容。获取暂存区 diff我使用的是git diff --cached。注意这里必须加--cached它代表对比的是已暂存内容和HEAD上一次提交之间的差异。很多人第一次写会拿git diff直接对比工作区改动但那其实是未暂存的内容生成的提交信息和你实际要提交的东西对不上。我用 child_process 异步执行命令获取 diffconst { exec } require(child_process); const util require(util); const execAsync util.promisify(exec); async function getStagedDiff(cwd) { // --cached: 只看已暂存的改动 // --stat: 附加统计信息方便 AI 了解影响面 // -U200: 让 diff 包含更多上下文行AI 能更好理解改动背景 const cmd git diff --cached --stat --U200; const { stdout } await execAsync(cmd, { cwd, maxBuffer: 1024 * 1024 * 10 }); return stdout; }这里有个细节值得单独说-U200表示每个 diff 块包含 200 行上下文。这个参数是我反复实验中总结出来的最佳实践。如果上下文太少默认 3 行AI 经常无法判断函数用途从而乱猜意图上下文太多又会撑爆 token 上限增加请求失败概率。200 行是一个不错的平衡点能让你看到完整函数体也不会让整个 diff 过分膨胀。2.2 提交信息的规范框架让 AI 有章法可循仅仅把 diff 扔给 AI 是不够的你必须给它一个答题框架。我采用业界最通用的Conventional Commits 规范因为它和大多数团队的 git 工作流能无缝衔接后续无论是semantic-release还是commitlint都能直接吃这套格式。type[optional scope]: description [optional body] [optional footer(s)]我在 system prompt 里对 AI 的要求如下type 只能取feat / fix / docs / style / refactor / perf / test / build / ci / chore / revertscope 要尽量从改动模块中推断比如 auth、order、cart、pipeline 这种有意义的命名空间description 用祈使语气不超过 50 个字符像一句命令而不是描述如果 diff 超过一个明显的功能模块body 里用无序列表分点列出关键改动检测到可能引入破坏性变更BREAKING CHANGE时必须在 footer 里标注有了这套框架AI 的输出稳定性和可用性大幅提升。实测下来Coverage 接近 100% 的提交符合规范偶尔有个别 type 判断不够准但整体已经远超团队里大部分人的手写质量。2.3 请求拼装的完整示例下面是一个组装到调用 AI 前的完整示例你可以直接参考interface GenerateCommitMessageOptions { diff: string; fileList: string[]; model: string; extraContext?: string; // 例如当前分支名、issue 号等 } function buildPrompt(opts: GenerateCommitMessageOptions): string { const fileSummary opts.fileList.join(, ); const branchContext opts.extraContext ? \n补充背景当前分支 ${opts.extraContext}请结合它推断本次改动目标。 : ; return 你是一个擅长分析代码 diff 并编写高质量 Git 提交信息的专家。 请基于以下暂存区 diff 生成 1-2 条候选提交信息要求符合 Convention Commits 规范。 规则: - type 从 feat/fix/docs/style/refactor/perf/test/build/ci/chore/revert 中选择 - scope 必须是能体现改动模块的简短名词如 auth、order、config - description 用祈使句不超过 50 字符概括最主要改动 - 如果改动涉及多个逻辑模块用 body 分点说明 - 如果是破坏性变更footer 标注意 BREAKING CHANGE 本次改动的文件列表: ${fileSummary} ${branchContext} Diff 内容: ${opts.diff} 请直接输出提交信息不要输出解释。; }2.4 防止 AI 编造diff 信息需要边界实际使用中最让我头疼的一个问题是AI 偶尔会脑补出 diff 里不存在的改动。比如你只改了一个变量的初始化方式它却给你总结出重构了模块的架构。原因是 AI 在生成时会把训练知识里的常见模式补进来而这种补充恰恰是 commit message 里最要不得的——提交信息必须严格基于本次实际改动。我加的约束手段有三个非常好用在 system prompt 里特别强调严格基于给出的 diff 内容做总结不得补充 diff 中不存在的改动或意图。增加温度参数temperature到 0.2让输出更保守。设置响应格式为纯文本关闭那些花里胡哨的 Markdown 解释防止 AI 在信息里加入这是我生成的之类的废话或过多的分析过程。这套组合拳打下来编造情况基本消失。如果还不是特别稳可以考虑在生成后做一轮自校验让 AI 对照自己生成的 commit message检查每一条是否能从 diff 中找到依据但这会多消耗一次请求我默认没开。3. 从零搭一个 Commit AI 插件核心代码与 VSCode 配置细节如果你只是想用现成的插件跳过这一章直接看后面的配置建议。但如果你想做一个适合自己团队的插件或者想理解这类工具的内部原理这章是核心。3.1 工程骨架与 package.json 关键字段用官方脚手架yo code生成 TypeScript 工程后最重要的就是package.json里的这两个字段contributes.commands和activationEvents。{ name: commit-ai, displayName: Commit AI, version: 0.0.1, engines: { vscode: ^1.82.0 }, categories: [SCM Providers, Other], activationEvents: [ onCommand:commit-ai.generate, onCommand:commit-ai.generateFromWorkingChange ], main: ./out/extension.js, contributes: { commands: [ { command: commit-ai.generate, title: Commit AI: Generate Commit Message (Staged) }, { command: commit-ai.generateFromWorkingChange, title: Commit AI: Generate Commit Message from Working Changes } ], keybindings: [ { command: commit-ai.generate, key: ctrlshiftg ctrlshifta, when: scmProvider git } ], configuration: { title: Commit AI, properties: { commitAi.apiKey: { type: string, default: }, commitAi.baseUrl: { type: string, default: https://api.openai.com/v1 }, commitAi.model: { type: string, default: gpt-4o-mini } } } } }提示activationEvents这块一定要写清楚否则 VSCode 可能不会在点击命令时激活扩展。低版本 VSCode 不推荐用通配符*激活它会拖慢启动速度现在新版本已经有自动生成的 activation events但自己写全总没错。第一版我犯过一个很低级的错误把快捷键设成了ctrlshiftg ctrlshiftg结果根本冲突。Git 的源代码管理视图默认快捷键是CtrlShiftG再叠加一个相同的组合会覆盖默认行为。最终我选了CtrlShiftA这个冷门组合作为前缀实测不冲突。3.2 命令注册与提交框回填的核心逻辑下面这段是插件的核心逻辑注册命令读取 diff调接口把生成结果回填到 VSCode 的提交输入框。import * as vscode from vscode; import { getStagedDiff } from ./git; export function activate(context: vscode.ExtensionContext) { const disposable vscode.commands.registerCommand(commit-ai.generate, async () { const cwd vscode.workspace.workspaceFolders?.[0]?.uri.fsPath; if (!cwd) { vscode.window.showWarningMessage(请先打开一个 Git 工作区); return; } // 1. 获取暂存区的 diff const diff await getStagedDiff(cwd); if (!diff) { vscode.window.showErrorMessage(暂存区没有改动请先 git add); return; } // 2. 展示等待动画 const status vscode.window.setStatusBarMessage($(sync~spin) Commit AI 正在分析改动...); try { const message await generateCommitMessage(diff); // 3. 把生成结果写入 SCM 输入框 const scmInput getScmInputBox(); if (scmInput) { scmInput.value message; } vscode.window.showInformationMessage(Commit 信息已生成请确认后提交); } catch (err) { vscode.window.showErrorMessage(生成失败: ${err.message}); } finally { status.dispose(); } }); context.subscriptions.push(disposable); } function getScmInputBox(): vscode.SourceControlInputBox | undefined { const scm vscode.scm.getSourceControls().find((control) control.id git); return scm?.inputBox; }这里最关键的一行是scmInput.value message。我最初想的是生成完后打开一个临时文件让你拷贝后来发现完全没必要——VSCode 的 Source Control API 直接暴露了提交输入框对象赋值即可体验和手写一模一样。3.3 为什么首屏版本要选按需命令而不是自动生成你可能好奇为什么不做成暂存区一变就自动生成的自动模式我做了实验最后放弃了。原因有三API 调用成本在你每次git add后都触发一次请求一天下来几十次调用浪费钱也浪费额度。状态不稳定写代码的时候 diff 是持续变化的自动生成的结果往往基于半成品代码信息质量差。心智负担自动弹出来的提交信息会制造一种被打断感反而降低写代码的流畅性。所以最终设计是按需触发你想提交时才调一次。这更符合真实开发流的节奏。4. AI 服务接入路径为什么我用兼容接口而不是各种 SDK核心代码有了接下来是整个系统里最需要设计权衡的一环怎么接入 AI 能力。我见过不少开源项目在这里踩坑所以单独用一章讲。4.1 OpenAI 兼容接口才是稳定且多选的接入方式如果你最初想的是直接装官方 SDK 一把梭相信我别这样做。SDK 版本更新频繁、参数变化快而且各家 SDK 风格还不统一后面想切换模型提供方时得重写一大片代码。我的做法是只对接 OpenAI 兼容的 HTTP 接口。现在市面上大部分模型服务包括很多国内可以直接访问的服务商都提供这种兼容端点它本质上就是一个标准的 POST 请求返回 JSON。这样的话换模型提供方只需要改baseUrl和apiKey两个配置代码完全不用动。具体请求我用axios和zodimport axios from axios; import { z } from zod; const ChatCompletionSchema z.object({ choices: z.array(z.object({ message: z.object({ content: z.string() }) })) }); async function generateCommitMessage(diff: string): Promisestring { const config vscode.workspace.getConfiguration(commitAi); const apiKey: string config.get(apiKey) || ; const baseUrl: string config.get(baseUrl) || ; const model: string config.get(model) || ; if (!apiKey) { throw new Error(请在设置中配置 commitAi.apiKey); } const response await axios.post( ${baseUrl.replace(/\/$/, )}/chat/completions, { model, messages: [ { role: system, content: SYSTEM_PROMPT }, { role: user, content: buildPrompt({ diff }) } ], temperature: 0.2, max_tokens: 500 }, { headers: { Content-Type: application/json, Authorization: Bearer ${apiKey} }, timeout: 30000 } ); const data ChatCompletionSchema.parse(response.data); return data.choices[0].message.content.trim(); }这里zod做响应校验特别有用。有一次某个服务商改了返回结构字段把message.content移了个位置我的代码立刻报错而不是静默输出空白信息排查起来省了很多时间。4.2 本地模型的接入一条被低估的路线如果你所在团队对数据隐私有要求或者不想在每次 commit 时把代码 diff 传到外部服务尤其是未发布的业务代码本地模型是更好的选择。现在的个人电脑甚至比几年前的公司服务器都强跑一个小参数量的代码模型完全够用。我的经验是选 7B-14B 参数量的模型在量化4bit之后普通游戏显卡甚至 Apple Silicon 的 MacBook 都能流畅跑。实测下来一个 14B 模型生成的 commit message 在规范性上可以达到 GPT-3.5 的七八成水平对付日常提交足够了。接入逻辑不变只要本地加载的服务比如 Ollama 或 vLLM提供了 OpenAI 兼容接口你只需要改配置baseUrl: http://127.0.0.1:11434/v1 model: qwen2.5-coder:7b apiKey: ollama # 本地服务通常不校验 key随便填用本地模型最大的好处是diff 可以完整进 prompt不怕泄露也没有 token 费用顾虑。我甚至把-U200提高到了-U500让模型看到更多上下文提交信息质量又上了一个台阶。如果你刚入门我建议从 Ollama 开始二十分钟就能跑起来。4.3 成本控制模型别选最大的如果你走云端 API模型选择直接决定了成本和体验。我用过几个模型的对比感受如下模型生成质量速度成本适用场景GPT-4o-mini中上规范性强快低日常提交首选Claude 3.5 Haiku中上对代码意图把握准较快低追求质量的日常选择DeepSeek-V3高处理长 diff 更强快低大 diff 或复杂场景本地 7B 模型够用偶尔不规则中0隐私敏感或不差电费我个人的结论是不要用旗舰大模型做提交信息生成。这件事不需要世界级模型mini / haiku 级别足够旗舰模型生成的信息并没有质变级的提升但 token 费用贵了十倍。省下来的钱花在 CI 上不香吗。5. 实测中的翻车现场与排查链路不只是一堆网络错误工具能用和工具好用之间隔着一条长长的踩坑记录。下面这些坑我建议你抄下来大概率也会遇到。5.1 网络请求被代理规则拦截VSCode 插件的特别之处第一个大坑。我在配置好密钥后测试发现请求直接卡死直到超时。最诡异的是命令行里用 curl 测同样的地址完全正常浏览器也能打开就是 VSCode 插件里请求失败。排查链路如下先看本地代理设置system_proxy、HTTP_PROXY等环境变量是有的。检查 VSCode 进程环境变量发现扩展宿主进程并不继承终端里的代理变量尤其是 macOS 的 launchd 环境 VS shell 环境差异很大。尝试给 axios 请求显式设置proxy配置指向本地代理端口可以通了。过程很痛苦根因也很简单VSCode 扩展宿主的网络环境是独立于终端 shell 的。你在终端里配好的代理VSCode 根本不知道。解决方案是扩展启动时读取配置中的代理地址手动传给 HTTP 客户端。function getProxyConfig(): { host: string; port: number } | undefined { const proxy process.env.HTTPS_PROXY || process.env.https_proxy; if (proxy) { // 解析如 http://127.0.0.1:7890 const match proxy.match(/http:\/\/([^:]):(\d)/); if (match) return { host: match[1], port: parseInt(match[2], 10) }; } return undefined; }然后在 axios 请求里加上proxy字段。如果你们团队走的是统一网络出口不涉及本地代理这步可以跳过。但如果你发现命令里一切正常、VSCode 里死活连不上90% 是这个原因。5.2 diff 内容过大导致上下文溢出第二个高频坑是 diff 超过模型上下文窗口。我第一次在重构分支上测试一次改了 40 多个文件diff 内容轻松超过了几万 token接口直接返回超时 / 400 错误。我的处理策略分三层由简单到复杂分层摘要当 diff 太大时放弃一次性喂全部 diff改为先让 AI 看文件名列表和每文件的--stat统计生成一个大纲再挑出重点文件让 AI 细看。这需要两次请求但能处理任意大小的 diff。分文件生成再聚合更极端的做法是逐文件生成信息最后再让 AI 汇总去重。这是最稳的方案但速度慢。懒人降级设置一个阈值比如 800 行 diff 或 200KB超过后只把git diff --cached --name-only的结果交给 AI让它按文件清单输出结构化信息。const DIFF_SIZE_LIMIT 800; async function getOptimizedDiff(cwd: string, diff: string) { if (diff.split(\n).length DIFF_SIZE_LIMIT) return diff; // 降级方案只取文件清单和 stat const files await execAsync(git diff --cached --name-only, { cwd }); const stat await execAsync(git diff --cached --stat, { cwd }); return 文件清单:\n${files.stdout}\n\n文件统计:\n${stat.stdout}\n\n(注意: 由于 diff 过大本次只提供文件级摘要); }这个降级方案生成的提交信息虽然不如完整 diff 精准但至少不会报错而且文件清单本身就能提示影响面比完全不可用要强得多。5.3 生成结果出现表情符号或非规范文本某次测试我收到一条带着 表情的 commit message而且 type 用了feat✨。第一反应是看起来有个性但很快意识到——这玩意儿在 Conventional Commits 的自动解析器里会直接崩掉而且团队 CI 的 commitlint 也会拦下。问题是模型太放飞自我了。解决方式把temperature压到 0.1-0.2。在 system prompt 里显式禁用任何 Markdown、emoji、引用符号装饰。生成后做一步正则清洗把非 ASCII 特殊符号剥掉function sanitizeCommitMessage(raw: string): string { return raw .replace(/[*_#~]/g, ) // 去掉 Markdown 标记 .replace(/[^\x00-\x7F]/g, ) // 去掉非 ASCII包括 emoji如果不需要多语言场景 .replace(/\n{3,}/g, \n\n) // 压缩多余空行 .trim(); }注意如果你的团队需要中文提交信息别用上面这个[^\x00-\x7F]正则它会删掉所有中文。针对禁止 emoji 和 Markdown的需求改用replace(/[\u{1F300}-\u{1FAFF}\u{2600}-\u{27BF}]/gu, )即可。5.4 调试建议把这个工具做成透明盒子再分享一个通用调试思路让 AI 的部分可观察。我会在扩展里加一个commitAi.debug配置打开后把每次请求的完整 prompt 和响应写到 workspace 下的.commit-ai-debug.log。一旦生成质量不对劲打开日志一看就知道是 prompt 问题还是 diff 数据问题而不是对着结果瞎猜模型智商。排查链路总结成五行1. 生成结果为空? → 查 API key / baseUrl / 网络代理 2. 生成结果质量差? → 看 debug log 里的 prompt 是否完整diff 是否过大被降级 3. 生成结果不规范? → 看 temperature 是否太高system prompt 是否够硬 4. 命令没反应? → 查 activationEvents / keybindings 是否冲突 5. 提交后格式报错? → 检查 sanitize 逻辑确认没有隐藏字符或 emoji6. 放进日常 Git 工作流提交信息工具的高级用法与边界插件跑通后我很快发现它不只是偷懒工具还能反哺整个团队的 git 协作规范。这里分享几个实际用得上的组合玩法。6.1 结合git commit --amend找回那些写废了的提交信息大概率你会遇到这种情况临时赶工随手提交了一条 wip隔天打算整理历史时又不想 reset。之前一直用git commit --amend手工改现在可以直接用 AI 生成补充信息流程非常舒服# 先把改动追加到暂存区如果还没提交完 git add -A # 修改最近一次提交信息并保留原改动 git commit --amend关键点在于AIs 生成的工具它是在现在的时间点分析整个暂存区 diff如果你刚reset --soft HEAD~1把上一次提交拉回暂存区会得到一个剔除之前提交后剩下的净改动的 diffAI 就能基于这个净改动给出更准确的提交信息这比手工补写要省力得多。实操里我喜欢配合 VSCode 的快捷键CtrlShiftG打开源代码管理→CtrlShiftA触发 AI 生成→ 在输入框里微调 →CtrlEnter提交。整个流程五秒内完成几乎不打断心流。6.2 把插件扩展成团队规范守卫如果你在带团队除了自己用还可以考虑在插件里加一个提交前校验模式。做法是在package.json里加一个新的命令commit-ai.validate它不生成新信息而是让 AI 分析当前的提交信息是否符合 Conventional Commits并返回修正建议。这样新人提交的时候可以先跑一遍把提交信息不合格的反馈从 CI 提前到本地。不过这种守门员模式有一个实际风险它会在每次提交前多消耗一次 API 调用触发频率高费用会上涨得比较快。一个变通方案是只对feat和fix类型做校验这两类最常被用于自动生成 changelogchore、test类型直接跳过。6.3 多语言团队的提示词适配如果你的团队用中文写提交信息AI system prompt 需要做一个小小的调整明确说明描述部分使用中文type 和 scope 保持英文。千万不要写用中文输出完事否则模型可能会把feat直接翻译成功能changelog 脚本就罢工了。描述部分使用简洁中文type 和 scope 必须使用英文小写。 示例: fix(auth): 修复刷新令牌竞态导致重复登录的问题实测下来中英混排的提交信息在团队内部接受度最高既能保留机器可解析的规范前缀又能让不了解上下文的同事快速读懂改动意图。6.4 哪些场景该敬而远之最后说点泼冷水的话不是所有提交都该用 AI 生成。我内部给插件设了几个禁用场景宁可手写也不让 AI 接手单个文件单行改动比如只改了一个拼写错误手写一行fix: correct typo in README两秒钟搞定叫 AI 反而多一次网络请求。衍合rebase和 merge 提交这类提交的 diff 往往包含大量别人的代码AI 会总结出牛头不对马嘴的信息。带有强业务上下文的需求提交比如为双十一活动调整库存阈值AI 只能看到代码层的改动看不到活动背景。这种情况需要你在 prompt 里手补上下文否则生成结果必然是表面化的技术描述缺失业务价值。这个边界意识很重要。工具是放大器——放大你原本的规范性也放大你的偷懒。搞清楚哪些场景用工具、哪些场景必须亲自来才是真正把 AI 用好的关键。我自己的最终习惯是把生成提交信息当成第一版草稿永远允许自己改。AI 给我的东西可能 90% 就对了但那 10% 的补充比如关联 issue 号、标注依赖变更才是这条 commit message 区别于流水账的关键。这个工作流跑起来之后我再也没有对着终端发过呆这也算是从工具里赚回了一点时间。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →