XCodeReviewer 是一个由大型语言模型(LLM)驱动的现代化代码审计平台,旨在为开发者提供智能、全面且极具深度的代码质量分析和审查服务。
无需部署,直接访问在线演示(数据存储在浏览器本地,支持所有核心功能):
https://xcodereviewer-preview.vercel.app
在快节奏的软件开发中,保证代码质量至关重要。传统代码审计工具规则死板、效率低下,而人工审计则耗时耗力。XCodeReviewer 借助 LLM 的强大能力,彻底改变了代码审查的方式:
实时展示项目统计、质量趋势和系统性能,提供全面的代码审计概览
支持代码片段快速分析,提供详细的 What-Why-How 解释和修复建议
集成 GitHub/GitLab 仓库,支持多语言项目审计和批量代码分析
适合快速部署和体验,无需服务器,全球 CDN 加速。
点击下方按钮直接部署到 Vercel:
# 1. 安装 Vercel CLI
npm i -g vercel
# 2. 登录 Vercel
vercel login
# 3. 部署项目
vercel
# 4. 部署到生产环境
vercel --prod
VITE_LLM_PROVIDER=your_llm_provider VITE_LLM_API_KEY=your_api_key_here VITE_USE_LOCAL_DB=true
✨ Vercel 部署优势:
✨ 数据库模式:
⚠️ 注意事项:
/admin 页面进行运行时配置直接使用最新发布的 Docker 镜像,支持 x86、ARM64(Mac M系列)、ARMv7 架构:
# 1. 拉取最新版本镜像
docker pull ghcr.io/lintsinghua/xcodereviewer:latest
# 2. 运行容器
docker run -d \
-p 8888:80 \
--name xcodereviewer \
--restart unless-stopped \
ghcr.io/lintsinghua/xcodereviewer:latest
# 3. 访问应用
# 浏览器打开 http://localhost:8888
使用特定版本:
# 拉取指定版本(如 v1.1.0)
docker pull ghcr.io/lintsinghua/xcodereviewer:v1.1.0
# 运行
docker run -d -p 8888:80 --name xcodereviewer ghcr.io/lintsinghua/xcodereviewer:v1.1.0
如果需要自定义构建:
# 1. 克隆项目
git clone https://github.com/lintsinghua/XCodeReviewer.git
cd XCodeReviewer
# 2. 使用 Docker Compose 构建并启动
docker-compose up -d
# 3. 访问应用
# 浏览器打开 http://localhost:8888
✨ 运行时配置(推荐)
Docker 部署后,您可以直接在浏览器中配置所有设置,无需重新构建镜像:
http://localhost:8888/admin(系统管理页面)📖 详细配置说明请参考:系统配置使用指南
适合需要开发或自定义修改的场景。
# 1. 克隆项目
git clone https://github.com/lintsinghua/XCodeReviewer.git
cd XCodeReviewer
# 2. 安装依赖
pnpm install # 或 npm install / yarn install
# 3. 配置环境变量
cp .env.example .env
# 编辑 .env 文件,配置必要参数(见下方配置说明)
# 4. 启动开发服务器
pnpm dev
# 5. 访问应用
# 浏览器打开 http://localhost:5173
编辑 .env 文件,配置以下必需参数:
# ========== 必需配置 ========== # LLM 提供商选择 (gemini|openai|claude|qwen|deepseek|zhipu|moonshot|baidu|minimax|doubao|ollama) VITE_LLM_PROVIDER=gemini # 对应的 API Key VITE_LLM_API_KEY=your_api_key_here # ========== 数据库配置(三选一)========== # 方式1:本地数据库(推荐,开箱即用) VITE_USE_LOCAL_DB=true # 方式2:Supabase 云端数据库(支持多设备同步) # VITE_SUPABASE_URL=https://your-project.supabase.co # VITE_SUPABASE_ANON_KEY=your_anon_key # 方式3:演示模式(不配置任何数据库,数据不持久化) # ========== 可选配置 ========== # GitHub 集成(用于仓库分析) # VITE_GITHUB_TOKEN=your_github_token # 输出语言(zh-CN: 中文 | en-US: 英文) VITE_OUTPUT_LANGUAGE=zh-CN # 分析参数调优 VITE_MAX_ANALYZE_FILES=40 # 单次最大分析文件数 VITE_LLM_CONCURRENCY=2 # 并发请求数 VITE_LLM_GAP_MS=500 # 请求间隔(ms)
遇到超时或连接问题时,可调整以下参数:
VITE_LLM_TIMEOUT=300000 # 增加超时时间 VITE_LLM_BASE_URL=https://your-proxy.com/v1 # 使用代理或中转服务 VITE_LLM_CONCURRENCY=1 # 降低并发数 VITE_LLM_GAP_MS=1000 # 增加请求间隔
自定义请求头示例(针对特殊中转站):
# JSON 格式字符串 VITE_LLM_CUSTOM_HEADERS='{"X-API-Version":"v1","X-Custom-Auth":"token123"}'
方式一:浏览器配置(推荐)
http://localhost:8888/admin 系统管理页面方式二:环境变量配置
修改 .env 中的配置:
# 切换到 OpenAI VITE_LLM_PROVIDER=openai VITE_OPENAI_API_KEY=your_key # 切换到通义千问 VITE_LLM_PROVIDER=qwen VITE_QWEN_API_KEY=your_key
VITE_LLM_TIMEOUT=300000VITE_LLM_BASE_URLVITE_LLM_CONCURRENCY=1本地模式(推荐):数据存储在浏览器 IndexedDB,开箱即用,隐私安全
VITE_USE_LOCAL_DB=true
云端模式:数据存储在 Supabase,支持多设备同步
VITE_SUPABASE_URL=https://your-project.supabase.co VITE_SUPABASE_ANON_KEY=your_key
演示模式:不配置任何数据库,数据不持久化
# 1. 安装 Ollama
curl -fsSL https://ollama.com/install.sh | sh # macOS/Linux
# Windows: 访问 https://ollama.com/download
# 2. 拉取模型
ollama pull llama3 # 或 codellama、qwen2.5、deepseek-coder
# 3. 配置 XCodeReviewer
# 在 .env 中设置:
VITE_LLM_PROVIDER=ollama
VITE_LLM_MODEL=llama3
VITE_LLM_BASE_URL=http://localhost:11434/v1
推荐模型:llama3(综合)、codellama(代码专用)、qwen2.5(中文)
百度需要同时提供 API Key 和 Secret Key,用冒号分隔:
VITE_LLM_PROVIDER=baidu VITE_BAIDU_API_KEY=your_api_key:your_secret_key
许多用户使用 API 中转服务来访问 LLM(更稳定、更便宜)。配置方法:
/admin)https://your-proxy.com/v1)注意:
/v1 结尾(OpenAI 兼容格式)本地数据存储在浏览器 IndexedDB 中:
VITE_OUTPUT_LANGUAGE=zh-CN # 中文(默认) VITE_OUTPUT_LANGUAGE=en-US # 英文
在 .env 中预配置所有平台的 Key,切换时只需修改 VITE_LLM_PROVIDER:
VITE_LLM_PROVIDER=gemini # 当前使用的平台 # 预配置所有平台 VITE_GEMINI_API_KEY=key1 VITE_OPENAI_API_KEY=key2 VITE_QWEN_API_KEY=key3
XCodeReviewer 内置了日志系统,记录核心操作和错误:
查看日志:
http://localhost:5173/logs (开发) / http://localhost:8888/logs (生产)记录内容:
功能特性:
手动记录用户操作:
import { logger, LogCategory } from '@/shared/utils/logger';
// 记录用户操作
logger.logUserAction('创建项目', { projectName, projectType });
logger.logUserAction('开始审计', { taskId, fileCount });
XCodeReviewer 支持 10+ 主流 LLM 平台,可根据需求自由选择:
| 平台类型 | 平台名称 | 特点 | 获取地址 |
|---|---|---|---|
| 国际平台 | Google Gemini | 免费配额充足,推荐 | 获取 |
| OpenAI GPT | 稳定可靠,性能最佳 | 获取 | |
| Anthropic Claude | 代码理解能力强 | 获取 | |
| DeepSeek | 性价比高 | 获取 | |
| 国内平台 | 阿里云通义千问 | 国内访问快 | 获取 |
| 智谱AI (GLM) | 中文支持好 | 获取 | |
| 月之暗面 Kimi | 长文本处理 | 获取 | |
| 百度文心一言 | 企业级服务 | 获取 | |
| MiniMax | 多模态能力 | 获取 | |
| 字节豆包 | 高性价比 | 获取 | |
| 本地部署 | Ollama | 完全本地化,隐私安全 | 安装 |
# 通用配置(推荐) VITE_LLM_PROVIDER=gemini VITE_LLM_API_KEY=your_api_key_here # 或使用平台专用配置 VITE_GEMINI_API_KEY=your_gemini_key VITE_OPENAI_API_KEY=your_openai_key # ... 更多平台配置见 .env.example
如需云端数据同步:
supabase/migrations/full_schema.sql.env 中配置相关参数访问 /admin 页面,提供完整的系统配置和数据管理功能:
🔧 可视化配置管理(运行时配置):
💾 数据库管理:
📈 数据概览:
| 分类 | 技术 | 说明 |
|---|---|---|
| 前端框架 | React 18 TypeScript Vite | 现代化前端开发栈,支持热重载和类型安全 |
| UI 组件 | Tailwind CSS Radix UI Lucide React | 响应式设计,无障碍访问,丰富的图标库 |
| 数据可视化 | Recharts | 专业的图表库,支持多种图表类型 |
| 路由管理 | React Router v6 | 单页应用路由解决方案 |
| 状态管理 | React Hooks Sonner | 轻量级状态管理和通知系统 |
| AI 引擎 | 多平台 LLM | 支持 Gemini、OpenAI、Claude、通义千问、DeepSeek 等 10+ 主流平台 |
| 数据存储 | IndexedDB Supabase PostgreSQL | 本地数据库 + 云端数据库双模式支持 |
| HTTP 客户端 | Axios Ky | 现代化的 HTTP 请求库 |
| 代码质量 | Biome Ast-grep TypeScript | 代码格式化、静态分析和类型检查 |
| 构建工具 | Vite PostCSS Autoprefixer | 快速的构建工具和 CSS 处理 |
XCodeReviewer/ ├── src/ │ ├── app/ # 应用配置 │ │ ├── App.tsx # 主应用组件 │ │ ├── main.tsx # 应用入口点 │ │ └── routes.tsx # 路由配置 │ ├── components/ # React 组件 │ │ ├── layout/ # 布局组件 (Header, Footer, PageMeta) │ │ ├── ui/ # UI 组件库 (基于 Radix UI) │ │ ├── system/ # 系统配置组件 │ │ ├── database/ # 数据库管理组件 │ │ └── debug/ # 调试组件 │ ├── pages/ # 页面组件 │ │ ├── Dashboard.tsx # 仪表盘 │ │ ├── Projects.tsx # 项目管理 │ │ ├── InstantAnalysis.tsx # 即时分析 │ │ ├── AuditTasks.tsx # 审计任务 │ │ └── AdminDashboard.tsx # 系统管理 │ ├── features/ # 功能模块 │ │ ├── analysis/ # 分析相关服务 │ │ │ └── services/ # AI 代码分析引擎 │ │ └── projects/ # 项目相关服务 │ │ └── services/ # 仓库扫描、ZIP 文件扫描 │ ├── shared/ # 共享工具 │ │ ├── config/ # 配置文件 │ │ │ ├── database.ts # 数据库统一接口 │ │ │ ├── localDatabase.ts # IndexedDB 实现 │ │ │ └── env.ts # 环境变量配置 │ │ ├── types/ # TypeScript 类型定义 │ │ ├── hooks/ # 自定义 React Hooks │ │ ├── utils/ # 工具函数 │ │ │ └── initLocalDB.ts # 本地数据库初始化 │ │ └── constants/ # 常量定义 │ └── assets/ # 静态资源 │ └── styles/ # 样式文件 ├── supabase/ │ └── migrations/ # 数据库迁移文件 ├── public/ │ └── images/ # 图片资源 ├── scripts/ # 构建和设置脚本 └── rules/ # 代码规则配置
访问 /admin 系统管理页面,在"系统配置"标签页中配置:
https://your-proxy.com/v1)配置完成后点击"保存所有更改"并刷新页面即可使用。
/instant-analysis 页面/projects 页面PDF 导出提示:
# 开发模式
pnpm dev
# 构建生产版本
pnpm build
# 预览构建结果
pnpm preview
# 代码检查
pnpm lint
| 变量名 | 必需 | 默认值 | 说明 |
|---|---|---|---|
VITE_LLM_PROVIDER | ✅ | gemini | LLM提供商:gemini|openai|claude|qwen|deepseek|zhipu|moonshot|baidu|minimax|doubao|ollama |
VITE_LLM_API_KEY | ✅ | - | 通用API Key(优先级高于平台专用配置) |
VITE_LLM_MODEL | ❌ | 自动 | 模型名称(不指定则使用各平台默认模型) |
VITE_LLM_BASE_URL | ❌ | - | 自定义API端点(支持所有平台的中转站、代理或私有部署) |
VITE_LLM_TIMEOUT | ❌ | 150000 | 请求超时时间(毫秒) |
VITE_LLM_TEMPERATURE | ❌ | 0.2 | 温度参数(0.0-2.0),控制输出随机性 |
VITE_LLM_MAX_TOKENS | ❌ | 4096 | 最大输出token数 |
VITE_LLM_CUSTOM_HEADERS | ❌ | - | 自定义HTTP请求头(JSON格式字符串),用于特殊中转站或自建服务 |
💡 API 格式支持:XCodeReviewer 支持三种主流 API 格式:
- OpenAI 兼容格式(最常见):适用于大多数中转站和 OpenRouter
- Gemini 格式:Google Gemini 官方及兼容服务
- Claude 格式:Anthropic Claude 官方及兼容服务
配置时只需选择对应的 LLM 提供商,填入中转站地址和 Key 即可。自定义请求头功能可满足特殊中转站的额外要求。
| 变量名 | 说明 | 特殊要求 |
|---|---|---|
VITE_GEMINI_API_KEY | Google Gemini API Key | - |
VITE_GEMINI_MODEL | Gemini模型 (默认: gemini-1.5-flash) | - |
VITE_OPENAI_API_KEY | OpenAI API Key | - |
VITE_OPENAI_MODEL | OpenAI模型 (默认: gpt-4o-mini) | - |
VITE_OPENAI_BASE_URL | OpenAI自定义端点 | 用于中转服务 |
VITE_CLAUDE_API_KEY | Anthropic Claude API Key | - |
VITE_CLAUDE_MODEL | Claude模型 (默认: claude-3-5-sonnet-20241022) | - |
VITE_QWEN_API_KEY | 阿里云通义千问 API Key | - |
VITE_QWEN_MODEL | 通义千问模型 (默认: qwen-turbo) | - |
VITE_DEEPSEEK_API_KEY | DeepSeek API Key | - |
VITE_DEEPSEEK_MODEL | DeepSeek模型 (默认: deepseek-chat) | - |
VITE_ZHIPU_API_KEY | 智谱AI API Key | - |
VITE_ZHIPU_MODEL | 智谱模型 (默认: glm-4-flash) | - |
VITE_MOONSHOT_API_KEY | 月之暗面 Kimi API Key | - |
VITE_MOONSHOT_MODEL | Kimi模型 (默认: moonshot-v1-8k) | - |
VITE_BAIDU_API_KEY | 百度文心一言 API Key | ⚠️ 格式: API_KEY:SECRET_KEY |
VITE_BAIDU_MODEL | 文心模型 (默认: ERNIE-3.5-8K) | - |
VITE_MINIMAX_API_KEY | MiniMax API Key | - |
VITE_MINIMAX_MODEL | MiniMax模型 (默认: abab6.5-chat) | - |
VITE_DOUBAO_API_KEY | 字节豆包 API Key | - |
VITE_DOUBAO_MODEL | 豆包模型 (默认: doubao-pro-32k) | - |
| 变量名 | 必需 | 说明 |
|---|---|---|
VITE_SUPABASE_URL | ❌ | Supabase项目URL(用于数据持久化) |
VITE_SUPABASE_ANON_KEY | ❌ | Supabase匿名密钥 |
💡 提示:不配置Supabase时,系统以演示模式运行,数据不持久化
| 变量名 | 必需 | 说明 |
|---|---|---|
VITE_GITHUB_TOKEN | ✅ | GitHub Personal Access Token |
VITE_GITLAB_TOKEN | ✅ | GitLab Personal Access Token 或 Project Access Token |
| 变量名 | 默认值 | 说明 |
|---|---|---|
VITE_MAX_ANALYZE_FILES | 40 | 单次分析的最大文件数 |
VITE_LLM_CONCURRENCY | 2 | LLM并发请求数(降低可避免频率限制) |
VITE_LLM_GAP_MS | 500 | LLM请求间隔(毫秒,增加可避免频率限制) |
| 变量名 | 默认值 | 说明 |
|---|---|---|
VITE_APP_ID | xcodereviewer | 应用标识符 |
我们热烈欢迎所有形式的贡献!无论是提交 issue、创建 PR,还是改进文档,您的每一次贡献对我们都至关重要。请联系我们了解详细信息。
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)感谢以下优秀的贡献者们,他们让 XCodeReviewer 更强大!
目前 XCodeReviewer 定位为快速原型验证阶段,功能需要逐渐完善,根据项目后续发展和大家的建议,未来开发计划如下(尽快实现):
Agent+人工对话反馈功能,包括多轮对话流程展示、人工干预等,以获得更清晰、透明、可监督的审计过程⭐ 如果这个项目对您有帮助,请给我们一个 Star!您的支持是我们不断前进的动力!
本免责声明旨在明确用户使用本开源项目的相关责任和风险,保护项目作者、贡献者和维护者的合法权益。本开源项目提供的代码、工具及相关内容仅供参考和学习使用。
如有疑问,请通过 GitHub Issues 联系维护者。本免责声明受项目所在地法律管辖。