654 lines
30 KiB
Markdown
654 lines
30 KiB
Markdown
# 跨平台商品聚合与 AI 分析开发计划
|
||
|
||
- 文档状态:Draft
|
||
- 版本:v0.6
|
||
- 更新时间:2026-04-02
|
||
- 依据文档:
|
||
- `docs/PRD.md`
|
||
- `docs/FeatureSummary.md`
|
||
- `docs/CrawlerFeasibility.md`
|
||
- 本版说明:
|
||
- 本版继续采用“前端负责交互,采集执行统一在后端服务器”的基线。
|
||
- 本版当前 MVP 平台范围固定为“天猫 + 京东”,淘宝保留为下一优先扩展平台。
|
||
- 本版明确采集路线为“会话驱动请求回放优先,受控浏览器只负责会话与模板刷新”。
|
||
|
||
## 1. 文档目标
|
||
|
||
本文件用于把 `PRD` 和 `FeatureSummary` 中已经明确的产品边界,转换为研发可执行、可验证、可排期的开发方案。
|
||
|
||
### 1.1 本文回答什么
|
||
|
||
| 主题 | 需要回答的问题 | 输出形式 |
|
||
| --- | --- | --- |
|
||
| 架构形态 | 采集执行放在哪里,系统怎么拆层 | 架构图、分层表 |
|
||
| 采集路线 | 搜索、详情、评论分别优先走什么路径 | 采集分层表、路由规则 |
|
||
| 实施拆分 | 工程模块怎么拆,优先级怎么定 | 模块表、阶段计划 |
|
||
| 发布门槛 | 什么叫研发上可发布、可试运行 | 验收口径、观测指标 |
|
||
|
||
### 1.2 开发计划速览
|
||
|
||
| 项目 | 当前结论 |
|
||
| --- | --- |
|
||
| 交付目标 | 稳定产出可回溯的结构化报告 |
|
||
| 首版平台 | 天猫、京东 |
|
||
| 主体架构 | Web 工作台 + API/BFF + 任务编排 + API Worker + Browser Worker |
|
||
| 默认采集主路 | `L0 Replay` / `L1 Hydration` |
|
||
| 浏览器角色 | 登录、模板刷新、验证码与恢复,不作为默认主吞吐路径 |
|
||
| 队列与状态 | `PostgreSQL + Redis + BullMQ` |
|
||
| MVP 周期建议 | 12 周 |
|
||
|
||
### 1.3 总体架构概览
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
A[Web 工作台] --> B[API / BFF]
|
||
B --> C[任务编排层]
|
||
C --> D[API 采集 Worker]
|
||
C --> E[Browser Recovery Worker]
|
||
D --> F[标准化与聚合]
|
||
F --> G[AI 报告模块]
|
||
E --> H[会话中心]
|
||
D --> I[(PostgreSQL)]
|
||
D --> J[(Object Storage)]
|
||
C --> K[(Redis / BullMQ)]
|
||
G --> I
|
||
H --> I
|
||
```
|
||
|
||
对应 ASCII 视图:
|
||
|
||
```text
|
||
Web 工作台
|
||
|
|
||
v
|
||
API / BFF
|
||
|
|
||
v
|
||
任务编排层 ----> Redis / BullMQ
|
||
| \
|
||
| \--> Browser Worker ----> 会话中心
|
||
|
|
||
\----> API Worker ---------> 标准化 / 聚合 ---------> AI 报告
|
||
\ /
|
||
\----> PostgreSQL / Object Storage
|
||
```
|
||
|
||
## 2. 开发目标与范围
|
||
|
||
### 2.1 MVP 交付目标
|
||
|
||
MVP 目标不是单纯跑通抓取链路,而是稳定产出可回溯的结构化报告。
|
||
|
||
| 闭环环节 | 交付目标 |
|
||
| --- | --- |
|
||
| 任务发起 | 用户通过 Web 工作台创建任务,输入关键词和评论抽样配置 |
|
||
| 搜索与确认 | 系统在后端服务器对天猫、京东执行预检查和站内搜索,用户完成逐平台确认 |
|
||
| 抓取与处理 | 服务端完成商品抓取、评论抽样、标准化和三级聚合 |
|
||
| 分析与报告 | AI 按固定 Schema 输出报告,并保留证据索引 |
|
||
| 回看与重试 | 用户可回看历史任务、切换版本,并对失败平台发起定向重试 |
|
||
| 阻塞恢复 | 用户可通过远程受控浏览器处理登录、验证码或风控阻塞 |
|
||
|
||
### 2.2 P0 范围
|
||
|
||
| 范围 | 内容 |
|
||
| --- | --- |
|
||
| 前台能力 | Web 工作台、候选确认、执行页、报告页、历史任务页 |
|
||
| 任务执行 | 双平台搜索前预检查、候选搜索与展示 |
|
||
| 平台交互 | 平台内单选、多选、跳过 |
|
||
| 会话与恢复 | 服务端会话中心、平台阻塞识别、人工恢复入口 |
|
||
| 数据采集 | 商品信息抓取、评论分层抽样抓取 |
|
||
| 数据处理 | 商品表、评论表标准化、三级聚合 |
|
||
| 报告 | AI 结构化报告与证据索引 |
|
||
| 运维能力 | 失败平台重试、报告版本切换、30/90 天留存、任务级删除 |
|
||
| 策略能力 | 采集策略中心、平台能力矩阵、API 优先路由机制 |
|
||
|
||
### 2.3 明确延后到 P1 的能力
|
||
|
||
| 延后项 | 说明 |
|
||
| --- | --- |
|
||
| Markdown / PDF 导出 | 不进入首版开发周期 |
|
||
| 自动巡检 / 定时重跑 / 持续监控 | 不进入 P0 |
|
||
| 淘宝接入与更多平台扩展 | 延后 |
|
||
| 更复杂的运营建议模板和可视化图表 | 延后 |
|
||
| 多租户 SaaS 化 | 延后 |
|
||
| 更细粒度的证据截图系统和审计看板 | 延后 |
|
||
| 更复杂的工作流编排 | 延后 |
|
||
|
||
## 3. 核心技术路线决策
|
||
|
||
### 3.1 核心决策总表
|
||
|
||
| 决策项 | 当前结论 | 原因 |
|
||
| --- | --- | --- |
|
||
| 采集执行位置 | 全部在后端服务器执行 | 便于统一治理限流、会话、热修、审计和排障 |
|
||
| 用户入口 | 统一 Web 工作台 | 用户只处理交互和必要人工恢复 |
|
||
| 默认抓取路线 | API / Hydration 优先 | 成本更低、吞吐更高、可观测性更强 |
|
||
| 浏览器角色 | 登录、模板刷新、恢复和极端兜底 | 浏览器成本高,不适合当默认主路径 |
|
||
| 队列编排 | `PostgreSQL + Redis + BullMQ` | 足以支撑 MVP 的异步执行、重试和并发 |
|
||
| AI 输出形态 | 受控 JSON Schema | 避免自由文本不可验证、不可稳定消费 |
|
||
|
||
### 3.2 MVP 首发运行方式
|
||
|
||
| 项目 | 口径 |
|
||
| --- | --- |
|
||
| 部署环境 | 内部受控服务器 |
|
||
| 用户访问方式 | 浏览器访问统一 Web 工作台 |
|
||
| 服务端进程 | API 服务、任务队列、采集 Worker、浏览器 Worker |
|
||
| 元数据存储 | `PostgreSQL` |
|
||
| 队列 | `Redis` |
|
||
| 原始产物 | 对象存储 |
|
||
| 浏览器 Worker | 独立隔离环境,支持远程人工介入 |
|
||
| 发布策略 | 单租户、内部小范围试运行,不直接做开放 SaaS |
|
||
|
||
### 3.3 架构分层
|
||
|
||
| 层级 | 职责 | 建议技术 |
|
||
| --- | --- | --- |
|
||
| Web 前端层 | 任务页、候选确认页、执行页、报告页、历史页、会话准备/恢复入口 | React + TypeScript |
|
||
| API / BFF 层 | 任务 API、查询 API、SSE 推送、权限与审计入口 | Node.js + Fastify |
|
||
| 任务编排层 | 队列、状态机、平台级并发控制、重试与版本计算 | BullMQ + Redis |
|
||
| 采集策略层 | 路由选择、能力矩阵、降级决策、健康度管理 | TypeScript 内部模块 |
|
||
| API 采集 Worker | 搜索、商品详情、评论接口调用与回放 | Node.js + undici |
|
||
| 浏览器兜底 Worker | 登录处理、接口发现、受控浏览器抓取、人工恢复 | Playwright |
|
||
| 会话中心 | 会话快照、加密存储、有效期校验、人工接管 | 服务端加密模块 |
|
||
| 数据层 | 任务状态、原始数据、标准化数据、报告快照、证据索引 | PostgreSQL + 对象存储 |
|
||
| AI 分析模块 | 结构化分析请求、模型路由、Schema 校验、日志 | Fastify 内部模块 |
|
||
|
||
### 3.4 关键设计原则
|
||
|
||
| 原则 | 说明 |
|
||
| --- | --- |
|
||
| 抓取只在后端执行 | 不在用户设备执行自动化 |
|
||
| 搜索/详情/评论默认走接口路径 | 浏览器只在必要时介入 |
|
||
| 平台能力按“平台 x 能力”管理 | 不能笼统写成“某平台使用 Playwright” |
|
||
| 状态流转必须持久化 | 不能只存在内存里 |
|
||
| 会话、业务数据、原始产物、审计日志分层存储 | 降低耦合与风险 |
|
||
| AI 输出必须受控 Schema | 禁止自由文本直出报告 |
|
||
| 优先切换策略,不优先判死任务 | 提升可恢复性 |
|
||
| 浏览器属于高成本路径 | 必须纳入占比和命中率约束 |
|
||
|
||
## 4. 核心采集方案
|
||
|
||
### 4.1 四层采集模型
|
||
|
||
steady-state 目标明确是“非浏览器数据通路”。
|
||
|
||
| 层级 | 路径 | 典型用途 | 速度 | 成本 | 说明 |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| L0 | 会话驱动的同构请求回放 | 搜索、详情、评论分页 | 最高 | 最低 | 服务端 HTTP 客户端复用真实请求族、Cookie 和必要动态参数 |
|
||
| L1 | HTML / SSR / Hydration 解析 | 商品基础信息、候选列表、首屏数据 | 高 | 低 | 适合页面首屏自带结构化数据的场景 |
|
||
| L2 | 模板刷新后请求回放 | 请求模板失效、动态参数补齐、接口发现 | 中 | 中 | 浏览器只用于刷新模板和参数,数据主体仍通过 HTTP 拉取 |
|
||
| L3 | 受控浏览器恢复 | 登录、验证码、风控处理、极端诊断 | 最低 | 最高 | 只用于会话恢复和极端排障,不作为常规抓取吞吐路径 |
|
||
|
||
### 4.2 能力级路由策略
|
||
|
||
| 能力 | 默认路径 | 第一降级 | 最终兜底 | 说明 |
|
||
| --- | --- | --- | --- | --- |
|
||
| 搜索 | `L0 Replay` | `L1 Hydration` 或 `L2 Template Refresh` | `L3 Browser Recovery` | 默认以真实请求回放为主,不把浏览器 DOM 当主路径 |
|
||
| 商品详情 | `L1 Hydration` 或 `L0 Replay` | `L2 Template Refresh` | `L3 Browser Recovery` | 优先抓结构化字段和业务接口 |
|
||
| 评论 | `L0 Replay` | `L2 Template Refresh` | `L3 Browser Recovery` | 评论分页吞吐要求高,必须坚持 HTTP 主路径 |
|
||
| 登录与会话恢复 | `L3 Browser Recovery` | 无 | 无 | 浏览器的核心职责之一 |
|
||
| 风控/验证码恢复 | `L3 Browser Recovery` | 无 | 无 | 需要用户人工介入 |
|
||
|
||
补充要求:
|
||
|
||
| 要求 | 说明 |
|
||
| --- | --- |
|
||
| 平台默认路径不是静态承诺 | 以当前阶段基线可行性矩阵为准 |
|
||
| 每个平台在 Phase 0 必须产出能力矩阵 | 至少包含搜索/详情/评论默认路径、登录依赖、签名/Token、回放支持、浏览器兜底成本 |
|
||
|
||
### 4.2.1 当前阶段基线可行性矩阵
|
||
|
||
基于 `docs/CrawlerFeasibility.md` 在 2026-04-02 的调研结果:
|
||
|
||
| 平台 | 当前阶段定位 | `search_requirement` 暂定值 | 搜索默认路径 | 详情默认路径 | 评论默认路径 | 研发结论 |
|
||
| --- | --- | --- | --- | --- | --- | --- |
|
||
| 天猫 | 当前 MVP 平台 | `recommended` | `L0 Replay`,必要时 `L2` | `L1` 或 `L0` | `L0`,必要时 `L2` | 搜索实际落在淘宝/天猫同构请求链路,浏览器只负责会话与模板刷新 |
|
||
| 京东 | 当前 MVP 平台 | `required` | `L0 Replay + Precheck`,必要时 `L3` | `L0` 或 `L1` | `L0`,必要时 `L2` | 详情接口层可见,但会话与风控前置约束强,需先完成会话中心 |
|
||
|
||
后续平台观察:
|
||
|
||
| 平台 | 当前判断 |
|
||
| --- | --- |
|
||
| 淘宝 | 下一优先平台,预期复用天猫 `L0/L2` 适配栈,但不进入当前 MVP 排期 |
|
||
| 抖音电商 | 当前阶段不排期,不进入当前验收 |
|
||
|
||
工程约束:
|
||
|
||
| 约束 | 说明 |
|
||
| --- | --- |
|
||
| 不允许把“浏览器抓通再优化”作为默认前提 | 天猫与京东必须先按非浏览器路线做闭环 |
|
||
| 关键动态参数无法在授权会话内刷新时 | 直接判定为 `Blocked` |
|
||
| 双平台需要并行勘探 | Phase 0 结束时用量化指标决定是否进入完整闭环开发 |
|
||
|
||
### 4.3 路由选择与降级规则
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[读取能力矩阵 + 健康度 + 会话状态] --> B[选择默认路径]
|
||
B --> C{默认路径成功?}
|
||
C -->|是| D[记录成功路径并继续]
|
||
C -->|否| E{错误是否可切换?}
|
||
E -->|否| F[按错误类型落状态]
|
||
E -->|是| G[降级到下一层策略]
|
||
G --> H{是否已到 L3?}
|
||
H -->|否| C
|
||
H -->|是| I[L3 Browser 恢复或兜底]
|
||
I --> J[记录 strategy_attempts]
|
||
```
|
||
|
||
策略中心必须显式维护以下规则:
|
||
|
||
| 规则 | 说明 |
|
||
| --- | --- |
|
||
| 每次执行先读能力矩阵、平台健康度和会话状态 | 选择默认路径 |
|
||
| 只有“可切换”的错误类型才降级 | 避免无脑切浏览器 |
|
||
| `401` / 会话失效 / 验证码 / 风控拦截 | 优先归类为 `Blocked` |
|
||
| `Schema` 漂移 / 接口字段缺失 / Token 失效 | 可以优先切到 `L2` |
|
||
| 只有前三级策略都不可行 | 才进入 `L3 Browser` 全量兜底 |
|
||
| 任一路径成功后 | 记录为该平台该能力的最新可用策略 |
|
||
|
||
### 4.4 服务端受控浏览器方案
|
||
|
||
受控浏览器定义为“服务端浏览器实例 + 前端远程接管入口”,不承担常规搜索、详情、评论抓取吞吐。
|
||
|
||
恢复流程:
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[用户点击处理登录/恢复阻塞] --> B[系统分配隔离 Browser Worker]
|
||
B --> C[生成临时会话令牌]
|
||
C --> D[前端远程接管浏览器]
|
||
D --> E[用户完成登录 / 验证码 / 风控处理]
|
||
E --> F[服务端提取并加密保存 storageState / cookies]
|
||
F --> G[任务恢复执行]
|
||
```
|
||
|
||
这样设计的原因:
|
||
|
||
| 原因 | 说明 |
|
||
| --- | --- |
|
||
| 用户只参与必须人工处理的步骤 | 不直接承担执行环境 |
|
||
| 会话、日志和浏览器版本统一治理 | 降低排障复杂度 |
|
||
| 浏览器抓取与人工恢复共享基础设施 | 提高复用率 |
|
||
|
||
### 4.5 效率优化策略
|
||
|
||
| 策略 | 说明 |
|
||
| --- | --- |
|
||
| 搜索、详情、评论分队列与并发配置 | 不共用单一串行流程 |
|
||
| 平台间允许并行 | 平台内按能力和限流策略有界并发 |
|
||
| 评论默认走接口分页或请求回放 | 不用浏览器逐页滚动加载 |
|
||
| 首屏结构化数据优先 `Hydration` | 减少浏览器渲染成本 |
|
||
| 稳定接口建立模板、Schema 与缓存 | 降低重复探测成本 |
|
||
| 浏览器 Worker 只承接登录、接口发现和极端兜底 | 控制高成本路径占比 |
|
||
| 所有策略切换记录到 `strategy_attempts` | 支撑命中率和兜底占比统计 |
|
||
|
||
## 5. 技术选型
|
||
|
||
### 5.1 Monorepo 与基础工程
|
||
|
||
推荐采用 `pnpm workspace + Turborepo` 管理多应用与共享包。
|
||
|
||
建议目录结构:
|
||
|
||
```text
|
||
.
|
||
├─ apps/
|
||
│ ├─ web/ # React + Vite 前端
|
||
│ ├─ api/ # Fastify API/BFF
|
||
│ ├─ worker-api/ # API 采集 Worker
|
||
│ └─ worker-browser/ # Browser Fallback Worker
|
||
├─ packages/
|
||
│ ├─ domain/ # 状态机、实体、类型定义
|
||
│ ├─ crawler-core/ # 策略路由、能力矩阵、公共采集能力
|
||
│ ├─ platform-adapters/ # 双平台能力实现与后续淘宝扩展
|
||
│ ├─ report-schema/ # AI 报告 Schema、验证器
|
||
│ ├─ db/ # PostgreSQL schema、迁移、查询封装
|
||
│ ├─ queue/ # 队列定义、任务类型、消费封装
|
||
│ └─ shared/ # 日志、错误码、工具函数
|
||
└─ docs/
|
||
```
|
||
|
||
选择理由:
|
||
|
||
| 理由 | 说明 |
|
||
| --- | --- |
|
||
| 类型与 Schema 复用需求高 | Web、API、Worker 共享领域模型 |
|
||
| 统一质量工具链 | 有利于统一 lint、test、build 和版本升级 |
|
||
| 平台适配和报告结构跨进程共享 | 拆仓会增加协同成本 |
|
||
|
||
### 5.2 Web 前端与 API 技术栈
|
||
|
||
| 层级 | 推荐选型 |
|
||
| --- | --- |
|
||
| Web 前端 | `React` + `TypeScript` + `Vite` + `Ant Design` |
|
||
| Web 状态 | `Zustand + TanStack Query` |
|
||
| 服务端 API | `Fastify` |
|
||
| 实时推送 | `SSE` |
|
||
|
||
选择理由:
|
||
|
||
| 技术点 | 说明 |
|
||
| --- | --- |
|
||
| React + TypeScript | 适合任务型工作台 |
|
||
| `SSE` | 足够支撑任务进度、平台状态、阻塞提示和重试结果的单向推送 |
|
||
| Fastify | 适合作为 API/BFF 和内部服务边界层 |
|
||
|
||
### 5.3 任务编排与状态机
|
||
|
||
MVP 推荐采用 `PostgreSQL + Redis + BullMQ`:
|
||
|
||
| 组件 | 作用 |
|
||
| --- | --- |
|
||
| `PostgreSQL` | 保存 `tasks`、`platform_runs`、`task_events`、`retry_logs`、`report_snapshots` 等业务状态 |
|
||
| `Redis + BullMQ` | 承担异步队列、延迟重试和 Worker 调度 |
|
||
| 三层状态模型 | 继续沿用 `task_status`、`task_stage`、`platform_status` |
|
||
| 执行模型 | 平台间并行、平台内有界并发、评论分页按平台规则限速 |
|
||
|
||
当前不引入 `Temporal` 的原因:
|
||
|
||
| 原因 | 说明 |
|
||
| --- | --- |
|
||
| 任务分支复杂度仍可控 | 当前还不需要更重的工作流引擎 |
|
||
| `BullMQ` 足以支撑 MVP | 队列、重试、分 Worker 部署都能覆盖 |
|
||
| 迁移窗口可后置 | 等 P1 出现更复杂人机协同时再评估 |
|
||
|
||
### 5.4 会话管理与安全
|
||
|
||
推荐采用“服务端会话中心 + 加密快照存储”。
|
||
|
||
| 做法 | 说明 |
|
||
| --- | --- |
|
||
| 用户只通过前端进入服务端浏览器处理登录或验证码 | 降低敏感信息扩散 |
|
||
| 仅保存最小必要会话快照 | 如 `cookies`、`storageState`、必要 Token |
|
||
| 会话快照统一 `AES-GCM` 加密 | 强化安全边界 |
|
||
| 会话元数据写入 `PostgreSQL` | 敏感正文写入对象存储或专用加密表 |
|
||
| 会话默认有效期 | 最后使用后 `24` 小时 |
|
||
| 用户可手动清除平台会话 | 必须支持 |
|
||
| 不保存账号密码 | 必须 |
|
||
|
||
### 5.5 数据存储
|
||
|
||
推荐选型:
|
||
|
||
| 类型 | 选型 |
|
||
| --- | --- |
|
||
| 关系存储 | `PostgreSQL` |
|
||
| ORM | `Drizzle ORM` |
|
||
| 队列缓存 | `Redis` |
|
||
| 对象存储 | `S3 / MinIO` |
|
||
|
||
建议核心数据表:
|
||
|
||
| 数据表 | 用途 |
|
||
| --- | --- |
|
||
| `tasks` | 任务主表 |
|
||
| `platform_runs` | 平台级执行状态 |
|
||
| `selected_links` | 已确认链接 |
|
||
| `raw_products` | 原始商品数据 |
|
||
| `raw_reviews` | 原始评论数据 |
|
||
| `normalized_products` | 标准化商品数据 |
|
||
| `normalized_reviews` | 标准化评论数据 |
|
||
| `report_snapshots` | 报告版本快照 |
|
||
| `evidence_index` | 证据索引 |
|
||
| `session_states` | 会话状态 |
|
||
| `task_logs` | 任务日志 |
|
||
| `strategy_attempts` | 策略尝试记录 |
|
||
| `artifact_refs` | 大对象产物引用 |
|
||
|
||
落盘原则:
|
||
|
||
| 类型 | 位置 |
|
||
| --- | --- |
|
||
| 原始接口响应、DOM 快照、HAR 摘要等大对象 | 对象存储 |
|
||
| 标准化字段、任务状态和可查询摘要 | `PostgreSQL` |
|
||
| 原始抓取数据 | 默认保留 30 天 |
|
||
| 标准化数据与报告 | 默认保留 90 天 |
|
||
| 用户删除与留存清理 | 属于 P0 必做能力 |
|
||
|
||
### 5.6 标准化、聚合与 AI 分析
|
||
|
||
继续采用三段式流水线:
|
||
|
||
| 阶段 | 作用 |
|
||
| --- | --- |
|
||
| `normalize` | 原始商品与评论字段映射到标准结构 |
|
||
| `aggregate` | 生成链接级、平台级、跨平台级中间视图 |
|
||
| `analyze` | 把聚合结果与证据索引送入 AI 模块,返回结构化报告 |
|
||
|
||
实施要求:
|
||
|
||
| 要求 | 说明 |
|
||
| --- | --- |
|
||
| AI 模块只接受受控 Schema | 返回 JSON 结构 |
|
||
| AI 请求只发送必要字段和证据摘要 | 控制成本与噪声 |
|
||
| 模型版本、请求摘要、校验结果、错误码都落日志 | 便于观测和追溯 |
|
||
| 报告版本切换、默认版本、旧版本回看 | 属于 P0 功能 |
|
||
|
||
### 5.7 测试与质量工具
|
||
|
||
| 类型 | 推荐选型 |
|
||
| --- | --- |
|
||
| 单元测试 | `Vitest` |
|
||
| E2E | `Playwright Test` |
|
||
| 契约测试 | 接口响应 Schema、报告 Schema、队列载荷 |
|
||
| 回放测试 | `HAR / fixture` 回放测试 |
|
||
| 代码质量 | `ESLint + Prettier` |
|
||
| CI | `GitHub Actions` |
|
||
|
||
测试分层:
|
||
|
||
| 层级 | 覆盖内容 |
|
||
| --- | --- |
|
||
| 领域层 | 状态机转移、评论抽样、聚合逻辑、报告 Schema |
|
||
| 策略层 | 路由选择、降级规则、错误分类、缓存与限流 |
|
||
| 适配层 | 平台接口 fixture、Hydration 解析、DOM 解析、HAR 回放 |
|
||
| 应用层 | 任务创建、候选确认、远程会话处理、报告回看、失败平台重试 |
|
||
| 验收层 | 至少覆盖“单平台 API 成功”“多平台部分失败”“浏览器阻塞恢复”三条主链路 |
|
||
|
||
## 6. 模块拆分与实施层级
|
||
|
||
| 模块 | 主要职责 | 优先级 |
|
||
| --- | --- | --- |
|
||
| 任务工作台 | 任务创建、候选确认、执行页、历史任务页 | P0 |
|
||
| 状态机与任务编排 | 三层状态机、队列编排、平台并发控制、重试 | P0 |
|
||
| 会话中心 | 登录入口、会话快照保存、有效期校验、手动清理 | P0 |
|
||
| 采集策略中心 | 能力矩阵、路由选择、降级规则、健康度记录 | P0 |
|
||
| 平台搜索采集器 | 搜索前预检查、候选搜索、候选标准化 | P0 |
|
||
| 商品详情采集器 | 商品原始字段采集、Hydration / API 解析 | P0 |
|
||
| 评论采集器 | 三桶抽样、去重、样本不足标记 | P0 |
|
||
| Browser Fallback Worker | 登录处理、接口发现、全量兜底抓取 | P0 |
|
||
| 标准化与聚合 | 统一字段、三级聚合、证据索引 | P0 |
|
||
| AI 报告模块 | 结构化报告生成、质量标记 | P0 |
|
||
| 历史任务与版本 | 报告版本生成、默认版本、旧版本切换 | P0 |
|
||
| 留存与删除 | 30/90 天清理、任务级删除、产物联动清除 | P0 |
|
||
| 导出模块 | Markdown / PDF 导出 | P1 |
|
||
|
||
## 7. 多阶段开发实施计划
|
||
|
||
### 7.1 周期总览
|
||
|
||
建议 MVP 采用 `12 周` 开发周期。
|
||
|
||
建议团队配置:
|
||
|
||
| 角色 | 数量 |
|
||
| --- | --- |
|
||
| 产品经理 | 1 |
|
||
| 设计师 | 1 |
|
||
| 前端工程师 | 1 |
|
||
| 后端 / 平台工程师 | 2 |
|
||
| 浏览器自动化工程师 | 1 |
|
||
| 数据与 AI 工程师 | 1 |
|
||
| QA | 1 |
|
||
|
||
阶段总表:
|
||
|
||
| Phase | 时间 | 主题 |
|
||
| --- | --- | --- |
|
||
| Phase 0 | 第 1-2 周 | 双平台可行性勘探与方案冻结 |
|
||
| Phase 1 | 第 3-4 周 | 基础骨架与任务系统 |
|
||
| Phase 2 | 第 5-6 周 | 单平台 API 优先闭环 |
|
||
| Phase 3 | 第 7-9 周 | 双平台模板刷新与恢复体系 |
|
||
| Phase 4 | 第 10-11 周 | 标准化、聚合、AI 报告与历史任务 |
|
||
| Phase 5 | 第 12 周 | 稳定性、效率与试运行 |
|
||
|
||
### 7.2 Phase 0:双平台可行性勘探与方案冻结(第 1-2 周)
|
||
|
||
| 项目 | 内容 |
|
||
| --- | --- |
|
||
| 目标 | 完成天猫、京东“搜索/详情/评论/登录”能力矩阵 v1;验证双平台非浏览器主路径;验证服务端浏览器接管与会话快照;冻结队列、存储和 Worker 拆分方案 |
|
||
| 交付物 | 双平台能力矩阵文档、接口或 Hydration PoC、服务端浏览器接管与模板刷新 PoC、Monorepo 脚手架、Phase 0 量化评分表 |
|
||
| 退出条件 | 至少一个平台搜索或详情默认不走 `L3`;用户可完成一次远程登录并保存会话;已明确双平台默认路径和首选降级路径;至少一个平台满足“搜索成功率 >= 80%、详情字段完整率 >= 85%、评论 50 条样本耗时 <= 90s”;浏览器直接承接数据抓取占比 <= 20% |
|
||
|
||
### 7.3 Phase 1:基础骨架与任务系统(第 3-4 周)
|
||
|
||
| 项目 | 内容 |
|
||
| --- | --- |
|
||
| 目标 | 完成 Web 前端、API 服务、`PostgreSQL`、`Redis` 和队列基础设施;完成三层状态持久化与流转;完成任务创建、平台预检查、执行页基础框架和会话中心基础能力 |
|
||
| 交付物 | 新建任务页与执行页框架、任务基础表与事件日志、队列模型与 Worker 骨架、会话中心与阻塞处理入口 |
|
||
| 退出条件 | 用户可创建任务并看到平台预检查结果;任务事件、平台状态和阶段流转均已落库;阻塞平台可生成可接管的服务端浏览器会话 |
|
||
|
||
### 7.4 Phase 2:单平台 API 优先闭环(第 5-6 周)
|
||
|
||
| 项目 | 内容 |
|
||
| --- | --- |
|
||
| 目标 | 跑通一个平台的“预检查 -> 搜索 -> 确认 -> 详情 -> 评论 -> 标准化 -> 报告摘要”闭环;默认路径优先使用接口或 Hydration;完成策略中心、错误分类和降级逻辑初版 |
|
||
| 交付物 | 单平台 `search/detail/reviews` 适配器、`strategy_attempts` 记录与路由逻辑、评论三桶抽样与去重规则、单平台最小报告快照 |
|
||
| 退出条件 | 单平台端到端闭环可用;默认抓取路径不依赖 `L3 Browser`;接口路径失败时系统能按规则切换到下一层策略 |
|
||
|
||
### 7.5 Phase 3:双平台模板刷新与恢复体系(第 7-9 周)
|
||
|
||
| 项目 | 内容 |
|
||
| --- | --- |
|
||
| 目标 | 完成天猫、京东双平台搜索与候选确认稳定可用;完成双平台详情和评论抓取能力矩阵;完成浏览器模板刷新辅助和人工恢复流程;明确每个平台的“默认路径 + 模板刷新策略 + 阻塞恢复动作” |
|
||
| 交付物 | 双平台 `precheck/search` 适配器、双平台详情与评论采集器、Template Refresh / Browser Recovery Worker 初版、阻塞恢复与平台级重试入口 |
|
||
| 退出条件 | 天猫、京东都能返回候选、无结果或阻塞原因;双平台都具备至少一条可运行的详情与评论抓取路径;用户能对阻塞平台发起人工恢复并继续任务 |
|
||
|
||
### 7.6 Phase 4:标准化、聚合、AI 报告与历史任务(第 10-11 周)
|
||
|
||
| 项目 | 内容 |
|
||
| --- | --- |
|
||
| 目标 | 完成标准化商品表、评论表和三级聚合;完成 AI 报告 Schema、证据索引、质量标记;完成历史任务页、报告版本管理和旧版本切换;完成 30/90 天留存与任务级删除实现 |
|
||
| 交付物 | 标准化与聚合模块、`report_snapshots` 生成器、报告页与历史任务页、版本切换与留存清理作业 |
|
||
| 退出条件 | 能生成符合 `PRD` Schema 的报告;历史任务可回看最新版本并切换旧版本;任务删除与留存清理逻辑可正确联动数据库和对象存储 |
|
||
|
||
### 7.7 Phase 5:稳定性、效率与试运行(第 12 周)
|
||
|
||
| 项目 | 内容 |
|
||
| --- | --- |
|
||
| 目标 | 完成平台级定向重试和复杂异常处理;跑通效率指标、稳定性指标和 UAT;形成试运行值守、排障和热修流程 |
|
||
| 交付物 | 平台级重试能力、采集效率与命中率看板、日志追踪与问题排查工具、MVP 试运行版本 |
|
||
| 退出条件 | 完成 P0 验收清单;关键指标达到试运行门槛;已形成按平台维度的热修和回滚策略 |
|
||
|
||
### 7.8 关键里程碑
|
||
|
||
| 里程碑 | 时间点 | 结果 |
|
||
| --- | --- | --- |
|
||
| M1 | 第 2 周末 | 天猫 / 京东能力矩阵完成,双平台 API/Hydration PoC 跑通 |
|
||
| M2 | 第 4 周末 | 任务系统、状态机、会话中心可用 |
|
||
| M3 | 第 6 周末 | 单平台 API 优先闭环可用 |
|
||
| M4 | 第 9 周末 | 双平台采集与模板刷新 / 恢复体系可用 |
|
||
| M5 | 第 11 周末 | AI 报告、历史任务、版本切换、留存删除可用 |
|
||
| M6 | 第 12 周末 | MVP 验收通过并进入试运行 |
|
||
|
||
## 8. MVP 验收与观测口径
|
||
|
||
### 8.1 功能验收出口
|
||
|
||
| 发布门槛 | 说明 |
|
||
| --- | --- |
|
||
| 双平台候选能力可用 | 天猫、京东搜索前预检查、候选搜索、候选展示可用 |
|
||
| 至少一个链接可跑通端到端任务 | 用户可确认至少一个链接并完成任务 |
|
||
| 单个平台阻塞不拖死整任务 | 必须成立 |
|
||
| 报告符合固定 Schema | 且关键洞察可回溯到证据索引 |
|
||
| 历史任务能力可用 | 可回看报告、切换旧版本、失败平台可定向重试 |
|
||
| 删除与清理联动正确 | 用户删除历史任务时,系统能清理关联数据与产物 |
|
||
| 阻塞恢复可用 | 可通过前端接入服务端浏览器完成人工恢复 |
|
||
|
||
### 8.2 采集效率与稳定性指标
|
||
|
||
| 指标 | 目标 |
|
||
| --- | --- |
|
||
| 默认配置下任务时长 `P50` | <= 20 分钟 |
|
||
| 搜索阶段 API/Hydration 命中率 | >= 70% |
|
||
| 商品详情默认不依赖 `L3 Browser` 的任务占比 | >= 60% |
|
||
| 评论抓取默认走接口或回放路径的任务占比 | >= 70% |
|
||
| 全量浏览器兜底占比 | <= 30% |
|
||
| 平台级定向重试后恢复成功率 | >= 50% |
|
||
| 关键结论证据可定位率 | >= 95% |
|
||
|
||
### 8.3 观测与统计实现
|
||
|
||
P0 必须同步实现以下观测能力:
|
||
|
||
| 观测项 | 说明 |
|
||
| --- | --- |
|
||
| `strategy_attempts` | 记录每次能力调用使用的层级、结果、耗时、错误类型 |
|
||
| `platform_run_metrics` | 记录每个平台的搜索耗时、详情耗时、评论耗时、重试次数 |
|
||
| `report_metrics` | 记录报告版本、样本量、失败平台、阻塞平台和质量标记 |
|
||
| `retention_metrics` | 记录留存清理、任务删除和残留对象数 |
|
||
|
||
## 9. 研发风险与发布运维
|
||
|
||
### 9.1 研发风险与应对
|
||
|
||
| 风险 | 说明 | 应对策略 |
|
||
| --- | --- | --- |
|
||
| 接口路径频繁变化 | 参数、签名或响应结构变化导致 API 路径失效 | 建立能力矩阵、契约测试和 HAR 回放测试,允许快速降级到下一层策略 |
|
||
| 服务端浏览器成本高 | 若大多数流量都落到浏览器,整体效率和成本会失控 | 把浏览器定义为兜底能力,持续统计命中率,超阈值时优先修复 API 路径 |
|
||
| 登录与风控不稳定 | 阻塞率高,影响任务完成率 | 维持平台级 `Blocked` 状态,支持远程人工恢复,避免整任务无差别失败 |
|
||
| 评论抓取吞吐不足 | 浏览器逐页抓取会拖慢整体任务 | 评论默认优先走接口分页或请求回放,不允许把浏览器滚动抓取当常规路径 |
|
||
| 服务端会话泄露风险 | 会话统一存储后安全要求更高 | 会话最小化保存、服务端加密、过期控制、审计和手动清理 |
|
||
| 90 天可追溯依赖证据快照留存 | 只保留 30 天原始大对象会让后期报告失去证据 | 把证据索引、摘录和来源元数据纳入 90 天留存 |
|
||
|
||
### 9.2 发布与运维建议
|
||
|
||
#### 9.2.1 MVP 发布方式
|
||
|
||
| 项目 | 建议 |
|
||
| --- | --- |
|
||
| 发布策略 | 先在内部受控服务器环境试运行,再扩大到小范围真实用户 |
|
||
| 交付形态 | 以服务端部署为准,不再以“用户本地启动脚本”为默认交付方式 |
|
||
| 部署方式 | 内部环境可使用 `Docker Compose` 或容器编排,浏览器 Worker 需独立隔离 |
|
||
| AI 配置 | 先使用单一配置和单一环境,控制成本和观察范围 |
|
||
|
||
#### 9.2.2 日志、排障与热修
|
||
|
||
MVP 至少保留以下日志与观测数据:
|
||
|
||
| 日志类型 | 用途 |
|
||
| --- | --- |
|
||
| 任务级事件日志 | 回溯任务状态流转 |
|
||
| 平台预检查、抓取失败和重试日志 | 定位平台级问题 |
|
||
| 策略选择与降级日志 | 观察路线命中和切换原因 |
|
||
| AI 请求摘要与响应校验日志 | 观察报告生成质量 |
|
||
| 报告版本生成日志 | 追踪版本变化 |
|
||
| 会话处理与人工恢复审计日志 | 追踪敏感恢复动作 |
|
||
|
||
日志要求:
|
||
|
||
| 要求 | 说明 |
|
||
| --- | --- |
|
||
| 前端只展示用户可理解信息 | 详细调试日志留在服务端 |
|
||
| 日志不得记录账号密码、完整 Cookie 或未脱敏敏感字段 | 必须 |
|
||
| 平台适配热修必须支持按平台、按能力快速发布 | 不要求整站全量重发 |
|
||
|
||
## 10. 下一阶段规划
|
||
|
||
MVP 稳定后,优先进入以下 P1 方向:
|
||
|
||
| 方向 | 说明 |
|
||
| --- | --- |
|
||
| Markdown / PDF 导出 | 扩展报告交付形态 |
|
||
| 更丰富的证据展示与截图系统 | 增强可验证性 |
|
||
| 更强的自动巡检、定时重跑与策略自适应 | 扩展任务模式 |
|
||
| 更多平台适配 | 从淘宝开始向外扩展 |
|
||
| 更细粒度的运营建议与可视化 | 提升分析深度 |
|
||
| 团队协作权限与多租户能力 | 扩展部署形态 |
|
||
|
||
## 11. 一句话结论
|
||
|
||
本项目的研发落地建议是:以“后端服务器统一采集执行”为前提,把当前 MVP 平台能力拆成“会话驱动请求回放优先、浏览器仅用于会话与模板刷新”的分层路线,先完成天猫与京东的高效率闭环,再进入版本回看、稳定试运行和后续淘宝扩展,而不是一开始就把浏览器自动化当作默认主通路。
|