9.9 KiB
9.9 KiB
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+模型、审计日志完整 |