228 lines
7.5 KiB
Markdown
228 lines
7.5 KiB
Markdown
# LLM Intelligence Hub
|
||
|
||
面向 LLM 模型、定价与日报产出的情报采集项目,当前仓库提供:
|
||
|
||
- Go 采集脚本:采集 OpenRouter、多源补充数据与官方补录数据
|
||
- PostgreSQL 数据层:保存模型、区域定价、订阅套餐、日报与运行审计
|
||
- Go HTTP API:提供模型列表、套餐列表、最新正式日报入口
|
||
- Vite + React 前端:提供 Dashboard / Explorer 两个只读页面
|
||
- Shell 运维脚本:迁移、调度、备份、恢复、验收与性能门禁
|
||
|
||
## 两大模块
|
||
|
||
项目现在按运行职责拆成两大模块:
|
||
|
||
1. `情报采集与信号沉淀模块`
|
||
负责真实采集、官方补录、套餐导入、目录核验,以及把“新模型 / 价格变化 / 官方发布 / 活动窗口”等关键信号物化到 `daily_signal_snapshot`。
|
||
2. `日报与下游表达模块`
|
||
负责消费 `models`、`region_pricing`、`subscription_plan`、`daily_signal_snapshot` 等结构化事实,生成 HTML / Markdown 日报;后续视频、卡片流、推送等形态也应挂在这一层。
|
||
|
||
## 当前能力边界
|
||
|
||
- 真实生产主链路是“采集/导入脚本 + PostgreSQL + 日报生成器 + API Server + Nginx”
|
||
- 最新正式日报由 `scripts/run_daily.sh` 生成,并写入 `daily_report` / `report_runs`
|
||
- 手工复跑使用 `scripts/run_real_pipeline.sh`,不会把产物标记成正式日报
|
||
- 历史补跑使用 `scripts/rebuild_historical_report.sh YYYY-MM-DD`
|
||
- 日内价格追踪使用 `scripts/run_intraday_price_watch.sh`,只刷新价格与信号,不生成正式日报
|
||
- 日内新闻候选发现与验证使用 `scripts/run_intraday_discovery_watch.sh`,只刷新候选池、验证轨迹与已验证信号,不生成正式日报
|
||
|
||
- HTTP API 当前未内建认证、授权和限流;公网暴露前必须在网关层补齐
|
||
|
||
## 先读这些(当前真相入口)
|
||
|
||
- [OPENCLAW_EXECUTION.md](OPENCLAW_EXECUTION.md):当前运行真相、执行顺序、验证协议、最新 gate 口径
|
||
- [reports/openclaw/OPENCLAW_CAPABILITY_BACKLOG.md](reports/openclaw/OPENCLAW_CAPABILITY_BACKLOG.md):OpenClaw 能力缺口当前台账与最新 review 增量
|
||
- [docs/README.md](docs/README.md):文档树入口,区分 current truth / 运行文档 / 历史材料
|
||
- [TASKS.md](TASKS.md):任务状态真相来源
|
||
- [GOALS.md](GOALS.md):目标范围真相来源
|
||
|
||
## 目录概览
|
||
|
||
```text
|
||
cmd/server/ Go API Server
|
||
internal/ 通用内部库(collector、retry)
|
||
scripts/ 采集、导入、日报、验收、运维脚本
|
||
db/migrations/ PostgreSQL 迁移
|
||
frontend/ Vite + React 前端
|
||
reports/daily/ 日报产物与归档
|
||
ops/ 运维配置(如 logrotate)
|
||
docs/ 补充说明与上线文档
|
||
```
|
||
|
||
## 本地启动
|
||
|
||
### 1. 准备环境
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
```
|
||
|
||
至少需要配置:
|
||
|
||
- `DATABASE_URL`
|
||
- `OPENROUTER_API_KEY`(仅真实采集需要)
|
||
|
||
详细变量说明见 [docs/CONFIGURATION.md](docs/CONFIGURATION.md)。
|
||
|
||
### 2. 应用数据库迁移
|
||
|
||
```bash
|
||
bash scripts/apply_migration.sh
|
||
```
|
||
|
||
### 3. 启动 API Server
|
||
|
||
```bash
|
||
go run ./cmd/server
|
||
```
|
||
|
||
默认端口为 `8080`,可通过 `PORT` 覆盖。
|
||
|
||
### 4. 启动前端开发环境
|
||
|
||
```bash
|
||
cd frontend
|
||
npm install
|
||
npm run dev
|
||
```
|
||
|
||
## 生产运行主链路
|
||
|
||
### 第一模块独立运行
|
||
|
||
```bash
|
||
bash scripts/run_intel_pipeline.sh
|
||
```
|
||
|
||
该入口只执行第一模块:
|
||
|
||
1. 真实采集与多源补充
|
||
2. 官方模型价格与套餐导入
|
||
3. 平台目录核验
|
||
4. 每日关键信号物化到 `daily_signal_snapshot`
|
||
|
||
它不会生成日报,适合先把“数据与信号层”单独跑通。
|
||
3. 平台目录核验
|
||
4. 每日关键信号物化到 `daily_signal_snapshot`
|
||
5. 日内价格追踪可由 `scripts/run_intraday_price_watch.sh` 独立执行,不生成正式日报
|
||
6. 日内新闻候选发现与验证可由 `scripts/run_intraday_discovery_watch.sh` 独立执行,不生成正式日报
|
||
|
||
|
||
### 正式日报调度
|
||
|
||
```bash
|
||
bash scripts/run_daily.sh
|
||
```
|
||
|
||
该脚本负责:
|
||
|
||
1. OpenRouter 真实采集
|
||
2. 多源补充同步
|
||
3. 官方导入脚本执行
|
||
4. 每日关键信号物化
|
||
5. 数据质量检查
|
||
6. Markdown / HTML 日报生成
|
||
7. 日报归档
|
||
8. `daily_report` / `report_runs` 审计写入
|
||
9. 失败时降级复制昨日报告并可选飞书告警
|
||
|
||
### 手工真实复跑
|
||
|
||
```bash
|
||
bash scripts/run_real_pipeline.sh
|
||
```
|
||
|
||
适用于联调、排障、上线后人工验证。该入口写入:
|
||
|
||
- `run_kind=manual`
|
||
- `trigger_source=pipeline`
|
||
- `is_official_daily=false`
|
||
|
||
### 日内价格追踪
|
||
|
||
```bash
|
||
bash scripts/run_intraday_price_watch.sh
|
||
```
|
||
|
||
适用于捕捉“小米大降价”“活动窗口上线”等已知入口里的结构化价格变化。该入口只刷新价格与信号层,不写正式 `daily_report`,也不会覆盖 `latest_report` 语义。
|
||
|
||
### 日内新闻发现与验证
|
||
|
||
```bash
|
||
bash scripts/run_intraday_discovery_watch.sh
|
||
```
|
||
|
||
适用于搜索引擎 + LLM 高召回发现“当天可能发生的价格新闻 / 版本发布 / 活动窗口”,再通过官方页面 / 价格页 / docs 做验证。该入口只刷新候选池、验证轨迹与 `daily_signal_snapshot` 中的已验证事实,不写正式 `daily_report`,也不会覆盖 `latest_report` 语义。
|
||
|
||
### 历史补跑
|
||
|
||
```bash
|
||
bash scripts/rebuild_historical_report.sh 2026-05-13
|
||
```
|
||
|
||
该入口写入:
|
||
|
||
- `run_kind=historical_rebuild`
|
||
- `trigger_source=rebuild_script`
|
||
- `is_official_daily=false`
|
||
|
||
## 常用命令
|
||
|
||
```bash
|
||
go test ./...
|
||
bash scripts/test.sh
|
||
bash scripts/test_importers.sh
|
||
bash scripts/verify_pre_phase6.sh
|
||
bash scripts/verify_phase6.sh
|
||
bash healthcheck.sh
|
||
cd frontend && npm run test -- --run
|
||
cd frontend && npm run build
|
||
```
|
||
|
||
说明:
|
||
|
||
- `go test ./...` 只覆盖 package 形式的 Go 代码(当前主要是 `cmd/server` 与 `internal/...`)
|
||
- `bash scripts/test.sh` 只覆盖 `fetch_openrouter` 的 focused test
|
||
- `bash scripts/test_importers.sh` 覆盖 scripts 层 importer targeted go test matrix
|
||
- 发布前不要把 `go test ./...` 误判成“全仓脚本业务已验证”
|
||
|
||
## API 概览
|
||
|
||
- `GET /health`
|
||
- `GET /api/v1/models`
|
||
- `GET /api/v1/subscription-plans`
|
||
- `GET /api/v1/reports/latest`
|
||
- `GET /api/v1/reports/latest/markdown`
|
||
- `GET /api/v1/reports/latest/html`
|
||
|
||
完整字段与示例见 [docs/API_REFERENCE.md](docs/API_REFERENCE.md)。
|
||
|
||
## 文档索引
|
||
|
||
- [docs/CONFIGURATION.md](docs/CONFIGURATION.md):环境变量、运行语义、配置约束
|
||
- [docs/API_REFERENCE.md](docs/API_REFERENCE.md):API 入口、返回体与排障说明
|
||
- [docs/PLAN_CATALOG_COVERAGE_MATRIX.md](docs/PLAN_CATALOG_COVERAGE_MATRIX.md):平台覆盖矩阵,区分目录基线 / 目录核验 / importer / 真实入库 / 细颗粒度价格缺口
|
||
- [docs/NEXT_IMPORTER_RUNTIME_PRIORITY.md](docs/NEXT_IMPORTER_RUNTIME_PRIORITY.md):下一批 importer / runtime 挂载优先清单,按 P0/P1/P2 给出最短闭环顺序
|
||
- [docs/PRODUCTION_CHECKLIST.md](docs/PRODUCTION_CHECKLIST.md):生产上线前检查、发布与回滚流程
|
||
- [DEPLOYMENT.md](DEPLOYMENT.md):部署步骤与快速启动
|
||
- [RUNBOOK.md](RUNBOOK.md):运维巡检、故障排查、备份恢复
|
||
- [TECHNICAL_DESIGN.md](TECHNICAL_DESIGN.md):详细技术设计与数据模型演进背景
|
||
- [docs/PERFORMANCE_TEST.md](docs/PERFORMANCE_TEST.md):性能基线
|
||
|
||
## 生产上线最低门禁
|
||
|
||
建议把以下检查作为发布前硬门禁:
|
||
|
||
```bash
|
||
bash scripts/verify_pre_phase6.sh
|
||
bash scripts/verify_phase6.sh
|
||
```
|
||
|
||
上线后首轮冒烟建议至少覆盖:
|
||
|
||
```bash
|
||
curl -fsS http://127.0.0.1:8080/health
|
||
curl -fsS http://127.0.0.1:8080/api/v1/models
|
||
curl -fsS http://127.0.0.1:8080/api/v1/reports/latest
|
||
```
|