LLM Application Performance Benchmark Platform
一个用于评测大模型应用性能的综合平台,支持AI应用管理、测试集管理、压测任务执行、评分评测和可视化报告。
- 用户权限管理 - JWT认证、角色权限控制、审计日志
- AI应用管理 - AI应用CRUD、API密钥加密存储、连通性测试、SSRF防护
- 测试集管理 - 测试集CRUD、测试用例管理、版本发布、批量导入(CSV/JSONL)
- 压测任务 - 任务创建、Celery异步执行、流式响应处理、实时进度监控
- 准确率评测 - 关键词评分、语义评分、格式校验、负向关键词检测
- 报告可视化 - 折线图、柱状图、雷达图、箱线图、排名表
| 组件 | 技术 |
|---|---|
| 后端框架 | FastAPI + SQLAlchemy 2.x + Pydantic v2 |
| 异步任务 | Celery + Redis |
| 数据库 | PostgreSQL (通过 Alembic 管理迁移) |
| 前端框架 | Vue 3 + TypeScript |
| 图表 | ECharts |
| 认证 | JWT (python-jose) |
| 容器化 | Docker + Docker Compose |
LLM Performance Benchmark/
├── backend/
│ ├── app/
│ │ ├── api/ # API路由
│ │ │ └── v1/
│ │ ├── core/ # 核心配置、安全、Redis
│ │ ├── db/ # 数据库基类和会话管理
│ │ ├── models/ # SQLAlchemy模型
│ │ ├── schemas/ # Pydantic模型
│ │ ├── services/ # 业务逻辑
│ │ ├── tasks/ # Celery任务
│ │ ├── scripts/ # 数据库初始化脚本
│ │ └── tests/ # 单元测试(含 conftest.py 依赖覆盖)
│ ├── alembic/
│ │ ├── env.py # Alembic 环境配置
│ │ └── versions/ # 迁移脚本
│ ├── alembic.ini
│ ├── Dockerfile
│ ├── requirements.txt
│ ├── .env
│ └── .env.example
├── frontend/
│ ├── src/
│ │ ├── api/ # API调用
│ │ ├── router/ # 路由配置
│ │ ├── stores/ # Pinia状态管理
│ │ ├── types/ # TypeScript类型
│ │ ├── views/ # 页面组件
│ │ └── __tests__/ # 组件和store测试
│ ├── Dockerfile
│ ├── nginx.conf
│ ├── package.json
│ └── vite.config.ts
├── docker-compose.yml
└── README.md
- Python 3.12+
- Node.js 18+
- PostgreSQL 14+
- Redis 6+
- Docker & Docker Compose(可选,用于容器化部署)
# 1. 配置环境变量
cp backend/.env.example backend/.env
# 2. 启动所有服务
docker compose up -d
# 3. 初始化数据库
docker compose exec backend python -m app.scripts.init_db
docker compose exec backend python -m app.scripts.seed_data
# 4. 访问
# 前端: http://localhost
# API文档: http://localhost:3100/docscd backend
python -m venv venv
source venv/Scripts/activate # Windows
# source venv/bin/activate # Linux/Mac
pip install -r requirements.txtcd frontend
npm installcp backend/.env.example backend/.env
# 编辑 backend/.env 填入实际配置确保 PostgreSQL 和 Redis 服务正在运行,然后执行:
cd backend
python -m app.scripts.init_db # 创建表结构
alembic stamp head # 标记基线迁移(已执行 init_db 时使用)
python -m app.scripts.seed_data # 初始化种子数据默认管理员账号:
- 用户名: admin
- 密码: admin123
# 数据库
DATABASE_URL=postgresql+psycopg2://postgres:123456@localhost:5432/llm_benchmark
# Redis
REDIS_URL=redis://localhost:6379/0
CELERY_BROKER_URL=redis://localhost:6379/1
# JWT认证
SECRET_KEY=your-super-secret-key-change-in-production
JWT_ACCESS_TOKEN_EXPIRE_SECONDS=7200
JWT_REFRESH_TOKEN_EXPIRE_SECONDS=604800
# 加密 (任意长度均可,内部通过 SHA-256 派生)
ENCRYPTION_KEY=your-encryption-key-change-in-production
# CORS (逗号分隔的允许来源)
ALLOWED_ORIGINS=http://localhost:3101,http://127.0.0.1:3101
# 应用配置
APP_ENV=development
APP_NAME=LLM Benchmark Platform
DEBUG=true
# AI API配置
AI_API_KEY=your-api-key
AI_BASE_URL=https://api.openai.com/v1cd backend
uvicorn app.main:app --host 0.0.0.0 --port 3100 --reloadcd backend
celery -A app.tasks.celery_app worker --loglevel=info -Q benchmark,defaultcd frontend
npm run dev -- --port 3101前端地址: http://localhost:3101
访问 http://localhost:3101/login,使用管理员账号登录:
- 用户名: admin
- 密码: admin123
- 进入"AI应用"页面
- 点击"创建应用"
- 填写应用名称、API地址、API密钥
- 点击"测试连接"验证连通性
- 保存应用
- 进入"测试集"页面
- 创建测试集,填写基本信息
- 添加测试用例(prompt、expected_answer、keywords等)
- 配置评分规则
- 发布版本
- 进入"压测任务"页面
- 点击"创建任务"
- 选择目标AI应用和测试集版本
- 配置压测参数(并发数、请求数、模式等)
- 提交任务
- 任务创建后状态为"待启动"
- 点击"启动"按钮开始执行
- 实时查看进度、成功率等指标
- 可随时取消执行中的任务
- 压测完成后自动触发评分
- 进入"评分结果"页面
- 查看各评分维度的结果
- 如有需要可进行人工复核
- 进入"报告"页面
- 点击"创建报告"
- 选择报告类型(单个/对比/趋势)
- 系统自动生成图表数据并支持导出(HTML/PDF/XLSX/JSON)
项目使用 Alembic 管理数据库 schema 版本:
cd backend
# 生成迁移(模型变更后)
alembic revision --autogenerate -m "描述"
# 应用迁移
alembic upgrade head
# 查看当前版本
alembic current启动后端服务后访问:
- Swagger UI: http://localhost:3100/docs
- ReDoc: http://localhost:3100/redoc
| 模块 | 端点 | 说明 |
|---|---|---|
| 认证 | POST /api/v1/auth/login | 用户登录 |
| 认证 | POST /api/v1/auth/refresh | 刷新Token |
| AI应用 | GET/POST /api/v1/ai-applications | AI应用列表/创建 |
| AI应用 | GET/PUT/DELETE /api/v1/ai-applications/{id} | AI应用详情/更新/删除 |
| 测试集 | GET/POST /api/v1/datasets | 测试集列表/创建 |
| 测试集 | POST /api/v1/datasets/{id}/versions | 发布版本 |
| 压测任务 | GET/POST /api/v1/benchmark-runs | 任务列表/创建 |
| 压测任务 | POST /api/v1/benchmark-runs/{id}/start | 启动任务 |
| 压测任务 | POST /api/v1/benchmark-runs/{id}/cancel | 取消任务 |
| 评分 | GET /api/v1/evaluation/benchmark-runs/{id}/summary | 评分汇总 |
| 报告 | GET/POST /api/v1/reports | 报告列表/创建 |
| 报告 | GET /api/v1/reports/{id} | 报告详情 |
# 后端测试
cd backend
python -m pytest app/tests/ -v
# 前端测试
cd frontend
npm run test# 后端 (ruff)
cd backend
ruff check app
# 前端 (eslint)
cd frontend
npm run lint# 后端 (mypy)
cd backend
python -m mypy app
# 前端 (vue-tsc)
cd frontend
npm run typecheck- fixed_requests — 固定请求数量
- fixed_duration — 固定持续时间
- step_load — 阶梯式增加并发
- comparison — 多应用对比压测
- 关键词评分 (keyword) — 根据用例配置的关键词计算命中数量和覆盖率
- 语义评分 (semantic) — 使用 LLM 评判答案与期望答案的语义相似度
- 格式评分 (format) — 验证回答格式是否符合要求
- 负向关键词 (negative) — 检测回答中是否包含禁止出现的词汇
- 检查 Redis 服务是否正常运行
- 确认 Worker 已启动并监听 benchmark 队列
- 查看 Worker 日志排查问题
- 检查 Celery Worker 是否正常运行
- 确认任务已正确路由到 benchmark 队列
- 检查 CORS 配置(
ALLOWED_ORIGINS环境变量) - 确认后端服务运行在 3100 端口
- 检查浏览器控制台错误信息
- 在
app/schemas/添加 Pydantic 模型 - 在
app/services/添加业务逻辑 - 在
app/api/v1/添加路由 - 编写单元测试
- 在
app/models/定义模型 - 在
app/models/__init__.py中导出 - 运行
alembic revision --autogenerate -m "add_xxx_table" - 运行
alembic upgrade head
- 在
app/tasks/定义任务 - 在
app/tasks/celery_app.py的include列表中注册 - 在需要的地方调用任务
MIT License