llm-gateway/docs/plans/2026-05-01-llm-gateway-plan.md
root 8f550a2100 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>
2026-05-01 14:55:18 +08:00

11 KiB
Raw Permalink Blame History

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
  • 验证方式:文档完整可读
  • 完成判定:代码审查通过

验证命令

单元测试

pytest tests/unit -v

集成测试

pytest tests/integration -v

全部测试

pytest -v --cov=app

类型检查

mypy app

代码风格

ruff check app

启动服务

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 (管理功能与部署)