# 跨平台商品聚合与 AI 分析 PRD - 文档状态:Draft - 版本:v0.6 - 更新时间:2026-04-02 - 参考文档: - `docs/RequirementsDoc.md` - `docs/CrawlerFeasibility.md` - `docs/review-RequirementsDoc-codex.md` - `docs/review-PRD-codex.md` ## 1. 文档目标 本 PRD 用于把现有需求草案收敛为可指导 MVP 设计、开发和验收的产品文档。 ### 1.1 本文回答什么 | 主题 | 需要回答的问题 | 主要输出 | | --- | --- | --- | | 产品定义 | 这到底是一个什么产品,不是什么产品 | 定位、价值、边界 | | MVP 范围 | 首版做什么,不做什么 | 平台范围、任务范围、输出范围 | | 流程设计 | 用户如何从输入走到报告 | 主流程、状态模型、交互决策 | | 结果交付 | 什么叫一份可用报告 | 报告 Schema、追溯口径、质量标记 | | 验收标准 | 什么叫 MVP 可以交付 | 成功指标、验收标准、P0/P1 划分 | ### 1.2 PRD 速览 | 项目 | 结论 | | --- | --- | | 产品定位 | 面向品牌方、电商运营和竞品研究岗位的商品分析工作台 | | 首版平台 | 天猫、京东 | | 主入口 | 自然语言商品名称/描述 | | 核心闭环 | 搜索 -> 候选确认 -> 抓取 -> 标准化 -> AI 报告 -> 回看 | | 核心约束 | 人工确认优先、部分成功可产出、报告必须可追溯 | | 交付形态 | 内部受控部署的统一 Web 工作台 | | 不做事项 | 不做持续监控、不做导购、不做自动绕过风控、不做无确认同款判断 | ### 1.3 任务闭环总览 ```mermaid flowchart LR A[输入商品关键词] --> B[平台预检查] B --> C[站内搜索候选] C --> D[用户确认链接] D -->|零确认| X[NoSelection 终态] D -->|至少一个确认| E[抓取前校验] E --> F[商品与评论抓取] F --> G[标准化与聚合] G --> H[AI 结构化报告] H --> I[历史回看 / 版本切换 / 平台级重试] ``` 对应 ASCII 视图: ```text +------------+ +------------+ +------------+ +------------+ | 输入查询 | -> | 候选搜索 | -> | 人工确认 | -> | 抓取分析 | +------------+ +------------+ +------------+ +------------+ | | | v | +------------+ | | 报告回看 | | +------------+ v +------------+ | NoSelection| +------------+ ``` ## 2. 产品定义 ### 2.1 一句话定位 这是一个面向品牌方、电商运营和竞品研究岗位的跨平台商品分析工作台:用户输入商品名称,系统完成多平台搜索、人工确认、商品与评论抓取、标准化处理和 AI 分析,最终输出可追溯、可用于决策的结构化报告。 ### 2.2 核心价值主张 当前用户的问题不是“拿不到数据”,而是“拿不到可用于决策的统一结论”。 | 价值层 | 用户原有问题 | 产品提供的价值 | | --- | --- | --- | | 检索成本 | 需要在多个平台重复搜索 | 用一次任务发起收敛多平台搜索 | | 判断成本 | 同款识别不稳定 | 用“系统召回 + 人工确认”保障对象正确性 | | 整理成本 | 商品与评论样本难统一 | 把原始数据标准化为统一结构 | | 决策成本 | 结论依赖个人经验和截图 | 用 AI 输出结构化、可追溯的报告 | ### 2.3 产品形态 MVP 形态定义为“任务型分析工具”,而不是“持续监控平台”。 一个完整任务包含: | 阶段 | 说明 | | --- | --- | | 输入 | 输入商品关键词或描述 | | 搜索 | 获取多平台候选结果 | | 确认 | 人工确认一个、多个或零个商品链接 | | 执行 | 系统抓取、清洗、分析 | | 输出 | 生成结构化报告并支持回看 | ### 2.4 MVP 交付形态 MVP 以“内部受控部署的网页工作台”形态交付。用户通过浏览器访问统一 Web 工作台,在页面内完成任务创建、候选确认、任务执行和报告回看;采集执行、会话复用和阻塞恢复统一在服务端受控环境完成。 | 决策项 | 口径 | | --- | --- | | 首版运行方式 | 内部受控服务器部署 | | 采集执行位置 | 服务端统一执行 | | 用户设备角色 | 只负责 Web 交互和必要的人机恢复操作 | | 多租户/外部开放 | 不纳入 MVP | | 后续扩展 | 待稳定性、成本和权限模型成熟后再评估 | ## 3. 用户、场景与问题 ### 3.1 目标用户与典型场景 | 角色 | 核心任务 | 最关心的输出 | | --- | --- | --- | | 品牌方运营 | 看同款/竞品在不同平台如何卖、怎么被评价 | 平台差异、卖点总结、风险点、优化建议 | | 电商运营 | 评估自家商品或竞品商品页与评论表现 | 价格与卖点对比、用户正负反馈、店铺差异 | | 商品研究/竞品分析 | 快速完成一份可引用的商品分析报告 | 标准化数据、可追溯证据、结构化结论 | ### 3.2 非目标用户 | 用户类型 | 不覆盖原因 | | --- | --- | | 普通消费者导购用户 | 产品目标不是推荐购买,而是分析商品表现 | | 内容/社媒舆情分析用户 | 当前只聚焦电商商品分析,不做内容平台监测 | ### 3.3 背景痛点 | 痛点 | 表现 | | --- | --- | | 平台分散 | 相同任务需要在多个站点重复执行 | | 商品识别困难 | 同一商品往往有多店铺、多链接、多规格页并存 | | 评论样本难整理 | 评论量大,但真正可用于分析的样本提取效率低 | | 结果不可复用 | 分析结果依赖个人经验,难沉淀为结构化资产 | ### 3.4 机会判断 产品机会不只是“做一个抓取工具”,而是做一个围绕“商品分析任务”组织输入、处理和输出的产品化工作流。 ## 4. MVP 目标与非目标 ### 4.1 MVP 产品目标 | 目标 | 说明 | | --- | --- | | 一次任务发起 | 完成对天猫、京东的同类商品分析 | | 人工确认保证正确性 | 不强行自动认定同款 | | 输出可决策报告 | 报告需结构化、可回溯、可用于运营和竞品决策 | | 支持部分成功产出 | 平台访问不稳定时仍尽量产出可用结果 | ### 4.2 明确的非目标 | 非目标 | 说明 | | --- | --- | | 持续监控/定时更新 | 不做自动巡检与自动重跑 | | 消费者导购推荐 | 不面向普通购买决策 | | 内容平台舆情聚合 | 不覆盖小红书、微博、B 站等场景 | | 评论全量抓取 | 目标是足够支撑分析,不是尽可能抓全 | | 无人工确认的同款判断 | 不自动代替用户做最终对象判断 | | 自动绕过验证码/风控/登录限制 | 不承诺规避平台安全机制 | ## 5. MVP 范围与关键产品决策 ### 5.1 覆盖平台 | 平台 | 当前状态 | 说明 | | --- | --- | --- | | 天猫 | MVP 覆盖 | 当前首发平台之一 | | 京东 | MVP 覆盖 | 当前首发平台之一 | | 淘宝 | 延后 | 下一优先扩展平台 | | 抖音电商 | 延后 | 当前阶段不进入排期 | | 拼多多 / Amazon 等 | 延后 | 不在 MVP 范围 | | 小红书 / 微博 / B 站等 | 不覆盖 | 不属于当前产品目标 | ### 5.2 输入方式 | 项目 | 口径 | | --- | --- | | 主输入方式 | 自然语言商品名称/描述 | | 示例 | `iPhone 15 Pro`、`大疆 Pocket 3`、`某品牌蓝牙耳机` | | 不作为主流程的输入 | 直接粘贴商品链接 | | 决策原因 | 关键词搜索更符合“跨平台聚合同一商品”的核心目标 | ### 5.3 任务模式 | 项目 | 口径 | | --- | --- | | 模式 | 一次性分析任务 | | 起点 | 搜索开始 | | 终点 | 报告产出结束 | | 当前不支持 | 自动巡检、自动增量更新、定时重跑 | ### 5.4 输出形态 | 项目 | 口径 | | --- | --- | | 主输出 | 任务内结构化网页报告页 | | 同时保留 | 原始数据、标准化数据、证据索引 | | P1 输出 | Markdown / PDF 导出 | | 运行方式 | 内部受控服务端部署,用户通过浏览器访问统一工作台 | ### 5.5 默认配置 | 配置项 | 默认值 | 说明 | | --- | --- | --- | | 每个平台候选数 | Top 5 | 默认候选返回规模 | | 单链接评论样本上限 | `100` | 记为 `N` | | 任务级评论总上限 | `500` | 超出时按已确认链接数进行比例分配并提示用户 | ## 6. 产品原则 | 原则 | 解释 | | --- | --- | | 人工确认优先于算法猜测 | 商品识别正确性优先于全自动化 | | 证据优先于结论 | 报告结论必须能尽量回到商品链接、评论样本和抓取时间 | | 部分成功优先于整体失败 | 允许单平台失败,但任务应尽可能产出可用结果 | | 标准化优先于花哨展示 | 先把数据口径做对,再谈复杂展示 | | 输出面向决策 | 报告不是信息堆叠,而是帮助用户做判断 | ## 7. 信息架构与核心用户流程 ### 7.1 信息架构 | 页面/模块 | 作用 | 核心内容 | | --- | --- | --- | | 新建任务页 | 发起分析任务 | 商品关键词输入、评论上限配置、平台状态提示 | | 候选确认页 | 完成平台候选商品确认 | 候选列表、单选/多选/跳过、确认回看 | | 任务执行页 | 展示任务进度与异常状态 | 搜索中、等待确认、抓取中、分析中、部分失败 | | 报告页 | 浏览结果与证据 | 商品汇总、平台对比、评论主题、风险点、证据引用 | | 历史任务页 | 回看已完成任务 | 任务状态、商品关键词、更新时间、结果入口 | 产品决策: | 决策项 | 说明 | | --- | --- | | 历史任务页属于 MVP | 报告必须支持回看与复盘 | | 候选确认页是核心页面 | 它负责正确性,不是可有可无的中间页 | | 报告页是核心交付页面 | 它负责承接产品价值 | ### 7.2 主流程 ```mermaid flowchart TD A[创建任务] --> B[平台预检查] B --> C[搜索候选] C --> D[候选返回 / 无结果 / 阻塞] D --> E[用户确认一个、多个或零个链接] E -->|零确认| F[NoSelection] E -->|有确认链接| G[抓取前会话校验] G --> H[商品与评论抓取] H --> I[标准化] I --> J[三级聚合] J --> K[AI 结构化报告] K --> L[查看报告与历史版本] ``` ### 7.3 平台访问顺序与降级路径 | 规则 | 说明 | | --- | --- | | 新建页平台提示只用于预告 | 不替代实际执行时的预检查结果 | | 每个平台维护 `search_requirement` | 取值为 `none`、`recommended`、`required` | | 搜索前预检查只决定能否进入搜索 | 不直接决定整任务最终结果 | | 抓取前校验只对已确认平台执行 | 避免无意义扩大人工处理面 | | 单个平台阻塞不应立即终止其他平台 | 其余可执行平台继续 | | 只要至少一个已确认平台可继续 | 任务继续执行 | | 新建页提供全局会话准备入口 | 只更新会话状态,不创建任务 | `search_requirement` 定义: | 取值 | 含义 | | --- | --- | | `none` | 搜索不依赖登录态,可直接搜索 | | `recommended` | 可直接搜索,但登录后结果更稳定或更完整 | | `required` | 搜索前必须有有效会话,否则该平台不进入搜索 | ### 7.4 关键交互决策 | 交互 | 决策 | | --- | --- | | 平台内选择 | 支持单选、多选、跳过 | | 进入抓取的前提 | 至少确认一个商品链接 | | 任务执行中遇到验证码/登录失效/风控 | 优先标记为平台级阻塞,而不是默认整任务失败 | | 零确认收口 | 允许进入 `NoSelection` 正式终态 | ## 8. 任务与平台状态模型 为避免把“整体任务结果”“执行阶段”和“单平台异常”混在一起,MVP 采用三层状态口径: | 状态层 | 字段 | 用途 | | --- | --- | --- | | 任务层 | `task_status` | 历史任务列表、默认筛选、整体结果判断 | | 阶段层 | `task_stage` | 执行页进度展示 | | 平台层 | `platform_status` | 区分平台级正常、阻塞、失败和跳过 | ### 8.1 状态流总览 ```mermaid flowchart TD A[Draft] --> B[Searching] B --> C[AwaitingConfirmation] C -->|零确认| D[NoSelection] C -->|至少一个确认| E[Running] E --> F[Completed] E --> G[PartialCompleted] E --> H[Blocked] E --> I[Failed] H -->|人工恢复后重试| E G -->|平台级重试| E ``` ### 8.2 `task_status` | 状态 | 含义 | 触发条件 | 用户动作 | | --- | --- | --- | --- | | `Draft` | 任务已创建未启动 | 任务刚创建或等待用户发起 | 可编辑输入参数 | | `Searching` | 正在做平台预检查或候选搜索 | 至少一个平台仍在预检查或搜索 | 等待系统返回结果 | | `AwaitingConfirmation` | 等待用户确认候选商品 | 所有平台都已返回候选、无结果、阻塞或失败 | 单选、多选、跳过 | | `NoSelection` | 用户未确认任何链接,任务在确认阶段结束 | 全部平台均无可执行选择,或用户主动以零确认链接提交 | 调整查询、重新搜索或预处理会话后新建任务 | | `Running` | 已进入抓取、标准化或分析阶段 | 至少一个已确认平台仍在执行 | 等待完成或处理中断 | | `Completed` | 所有已确认且可执行的平台均成功完成 | 至少一个已确认平台完成,且无已确认平台处于 `Blocked` 或 `Failed` | 查看报告 | | `PartialCompleted` | 已产出报告,但有部分已确认平台失败或阻塞 | 至少一个已确认平台 `Completed`,且至少一个已确认平台 `Blocked` 或 `Failed` | 查看报告或重试失败平台 | | `Blocked` | 没有成功完成的平台,且剩余平台均因人工介入问题被阻塞 | 零个已确认平台 `Completed`,且至少一个已确认平台 `Blocked`,并且无其他平台仍可继续 | 处理登录、验证码、风控后重试 | | `Failed` | 没有成功完成的平台,且不存在可恢复的进行中平台 | 零个已确认平台 `Completed`,且已确认平台全部为 `Failed`、`Skipped` 或无可执行对象 | 重新发起任务或调整输入 | ### 8.3 `task_stage` | 阶段 | 作用 | 说明 | | --- | --- | --- | | `precheck` | 平台预检查 | 判断平台能否进入搜索,不决定最终任务结果 | | `search` | 搜索候选 | 拉取平台候选列表或无结果状态 | | `confirmation` | 用户确认 | 等待用户确认候选链接 | | `session_check` | 抓取前校验 | 只校验已确认平台的访问条件 | | `crawl` | 商品与评论抓取 | 执行平台级抓取与原始数据留存 | | `normalize` | 标准化处理 | 统一商品与评论字段口径 | | `analyze` | AI 分析 | 生成结构化结论与证据关联 | | `publish` | 报告发布 | 生成报告快照并更新历史版本索引 | ### 8.4 `platform_status` | 状态 | 含义 | 是否可重试 | 备注 | | --- | --- | --- | --- | | `Pending` | 该平台尚未开始处理 | 否 | 初始状态 | | `SearchBlocked` | 搜索前已知必须登录,但当前无有效会话 | 是 | 平台不进入搜索 | | `Searching` | 正在搜索候选商品 | 否 | 过程态 | | `NoResult` | 搜索成功但没有候选商品 | 否 | 不视为平台失败 | | `AwaitingSelection` | 候选已返回,等待用户选择 | 否 | 过程态 | | `Skipped` | 用户明确跳过该平台 | 否 | 不计入失败 | | `Selected` | 用户已确认链接,待抓取前校验 | 否 | 过程态 | | `Blocked` | 抓取前或抓取中遇到登录失效、验证码或风控 | 是 | 需用户人工处理 | | `Running` | 抓取或平台级清洗中 | 否 | 过程态 | | `Completed` | 该平台已产出有效结果并纳入聚合 | 否 | 可进入报告 | | `Failed` | 该平台出现不可恢复执行失败 | 是 | 例如解析失败、数据异常、平台错误 | ### 8.5 汇总与重试规则 | 规则 | 说明 | | --- | --- | | 单个平台异常不自动拖死整任务 | `SearchBlocked`、`Blocked`、`Failed` 只影响对应平台 | | `NoResult` 和 `Skipped` 不计入失败 | 但也不计入成功完成平台 | | `NoSelection` 不生成报告 | 但保留历史记录和原因摘要 | | 任务最终状态只基于已确认平台计算 | 未确认平台不影响报告完成态 | | 重试只针对 `SearchBlocked`、`Blocked`、`Failed` | 已完成平台默认复用既有结果 | | 重试造成结果变化才生成新版本 | 否则只追加执行日志 | ## 9. 功能需求 ### 9.1 任务创建 系统需支持: | 能力 | 要求 | | --- | --- | | 输入 | 输入商品关键词或商品描述 | | 配置 | 配置单链接评论抓取上限 `N` | | 平台提示 | 在任务发起前展示平台可用性提示 | | 会话准备入口 | 可在创建任务前进入全局会话准备 | 产品口径: | 项目 | 口径 | | --- | --- | | 平台状态提示来源 | “平台能力配置 + 最近一次会话校验结果” | | `search_requirement = required` 且最近会话不可用 | 提示“需登录后搜索” | | `search_requirement = recommended` | 提示“未登录可能影响结果完整性” | | `N` 的作用域 | 每个已确认链接的评论样本上限 | | 多链接场景 | 先按链接分配 `N`,再受任务总上限约束 | | 超过任务上限时 | 按比例收缩,并提示已触发任务级总量控制 | ### 9.2 搜索召回与候选展示 系统需支持: | 能力 | 要求 | | --- | --- | | 搜索执行 | 分平台执行站内搜索 | | 搜索前预检查 | 明确平台是可搜索、受限还是阻塞 | | 候选返回 | 返回候选列表、无结果或阻塞/失败原因 | | 辅助判断 | 对候选展示基础识别信息与差异提示 | 候选列表至少展示: | 字段 | 必须 | | --- | --- | | 平台名称 | 是 | | 商品标题 | 是 | | 商品链接 | 是 | | 商品价格 | 是 | | 店铺名称 | 是 | | 主图/缩略图 | 是 | | 销量/热度/评分等辅助信息 | 是 | 候选去重与差异展示规则: | 规则 | 说明 | | --- | --- | | 相同 `canonical_product_id` 或规范化后完全相同链接 | 视为重复候选,只保留一张卡片 | | 无稳定商品 ID 时 | 用“规范化标题 + 店铺名称 + 主图 + 价格区间”近似聚类 | | 同店疑似同款但规格不同 | 不自动合并,用候选组 + 规格差异标签展示 | | 不同店铺疑似同款 | 不自动合并,保持为独立候选 | 产品决策: | 决策项 | 说明 | | --- | --- | | 默认返回规模 | 每个平台 Top 5 | | 候选展示要求 | 必须足够支撑用户判断,不能只返回标题和链接 | | 搜索失败反馈 | 必须给出平台级明确反馈,避免误判卡死 | | 平台内默认排序 | 关键词匹配度 > 销量/热度 > 评分与评价量完整性 > 价格信息完整性 | ### 9.3 商品链接确认 系统需支持: | 能力 | 要求 | | --- | --- | | 候选浏览 | 按平台浏览候选商品 | | 平台内选择 | 单选、多选或跳过 | | 回看确认结果 | 支持 | 产品决策: | 决策项 | 说明 | | --- | --- | | 平台内多选 | 属于 MVP 核心能力 | | 进入抓取后 | 只处理用户已确认的链接,不自动扩展范围 | | 候选组中的规格变体 | 用户必须明确勾选具体链接,系统不默认代选 | | 零确认提交 | 进入 `NoSelection` 终态,不生成报告快照 | ### 9.4 平台登录与访问策略 MVP 采用“用户自有账号登录 + 服务端受控会话复用”模式。 `search_requirement` 行为定义: | 配置值 | 含义 | 搜索时行为 | 抓取前行为 | | --- | --- | --- | --- | | `none` | 搜索不依赖登录态 | 直接搜索 | 对已确认链接做可访问性校验 | | `recommended` | 未登录也可搜索,但结果可能不完整 | 允许搜索并提示风险 | 对已确认链接做会话与可访问性校验 | | `required` | 搜索与抓取都依赖有效会话 | 无有效会话时标记 `SearchBlocked`,不进入搜索 | 用户处理会话后才能重试 | 系统需支持: | 能力 | 要求 | | --- | --- | | 搜索前预检查 | 在真实搜索前判断各平台是否满足搜索前提 | | 抓取前校验 | 只对已确认链接所在平台执行 | | 登录态访问 | 在用户自有账号登录态下访问平台页面 | | 阻塞识别 | 识别登录失效、验证码、风控拦截等状态 | | 恢复入口 | 提示用户在服务端受控浏览器中完成处理后继续任务 | | 全局会话准备 | 在任务外提供独立入口 | 产品决策: | 决策项 | 说明 | | --- | --- | | 系统不保存账号密码 | 必须 | | 会话复用方式 | 仅在当前工作区的服务端会话中心内加密复用 | | 搜索前预检查失败 | 只阻塞对应平台 | | 抓取前校验失败 | 只阻塞对应已确认平台,不回退已完成确认 | | 会话缓存作用域 | 当前部署实例/工作区 | | 默认过期时间 | 最后使用后 24 小时 | | 平台策略变化导致失败 | 必须暴露可理解原因 | ### 9.4.1 当前阶段平台抓取约束 根据 `docs/CrawlerFeasibility.md` 在 2026-04-02 的调研结果,当前阶段增加以下硬约束: | 平台 | 当前阶段定位 | 暂定 `search_requirement` | 当前产品约束 | | --- | --- | --- | --- | | 天猫 | 当前 MVP 平台 | `recommended` | 默认按淘宝/天猫同构请求链路设计;浏览器仅用于登录、验证码、模板刷新和恢复 | | 京东 | 当前 MVP 平台 | `required` | 搜索和详情前必须做会话/登录预检查;默认按会话驱动请求回放设计 | | 淘宝 | 下一优先平台 | `recommended` | 预期复用天猫适配栈;待双平台闭环稳定后接入 | | 抖音电商 | 当前延后 | `required` | 不进入当前迭代范围;不参与当前验收与排期 | 补充产品决策: | 决策项 | 说明 | | --- | --- | | 不承诺任何官方开放平台为直接数据源 | 当前不写入产品承诺 | | 当前主路径 | 服务端 HTTP 请求回放与 Hydration 解析 | | 平台级 `Blocked` | 视为产品常态,不视为偶发异常 | | 阻塞后的默认动作 | 优先提供服务端受控浏览器恢复入口 | | 无法刷新关键动态参数时 | 直接标记为 `Blocked`,不把逆向私有签名作为交付前提 | ### 9.5 商品信息抓取 系统需尽可能完整抓取商品页可访问信息,并保留原始字段。 MVP 优先抓取信息: | 类别 | 字段 | | --- | --- | | 商品基础 | 商品标题、品牌、型号/系列 | | 价格与促销 | 当前价格、促销信息 | | 规格参数 | 规格参数、SKU 选项 | | 页面内容 | 商品详情页文案、主卖点 | | 店铺信息 | 店铺名称、店铺类型、店铺评分 | | 表现数据 | 商品评分、评论总量、销量/热度 | | 追溯信息 | 商品链接、平台名称、抓取时间 | 产品决策: | 决策项 | 说明 | | --- | --- | | 原始字段允许平台间不一致 | 是 | | 标准化字段用于对比 | 原始字段用于回溯与补充展示 | ### 9.6 评论抓取与抽样策略 评论抓取目标是“足够支撑分析”,而不是“尽可能抓全”。 MVP 抽样策略: | 项目 | 规则 | | --- | --- | | 抽样单位 | 每个已确认链接独立执行抽样 | | 抽样桶 | 最新评论、最热评论、低分/差评评论 | | 默认比例 | `40% / 30% / 30%` | | 桶缺失时 | 将比例按剩余桶重新分配 | | 评论不足 `N` 时 | 抓取实际可得评论并标记“样本不足” | 评论至少保留字段: | 字段 | 必须 | | --- | --- | | 评论内容 | 是 | | 评论时间 | 是 | | 评论评分或情感标识 | 是 | | 点赞数/互动数 | 是 | | 规格/SKU 信息 | 是 | | 评论来源标识 | 是 | | 对应商品链接 | 是 | | 抓取平台 | 是 | 去重口径: | 规则 | 说明 | | --- | --- | | 优先口径 | 使用平台评论 ID 去重 | | 无评论 ID 时 | 使用“来源链接 + 评论时间 + 归一化评论文本”组合去重 | ### 9.7 数据标准化与口径定义 系统需输出商品标准表与评论标准表,并保留原始字段。 核心口径: | 字段 | 口径定义 | | --- | --- | | `platform` | 平台标准名称,MVP 当前限定为天猫、京东 | | `source_url` | 被确认并实际抓取的商品链接 | | `price` | 页面可见当前成交价,统一为人民币数值;原始价格文案单独保留 | | `product_rating` | 统一映射到 5 分制;若无法映射则为空并保留原值 | | `sales_volume` | 统一转换为数值字段;无法解析时保留原始文本 | | `review_time` / `crawl_time` | 统一为 `Asia/Shanghai` 时区时间 | | `sampling_bucket` | 固定枚举为 `latest`、`hot`、`negative` | 产品决策: | 决策项 | 说明 | | --- | --- | | 标准化后的空值 | 允许,但必须可解释 | | 无法标准化的字段 | 不得丢弃,应挂载在原始字段区域中 | ### 9.8 多链接聚合逻辑 MVP 明确采用三级聚合口径: | 层级 | 说明 | | --- | --- | | 链接级 | 每个已确认链接作为最小分析单元,独立抓取、独立保留 | | 平台级 | 同一平台下多个链接汇总展示,输出平台内价格区间、卖点共性、差评共性和店铺差异 | | 跨平台级 | 以平台级结果为主比较对象,同时保留对链接级证据的下钻能力 | 产品决策: | 决策项 | 说明 | | --- | --- | | 不强行合并平台内多链接 | 保持链接级独立性 | | 平台内允许同时展示汇总结论与具体差异 | 是 | | 跨平台对比默认看平台聚合结果 | 避免被链接级细节淹没 | ### 9.9 AI 分析与报告 Schema MVP 的 AI 分析不是自由文本生成,而是受控结构化输出。 报告结构总览: ```text Report ├─ summary ├─ product_snapshot ├─ platform_insights[] ├─ cross_platform_insights[] ├─ recommendations[] ├─ evidence_index[] └─ quality_flags ``` 顶层 Schema: | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `report_id` | string | 是 | 报告快照唯一 ID | | `report_version` | integer | 是 | 同一 `task_id` 下从 `1` 递增 | | `task_id` | string | 是 | 所属任务 ID | | `generated_at` | datetime | 是 | 报告生成时间,使用 `Asia/Shanghai` 时区 | | `task_status` | enum | 是 | 仅允许 `Completed` 或 `PartialCompleted` | | `summary` | `Summary` | 是 | 执行摘要与限制说明 | | `product_snapshot` | `ProductSnapshot` | 是 | 本次分析对象的基础汇总 | | `platform_insights` | `PlatformInsight[]` | 是 | 每个平台一条结构化记录 | | `cross_platform_insights` | `InsightCard[]` | 是 | 跨平台对比洞察卡片 | | `recommendations` | `InsightCard[]` | 是 | 面向运营或竞品分析的建议卡片 | | `evidence_index` | `Evidence[]` | 是 | 证据索引,供结论引用 | | `quality_flags` | object | 是 | 样本不足、部分失败、平台阻塞等标记 | `summary` 结构: | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `headline` | string | 是 | 一句话摘要 | | `key_points` | string[] | 是 | 2 到 5 条关键结论摘要 | | `limitations` | string[] | 是 | 样本不足、平台缺失、时间范围等限制 | `product_snapshot` 结构: | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `query` | string | 是 | 用户原始输入关键词或描述 | | `normalized_product_name` | string | 是 | 报告内统一使用的商品名称 | | `platform_count` | integer | 是 | 纳入任务的平台数量 | | `selected_link_count` | integer | 是 | 已确认链接总数 | | `review_sample_count` | integer | 是 | 实际纳入分析的评论样本量 | | `analysis_time_range` | object | 是 | 本次抓取与分析覆盖的时间范围 | `platform_insights[]` 结构: | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `platform` | enum | 是 | 天猫、京东 | | `execution_status` | enum | 是 | `completed`、`blocked`、`failed`、`skipped`、`no_result` | | `selected_link_count` | integer | 是 | 用户确认的链接数量 | | `price_range` | object/null | 否 | 最低价、最高价,无法形成区间时为空 | | `selling_points` | `InsightCard[]` | 是 | 平台卖点结论 | | `positive_themes` | `InsightCard[]` | 是 | 好评主题 | | `negative_themes` | `InsightCard[]` | 是 | 差评/风险主题 | | `store_diff_notes` | `InsightCard[]` | 是 | 店铺或链接差异 | 发布时状态映射规则: | 运行态 `platform_status` | 报告态 `execution_status` | | --- | --- | | `Completed` | `completed` | | `Blocked` 或 `SearchBlocked` | `blocked` | | `Failed` | `failed` | | `Skipped` | `skipped` | | `NoResult` | `no_result` | 补充规则: | 规则 | 说明 | | --- | --- | | `Pending`、`Searching`、`AwaitingSelection`、`Selected`、`Running` | 不得出现在已发布报告快照中 | `InsightCard` 结构: | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `card_id` | string | 是 | 结论卡片唯一 ID | | `title` | string | 是 | 结论标题 | | `statement` | string | 是 | 结论说明 | | `confidence` | enum | 是 | `high`、`medium`、`low` | | `sample_flag` | enum | 是 | `sufficient`、`insufficient`、`partial` | | `source_scope` | object | 是 | 来源平台、链接数、评论样本数 | | `evidence_ids` | string[] | 是 | 指向 `evidence_index`;`sample_flag = insufficient` 时允许为空 | `evidence_index[]` 结构: | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `evidence_id` | string | 是 | 证据唯一 ID | | `platform` | enum | 是 | 证据所属平台 | | `source_type` | enum | 是 | `product` 或 `review` | | `source_url` | string | 是 | 原始链接 | | `review_ref` | string/null | 否 | 评论 ID;无 ID 时使用评论索引 | | `snippet` | string | 是 | 简要摘录或摘要 | | `captured_at` | datetime | 是 | 证据抓取时间 | `quality_flags` 结构: | 字段 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `sample_insufficient` | boolean | 是 | 是否存在样本不足 | | `partial_platform_failure` | boolean | 是 | 是否存在已确认平台失败或阻塞 | | `blocked_platforms` | string[] | 是 | 被阻塞平台列表 | | `failed_platforms` | string[] | 是 | 失败平台列表 | 产品决策: | 决策项 | 说明 | | --- | --- | | 证据不足时 | 不输出强结论,对应卡片标记 `insufficient` | | 报告风格 | 优先服务决策,不追求辞藻丰富 | | 强结论必须有证据 | 任一 `InsightCard` 给出强结论时必须提供 `evidence_ids` | | 平台洞察覆盖范围 | `platform_insights` 必须覆盖所有纳入任务的平台,即使被阻塞/失败/无结果 | ### 9.10 失败重试与报告版本策略 系统需支持: | 能力 | 要求 | | --- | --- | | 平台级重试 | 仅对 `SearchBlocked`、`Blocked`、`Failed` 平台发起 | | 版本保留 | 重试后保留旧报告快照,并按版本回看 | | 版本展示 | 在报告页与历史任务页显示当前默认版本和更新时间 | | 版本字段 | 返回 `default_report_version` 与 `latest_successful_report_version` 的明确定义 | 产品决策: | 决策项 | 说明 | | --- | --- | | 首次成功报告 | `report_version = 1` | | 已完成平台在失败平台重试中 | 默认复用上一次成功抓取的数据 | | 重试未改变结果 | 不生成新快照,只追加执行日志 | | P0 默认版本策略 | `default_report_version = latest_successful_report_version` | | 报告默认展示 | 默认版本,允许用户切换查看旧版本 | ### 9.11 历史任务与结果回看 系统需支持: | 能力 | 要求 | | --- | --- | | 历史任务列表 | 可查看 | | 回看任务上下文 | 可回看任务输入、确认链接、执行状态和最终报告 | | 失败平台查看 | 在部分失败任务中可查看失败平台及原因 | | 报告版本切换 | 同一任务下可切换不同 `report_version` 的报告快照 | 产品决策: | 决策项 | 说明 | | --- | --- | | 回看能力 | 是报告产品化的一部分,不是后台附属功能 | | 报告必须绑定抓取时间 | 避免用户误把历史报告当实时结果 | | 历史任务默认展示 | 最新成功报告版本,并允许下钻到旧版本 | ## 10. 数据、安全与合规边界 ### 10.1 账号与会话 | 要求 | 说明 | | --- | --- | | 不保存用户账号密码 | 必须 | | 会话复用位置 | 仅在当前工作区的服务端会话中心 | | 会话缓存安全 | 需支持加密存储与用户手动清除 | ### 10.2 数据留存 | 数据类型 | 默认留存 | | --- | --- | | 原始抓取数据 | 30 天 | | 标准化数据、报告快照、证据索引 | 90 天 | | 原始大对象清理后 | 证据摘录、来源元数据和索引仍需保留到 90 天 | | 用户主动删除 | 允许删除历史任务及相关数据 | ### 10.3 合规边界 | 边界 | 说明 | | --- | --- | | 数据范围 | 仅抓取用户有权访问、页面可见的数据 | | 平台安全机制 | 不承诺绕过 | | 平台规则变化导致不可用 | 优先保证用户知情,而不是静默失败 | ## 11. 成功指标 MVP 成功不以“功能做完”为标准,而以“任务能否稳定产出可用报告”为标准。 | 指标 | 定义 | 目标 | | --- | --- | --- | | 任务完成率 | 发起任务后进入 `Completed` 或 `PartialCompleted` 的比例 | >= 75% | | 候选可用率 | 至少 2 个平台返回可供确认的候选项,或明确返回“无结果” | >= 85% | | 候选确认准确率 | 人工抽检中,被确认链接确属目标分析对象的比例 | >= 90% | | 人工确认效率 | 从候选页打开到提交确认的中位耗时 | <= 5 分钟 | | 任务时长 | 默认配置下从发起到报告完成的 P50 时长 | <= 20 分钟 | | 报告可追溯率 | 关键结论含来源范围与证据引用,或明确标记“样本不足”的比例 | 100% | | 证据引用有效率 | 抽检中可通过平台、链接、评论 ID/索引与抓取时间定位到原证据的比例 | >= 95% | | 用户可用性评分 | 试运行用户对报告“是否可用于决策”的评分 | >= 4/5 | | 报告采纳率 | 试运行用户认为“无需重新整理即可进入后续分析或讨论”的比例 | >= 70% | 补充说明: | 规则 | 说明 | | --- | --- | | `PartialCompleted` | 计入任务完成率,但必须已生成可阅读报告 | | 无报告产出 | 即使部分步骤成功,也不计入完成率 | | `NoSelection` | 不计入任务完成率,也不计入失败率 | | 质量类指标 | 以人工抽检和试运行记录为准,不依赖系统自报 | ## 12. MVP 验收标准 | 模块 | 验收标准 | | --- | --- | | 任务创建 | 用户可输入关键词并配置评论上限,成功发起任务 | | 搜索召回 | 每个平台在搜索前完成预检查,并返回候选列表、无结果或阻塞原因 | | 候选展示 | 每个候选项至少包含标题、价格、店铺、链接,并能体现重复项与规格差异 | | 人工确认 | 用户可单选、多选、跳过,并能回看确认结果 | | 状态模型 | 系统同时维护 `task_status`、`task_stage`、`platform_status`,支持 `NoSelection` 终态,且单平台阻塞不自动阻塞整任务 | | 登录与会话 | 系统可识别登录失效、验证码、风控,并支持“任务前会话准备 + 搜索前预检查 + 抓取前校验”三段式入口 | | 商品抓取 | 对所有确认链接抓取商品信息,并保留原始字段 | | 评论抓取 | 按既定抽样规则抓取评论,评论附带来源信息 | | 数据标准化 | 输出统一结构,允许空值,但不得丢失未映射原始字段 | | 多链接聚合 | 报告中同时存在链接级结果和平台级汇总 | | AI 报告 | 输出固定 Schema,至少包含摘要、平台洞察、跨平台对比、建议、证据索引和质量标记 | | 重试与版本 | 失败平台重试不覆盖旧报告;结果变化时生成新的 `report_version` | | 可追溯性 | 报告关键结论可回溯到平台、链接、评论样本或抓取时间 | | 容错 | 单个平台失败不阻塞整体任务完成,最终报告可见失败说明 | ## 13. 版本优先级 ### 13.1 P0 | P0 项目 | | --- | | 新建任务页 | | 天猫、京东站内搜索 | | 候选结果展示 | | 人工确认链接 | | 登录态校验与人工阻塞处理 | | 商品信息抓取 | | 评论分层抽样抓取 | | 数据标准化 | | 多链接三级聚合 | | 结构化 AI 报告 | | 历史任务回看 | ### 13.2 P1 | P1 项目 | | --- | | 更丰富的证据展示 | | Markdown / PDF 导出 | | 多租户与团队协作 | | 更细粒度的运营建议 | | 更强的失败重试与任务编排 | | 更多平台接入 | ## 14. 风险与依赖 | 风险/依赖 | 影响 | 应对策略 | | --- | --- | --- | | 平台登录与风控策略变化 | 导致搜索或抓取失败 | 明确 `Blocked` 状态,支持人工介入与失败提示 | | 商品同款识别不稳定 | 导致分析对象错误 | 坚持“系统召回 + 用户确认” | | 评论抽样偏斜 | 影响 AI 结论可靠性 | 使用分层抽样并在报告中标记样本范围 | | 多链接结果过多 | 报告可读性下降 | 采用链接级、平台级、跨平台级三级展示 | | 报告可读但不可验证 | 降低用户信任 | 强制引入来源范围、证据数量与引用 | ## 15. 一句话总结 本产品不是一个单纯的跨平台抓取工具,而是一个围绕“商品分析任务”设计的产品化工作流:把搜索、确认、抓取、标准化和 AI 分析整合为可追溯、可复用、可用于决策的结构化报告能力。