自动化 PR 代码质量审查工具,基于 LangChain + LangGraph + Deepseek LLM。
- 监听 GitHub PR Webhook 事件
- 自动拉取 PR 的 diff、commit 信息
- 基于 LangChain + Deepseek LLM 进行代码质量分析
- 自动将分析结果评论到 PR
- 支持异步后台处理,主线程快速响应
- Web 框架: FastAPI
- LLM 集成: LangChain + LangGraph
- 异步处理: Celery + Redis
- GitHub 交互: GitHub REST API
backend/
├── __init__.py
├── api/ # API 相关模块
│ ├── __init__.py
│ ├── routes.py # API 路由定义
│ └── webhook.py # GitHub webhook 处理
├── llm/ # LLM 相关模块
│ ├── __init__.py
│ ├── client.py # LLM 客户端
│ └── prompts.py # 提示模板
├── agent/ # Agent 相关模块
│ ├── __init__.py
│ └── graph.py # LangGraph 定义
├── tools/ # 工具函数模块
│ ├── __init__.py
│ └── github.py # GitHub 工具
├── models/ # 数据模型模块
│ ├── __init__.py
│ ├── github.py # GitHub 数据模型
│ └── review.py # 审查结果模型
├── worker/ # 异步任务模块
│ ├── __init__.py
│ ├── celery_app.py # Celery 配置
│ └── tasks.py # 任务定义
├── config.py # 配置管理
└── main.py # 应用入口
- Python 3.12+
- Redis
使用 uv (推荐):
# 安装 uv (如果尚未安装)
curl -sSf https://install.uv.dev | sh
# 使用 uv 安装项目依赖
uv pip install -e .
# 或者安装开发依赖
uv pip install -e ".[dev]"使用传统的 pip:
pip install -e .- 复制
.env.example到.env并填写配置:
cp .env.example .env- 编辑
config.toml文件配置应用参数。
在开发环境中,您可以启用开发模式,以简化测试过程。在 config.toml 中设置:
[github]
development_mode = true # 启用开发模式
verify_webhook_signature = false # 禁用签名验证开发模式的特点:
- 宽松的请求验证:即使缺少必要的头信息或 JSON 负载无效,也不会拒绝请求
- 默认值填充:自动为缺失的头信息和负载生成默认值
- 详细的日志:提供更多调试信息
在生产环境中,应禁用开发模式并启用签名验证:
[github]
development_mode = false # 禁用开发模式
verify_webhook_signature = true # 启用签名验证并确保在 .env 文件中设置了 WEBHOOK_SECRET。
项目提供了 Makefile 来简化常见操作:
# 安装依赖
make install
# 安装开发依赖
make dev
# 运行代码检查
make lint
# 格式化代码
make format
# 运行测试
make test
# 启动 Web 服务
make run
# 启动 Celery Worker
make worker
# Docker 相关
make docker-build
make docker-up
make docker-down
make docker-logs
# 初始化数据库
make init-db
# 运行演示
make demo使用 uv (推荐):
# 安装依赖
uv sync
# 启动 Web 服务
uv run uvicorn backend.main:app --host 0.0.0.0 --port 8000
# 启动 Celery Worker
uv run python celery_worker.py# 构建并启动所有服务
make docker-build
make docker-up
# 查看服务状态
make docker-logs
# 停止服务
make docker-down在本地进行开发时,您需要同时运行多个服务并使用 ngrok 创建公网访问点。以下是建议的工作流程:
- 启动 Redis(如果尚未运行):
redis-server- 启动 Web 服务(在一个终端窗口):
make run- 启动 Celery Worker(在另一个终端窗口):
make worker- 启动 ngrok(在第三个终端窗口):
make ngrok- 配置 GitHub Webhook:
- 使用 ngrok 提供的公网 URL 配置 GitHub webhook
- 测试 webhook 触发
在本地开发时,您需要使用 ngrok 等工具创建一个公网可访问的 URL,以便 GitHub 可以将 webhook 请求发送到您的本地服务器。
- 安装 ngrok(如果尚未安装):
# 使用 Homebrew 安装(macOS)
brew install ngrok
# 或者从官网下载:https://ngrok.com/download- 启动 ngrok:
# 将本地的 8000 端口映射到公网
ngrok http 8000- ngrok 启动后,它会显示一个公网 URL(如
https://1234abcd.ngrok.io),记下这个 URL。
- 在 GitHub 仓库设置中添加 Webhook
- 设置 Payload URL 为
https://your-ngrok-url/api/webhook/github(如果使用 ngrok)或http://your-server/api/webhook/github(生产环境) - 选择 Content type 为
application/json - 设置 Secret(与
.env中的WEBHOOK_SECRET一致) - 选择 "Let me select individual events" 并勾选 "Pull requests"
可以通过 API 手动触发代码审查:
curl -X POST "http://localhost:8000/api/review?repo=owner/repo&pr_number=123"Pulse Guard 设计具有高度可扩展性:
- LLM 提供者: 通过配置文件轻松切换不同的 LLM
- 代码审查类型: 可以添加新的审查类型
- Git 平台: 架构支持扩展到其他 Git 平台
MIT