我用DeepSeek做了一个代码审查工具审查一次不到1分钱
前两天发现 Groq 把国内 IP 给封了,换个思路,顺手把 DeepSeek 接上做了一个 AI 代码审查工具。
写完了算了下成本——审查一次不到 1 分钱。
为什么需要这个工具
独立开发者最缺什么?不是技术,是 Code Review。
写代码的时候自己觉得没问题,实际上命名不规范、集合没指定容量、事务注解没配 rollbackFor——这些坑踩过的都懂。
大厂有同事审查,独立开发者只能靠自己的眼睛。但 AI 可以当这个同事。
70 条规则,不是通用的
市面上很多 AI 审查工具用的是通用规则,比如「类名要驼峰」「变量要有意义」。这些 ChatGPT 也能干。
但我想要的是这个东西:
- Map.of() 不能传 null(否则运行时报 NPE,这是我真实踩过的坑)
- 审计字段必须设 updated_by(否则插入报错)
- CORS 配置必须配 CorsConfigurationSource Bean(光配 .cors() 不够)
这些规则你查遍全网也找不到——它们来自我 6 个微服务踩过的坑。
我把阿里巴巴 Java 手册(55 条)和我自己的实战经验(15 条)整理到一起,总共 70 条规则,喂给 AI。

一次审查多少钱
我用 DeepSeek API,审查一次代码大概消耗 8000 tokens 左右:
| 项目 | 数量 |
|---|---|
| 规则文件(70 条) | ~3500 tokens |
| 审查指令 | ~500 tokens |
| 用户代码(~200 行) | ~3000 tokens |
| 输出(审查结果) | ~1500 tokens |
| 总计 | ~8500 tokens |
DeepSeek 的价格:输入 1 元/百万 tokens,输出 2 元/百万。
算下来一次审查:(7000 × 1 + 1500 × 2) / 1000000 = 0.007 + 0.003 = 0.01 元
充 10 块能用 1000 次。
架构很简单
没有数据库、没有状态、没有历史记录——纯无状态设计。
用户贴代码 → 后端拼 Prompt(70 条规则 + 代码)→ 调 DeepSeek API → 解析 JSON → 展示报告
后端就一个 POST 接口,前端一个 Monaco 编辑器 + 审查报告区。
选 VS Code 暗色主题,代码区占 60% 注意力,报告区左边框按严重程度着色:
- 🔴 红色:ERROR(必须修)
- 🟡 黄色:WARNING(推荐修)
- 🔵 蓝色:INFO(建议优化)

项目结构也很干净:
services/ai-reviewer/ ← Spring Boot 3
clients/ai-reviewer/ ← React + Monaco
docs/ai-review-rules.md ← 70 条规则,改文件即改行为
规则文件是唯一的「数据引擎」。今天 70 条,明天踩了新坑加一条,重启即生效。不需要数据库迁移,不需要后台管理页面。
Prompt 是关键
同样的代码喂给 AI,规则写得清不清晰,直接影响审查质量。
我的 Prompt 结构:
- System 位置放规则:70 条规则是固定背景,放 system message
- User 位置放代码:每次审查的代码不同
- JSON 强约束:要求 AI 只输出 JSON,否则解析会崩
- 支持规则集切换:all / p3c(阿里规约)/ wuxiannet(我的经验)
/**
* 构建完整 prompt
*/
public String buildPrompt(String code, String language, String rulesType) {
String rules = getRulesText(rulesType);
String truncatedCode = code.length() > 8000 ? code.substring(0, 8000)
+ "\n\n// [代码已截断,超过 8000 字符]" : code;
return """
你是一个严格的 Java 代码审查专家。请按照以下规则逐条审查代码,输出结构化报告。
## 审查规则
%s
## 审查要求
1. 逐条对照规则检查代码
2. 只报告真正违反的规则,不要报告"未发现违反"
3. 每条问题标注: 行号、违反的规则编号、问题描述、修复建议
4. 级别: ERROR(必须修复) / WARNING(推荐修复) / INFO(建议优化)
## 待审查代码
```%s
%s
```
## 输出格式
严格按 JSON 格式输出,不要额外解释:
{
"summary": {"total": N, "errors": N, "warnings": N, "infos": N},
"issues": [
{"level": "ERROR|WARNING|INFO", "ruleId": N, "title": "...", "line": N, "code": "...", "message": "...", "suggestion": "..."}
]
}
""".formatted(rules, language != null ? language : "java", truncatedCode);
}

最开始的版本发现 AI 经常在 JSON 前后加废话「根据您的代码,审查结果如下」。加了一段 ```json 代码块提取逻辑,不管 AI 怎么包装,都能把 JSON 摘出来。
部署和启动
就两个命令:
# 后端
cd services/ai-reviewer && mvn spring-boot:run
# 前端
cd clients/ai-reviewer && npm run dev
本机跑,不上服务器。代码不传到第三方,API Key 配置在本地 application-dev.yml。
效果
贴一段代码举例。这段代码有两处违规:
public class UserService {
private Date createdAt; // ❌ 规则56:审计字段必须是 create_time
private UserRepository userRepository;
public List<User> getUsers() {
List<String> list = new ArrayList<>(); // ⚠️ 规则23:ArrayList 未指定容量
return userRepository.findAll();
}
}
AI 审查结果:
🔴 ERROR R56 L5 审计字段 create_time 不符合规范
→ 改为: private Date createTime;
🟡 WARNING R23 L12 ArrayList 未指定初始容量
→ 改为: new ArrayList<>(16)

逐条对照规则,标出行号、规则编号、修复建议。点击问题行,编辑器自动跳转到对应行。
写这篇文章的时候,我顺便审查了一次——发现了一个 controller 里没配 @CrossOrigin 的接口。代码自己审自己,挺妙的。
关于作者:无羡,独立开发者,全栈工程师,专注 AI 应用与微服务架构。
📌 分类:独立开发实战
🔗 个人博客 — 更多技术文章
✨ 开发者福利整理 — 云服务资源汇总
📂 软件工坊 — 我的技术分享
🌐 个人门户 — 独立开发作品全集
更多推荐

所有评论(0)