Files
2026-09-19 12:54:45 +08:00

113 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PromptCR-Lab
多模型 × 多提示词策略代码审查实验支撑平台。
## 功能
- **数据集管理**:从 Git 仓库筛选 commit、提取 Unidiff、按可插拔规则预埋缺陷、生成 Ground Truth。
- **模型接入**:DeepSeek / Kimi / 通义千问统一 OpenAI 兼容适配器,内置并发控制与指数退避重试。
- **提示词策略**:L1/L2/L3 三级 Jinja2 模板,版本化管理,旧版本只读。
- **实验调度**:3 模型 × N 级 × 12 commit × 3 重复全因子矩阵,asyncio 异步调度,失败重试 + 断点续跑。
- **结果分析**:检出率 / 误报率 / 覆盖率 / 李克特五级量表 / 输出稳定性;统计分析与论文图表。
- **接入层**:FastAPI RESTful API + Typer CLI。
- **Web 前端**:React 18 + Tailwind CSS 3 + shadcn/ui + Vite + ECharts。
- **部署**:`docker compose up` 一键拉起 PostgreSQL + 后端 + 前端(Nginx)。
## 安装
### 本地开发
```bash
# 后端
cd backend
python3 -m pip install -r ../requirements.txt
DATABASE_URL="postgresql+psycopg://postgres:postgres@localhost:5432/promptcr" \
uvicorn app.api.main:app --reload
# 前端
cd frontend
npm install
npm run dev
```
### Docker
```bash
cp .env.example .env
# 编辑 .env 填入模型 API 密钥
docker compose up --build
```
访问 http://localhost
## 配置
在 `.env` 中配置:
```env
DATABASE_URL=postgresql+psycopg://postgres:postgres@db:5432/promptcr
DEEPSEEK_API_KEY=your_key
KIMI_API_KEY=your_key
QWEN_API_KEY=your_key
```
密钥仅通过环境变量读取,仓库中无硬编码。
## 断点续跑
实验运行中断后,重新调用:
```bash
# CLI
python3 -m app.cli.main run-experiment <experiment_id>
# API
POST /api/experiments/<experiment_id>/run
```
调度器会自动扫描 `pending` / `failed`(未超重试)单元继续执行,已完成的 `run` 不会重复调用。
## 数据库 ER 说明
核心表:
- `samples`:commit 样本(repo, commit_sha, language, diff, 变更前后上下文)
- `defects`:预埋缺陷 Ground Truth(类型、位置行号、参考修复)
- `prompt_templates` / `prompt_template_versions`:提示词模板与版本(旧版本只读)
- `experiments`:实验批次配置快照
- `experiment_runs`:实验单元(唯一 run_id、状态、重试次数、采样参数快照)
- `results`:单元结果(原始输出、token、耗时、解析出的指出项、五维指标、李克特分)
## 测试
```bash
# 后端
cd backend
python3 -m pytest
# 前端
cd frontend
npm run test
```
## 项目结构
```
.
├── backend/ # Python 后端 (FastAPI + SQLAlchemy + asyncio)
│ ├── app/
│ │ ├── api/ # RESTful API
│ │ ├── cli/ # Typer CLI
│ │ ├── dataset/ # Git 解析 / diff 提取 / 缺陷规则
│ │ ├── model_adapters/ # LLM 适配器
│ │ ├── prompts/ # 模板管理
│ │ ├── experiments/ # 矩阵生成 / 异步调度
│ │ └── analysis/ # 指标 / 统计 / 图表
│ └── tests/
├── frontend/ # React SPA
├── docker-compose.yml
├── backend/Dockerfile
├── frontend/Dockerfile
└── requirements.txt
```