Files
llm-intelligence/IMPLEMENTATION_PLAN.md

186 lines
9.9 KiB
Markdown
Raw Normal View History

# LLM Intelligence Hub — 生产级实施计划(修正版 v1.1
> 文档版本: v1.1
> 日期: 2026-05-10
> 负责人: 宰相
> 状态: Phase 1 执行中
> **修正说明**: 根据评审报告补充国内厂商覆盖、数据质量规则、非功能需求验证、容错降级设计、审计日志
---
## 一、项目状态快照
### 已完成 ✅
| 组件 | 说明 |
|------|------|
| PRD.md v0.3 | 产品需求文档 |
| TECHNICAL_DESIGN.md v1.1 | 技术设计文档 |
| FEATURE_LIST.md v1.1 | 功能清单 |
| BUSINESS_MODEL.md | 商业模型 |
| fetch_openrouter.go | OpenRouter采集器 |
| generate_daily_report.go | 日报生成器 |
| db/migrations/001_phase1_core_tables.sql | 3张核心表 |
| frontend/src/pages/Explorer.tsx | Explorer页面脚手架 |
| verification_executor.go | 验证执行器 |
### 进行中/待完善 🟡
| 组件 | 说明 |
|------|------|
| 数据库Schema升级 | 3张表 → 8张完整表 + audit_log |
| 数据质量规则 | CHECK约束 + stale标记 |
| 国内厂商数据 | 7家种子数据DeepSeek/阿里/Moonshot/智谱/字节/百度/腾讯) |
| Explorer页面 | 分页/排序/stale显示 |
| 日报推送 | cron配置+降级策略 |
| 前端构建配置 | package.json/vite.config.ts |
| 生产部署 | Dockerfile/docker-compose |
| 审计日志 | audit_log表 + 写入集成 |
---
## 二、修正说明(对照评审报告)
| 评审发现 | 修正措施 | 所在Sprint |
|----------|----------|-----------|
| 国内厂商覆盖缺失 | Sprint 2 新增7家种子数据录入 | Sprint 2 |
| 数据质量规则缺4/6 | Sprint 1 新增CHECK约束+stale标记+质量摘要 | Sprint 1 |
| 非功能需求缺5/6 | Sprint 2~6 新增采集成功率监控+连续失败告警+性能门禁 | Sprint 2~6 |
| 容错降级缺5项 | Sprint 3~5 新增日报降级+Explorer stale显示+维护模式 | Sprint 3~5 |
| 审计日志缺失 | Sprint 1 新增audit_log表Sprint 2 集成写入 | Sprint 1~2 |
| 3个TBD验证 | 全部改为自动化验证命令 | 全量修正 |
| 前端基础假设 | T-Q2-2.34拆分为34a+34b | Sprint 4 |
---
## 三、详细任务清单74个Task
> 强制规则每个Task必须有可自动验证的 command禁止 TBD/semantic 兜底
### Sprint 1: 数据层补全Week 1-2
**目标**: 3张表 → 8张完整表 + audit_log + 质量约束
| Task ID | 任务 | 验证方式 |
|---------|------|----------|
| T-Q2-2.9 | model_provider 表创建 | `psql -c "\dt" \| grep model_provider` |
| T-Q2-2.10 | operator 表创建 | `psql -c "\dt" \| grep operator` |
| T-Q2-2.11 | region_pricing 表创建 | `psql -c "\dt" \| grep region_pricing` |
| T-Q2-2.12 | pricing_history 表创建 | `psql -c "\dt" \| grep pricing_history` |
| T-Q2-2.13 | free_tier 表创建 | `psql -c "\dt" \| grep free_tier` |
| T-Q2-2.14 | daily_report 表创建 | `psql -c "\dt" \| grep daily_report` |
| T-Q2-2.15 | user_subscription 表创建 | `psql -c "\dt" \| grep user_subscription` |
| **T-Q2-2.15a** | **audit_log 表创建** | `psql -c "\dt" \| grep audit_log` |
| T-Q2-2.16 | model_prices → region_pricing 迁移 | `SELECT COUNT(*) FROM region_pricing` |
| T-Q2-2.16a | models 表字段扩充 | `psql -c "\d models"` |
| **T-Q2-2.16b** | **CHECK 约束price≥0, context≤10M, currency枚举** | `psql -c "\d region_pricing" \| grep Check` |
| T-Q2-2.17 | Provider 种子数据 | `SELECT COUNT(*) FROM model_provider` >= 6 |
| **T-Q2-2.16c** | **血缘字段强制写入验证** | `SELECT COUNT(*) FROM models WHERE batch_id IS NULL` = 0 |
| **T-Q2-2.16d** | **stale 标记定时任务** | 插入48h前数据运行SQL后验证 |
| T-Q2-2.18 | 审计触发器 | 更新记录验证 updated_at 自动变化 |
### Sprint 2: 采集器强化 + 国内厂商Week 3-4
**目标**: 采集器重构 + 国内7家厂商种子数据 + 审计日志集成
| Task ID | 任务 | 验证方式 |
|---------|------|----------|
| T-Q2-2.19 | ProviderMapper 模块提取 | `go test ./internal/collectors/` |
| T-Q2-2.20 | ProviderNameMap 完整映射 | 单元测试覆盖所有映射 |
| T-Q2-2.21 | Collector 接口抽象 | `go test ./internal/collectors/` |
| T-Q2-2.22 | 指数退避重试包 | `go test ./internal/retry/ -v` |
| T-Q2-2.23 | 采集器集成重试 | 模拟API失败验证重试 |
| T-Q2-2.24 | 批量插入优化 | 采集371条 < 30秒 |
| T-Q2-2.25 | 价格变动检测(>5% | 修改价格验证 history 表记录 |
| T-Q2-2.25a | 事务边界优化(每批次事务) | 中断采集验证已提交数据保留 |
| T-Q2-2.26 | 结构化日志slog JSON | 日志含 collector/duration/records |
| **T-Q2-2.26a** | **采集成功率监控** | `SELECT success_rate_7d FROM collector_stats` >= 95 |
| **T-Q2-2.27a** | **国内厂商录入DeepSeek** | DeepSeek模型数 >= 3 |
| **T-Q2-2.27b** | **国内厂商录入:阿里/Moonshot/智谱** | 每家至少2个模型 |
| **T-Q2-2.27c** | **国内厂商录入:字节/百度/腾讯** | 每家至少1个模型 |
| **T-Q2-2.27d** | **国内厂商CNY定价录入** | `SELECT COUNT(*) FROM region_pricing WHERE currency='CNY'` >= 10 |
| **T-Q2-2.27e** | **采集器写入 audit_log** | `SELECT COUNT(*) FROM audit_log WHERE table_name='models'` >= 371 |
### Sprint 3: 日报与报告Week 5-6
**目标**: 日报增强 + 降级策略 + 飞书推送
| Task ID | 任务 | 验证方式 |
|---------|------|----------|
| T-Q2-2.28 | 日报从DB读取非JSON | 删除 models.json 后日报仍能生成 |
| T-Q2-2.29 | 新模型检测逻辑 | 插入测试模型验证报告含"新模型" |
| T-Q2-2.30 | 价格变动高亮(>5% | 修改价格>5%验证报告高亮 |
| T-Q2-2.31 | 场景推荐算法 | 推荐含 TOP 3 模型及理由 |
| **T-Q2-2.31a** | **数据质量摘要段落** | `grep "数据质量" reports/daily/*.md` |
| T-Q2-2.32 | HTML报告模板 | 浏览器正常打开 |
| T-Q2-2.33 | Markdown报告优化 | 飞书/钉钉渲染正常 |
| **T-Q2-2.33a** | **run_daily.sh 完整脚本** | 手动执行 exit code = 0 |
| T-Q2-2.34 | cron配置每日08:00 | `crontab -l \| grep llm-intelligence` |
| **T-Q2-2.35** | **日报失败降级(复制昨日+"[数据延迟]"** | 模拟失败验证复制和标题 |
| **T-Q2-2.36** | **日报飞书告警(失败时)** | 测试webhook模拟失败验证消息到达 |
| T-Q2-2.37 | 日报写入 daily_report 表 | `SELECT * FROM daily_report WHERE report_date = TODAY` |
| T-Q2-2.38 | 报告文件归档 | `ls reports/daily/2026/05/` |
### Sprint 4: 前端完善Week 7-8
**目标**: Explorer完善 + 可视化 + 降级显示
| Task ID | 任务 | 验证方式 |
|---------|------|----------|
| **T-Q2-2.39a** | **package.json 创建** | `cd frontend && npm install` |
| **T-Q2-2.39b** | **vite.config.ts + tsconfig.json** | `cd frontend && npm run build` |
| T-Q2-2.40 | index.html 入口页 | `npm run dev` 可访问 |
| T-Q2-2.41 | App.tsx 路由配置 | 路由切换正常 |
| T-Q2-2.42 | 数据服务层封装 | API返回正确结构 |
| T-Q2-2.43 | 分页功能 | 100+条分页正常 |
| T-Q2-2.44 | 排序功能 | Jest单元测试通过 |
| T-Q2-2.45 | 免费标记样式 | 所有免费模型标记正确 |
| T-Q2-2.46 | 厂商筛选动态加载 | 新增厂商自动出现 |
| T-Q2-2.47 | 模态筛选修正 | vision/text/code分类正确 |
| **T-Q2-2.48** | **stale 状态显示(红标)** | 插入stale数据验证显示 |
| **T-Q2-2.49** | **pricing unavailable 显示** | 单元测试null/undefined显示 |
| T-Q2-2.50 | ECharts 集成 | 渲染柱状图 |
| T-Q2-2.51 | 价格趋势占位图替换 | 显示趋势曲线 |
| T-Q2-2.52 | Dashboard 首页 | 显示今日报告摘要 |
### Sprint 5: 生产部署Week 9-10
**目标**: 容器化 + CI/CD + 运维脚本
| Task ID | 任务 | 验证方式 |
|---------|------|----------|
| T-Q2-2.53 | Dockerfile多阶段构建 | `docker build -t llm-hub .` |
| T-Q2-2.54 | docker-compose.yml | `docker-compose up -d` |
| T-Q2-2.55 | .env.example | 文件存在且密钥为空 |
| T-Q2-2.56 | Nginx配置 | `curl http://localhost/health` = 200 |
| **T-Q2-2.56a** | **Nginx 维护模式** | curl 返回503 + maintenance.html |
| T-Q2-2.57 | GitHub Actions CI | Push自动触发CI |
| T-Q2-2.58 | 测试覆盖率检查≥80% | 不达标CI失败 |
| T-Q2-2.59 | 构建产物上传 | Artifacts含产物 |
| T-Q2-2.60 | 数据库备份脚本 | 手动执行验证OSS上传 |
| T-Q2-2.61 | 数据库恢复脚本 | 恢复后数据完整 |
| **T-Q2-2.62** | **健康检查脚本** | `./healthcheck.sh` 输出正常 |
| **T-Q2-2.63** | **日志轮转配置30天** | `ls /var/log/llm-hub/` |
| **T-Q2-2.64** | **连续3天失败告警** | 插入3条失败记录验证告警 |
### Sprint 6: 验收与优化Week 11-12
**目标**: 全面验收 + 性能优化 + 文档完善
| Task ID | 任务 | 验证方式 |
|---------|------|----------|
| **T-Q2-2.65** | **采集覆盖率OpenRouter 371+ + 国内7家** | models数 >= 371 + 国内厂商 >= 10 |
| **T-Q2-2.66** | **数据质量:自动抽样核对脚本** | exit code = 0差异 < 1% |
| **T-Q2-2.67** | **采集性能 < 30秒** | `time ./fetch_openrouter` < 30s |
| T-Q2-2.68 | 日报生成验收连续7天 | 含新模型/价格变动/场景推荐/质量摘要 |
| T-Q2-2.69 | Explorer页面验收 | 所有交互无报错 |
| **T-Q2-2.70** | **API响应 < 500ms** | `curl -w "%{time_total}"` < 0.5 |
| **T-Q2-2.71** | **前端首屏 < 2s** | Lighthouse >= 80 |
| **T-Q2-2.72** | **7日采集成功率 >= 95%** | `SELECT AVG(success_rate_7d)` >= 95 |
| T-Q2-2.73 | 密钥管理检查 | `grep -r "sk-" --include="*.go" .` 无结果 |
| T-Q2-2.74 | SQL注入检查 | 所有SQL参数化查询 |
---
## 四、质量保障措施
| 措施 | 实施方式 |
|------|----------|
| 每个Task必须有可自动验证的command | 禁止 TBD/semantic全部 test_pass/artifact_present |
| 关键路径双重验证 | 数据采集类:单元测试 + 集成测试 + DB验证 |
| Sprint结束门禁 | 最后1个任务必须是"全链路回归测试" |
| Weekly数据质量报告 | Sprint 2起每周自动生成质量摘要 |
| 生产放行标准 | 采集成功率>95%、报告<30秒、20+厂商、500+模型、审计日志完整 |