docs: add LLM Gateway implementation plan

Plan includes 6 batches with 34 tasks:
- Batch 1: Project foundation (config, db, logging)
- Batch 2: Data models and Admin API (CRUD)
- Batch 3: Core services (transformer, router, rate limiter, budget)
- Batch 4: Provider adapters (OpenAI, Anthropic, Azure, Gemini, Bedrock)
- Batch 5: API endpoints (chat, messages, responses)
- Batch 6: Management and deployment

Estimated time: 19-25 hours

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
root 2026-05-01 14:55:18 +08:00
parent bebe8c1bb5
commit 8f550a2100

View File

@ -0,0 +1,419 @@
# LLM Gateway 实施计划
## 概述
基于已批准的设计文档 `docs/plans/2026-05-01-llm-gateway-design.md`,本计划将实现分为 6 个批次,每批次包含多个可验证的任务。
---
## 批次 1项目基础架构
### 任务 1.1:初始化项目结构
- **目标**:创建项目目录结构和基础文件
- **涉及文件**
```
llm-gateway/
├── app/
│ ├── __init__.py
│ ├── main.py
│ └── config.py
├── tests/
│ └── __init__.py
├── requirements.txt
├── .gitignore
└── README.md
```
- **验证方式**目录结构正确Python 可导入 app 模块
- **完成判定**`python -c "import app"` 无报错
### 任务 1.2:配置管理模块
- **目标**:实现 Pydantic Settings 配置管理
- **涉及文件**
- `app/config.py`
- `app/.env.example`
- **验证方式**:配置类可正确读取环境变量
- **完成判定**:单元测试通过
### 任务 1.3:数据库连接与 Schema
- **目标**:初始化 SQLite 数据库和表结构
- **涉及文件**
- `app/db/database.py`
- `app/db/schema.sql`
- **验证方式**:数据库文件创建成功,表结构正确
- **完成判定**`sqlite3 data/gateway.db ".tables"` 显示所有表
### 任务 1.4:日志配置
- **目标**:配置结构化日志
- **涉及文件**
- `app/utils/logging.py`
- **验证方式**:日志输出格式正确
- **完成判定**:单元测试验证日志格式
---
## 批次 2数据模型与 Admin API
### 任务 2.1:数据模型定义
- **目标**:定义 SQLAlchemy ORM 模型
- **涉及文件**
- `app/models/provider.py`
- `app/models/api_key.py`
- `app/models/project.py`
- `app/models/model_alias.py`
- `app/models/usage.py`
- `app/models/__init__.py`
- **验证方式**:模型可正确映射到数据库表
- **完成判定**:单元测试通过
### 任务 2.2:加密工具
- **目标**:实现 API Key 哈希和 Provider Key 加密
- **涉及文件**
- `app/utils/crypto.py`
- **验证方式**
- bcrypt 哈希验证
- AES-256 加密解密验证
- **完成判定**:单元测试通过
### 任务 2.3Provider 管理 API
- **目标**:实现 Provider CRUD 接口
- **涉及文件**
- `app/api/admin/providers.py`
- `app/api/admin/__init__.py`
- **验证方式**
- POST /admin/providers 创建 Provider
- GET /admin/providers 列表查询
- PUT /admin/providers/{id} 更新
- DELETE /admin/providers/{id} 删除
- **完成判定**:集成测试通过
### 任务 2.4Project 管理 API
- **目标**:实现 Project CRUD 接口
- **涉及文件**
- `app/api/admin/projects.py`
- **验证方式**CRUD 接口可用
- **完成判定**:集成测试通过
### 任务 2.5API Key 管理 API
- **目标**:实现 API Key CRUD 接口
- **涉及文件**
- `app/api/admin/keys.py`
- **验证方式**
- 创建 Key 返回明文 key仅一次
- 验证 key_hash 存储正确
- **完成判定**:集成测试通过
### 任务 2.6Model Alias 管理 API
- **目标**:实现 Model Alias CRUD 接口
- **涉及文件**
- `app/api/admin/models.py`
- **验证方式**CRUD 接口可用
- **完成判定**:集成测试通过
---
## 批次 3核心服务层
### 任务 3.1Request Transformer 基础
- **目标**:实现请求格式转换基础框架
- **涉及文件**
- `app/core/transformer.py`
- `app/schemas/openai.py`
- `app/schemas/anthropic.py`
- **验证方式**
- OpenAI → Anthropic 转换测试
- Anthropic → OpenAI 转换测试
- **完成判定**:单元测试通过
### 任务 3.2Router 实现
- **目标**:实现模型别名解析和路由逻辑
- **涉及文件**
- `app/core/router.py`
- **验证方式**
- 简单别名解析
- 路由组加权选择
- Fallback 链解析
- **完成判定**:单元测试通过
### 任务 3.3Rate Limiter 实现
- **目标**:实现 RPM/TPM 限流
- **涉及文件**
- `app/core/rate_limiter.py`
- **验证方式**
- 超过限制返回 429
- 响应头正确
- 窗口重置正确
- **完成判定**:单元测试通过
### 任务 3.4Budget Controller 实现
- **目标**:实现 Key/Project 级预算控制
- **涉及文件**
- `app/core/budget.py`
- **验证方式**
- 超过 hard_limit 返回 402
- soft_limit 告警日志
- **完成判定**:单元测试通过
### 任务 3.5Circuit Breaker 实现
- **目标**:实现熔断器
- **涉及文件**
- `app/core/circuit_breaker.py`
- **验证方式**
- CLOSED → OPEN → HALF_OPEN → CLOSED 状态转换
- **完成判定**:单元测试通过
### 任务 3.6Fallback/Retry 实现
- **目标**:实现重试和降级逻辑
- **涉及文件**
- `app/core/fallback.py`
- **验证方式**
- 指数退避重试
- Fallback 到备用 Provider
- **完成判定**:单元测试通过
---
## 批次 4Provider Adapters
### 任务 4.1Adapter 基类与接口
- **目标**:定义 Provider Adapter 抽象接口
- **涉及文件**
- `app/adapters/base.py`
- `app/adapters/__init__.py`
- **验证方式**:接口定义完整
- **完成判定**:代码审查通过
### 任务 4.2OpenAI Adapter
- **目标**:实现 OpenAI Provider 适配器
- **涉及文件**
- `app/adapters/openai.py`
- **验证方式**
- 非流式请求测试
- 流式请求测试
- Token 计数测试
- **完成判定**:集成测试通过(使用 Mock 或真实 API
### 任务 4.3Anthropic Adapter
- **目标**:实现 Anthropic Provider 适配器
- **涉及文件**
- `app/adapters/anthropic.py`
- **验证方式**
- Messages API 格式请求
- 流式响应处理
- **完成判定**:集成测试通过
### 任务 4.4Azure OpenAI Adapter
- **目标**:实现 Azure OpenAI Provider 适配器
- **涉及文件**
- `app/adapters/azure.py`
- **验证方式**
- deployment_name 配置正确
- api_base 路径正确
- **完成判定**:集成测试通过
### 任务 4.5Google Gemini Adapter
- **目标**:实现 Google Gemini Provider 适配器
- **涉及文件**
- `app/adapters/gemini.py`
- **验证方式**
- Gemini API 格式转换
- safety settings 处理
- **完成判定**:集成测试通过
### 任务 4.6AWS Bedrock Adapter
- **目标**:实现 AWS Bedrock Provider 适配器
- **涉及文件**
- `app/adapters/bedrock.py`
- **验证方式**
- AWS 认证正确
- model_id 格式正确
- **完成判定**:集成测试通过
---
## 批次 5API 端点与集成
### 任务 5.1Load Balancer 实现
- **目标**:实现负载均衡逻辑
- **涉及文件**
- `app/core/load_balancer.py`
- **验证方式**
- 加权轮询正确
- 健康检查集成
- **完成判定**:单元测试通过
### 任务 5.2Health Check 实现
- **目标**:实现 Provider 健康检查
- **涉及文件**
- `app/core/health_checker.py`
- **验证方式**
- 定时检查执行
- 状态更新正确
- **完成判定**:单元测试通过
### 任务 5.3/v1/chat/completions 端点
- **目标**:实现 OpenAI-compatible Chat Completions API
- **涉及文件**
- `app/api/v1/chat.py`
- `app/api/v1/__init__.py`
- **验证方式**
- 使用 OpenAI SDK 调用成功
- 流式响应正确
- **完成判定**:端到端测试通过
### 任务 5.4/v1/messages 端点
- **目标**:实现 Anthropic Messages API
- **涉及文件**
- `app/api/v1/messages.py`
- **验证方式**
- 使用 Anthropic SDK 调用成功
- **完成判定**:端到端测试通过
### 任务 5.5/v1/responses 端点
- **目标**:实现 OpenAI Responses API
- **涉及文件**
- `app/api/v1/responses.py`
- **验证方式**
- Responses API 格式正确处理
- **完成判定**:端到端测试通过
### 任务 5.6:认证中间件
- **目标**:实现 Virtual Key 认证
- **涉及文件**
- `app/middleware/auth.py`
- **验证方式**
- 有效 Key 通过
- 无效 Key 返回 401
- **完成判定**:集成测试通过
### 任务 5.7:请求日志中间件
- **目标**:实现请求日志记录
- **涉及文件**
- `app/middleware/logging.py`
- **验证方式**
- 日志写入数据库
- 包含所有必要字段
- **完成判定**:集成测试通过
---
## 批次 6管理功能与部署
### 任务 6.1Usage Dashboard API
- **目标**:实现使用统计查询接口
- **涉及文件**
- `app/api/admin/usage.py`
- **验证方式**
- GET /admin/usage/stats 返回正确统计
- 按时间/模型/Provider 分组
- **完成判定**:集成测试通过
### 任务 6.2:审计日志
- **目标**:实现审计日志记录
- **涉及文件**
- `app/middleware/audit.py`
- **验证方式**
- 管理操作记录审计日志
- **完成判定**:集成测试通过
### 任务 6.3Provider Health Check API
- **目标**:实现健康检查接口
- **涉及文件**
- `app/api/admin/health.py`
- **验证方式**
- GET /health 返回服务状态
- GET /admin/providers/{id}/health 返回 Provider 状态
- **完成判定**:集成测试通过
### 任务 6.4Docker 配置
- **目标**:创建 Docker 和 Docker Compose 配置
- **涉及文件**
- `Dockerfile`
- `docker-compose.yml`
- **验证方式**
- docker build 成功
- docker-compose up 服务正常
- **完成判定**:容器启动并可访问 API
### 任务 6.5:文档与示例
- **目标**:完善 README 和 API 文档
- **涉及文件**
- `README.md`
- `docs/api.md`
- `docs/deployment.md`
- **验证方式**:文档完整可读
- **完成判定**:代码审查通过
---
## 验证命令
### 单元测试
```bash
pytest tests/unit -v
```
### 集成测试
```bash
pytest tests/integration -v
```
### 全部测试
```bash
pytest -v --cov=app
```
### 类型检查
```bash
mypy app
```
### 代码风格
```bash
ruff check app
```
### 启动服务
```bash
uvicorn app.main:app --reload
```
---
## 风险与待确认项
1. **Provider API Key 获取**:需要各 Provider 的 API Key 用于测试
2. **AWS 凭证**Bedrock 需要 AWS 凭证配置
3. **并发写入性能**SQLite 高并发写入可能成为瓶颈,需测试验证
4. **Token 计数准确性**:不同 Provider 的 Token 计数方式可能不同
---
## 时间估算
| 批次 | 任务数 | 预计时间 |
|------|--------|----------|
| 批次 1 | 4 | 2-3 小时 |
| 批次 2 | 6 | 3-4 小时 |
| 批次 3 | 6 | 4-5 小时 |
| 批次 4 | 6 | 4-5 小时 |
| 批次 5 | 7 | 4-5 小时 |
| 批次 6 | 5 | 2-3 小时 |
| **总计** | **34** | **19-25 小时** |
---
## 依赖关系
```
批次 1 (基础架构)
批次 2 (数据模型与 Admin API)
批次 3 (核心服务层) ←─┐
↓ │
批次 4 (Provider Adapters)
批次 5 (API 端点与集成)
批次 6 (管理功能与部署)
```