# AICodeReview **Repository Path**: dyx88168/AICodeReview ## Basic Information - **Project Name**: AICodeReview - **Description**: 基于 Agent Framework (MAF)框架 AI 大模型的 C# 代码审查工具,支持多种国产及国际 AI 模型,提供命令行和 Visual Studio 扩展两种使用方式。在代码提交前自动进行智能审查,帮助开发者发现潜在的代码缺陷、性能瓶颈和安全漏洞。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 0 - **Created**: 2026-04-15 - **Last Updated**: 2026-07-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CodeReviewAI 基于 AI 大模型的 C# 代码审查工具,支持多种国产及国际 AI 模型,提供命令行和 Visual Studio 扩展两种使用方式。在代码提交前自动进行智能审查,帮助开发者发现潜在的代码缺陷、性能瓶颈和安全漏洞。 ![提交前AI Code Review](TestConfigLoad/codereview.png) ![设置AI大模型](AI_setting.png) ## 功能特性 ### 多模型支持 支持 4 种 AI 大模型,可自由切换: | 模型 | 适配器 | 默认模型 ID | 特点 | |------|--------|-------------|------| | 豆包 (Doubao) | `DoubaoAdapter` | `doubao-seed-2-0-code-preview-260215` | 专注中文技术栈,代码质量与性能优化 | | 千问 (Qianwen) | `QianwenAdapter` | `qwen-plus` | 强调安全漏洞检测(SQL注入、XSS、空引用) | | OpenAI | `OpenAIAdapter` | `gpt-4-turbo` | 英文审查,.NET/ASP.NET Core 最佳实践 | | 智谱 (Zhipu) | `ZhipuAdapter` | `glm-4` | 中文技术术语,本地化文档引用 | ### 智能代码审查 - **Git Diff 分析**:自动获取 Git 仓库中的代码变更,仅审查修改的代码行及其上下文 - **C# 专项审查**:仅对 `.cs` 文件进行审查,针对 .NET 6/8、C# 10/11、ASP.NET Core 技术栈 - **RCIF 提示词框架**:使用 Role-Context-Instruction-Format 结构化提示词,确保审查结果规范 - **优先级标注**:自动识别高优先级问题 `[高优先级]` 和一般建议 `[建议]` - **结构化输出**:每个问题包含位置、原始代码、改进建议、解释和参考文献 ### 审查结果缓存 - 基于 SHA256 哈希的审查结果缓存,避免重复调用 API - 可配置缓存过期时间(默认 30 分钟) ### Git 集成 - **Pre-commit Hook**:安装 Git 钩子,在 `git commit` 时自动触发 AI 审查 - **信号文件机制**:通过文件信号与 Visual Studio 扩展通信,实现跨进程审查 - **自动提交**:审查通过后可自动执行 git commit/push 操作 ### Visual Studio 扩展 - **审查窗口**:左右分栏展示修改代码与 AI 改进建议 - **模型选择**:在审查窗口中实时切换 AI 模型 - **一键操作**:审查完成后可直接提交本地暂存、推送、或拉取后推送 - **设置窗口**:图形化配置默认模型、API 密钥和缓存时间 - **暗色主题**:与 Visual Studio 暗色主题一致的 UI 风格 ## 项目结构 ``` CodeReviewAI/ ├── config/ │ └── config.json # 模型配置文件 ├── src/ │ ├── CodeReviewAI.Core/ # 核心库 │ │ ├── Adapters/ # AI 模型适配器 │ │ │ ├── IModelAdapter.cs # 适配器接口 │ │ │ ├── ModelAdapterFactory.cs # 适配器工厂 │ │ │ ├── OpenAIAdapter.cs # OpenAI 适配器 │ │ │ ├── DoubaoAdapter.cs # 豆包适配器 │ │ │ ├── QianwenAdapter.cs # 千问适配器 │ │ │ └── ZhipuAdapter.cs # 智谱适配器 │ │ ├── Git/ │ │ │ └── GitService.cs # Git 操作服务 │ │ ├── Models/ │ │ │ ├── GitDiffEntry.cs # Git Diff 数据模型 │ │ │ ├── ModelConfig.cs # 模型配置模型 │ │ │ ├── ReviewIssue.cs # 审查问题模型 │ │ │ └── ReviewResult.cs # 审查结果模型 │ │ ├── Prompts/ │ │ │ ├── PromptTemplates.cs # 提示词模板 │ │ │ └── RcifPromptBuilder.cs # RCIF 提示词构建器 │ │ └── Services/ │ │ ├── CodeReviewService.cs # 代码审查服务 │ │ ├── ICodeReviewService.cs # 审查服务接口 │ │ └── ReviewCacheService.cs # 审查缓存服务 │ ├── CodeReviewAI.Console/ # 命令行工具 │ │ └── Program.cs # CLI 入口 │ └── CodeReviewAI.VSExtension/ # Visual Studio 扩展 │ ├── CodeReviewAIPackage.cs # VS 扩展主包 │ ├── Commands/ │ │ ├── ReviewBeforeCommitCommand.cs # 审查命令 │ │ └── ReviewSettingsCommand.cs # 设置命令 │ └── UI/ │ ├── ReviewResultWindow.xaml(.cs) # 审查结果窗口 │ └── SettingsWindow.xaml(.cs) # 设置窗口 └── CodeReviewAI.slnx # 解决方案文件 ``` ## 配置说明 配置文件位于 `config/config.json`,格式如下: ```json { "DefaultModel": "doubao", "CacheExpirationMinutes": 30, "Models": { "doubao": { "PromptPrefix": "你是一名资深C#代码审查专家...", "ApiUrl": "https://ark.cn-beijing.volces.com/api/v3", "ApiKey": "your-doubao-api-key", "ModelId": "doubao-seed-2-0-code-preview-260215", "Temperature": 0.7, "TopP": 0.9, "MaxTokens": 2000 }, "qianwen": { "PromptPrefix": "你是一名资深C#代码审查专家...", "ApiUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1", "ApiKey": "your-qianwen-api-key", "ModelId": "qwen-plus", "Temperature": 0.7, "TopP": 0.9, "MaxTokens": 1000, "StopSequences": [ "\n#" ] }, "openai": { "PromptPrefix": "You are a senior C# code reviewer...", "ApiUrl": "https://api.openai.com/v1", "ApiKey": "your-openai-api-key", "ModelId": "gpt-4-turbo", "Temperature": 0.7, "TopP": 0.9, "MaxTokens": 2000 }, "zhipu": { "PromptPrefix": "你是一名资深C#代码审查专家...", "ApiUrl": "https://open.bigmodel.cn/api/paas/v4", "ApiKey": "your-zhipu-api-key", "ModelId": "glm-4", "Temperature": 0.7, "TopP": 0.9, "MaxTokens": 2000, "ExtraParameters": { "response_format": { "type": "markdown" } } } } } ``` ### 配置项说明 | 字段 | 说明 | 默认值 | |------|------|--------| | `DefaultModel` | 默认使用的模型键名 | `"doubao"` | | `CacheExpirationMinutes` | 审查结果缓存过期时间(分钟) | `30` | | `Models..PromptPrefix` | 模型专属提示词前缀 | 各模型预设 | | `Models..ApiUrl` | API 端点地址 | - | | `Models..ApiKey` | API 密钥 | - | | `Models..ModelId` | 模型标识符 | - | | `Models..Temperature` | 生成温度 | `0.7` | | `Models..TopP` | Top-P 采样参数 | `0.9` | | `Models..MaxTokens` | 最大生成 Token 数 | `2000` | | `Models..StopSequences` | 停止序列 | 可选 | | `Models..ExtraParameters` | 额外参数 | 可选 | ## 命令行用法 ### 基本语法 ```bash dotnet exec CodeReviewAI.Console.dll --command <命令> [选项] ``` ### 选项 | 选项 | 说明 | 默认值 | |------|------|--------| | `--command` | 要执行的命令 | `review` | | `--path` | 项目/仓库路径 | 当前目录 | | `--model` | 使用的模型键名 | `doubao` | | `--config` | 配置文件路径 | 自动查找 | | `--format` | 输出格式(`markdown`/`json`/`text`) | `markdown` | ### 可用命令 #### `review` - AI 代码审查 获取 Git 仓库中的 C# 代码变更,使用 AI 模型进行审查: ```bash dotnet exec CodeReviewAI.Console.dll --command review --path /path/to/repo --model doubao --format markdown ``` #### `diff` - 查看代码变更 仅显示 Git 仓库中的 C# 代码变更,不进行审查: ```bash dotnet exec CodeReviewAI.Console.dll --command diff --path /path/to/repo ``` #### `commit` - 提交到本地仓库 暂存所有变更并提交到本地 Git 仓库: ```bash dotnet exec CodeReviewAI.Console.dll --command commit --path /path/to/repo ``` #### `push` - 提交并推送 暂存、提交并推送到远程仓库: ```bash dotnet exec CodeReviewAI.Console.dll --command push --path /path/to/repo ``` #### `pull-push` - 拉取后提交并推送 先拉取远程更新(rebase),再暂存、提交并推送: ```bash dotnet exec CodeReviewAI.Console.dll --command pull-push --path /path/to/repo ``` #### `list-models` - 列出可用模型 显示配置文件中所有可用的 AI 模型: ```bash dotnet exec CodeReviewAI.Console.dll --command list-models --format json ``` #### `test-connection` - 测试模型连接 测试指定 AI 模型的 API 连接是否正常: ```bash dotnet exec CodeReviewAI.Console.dll --command test-connection --model doubao ``` #### `hook-init` - 安装 Pre-commit Hook 在 Git 仓库中安装 CodeReviewAI 的 pre-commit 钩子: ```bash dotnet exec CodeReviewAI.Console.dll --command hook-init --path /path/to/repo ``` 安装后,每次执行 `git commit` 时会自动触发 AI 审查。需要 Visual Studio 扩展处于运行状态来响应审查请求。 #### `hook-uninstall` - 卸载 Pre-commit Hook 卸载 CodeReviewAI 的 pre-commit 钩子并恢复原有钩子: ```bash dotnet exec CodeReviewAI.Console.dll --command hook-uninstall --path /path/to/repo ``` ## Visual Studio 扩展用法 ### 安装 1. 构建 `CodeReviewAI.VSExtension` 项目生成 `.vsix` 文件 2. 双击 `.vsix` 文件或在 Visual Studio 的「扩展」→「管理扩展」中安装 3. 重启 Visual Studio ### 使用审查功能 1. 打开一个包含 Git 仓库的解决方案 2. 修改 C# 代码文件 3. 通过菜单或快捷键触发「Review Before Commit」命令 4. 在弹出的审查窗口中: - **左侧面板**:显示修改的代码(绿色高亮变更行) - **右侧面板**:显示 AI 改进建议(Markdown 渲染) - **模型选择器**:切换不同的 AI 模型 - **刷新审查**:重新执行审查 - **提交本地暂存**:审查通过后提交到本地 - **推送**:提交并推送到远程 - **拉取然后推送**:先 pull rebase,再提交推送 - **取消**:放弃提交 ### 使用设置功能 通过菜单触发「Review Settings」命令,在设置窗口中可以: - 选择默认模型 - 查看配置文件路径 - 修改缓存过期时间 - 配置各模型的 API 密钥(OpenAI、豆包、千问、智谱) ### Pre-commit Hook 自动审查 当 Visual Studio 打开解决方案时,扩展会自动安装 pre-commit 钩子。此时执行 `git commit` 的流程为: 1. Git 触发 pre-commit 钩子 2. 钩子写入信号文件 `codereviewai-request` 3. VS 扩展检测到信号,弹出审查窗口 4. 用户确认提交 → 写入 `APPROVED`,提交继续 5. 用户取消 → 写入 `REJECTED`,提交被阻止 6. 超时(30秒)→ 自动放行提交 关闭解决方案时,扩展会自动卸载钩子并清理信号文件。 ## 审查输出格式 审查结果遵循标准 Markdown 结构: ```markdown # 代码审查结果 ## 问题列表 ### 1. [问题标题] [高优先级/建议] - **位置**:文件名.cs 第N行 - **原始代码**: ```csharp // original code ``` - **改进建议**: ```csharp // improved code ``` - **解释**:[explanation] - **参考文献**:[reference link] ``` 若代码没有问题,则返回: ```markdown # 代码审查结果 未发现问题,代码质量良好。 ``` ## 技术栈 - **.NET 8** - 运行时框架 - **LibGit2Sharp** - Git 仓库操作 - **Microsoft.Extensions.AI** - AI 模型抽象层 - **OpenAI .NET SDK** - OpenAI 兼容 API 客户端 - **Microsoft.Extensions.Caching.Memory** - 内存缓存 - **Microsoft.VisualStudio.Shell** - Visual Studio 扩展开发 - **WPF** - 扩展 UI 界面 ## 架构设计 ### 适配器模式 所有 AI 模型通过 `IModelAdapter` 接口统一抽象,由 `ModelAdapterFactory` 管理适配器实例。新增模型只需: 1. 实现 `IModelAdapter` 接口 2. 在 `ModelAdapterFactory` 中注册 3. 在 `config.json` 中添加模型配置 ### RCIF 提示词框架 使用 Role-Context-Instruction-Format 四段式结构化提示词: - **Role**:定义 AI 角色(如资深 C# 审查专家) - **Context**:提供代码上下文(变更代码 + 文件路径) - **Instruction**:审查指令(问题定位 → 建议生成 → 优先级标注) - **Format**:输出格式约束(标准 Markdown 结构) ### 信号文件通信 VS 扩展与 Git Hook 之间通过文件系统信号通信: ``` codereviewai-active → 标记扩展已激活 codereviewai-request → Hook 请求审查 codereviewai-response → 扩展返回审查结果(APPROVED/REJECTED) ``` ## 开发与构建 ### 前置条件 - Visual Studio 2022(含 VS SDK 工作负载) - .NET 8 SDK ### 构建 ```bash dotnet build CodeReviewAI.slnx ``` ### 构建 VS 扩展 ```bash dotnet build src/CodeReviewAI.VSExtension/CodeReviewAI.VSExtension.csproj ``` 生成的 `.vsix` 文件位于 `bin/` 目录下。