AI Commit
智能 Git Commit 信息生成器
中文 | English

✨ 功能特性
🤖 AI 驱动生成
- 基于代码
git diff 自动分析变更内容,生成规范的 commit 信息
- 支持暂存区(
git diff --cached)和工作区(git diff)两种 diff 来源
- 一次生成多条候选方案(1-5 条),QuickPick 快速选择最合适的一条
- 大 diff 自动截断,提供"继续生成 / 仅分析部分文件 / 取消"三选项
- 自动检测变更范围(scope),基于受影响模块智能推断
- 项目上下文增强,附加项目名称和最近提交记录提升生成质量
🔌 OpenAI 兼容协议
- 兼容所有 OpenAI API 协议的服务商,即配即用
- 支持 API Key 环境变量引用(
${env:API_KEY_NAME})
- 连接测试功能,一键验证 API 配置是否正确
- 模型列表自动获取,从 API 拉取可用模型
🎨 多种提交风格
- Conventional Commits —
feat(auth): add login support
- Gitmoji —
✨ auth: add login support
- Bullet —
feat(auth): 添加登录功能: - 实现 JWT 认证; - 添加表单验证。
- Custom — 自定义格式模板,完全控制输出格式
📝 7 种 Prompt 模板
- Bullet(默认)— AI Commit 内置风格,标题末尾冒号,正文每行一个变更点
- Conventional Expert — 标准 Conventional Commits 格式
- Concise — 简洁风格,只生成标题行和简短正文
- Detailed — 详细风格,包含动机、实现方式、风险评估
- Semantic — 语义化风格,使用结构化 XML 格式分析变更
- Team — 团队协作风格,支持破坏性变更标记和 Issue 关联
- Custom — 自定义 Prompt 模板,支持占位符替换
⚡ 流式响应
- SSE 流式输出,首字显示时间 < 1 秒
- 请求发送
stream: true 参数,实时解析 SSE 事件流
- 支持
stream_options.include_usage 获取精确 Token 用量
- 可通过
enableStreaming 配置关闭,兼容不支持 SSE 的私有部署
🏷️ 模型配置组
- 创建多组 AI 配置(如 GPT-4o、DeepSeek、公司私有部署)
- 每组独立配置:模型、API Key、Base URL、温度、Max Tokens
- API Key 加密存储在 VSCode SecretStorage,安全可靠
- 一键切换配置组,状态栏实时显示当前组名
- 支持配置组的添加、编辑、删除操作
📊 用量统计
- 今日 / 本周 / 本月 Token 用量与费用实时统计
- 近 14 天用量趋势图,柱状图 + 费用折线叠加展示
- 日均用量、总调用次数、日均费用概览
- 日预算 / 月预算告警(80% 警告、100% 超限)
- 多币种支持(USD / CNY),可自定义汇率
- 自定义模型单价,覆盖内置单价表
- 用量数据导出为 JSON 或 CSV 格式
🔐 密钥安全
- API Key 存储在 VSCode SecretStorage,不写入 settings.json
- 支持 Settings Sync,密钥为空时自动提示重新输入
- 配置组 API Key 独立管理,重命名时自动迁移
🌐 代理支持
- HTTP/HTTPS 代理 —
http://proxy.example.com:8080
- SOCKS5 代理 —
socks5://proxy.example.com:1080(原生实现,无需额外依赖)
- 代理认证支持 —
http://user:password@proxy:8080
- 环境变量自动回退 —
HTTP_PROXY / HTTPS_PROXY / ALL_PROXY
📁 项目级配置
.aicommitrc.json 项目级配置文件,覆盖用户级设置
- 支持覆盖模型、温度、Max Tokens、提交风格等参数
- 文件监听与自动重载,修改即时生效
.aicommitignore 文件过滤,排除不需要分析的文件
📜 历史记录
- 自动保存每次生成的 commit 信息
- 历史列表查看与复用,QuickPick 快速选择
- 支持清空历史和导出诊断日志
- 数据保留 90 天后自动清理
✏️ 其他功能
- Amend 提交 — 对上次提交进行 amend 修改
- 取消生成 — 生成过程中随时取消
- 重新生成 — 对上次结果不满意,一键重新生成
- 多工作区支持 — 多根工作区下自动识别目标仓库
- AI 响应后处理管线 — 6 步清理管线,确保输出规范
- 标题行长度限制 — 可配置标题行最大字符数(默认 72)
📦 安装
VSCode Marketplace
即将发布
手动安装
- 从 Releases 下载
.vsix 文件
- 在 VSCode 中按
Ctrl+Shift+P,输入 Extensions: Install from VSIX...
- 选择下载的
.vsix 文件
从源码构建
git clone https://github.com/Vogadero/AiCommit.git
cd AiCommit
npm install
npm run build
npx vsce package
# 生成 aicommit-1.0.0.vsix,然后手动安装
🚀 快速开始
1. 配置 API
打开命令面板(Ctrl+Shift+P / Cmd+Shift+P),执行 AI Commit: 打开配置面板:
- API Key — 输入你的 AI 服务商密钥
- Base URL — 填入 API 地址(默认 OpenAI)
- 模型名称 — 如
gpt-4o、deepseek-chat 等
- 点击"测试连接"验证配置
或者创建模型配置组,一键切换不同服务商。
2. 生成 Commit
在源代码管理面板(Ctrl+Shift+G):
- 点击 ✨ 图标生成 commit 信息
- 或点击 ✓ 图标生成并直接提交
- 也可使用命令面板执行
AI Commit: 生成 Commit 信息
3. 选择提交
从 QuickPick 中选择满意的 commit 信息,自动填入提交框。
4. 自定义风格
在配置面板中选择提交风格,或编写自定义 Prompt 模板完全控制输出格式。
⚙️ 配置项
基础配置
| 配置项 |
说明 |
默认值 |
aicommit.enabled |
启用或禁用 AI Commit 插件 |
true |
aicommit.baseUrl |
API 基础 URL(需兼容 OpenAI 协议) |
https://api.openai.com/v1 |
aicommit.apiKey |
API 密钥(⚠️ 已弃用,请通过配置面板管理) |
- |
aicommit.model |
AI 模型名称 |
gpt-4 |
aicommit.temperature |
生成温度(0-2),值越低越确定 |
0.7 |
aicommit.maxTokens |
最大生成 Tokens |
500 |
提交配置
| 配置项 |
说明 |
默认值 |
aicommit.format |
提交风格:conventional / gitmoji / bullet / custom |
bullet |
aicommit.customFormatTemplate |
自定义格式模板(format 为 custom 时生效) |
<type>(<scope>): <description> |
aicommit.commitLanguage |
提交语言:English / Chinese / Follow VSCode |
English |
aicommit.diffSource |
Diff 来源:staged / unstaged |
staged |
aicommit.maxLength |
标题行最大字符数 |
72 |
aicommit.candidateCount |
候选方案数量(1-5) |
2 |
aicommit.autoDetectScope |
自动检测变更范围(scope) |
true |
aicommit.diffTruncateThreshold |
Diff 截断阈值(行数) |
3000 |
Prompt 模板
| 配置项 |
说明 |
默认值 |
aicommit.promptTemplate |
Prompt 模板:bullet / conventional-expert / concise / detailed / semantic / team / custom |
bullet |
aicommit.customPromptTemplate |
自定义 Prompt 模板内容(promptTemplate 为 custom 时生效) |
- |
模型配置组
| 配置项 |
说明 |
默认值 |
aicommit.modelGroups |
模型配置组列表 |
[] |
aicommit.activeModelGroup |
当前活跃配置组名称 |
- |
网络配置
| 配置项 |
说明 |
默认值 |
aicommit.enableStreaming |
启用 SSE 流式响应 |
true |
aicommit.proxy |
代理地址(HTTP/HTTPS/SOCKS5) |
- |
用量与预算
| 配置项 |
说明 |
默认值 |
aicommit.dailyBudget |
日预算(0 为不限制) |
0 |
aicommit.monthlyBudget |
月预算(0 为不限制) |
0 |
aicommit.currency |
货币单位:USD / CNY |
USD |
aicommit.exchangeRate |
自定义汇率(1 USD = ? CNY) |
7.2 |
aicommit.customModelPricing |
自定义模型单价(覆盖内置单价表) |
{} |
状态栏配置
| 配置项 |
说明 |
默认值 |
aicommit.showStatusBarConfig |
显示配置面板入口(齿轮图标) |
true |
aicommit.showStatusBarGroup |
显示当前配置组名称 |
true |
aicommit.showStatusBarGenerate |
显示生成入口(sparkle 图标) |
true |
其他配置
| 配置项 |
说明 |
默认值 |
aicommit.saveHistory |
保存 AI 生成历史记录 |
false |
aicommit.logLevel |
日志级别:error / warn / info / debug |
info |
aicommit.enableProjectContext |
启用项目上下文增强 |
false |
🎨 提交风格详解
Conventional Commits
feat(auth): add JWT-based user login
fix(api): handle null response from server
docs: update API documentation
refactor(utils): extract helper functions
Gitmoji
✨ auth: add JWT-based user login
🐛 api: handle null response from server
📝 docs: update API documentation
♻️ utils: extract helper functions
Bullet
feat(auth): 添加用户登录功能:
- 实现基于 JWT 的用户登录认证;
- 添加登录表单验证与 Token 刷新机制;
- 集成 OAuth 第三方登录并持久化登录状态。
Custom
使用自定义 Prompt 模板,完全控制输出格式和内容。支持变量替换和条件逻辑。
🌐 支持的 AI 服务商
| 服务商 |
Base URL |
模型示例 |
| OpenAI |
https://api.openai.com/v1 |
gpt-4, gpt-4o, gpt-3.5-turbo |
| DeepSeek |
https://api.deepseek.com/v1 |
deepseek-chat, deepseek-coder |
| 通义千问 |
https://dashscope.aliyuncs.com/compatible-mode/v1 |
qwen-turbo, qwen-plus, qwen-max |
| Moonshot |
https://api.moonshot.cn/v1 |
moonshot-v1-8k, moonshot-v1-32k |
| 智谱 AI |
https://open.bigmodel.cn/api/paas/v4 |
glm-4, glm-4-flash |
💡 任何兼容 OpenAI API 协议的服务均可使用,只需填入对应的 Base URL 和模型名称。
📋 命令列表
| 命令 |
说明 |
AI Commit: 生成 Commit 信息 |
分析 diff 并生成候选 commit 信息 |
AI Commit: 生成并提交 |
生成后自动提交 |
AI Commit: 重新生成 |
重新生成候选方案 |
AI Commit: 取消生成 |
取消正在进行的生成 |
AI Commit: 测试连接 |
测试 API 连接是否正常 |
AI Commit: 选择 AI 模型 |
从 API 获取可用模型列表 |
AI Commit: 打开配置面板 |
打开可视化配置面板 |
AI Commit: 切换模型配置组 |
QuickPick 切换配置组 |
AI Commit: 使用历史记录 |
查看并复用生成历史 |
AI Commit: 清空生成历史 |
清空所有历史记录 |
AI Commit: 导出用量数据 |
导出 Token 用量统计 |
AI Commit: 导出诊断日志 |
导出诊断信息用于问题排查 |
AI Commit: 修改上次提交信息 |
对上次提交进行 amend 修改 |
🛠️ 开发
# 克隆仓库
git clone https://github.com/Vogadero/AiCommit.git
cd AiCommit
# 安装依赖
npm install
# 编译(TypeScript 类型检查)
npm run compile
# 构建(esbuild 打包)
npm run build
# 监听模式(开发时自动重新编译)
npm run watch
# 打包 vsix
npx vsce package
# 调试 — 在 VSCode 中按 F5 启动扩展开发宿主
项目结构
src/
├── ai/ # AI 服务相关
│ ├── aiService.ts # AI 请求与响应处理(含 SSE、代理)
│ ├── promptBuilder.ts # Prompt 构建器
│ ├── promptTemplates.ts # 内置 Prompt 模板
│ ├── responsePipeline.ts # 响应后处理管线
│ └── tokenTracker.ts # Token 用量追踪
├── config/ # 配置管理
│ ├── configManager.ts # 配置管理器(含模型组、SecretStorage)
│ ├── historyManager.ts # 生成历史管理
│ └── projectConfig.ts # 项目级配置加载
├── git/ # Git 操作
│ └── gitService.ts # Git 服务(diff 获取、提交)
├── ui/ # 用户界面
│ ├── commandManager.ts # 命令管理器
│ ├── configWebview.ts # 配置面板 Webview
│ ├── scmButton.ts # 源代码管理按钮
│ └── statusBar.ts # 状态栏
└── utils/ # 工具函数
├── diffTruncator.ts # Diff 截断处理
├── errors.ts # 错误码与自定义错误
├── ignoreFile.ts # .aicommitignore 处理
└── logger.ts # 日志工具
📄 许可证
MIT License
Copyright (c) 2025 Vogadero
🤝 贡献
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建功能分支:
git checkout -b feature/amazing-feature
- 提交更改:
git commit -m 'feat: add amazing feature'
- 推送分支:
git push origin feature/amazing-feature
- 提交 Pull Request