654 lines
30 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 跨平台商品聚合与 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 平台能力拆成“会话驱动请求回放优先、浏览器仅用于会话与模板刷新”的分层路线,先完成天猫与京东的高效率闭环,再进入版本回看、稳定试运行和后续淘宝扩展,而不是一开始就把浏览器自动化当作默认主通路。