GSDSE Git AI Commit
用你自己配置的任意 AI 模型(任何 OpenAI 兼容接口),以 Agent 模式分析 Git 变更,生成符合规范的提交信息。
不再受限于某一家的模型:填上 BaseURL + model + API Key 即可接入 OpenAI、DeepSeek、Kimi、通义、智谱、Claude/ Gemini 的中转网关、公司内部 LLM 网关、Ollama / vLLM / LM Studio 本地模型。
特性
Agent 模式,而不是「把 diff 丢给模型」
普通插件只做一次「diff → 模型 → 文本」。本扩展让模型自己决定还需要看什么:
| 工具 |
作用 |
get_changed_files |
列出本次变更的全部文件与 git 状态码 |
get_diff |
按路径、按暂存区/工作区拉取 diff |
get_recent_commits |
读取历史提交,学习本仓库既有的措辞与风格 |
read_file |
读取文件全文或指定行区间,理解变更上下文 |
list_files |
列出被跟踪文件,确认模块结构 |
search_code |
按正则检索符号定义与调用方 |
submit_commit_message |
提交最终结果(唯一被接受的产出方式) |
模型只有在信息足够时才会产出结果,因此提交信息不会出现「修改了 xx 文件」这类无信息量的描述,也不会编造 diff 中并不存在的功能。
自动降级,兼容性兜底
- 模型/网关不支持 Function Calling → 自动退化为单次生成模式。
- 不支持流式响应 → 自动改用非流式请求。
- 推理模型只认
max_completion_tokens、部分模型不允许传 temperature、网关未实现 tool_choice → 自动调整参数后重试。
提交信息规范可配置
- 风格:
Conventional Commits / Conventional + Emoji / Gitmoji / 纯文本
- 语言:简体中文 / English
type 白名单、scope 提示、标题长度上限、正文与脚注开关
- 团队自定义提示词(术语表、必须引用的 issue 规范等)
侧边栏可视化配置,不用翻设置页
活动栏的 Git AI Commit 面板提供完整的图形化配置:
- 顶部实时显示最终请求端点(
.../chat/completions)与 API Key、Agent 模式状态
- 模型服务(BaseURL / 模型 / API Key / 鉴权头 / 额外请求头)默认展开,其余参数折叠收拢
- 面板内直接测速(测试连接)、保存(可指定写入工作区或用户设置)、清除密钥、生成提交信息 / 生成并提交 / 取消 / 查看日志
- 表单值未保存也可以直接用于「测试连接」,确认无误再落盘
工程化细节
- 生成结果自动写入源代码管理(SCM)的提交输入框,确认后直接提交
- diff 排除规则(锁文件、构建产物、
dist/)与超长 diff 自动折叠,控制 token 消耗
- API Key 存储在 VS Code
SecretStorage,不写入 settings.json
- 进度通知可随时取消;输出面板提供
off / error / info / debug 四级日志,debug 级别可查看完整的模型请求与工具调用链
快速开始
- 安装扩展后点击活动栏的 Git AI Commit 图标,在 AI 模型配置 面板中填写
BaseURL、模型名称 和 API Key(本地模型可留空)。
- 点 测试连接 确认配置可用,再点 保存 写入设置(API Key 存入 SecretStorage)。
- 暂存你想提交的变更,在面板中点击 生成提交信息,或点击源代码管理标题栏的 ✨ 按钮、按
Ctrl+Alt+G。
- 生成结果会写入 SCM 提交输入框,确认后提交;也可以在面板中直接 生成并提交。
面板只是图形化入口,所有配置项仍等价于 settings.json 中的 gsdseGitAiCommit.*,两者双向同步。命令面板中的原有命令全部保留。
常见服务配置示例
// OpenAI
{
"gsdseGitAiCommit.baseUrl": "https://api.openai.com/v1",
"gsdseGitAiCommit.model": "gpt-4o-mini"
}
// DeepSeek
{
"gsdseGitAiCommit.baseUrl": "https://api.deepseek.com/v1",
"gsdseGitAiCommit.model": "deepseek-chat"
}
// Ollama(本地,无需 API Key)
{
"gsdseGitAiCommit.baseUrl": "http://localhost:11434/v1",
"gsdseGitAiCommit.model": "qwen2.5-coder:14b"
}
// Azure OpenAI 或自建网关(自定义请求头)
{
"gsdseGitAiCommit.baseUrl": "https://your-gateway.internal/v1",
"gsdseGitAiCommit.model": "your-deployment",
"gsdseGitAiCommit.apiKeyHeader": "api-key",
"gsdseGitAiCommit.apiKeyPrefix": "",
"gsdseGitAiCommit.extraHeaders": {
"X-Org-Id": "team-a"
}
}
baseUrl 只填到域名时会自动补 /v1;已包含路径(如 /openai/v1)则原样使用。
命令
| 命令 |
说明 |
默认快捷键 |
Git AI Commit: 打开 AI 模型配置面板 |
聚焦侧边栏配置面板 |
|
Git AI Commit: 生成提交信息 |
生成并写入 SCM 输入框 |
Ctrl+Alt+G / Cmd+Alt+G |
Git AI Commit: 生成提交信息(仅暂存区) |
严格只分析已暂存的变更 |
|
Git AI Commit: 生成提交信息(含未暂存变更) |
先 git add -A 再生成 |
|
Git AI Commit: 生成提交信息并提交 |
生成后直接 git commit |
|
Git AI Commit: 取消当前生成任务 |
中断正在进行的生成 |
|
Git AI Commit: 设置 / 清除 AI 模型 API Key |
管理密钥 |
|
Git AI Commit: 测试模型连通性 |
发一次最小请求验证配置 |
|
Git AI Commit: 查看运行日志 |
打开输出面板 |
|
配置项
| 配置 |
类型 |
默认值 |
说明 |
baseUrl |
string |
https://api.openai.com/v1 |
OpenAI 兼容接口地址 |
model |
string |
gpt-4o-mini |
模型名称 |
apiKeyHeader |
string |
Authorization |
API Key 所在请求头 |
apiKeyPrefix |
string |
Bearer |
API Key 前缀,留空则直接用原值 |
extraHeaders |
object |
{} |
额外请求头 |
temperature |
number |
0.2 |
采样温度 |
maxTokens |
number |
2048 |
单次响应最大 token |
requestTimeout |
number |
120000 |
单次请求超时(毫秒) |
useAgent |
boolean |
true |
是否启用 Agent 模式 |
maxAgentSteps |
number |
12 |
Agent 最大工具调用轮数 |
maxDiffChars |
number |
60000 |
注入上下文的 diff 上限,超出自动折叠 |
language |
zh-CN | en-US |
zh-CN |
输出语言 |
style |
enum |
conventional |
提交信息风格 |
commitTypes |
string[] |
feat/fix/docs/... |
type 白名单 |
scopeHint |
string |
"" |
scope 取值范围提示 |
extraPrompt |
string |
"" |
附加到系统提示词的自定义要求 |
subjectMaxLength |
number |
72 |
标题最大字符数 |
includeBody |
boolean |
true |
是否生成正文 |
writeToScmInput |
boolean |
true |
生成后写入 SCM 输入框 |
autoStageAll |
boolean |
false |
暂存区为空时自动暂存全部变更 |
excludePatterns |
string[] |
锁文件/构建产物等 |
从 diff 中排除的 glob |
logLevel |
enum |
info |
日志级别 |
工作原理
侧边栏配置面板 / SCM 标题栏 / 快捷键
│
▼
收集仓库快照(分支、暂存区、工作区)
│
▼
Agent 循环 ──► 模型请求 (tools schema)
▲ │
│ ├─ tool_calls ──► 执行本地工具(git / 文件 / 检索)
│ │ │
└───────────────┴──────────────────────┘
│
└─ submit_commit_message ──► 结构化结果
│
┌─────────────────┴─────────────────┐
▼ ▼
写入 SCM 提交输入框 直接 git commit
工具在扩展宿主进程内本地执行,diff 与文件内容只发送给你配置的模型服务;扩展本身不采集、不上传任何遥测数据。
开发与发布
npm install
npm run watch # 或 npm run compile
按 F5 启动扩展开发宿主调试。
打包与发布:
npm install -g @vscode/vsce
vsce package # 生成 .vsix
vsce login <publisher-id> # 首次发布需在 dev.azure.com 创建 PAT
vsce publish # 发布到 Marketplace
发布前请确认 package.json 中的 publisher 已改为你在 Marketplace 注册的 publisher ID,并补充 repository、icon 字段。
License
MIT