# AI-Reviewer
**Repository Path**: gnnu/AI-Reviewer
## Basic Information
- **Project Name**: AI-Reviewer
- **Description**: AI-Reviewer 是一个采用六边形架构设计的智能代码评审框架,支持多种编程语言和AI服务提供商。该框架提供了清晰的领域边界、灵活的适配器设计和强大的扩展能力,可以轻松集成到各种应用场景中。
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-12
- **Last Updated**: 2025-11-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# AI Reviewer - AI引擎驱动的文件处理工具
[](https://www.oracle.com/java/)
[](https://spring.io/projects/spring-boot)
[](https://maven.apache.org/)
[](LICENSE)
一个智能化、可扩展且生产就绪的AI引擎,由AI服务驱动。采用模块化的适配器架构,实现最大的灵活性和可扩展性。
[English](README.md) | 简体中文
## 📋 目录
- [特性](#-特性)
- [架构](#-架构)
- [快速开始](#-快速开始)
- [配置](#-配置)
- [使用方法](#-使用方法)
- [模块详解](#-模块详解)
- [扩展引擎](#-扩展引擎)
- [示例](#-示例)
- [故障排除](#-故障排除)
- [贡献](#-贡献)
- [许可证](#-许可证)
## ✨ 特性
- 🤖 **多AI提供商支持** - 支持OpenAI、DeepSeek、Claude及自定义AI服务
- 🔌 **插件化架构** - 基于适配器的可扩展设计,支持SPI
- 📝 **多语言解析器** - 支持Java、Python、JavaScript和纯文本
- 🚀 **高性能** - 多线程处理,可配置线程池
- 🎯 **模式化过滤** - 通过包含/排除模式精确选择文件
- 📊 **全面报告** - 支持Markdown、JSON及自定义输出格式
- 🔧 **Spring Boot集成** - 自动配置,无缝集成
- ⚡ **生产就绪** - 完善的异常处理、日志记录和重试机制
## 🏗️ 架构
AI Reviewer遵循清晰的分层架构,职责分离明确:
```
┌─────────────────────────────────────────────────────────────┐
│ 应用层 │
│ (Spring Boot / CLI / REST API) │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ AI引擎 (核心层) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 文件扫描 → 文件过滤 → 解析器 → AI → 结果处理 │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 适配器注册中心 (SPI) │
│ ┌──────────┐ ┌──────────┐ ┌────────────────────────┐ │
│ │ 解析器 │ │ AI服务 │ │ 结果处理器 │ │
│ └──────────┘ └──────────┘ └────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 核心接口 (API层) │
│ IFileParser │ IAIService │ IResultProcessor │
└─────────────────────────────────────────────────────────────┘
```
### 核心模块
1. **ai-reviewer-api** - 核心接口和数据模型
2. **ai-reviewer-common** - 通用工具和异常处理
3. **ai-reviewer-core** - 主引擎和编排逻辑
4. **ai-reviewer-adaptor-parser** - 文件解析适配器(Java、Python、JavaScript、文本)
5. **ai-reviewer-adaptor-ai** - AI服务适配器(基于HTTP的AI服务)
6. **ai-reviewer-adaptor-processor** - 结果处理适配器(Markdown报告)
7. **ai-reviewer-starter** - Spring Boot启动器,自动配置
## 🚀 快速开始
### 前置条件
- **Java 17+** - 从[Oracle](https://www.oracle.com/java/technologies/downloads/)或[OpenJDK](https://openjdk.org/)下载
- **Maven 3.8+** - 从[Apache Maven](https://maven.apache.org/download.cgi)下载
- **AI API密钥** - 从[OpenAI](https://platform.openai.com/)、[DeepSeek](https://platform.deepseek.com/)等获取
### 安装
1. **克隆仓库**
```bash
git clone https://github.com/yourusername/AI-Reviewer.git
cd AI-Reviewer
```
2. **构建项目**
```bash
mvn clean install -DskipTests
```
3. **验证安装**
```bash
mvn -version
java -version
```
### 运行您的第一次代码审查
1. **导航到演示应用**
```bash
cd application-demo/hackathonApplication
```
2. **设置API密钥** (Linux/Mac)
```bash
export AI_API_KEY="your-api-key-here"
```
或 (Windows)
```powershell
$env:AI_API_KEY="your-api-key-here"
```
3. **运行应用**
```bash
mvn spring-boot:run -Dspring-boot.run.arguments="--review /path/to/your/code"
```
## ⚙️ 配置
### 应用配置
在项目中创建或更新 `application.yml` :
```yaml
ai-reviewer:
# 文件扫描配置
scanner:
include-patterns:
- "**/*.java"
- "**/*.py"
- "**/*.js"
exclude-patterns:
- "**/target/**"
- "**/build/**"
- "**/node_modules/**"
- "**/.git/**"
max-file-size: "10MB"
# 解析器配置
parser:
enabled-parsers:
- java
- python
- javascript
- text
# AI服务配置
ai:
provider: deepseek # 或 "openai", "claude" 等
model: deepseek-coder # 或 "gpt-4", "claude-3" 等
api-key: ${AI_API_KEY} # 使用环境变量
endpoint: https://api.deepseek.com/v1/chat/completions
# 提示词
sysPrompt: "你是一位专业的代码审查专家。请对以下代码提供建设性的反馈意见。"
userPrompt: |
请审查这段代码并提供:
1. 代码质量评估
2. 潜在的错误或问题
3. 性能改进建议
4. 最佳实践建议
代码:%s
# AI参数
temperature: 0.7
max-tokens: 2000
timeout-seconds: 30
max-retries: 3
# 处理器配置
processor:
type: code-review
output-format: markdown
output-path: ./reports
# 执行器配置
executor:
thread-pool-size: 10
max-queue-size: 100
# Spring Boot配置
spring:
application:
name: ai-reviewer
# 日志配置
logging:
level:
root: INFO
top.yumbo.ai: DEBUG
```
### 使用Properties配置
您也可以使用 `application.properties`:
```properties
ai-reviewer.ai.provider=deepseek
ai-reviewer.ai.model=deepseek-coder
ai-reviewer.ai.api-key=${AI_API_KEY}
ai-reviewer.ai.endpoint=https://api.deepseek.com/v1/chat/completions
ai-reviewer.scanner.include-patterns[0]=**/*.java
ai-reviewer.scanner.exclude-patterns[0]=**/target/**
ai-reviewer.processor.output-path=./reports
ai-reviewer.executor.thread-pool-size=10
```
### 环境变量
推荐的环境变量:
| 变量 | 描述 | 示例 |
|----------|-------------|---------|
| `AI_API_KEY` | 您的AI服务API密钥 | `sk-xxx` |
| `AI_PROVIDER` | AI提供商名称 | `deepseek`, `openai` |
| `AI_MODEL` | 使用的AI模型 | `deepseek-coder`, `gpt-4` |
| `AI_ENDPOINT` | AI服务端点 | `https://api.deepseek.com/v1/chat/completions` |
## 📖 使用方法
### 作为Spring Boot Starter使用
**1. 在 `pom.xml` 中添加依赖:**
```xml
top.yumbo.ai
ai-reviewer-starter
1.0
```
**2. 注入并使用AIEngine:**
```java
@SpringBootApplication
public class MyApplication {
@Autowired
private AIEngine aiEngine;
@Autowired
private AIReviewerProperties properties;
public void reviewCode(String targetPath) {
ExecutionContext context = ExecutionContext.builder()
.targetDirectory(Paths.get(targetPath))
.includePatterns(properties.getScanner().getIncludePatterns())
.excludePatterns(properties.getScanner().getExcludePatterns())
.aiConfig(buildAIConfig())
.processorConfig(buildProcessorConfig())
.threadPoolSize(10)
.build();
ProcessResult result = aiEngine.execute(context);
if (result.isSuccess()) {
System.out.println("审查完成:" + result.getReportPath());
}
}
}
```
### 作为独立库使用
**1. 添加依赖:**
```xml
top.yumbo.ai
ai-reviewer-core
1.0
top.yumbo.ai
ai-reviewer-adaptor-parser
1.0
top.yumbo.ai
ai-reviewer-adaptor-ai
1.0
top.yumbo.ai
ai-reviewer-adaptor-processor
1.0
```
**2. 创建并配置引擎:**
```java
// 创建适配器注册中心
AdapterRegistry registry = new AdapterRegistry();
// 注册解析器
registry.registerParser(new JavaFileParser());
registry.registerParser(new PythonFileParser());
registry.registerParser(new JavaScriptFileParser());
// 注册AI服务
AIConfig aiConfig = AIConfig.builder()
.provider("deepseek")
.model("deepseek-coder")
.apiKey(System.getenv("AI_API_KEY"))
.endpoint("https://api.deepseek.com/v1/chat/completions")
.build();
registry.registerAIService(new HttpBasedAIAdapter(aiConfig));
// 注册处理器
registry.registerProcessor(new CodeReviewProcessor());
// 创建引擎
AIEngine engine = new AIEngine(registry);
// 执行审查
ExecutionContext context = ExecutionContext.builder()
.targetDirectory(Paths.get("/path/to/code"))
.includePatterns(List.of("**/*.java"))
.excludePatterns(List.of("**/target/**"))
.aiConfig(aiConfig)
.processorConfig(ProcessorConfig.builder()
.processorType("code-review")
.outputFormat("markdown")
.outputPath(Paths.get("./report.md"))
.build())
.threadPoolSize(10)
.build();
ProcessResult result = engine.execute(context);
```
## 📦 模块详解
### ai-reviewer-api
**核心接口和数据模型**
- `IFileParser` - 文件解析适配器接口
- `IAIService` - AI服务适配器接口
- `IResultProcessor` - 结果处理适配器接口
- `PreProcessedData`, `AIResponse`, `ProcessResult` - 数据传输对象
- `AIConfig`, `ProcessorConfig`, `FileMetadata` - 配置模型
### ai-reviewer-common
**共享工具和异常处理**
- `AIReviewerException` - 基础异常类
- `ParseException`, `AIServiceException`, `ProcessorException` - 特定异常
- `FileUtil`, `StringUtil` - 工具类
- `Constants` - 全局常量
### ai-reviewer-core
**主引擎和编排逻辑**
- `AIEngine` - 主编排引擎,支持多线程处理
- `AdapterRegistry` - 管理所有适配器,支持SPI
- `ExecutionContext` - 执行状态和配置
- `FileScanner` - 在目标目录中发现文件
- `FileFilter` - 基于模式过滤文件
### ai-reviewer-adaptor-parser
**文件解析适配器**
- `JavaFileParser` - 使用JavaParser解析Java文件
- `PythonFileParser` - 解析Python文件
- `JavaScriptFileParser` - 解析JavaScript文件
- `PlainTextFileParser` - 不支持文件类型的回退方案
### ai-reviewer-adaptor-ai
**AI服务适配器**
- `HttpBasedAIAdapter` - 通用的基于HTTP的AI服务适配器
- 支持OpenAI、DeepSeek、Claude及兼容的API
- 可配置端点、模型和参数
- 内置重试和超时处理
### ai-reviewer-adaptor-processor
**结果处理适配器**
- `CodeReviewProcessor` - 生成markdown代码审查报告
- 逐文件分析
- 汇总统计
- 性能指标
### ai-reviewer-starter
**Spring Boot启动器,自动配置**
- `AIReviewerAutoConfiguration` - 自动配置所有Bean
- `AIReviewerProperties` - 配置属性绑定
- 通过SPI自动发现适配器
- Spring Boot应用零配置设置
---
### ai-reviewer-base-file-rag
**🚀 零外部依赖的本地文件RAG框架**
完全本地化的RAG解决方案,无需向量数据库和Embedding API,基于Lucene BM25算法实现高性能文档检索。
#### 核心特性
- ✅ **零外部依赖** - 无需向量数据库、无需Embedding API
- ✅ **完全本地化** - 数据不离开本地环境,100%隐私保护
- ✅ **多模态支持** - 文本、图片OCR、PDF等35+格式
- ✅ **高性能检索** - 基于Lucene BM25算法,亚秒级响应
- ✅ **灵活OCR** - 支持Tesseract、GPT-4o、GPT-5、PaddleOCR
- ✅ **多LLM支持** - OpenAI、DeepSeek、Claude等
#### 快速开始
**1. 添加依赖:**
```xml
top.yumbo.ai
ai-reviewer-base-file-rag
1.0
```
**2. 配置 (application.yml):**
```yaml
local-file-rag:
storage-path: ./data/rag
auto-qa-service: true
# LLM配置 (选择一个提供商)
llm:
provider: openai # openai, deepseek, claude
api-key: ${OPENAI_API_KEY}
model: gpt-4o
# OCR配置 (选择一个提供商)
ocr:
provider: tesseract # tesseract, gpt4o, gpt5, paddleocr
```
**3. 使用:**
```java
@RestController
public class QAController {
@Autowired
private SimpleRAGService rag;
@PostMapping("/index")
public String index(@RequestParam String title, @RequestParam String content) {
return rag.index(title, content);
}
@GetMapping("/answer")
public String answer(@RequestParam String question) {
return rag.answer(question);
}
}
```
#### LLM配置说明
**OpenAI (GPT-4o/GPT-5):**
```yaml
local-file-rag:
llm:
provider: openai
api-key: ${OPENAI_API_KEY}
model: gpt-4o # 或 gpt-5
```
**DeepSeek:**
```yaml
local-file-rag:
llm:
provider: deepseek
api-key: ${DEEPSEEK_API_KEY}
model: deepseek-chat
```
**Claude:**
```yaml
local-file-rag:
llm:
provider: claude
api-key: ${CLAUDE_API_KEY}
model: claude-3-opus-20240229
```
#### OCR配置说明
**Tesseract (免费本地):**
```bash
# 安装 Tesseract
sudo apt-get install tesseract-ocr tesseract-ocr-chi-sim # Ubuntu
brew install tesseract tesseract-lang # macOS
```
```yaml
local-file-rag:
ocr:
provider: tesseract
tesseract:
language: chi_sim+eng # 中英文支持
```
**GPT-4o Vision (高精度云端):**
```yaml
local-file-rag:
ocr:
provider: gpt4o
gpt-vision:
api-key: ${OPENAI_API_KEY}
detail: high
```
**GPT-5 (最新模型):**
```yaml
local-file-rag:
ocr:
provider: gpt5
```
**PaddleOCR (离线中文):**
```yaml
local-file-rag:
ocr:
provider: paddleocr
paddleocr:
lang: ch
```
#### OCR动态切换
```java
@Autowired
private SimpleRAGService rag;
// 代码切换OCR提供商
rag.switchOCRProvider("tesseract"); // 切换到Tesseract
rag.switchOCRProvider("gpt4o"); // 切换到GPT-4o
rag.switchOCRProvider("gpt5"); // 切换到GPT-5
rag.switchOCRProvider("paddleocr"); // 切换到PaddleOCR
```
或使用配置文件切换:
```bash
# 使用不同的配置文件启动
mvn spring-boot:run -Dspring-boot.run.profiles=tesseract
mvn spring-boot:run -Dspring-boot.run.profiles=gpt4o
```
#### OCR性能对比
| 提供商 | 速度 | 准确度 | 成本 | 离线 | 推荐场景 |
|--------|------|--------|------|------|----------|
| Tesseract | ⭐⭐⭐⭐ | ⭐⭐⭐ | 免费 | ✅ | 开发/测试/离线 |
| GPT-4o | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | $$ | ❌ | 生产环境/高质量 |
| GPT-5 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | $$$ | ❌ | 最佳效果 |
| PaddleOCR | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 免费 | ✅ | 中文文档/隐私敏感 |
#### 完整文档
查看 **[LocalFileRAG 完整文档](ai-reviewer-base-file-rag/README.md)** 了解:
- 详细配置选项
- OCR性能对比
- LLM集成指南
- 应用场景示例
- API使用说明
---
## 🔧 扩展引擎
### 创建自定义解析器
```java
public class CustomParser implements IFileParser {
@Override
public boolean support(File file) {
return file.getName().endsWith(".custom");
}
@Override
public PreProcessedData parse(File file) throws Exception {
String content = FileUtil.readFileToString(file);
FileMetadata metadata = FileMetadata.builder()
.filePath(file.toPath())
.fileName(file.getName())
.fileType("custom")
.build();
return PreProcessedData.builder()
.metadata(metadata)
.content(content)
.parserName("CustomParser")
.build();
}
@Override
public int getPriority() {
return 100;
}
}
// 注册解析器
registry.registerParser(new CustomParser());
```
### 创建自定义AI服务
```java
public class CustomAIService implements IAIService {
@Override
public AIResponse invoke(PreProcessedData data, AIConfig config) throws Exception {
// 调用您的自定义AI服务
String response = callCustomAI(data.getContent(), config);
return AIResponse.builder()
.originalData(data)
.aiGeneratedContent(response)
.provider("custom")
.model(config.getModel())
.success(true)
.build();
}
@Override
public boolean support(String provider) {
return "custom".equalsIgnoreCase(provider);
}
}
// 注册AI服务
registry.registerAIService(new CustomAIService());
```
### 创建自定义处理器
```java
public class CustomProcessor implements IResultProcessor {
@Override
public ProcessResult process(List responses, ProcessorConfig config) {
// 自定义处理逻辑
String report = generateCustomReport(responses);
Path outputPath = saveReport(report, config);
return ProcessResult.builder()
.success(true)
.processedCount(responses.size())
.reportPath(outputPath)
.build();
}
@Override
public boolean support(String processorType) {
return "custom".equalsIgnoreCase(processorType);
}
}
// 注册处理器
registry.registerProcessor(new CustomProcessor());
```
### 使用SPI自动发现
创建 `META-INF/services/top.yumbo.ai.api.parser.IFileParser`:
```
com.example.CustomParser
```
创建 `META-INF/services/top.yumbo.ai.api.ai.IAIService`:
```
com.example.CustomAIService
```
创建 `META-INF/services/top.yumbo.ai.api.processor.IResultProcessor`:
```
com.example.CustomProcessor
```
## 💡 示例
### 示例1:审查Java项目
```java
ExecutionContext context = ExecutionContext.builder()
.targetDirectory(Paths.get("./src"))
.includePatterns(List.of("**/*.java"))
.excludePatterns(List.of("**/test/**", "**/target/**"))
.aiConfig(aiConfig)
.processorConfig(processorConfig)
.threadPoolSize(5)
.build();
ProcessResult result = engine.execute(context);
System.out.println("已审查文件数:" + result.getProcessedCount());
System.out.println("报告路径:" + result.getReportPath());
```
### 示例2:审查多种文件类型
```java
ExecutionContext context = ExecutionContext.builder()
.targetDirectory(Paths.get("./project"))
.includePatterns(List.of("**/*.java", "**/*.py", "**/*.js"))
.excludePatterns(List.of("**/node_modules/**", "**/.git/**"))
.aiConfig(aiConfig)
.processorConfig(processorConfig)
.build();
ProcessResult result = engine.execute(context);
```
### 示例3:自定义提示词
```java
AIConfig customConfig = AIConfig.builder()
.provider("deepseek")
.model("deepseek-coder")
.apiKey(apiKey)
.sysPrompt("你是一位安全专家。请专注于安全漏洞。")
.userPrompt("分析这段代码的安全问题:\n%s")
.temperature(0.3)
.build();
```
## 🐛 故障排除
### 问题:找不到AIEngine Bean
**错误**:`No qualifying bean of type 'top.yumbo.ai.core.AIEngine'`
**解决方案**:
1. 确保 `ai-reviewer-starter` 在依赖中
2. 检查starter jar中是否存在 `META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports`
3. 验证Spring Boot版本是3.x
4. 尝试在主类上添加 `@ComponentScan("top.yumbo.ai")`
### 问题:运行时找不到模块类
**错误**:子模块的 `ClassNotFoundException`
**解决方案**:
1. 从父模块构建:`mvn clean install`
2. 包含所有依赖或使用fat jar方式
3. 对于Spring Boot应用,确保包含所有传递依赖
### 问题:AI服务超时
**错误**:`AIServiceException: Request timeout`
**解决方案**:
1. 增加超时时间:`ai-reviewer.ai.timeout-seconds=60`
2. 检查网络连接
3. 验证API密钥和端点
4. 启用重试:`ai-reviewer.ai.max-retries=3`
### 问题:找不到解析器
**错误**:`No parser found for file type`
**解决方案**:
1. 检查文件扩展名是否匹配解析器模式
2. 验证解析器已在 `AdapterRegistry` 中注册
3. 如需要,添加自定义解析器
4. 检查SPI配置以实现自动发现
## 🤝 贡献
欢迎贡献!请遵循以下步骤:
1. Fork本仓库
2. 创建特性分支 (`git checkout -b feature/amazing-feature`)
3. 提交更改 (`git commit -m '添加某个很棒的特性'`)
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 开启Pull Request
### 开发环境设置
```bash
# 克隆仓库
git clone https://github.com/yourusername/AI-Reviewer.git
# 构建
mvn clean install
# 运行测试
mvn test
# 调试运行
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
```
## 📄 许可证
本项目采用Apache License 2.0许可证 - 详见[LICENSE](./LICENSE.txt)文件。
## 🙏 致谢
- [Spring Boot](https://spring.io/projects/spring-boot) - 应用框架
- [JavaParser](https://javaparser.org/) - Java代码解析
- [OkHttp](https://square.github.io/okhttp/) - HTTP客户端
- [Lombok](https://projectlombok.org/) - 减少样板代码
- [Jackson](https://github.com/FasterXML/jackson) - JSON处理
## 📞 支持
- 📧 邮箱:support@example.com
- 💬 问题反馈:[GitHub Issues](https://github.com/yourusername/AI-Reviewer/issues)
- 📖 文档:[Wiki](https://github.com/yourusername/AI-Reviewer/wiki)
---
**由AI Reviewer团队用 ❤️ 打造**