体育爬虫基建与策略运营平台 PRD
0. 执行摘要
体育爬虫基建与策略运营平台不是只展示累计量的数据大屏,而是每天用来查看和调整抓取策略的工作台。它需要回答六个问题:
- 今天抓回多少视频,最终入库多少?
- 哪些策略应扩量、优化、观察或暂停?
- 一个策略的实体名单和意图如何生成 Query,哪里还没覆盖?
- 一条入库视频能否追到策略、Query、任务和原始 URL?
- 视频为什么被保留或拒绝?
- 某次策略调整是否改善了抽检质量和入库量?
本轮产品判断是:首页只回答“现在怎么样、下一步做什么”;进入具体策略后,再解释 Query 怎么生成、抓回哪些视频和任务哪里失败。 技术 ID 和完整来源记录按需展开,不在管理页面制造额外概念。
数据口径: 当前网页中的总量、策略、Query、视频、任务、覆盖率、抽检和异常数字统一作为现有真实数据快照使用,统计截至 2026-07-15 11:05,页面不是实时查询。配置、审批和发布按钮用于走查操作流程,尚未触发线上爬虫;页面必须把“真实数据”和“尚未接通的操作”分开标注。
0.1 老板愿望与本 PRD 对应关系
| 老板愿望 | 产品化表达 | 本期交付 |
|---|---|---|
| 基建链路可视化 | 一屏查看目标到入库的数量、异常与负责人 | 抓取链路、步骤详情、来源记录 |
| 自动化,不依赖 Excel | 名单、意图、模板、规则和阈值进入配置库,按版本发布 | 配置中心、发布流程、运行时只读正式配置 |
| 每一步可追踪 | 每一步都有输入、输出、版本、状态、耗时和错误 | 任务记录、来源记录、重跑入口 |
| 用数据优化 | 策略、Query、任务和入库均有按日数据与视频抽检 | 每日趋势、异常、抽检反馈 |
| 先按业务做,再平台化 | 先跑通体育/NBA 的完整闭环,再抽象通用模块 | P0 业务闭环、P1 配置化、P2 平台化 |
一句话验收标准:任何一条入库视频都能追到策略、Query、任务和原始 URL;任何一次策略调整都能用抽检视频和前后数据判断是否有效。
0.2 双角色走查结论
本轮分别以“老板看策略”和“运营配置策略”走完主流程。两个角色看到的信息深度不同,但使用同一组数据和版本。
| 角色 | 首要决策 | 走查发现 | V1.3 处理 | 完成标准 |
|---|---|---|---|---|
| 老板 | 哪些策略扩量、优化、观察或暂停 | 只看到数字,没有抽检质量、判断依据和下一步 | 增加“策略建议”,同屏展示覆盖、抽检可入库率、有结果 Query、近 7 天入库、依据和下一步 | 5 分钟内完成所有策略判断,并可点击一行查看详情 |
| 策略运营 | 如何新增或修改策略 | 能看 Query,但不能完整走完名单、Query、抽检、审批和恢复 | 保留五步:范围 → 名单与意图 → Query → 处理与下载 → 检查并发布 | 不依赖 Excel 完成草稿和提交审批;未过检查时不能发布 |
| 审批人 | 这次调整是否可以发布 | 调整内容、预计数量、抽检视频和恢复方式分散 | 一张审批记录固定展示上述四项 | 不查外部文件即可批准或驳回 |
核心反思:看到数字不等于能做决策,能打开 Query 也不等于能安全地修改策略。 页面既要给出下一步,也要保留可核验的来源。
0.3 本轮 UI 与交互走查结论
| 问题 | 原状态 | V1.3 规则 |
|---|---|---|
| 入口过多 | 左侧有 11 个入口,覆盖、Query、入库明细脱离策略后没有独立上下文 | 收敛为 8 个入口:今日概览、策略建议、抓取链路、策略列表、内容分布、数据质量、统计说明、产品需求;Query、视频和任务放回策略详情 |
| 跳转不可分享 | 滚动后 URL 不变,无法直接发给同事 | 一级页面使用锚点;策略、标签页、日期和配置步骤使用可复制深链 |
| 返回键失效 | 打开策略或切换标签后,浏览器返回不能还原位置 | 首次打开策略新增一条历史记录;策略内切换只替换当前记录;返回一次关闭详情并回到原页面位置 |
| 可点击提示混乱 | 动态行和静态表格都显示手型;部分可点击元素不能键盘操作 | 只有能下钻或执行动作的元素显示手型和悬停;静态数字、分布条、状态标签和普通表格不显示可点击状态 |
| 移动端菜单不完整 | 菜单打开后缺少遮罩和明确关闭方式 | 增加遮罩、菜单展开状态和点击外部关闭 |
| 术语过多 | 同时出现策略方向、策略单元、Case、血缘、灰度、Diff 等 | 业务层只使用策略、Query、视频、任务、入库、版本;技术词只出现在开发字段和详细来源记录中 |
1. 背景与问题
1.1 业务背景
内容库通过不同策略持续创建体育视频抓取种子,并从 YouTube、TikTok、Instagram 抓回视频。策略逐渐由少量固定 Query 演变为“实体名单 × 意图 × 平台写法”的组合系统。
随着策略数量、实体数量和视频量增长,当前统计方式存在以下问题:
- 总量可以看到,但无法确认每天由哪个策略贡献。
- 策略有名称,但缺少稳定 ID、版本和统一的覆盖标准。
- “种子目标分类”容易被误认为“视频真实内容分类”。
- Query、任务、入库视频之间的来源记录不完整,异常无法快速定位。
- 名单、意图、Query 模板和规则仍可能散落在 Excel 或个人文件中,运行时配置不可控。
- 抓回视频、内容处理和下载被视为黑盒,无法定位哪一步造成损耗或延迟。
- 同一步骤缺少明确输入、输出、版本和重试记录,调整前后无法客观比较。
- 同一视频可能被多个 Query 抓回,策略贡献相加可能超过全局去重总量。
- 老视频缺少新策略参数,不能硬归因给当前策略。
- 当前静态网页无法支撑百万级视频的检索、筛选与分页。
1.2 核心问题
运营人员每天需要在 5 分钟内判断:系统是否正常、哪个策略需要处理、问题出在哪一层。管理者需要判断:策略覆盖是否完整、投入是否产生有效内容、下一轮应该补哪个方向。开发人员需要拿到可复现的 target_id、strategy_version_id、query_id、seed_id、task_id、candidate_id、processing_run_id、download_task_id 和 asset_id。
2. 产品目标与非目标
2.1 产品目标
- 建立以策略为核心的统一统计口径和来源记录。
- 支持按天查看每个策略的抓回、去重、入库、Query 与任务表现。
- 自动识别下降、无结果 Query、任务失败、来源缺失和数据延迟。
- 支持从策略汇总逐层下钻到实体、意图、Query、任务和原视频。
- 把目标、策略、Query、抓回视频、处理、下载与入库做成一条可视、可执行的自动化管线。
- 将实体名单、意图、模板、过滤规则和阈值从 Excel 迁移到可版本化配置库。
- 每一步保留输入、输出、版本、耗时、状态、错误与重跑记录。
- 支持老板、运营、产品和开发使用同一组数字进行 Review。
- 让管理者可直接对策略做扩量、优化、观察或暂停判断,且每个建议有可追溯证据。
- 让策略运营在系统内完成草稿、Query 检查、视频抽检、审批、先跑 10% 和恢复旧版本,避免配置失控。
- 支撑至少 100 万视频明细的服务端筛选、分页和导出。
2.2 非目标
- P0 不提供任意业务都能使用的通用低代码编排器;先实现体育内容的固定模块链路。
- P0 不自动承诺内容分类准确率;没有人工标注集时只展示规则命中率或抽检结果。
- P0 不把历史缺少策略来源的视频强行分摊到当前策略。
- P0 不在浏览器一次性加载完整实体名单、全部 Query 或百万级视频。
- P0 不重写底层爬虫执行器和媒体下载器;通过统一任务契约接入并补齐追踪。
- P0 不允许 Excel 作为线上运行时依赖;Excel 仅可作为一次性导入或离线导出格式。
3. 用户与核心场景
| 用户 | 每日任务 | 需要的答案 | 默认入口 |
|---|---|---|---|
| 管理者 | 判断策略投入是否有效 | 哪些策略应扩量、优化、观察或暂停,依据是什么 | 策略建议、今日概览 |
| 策略运营 | 创建、修改和发布策略 | 名单与意图如何组合、会生成多少 Query、抽检是否过线 | 策略配置 |
| 内容运营 | 检查抓取质量并标注视频 | 哪些实体或意图不足、哪些 Query 无结果 | 策略详情、覆盖情况、原始视频 |
| 审批人 | 批准高影响策略发布 | 改了什么、数量如何、抽检是否过线、如何恢复 | 提交审批 |
| 产品经理 | 检查口径与策略设计 | Query 怎么生成、各层数据如何变化 | 策略数据、Query 来源 |
| 爬虫开发 | 定位任务异常 | 哪个 Seed、Task 或平台失败 | 每日数据、任务记录 |
| 数据分析 | 校验统计与归因 | 去重、归因、时间和版本是否一致 | 数据质量、统计说明 |
4. 统一用词
日常操作页面围绕以下六个核心对象,不再新增“策略方向、策略单元、策略包”等同义词。业务目标只作为策略的范围和验收条件,不单独形成一套操作概念。
| 用词 | 页面含义 |
|---|---|
| 策略 | 一组长期运行的抓取配置,包含范围、实体名单、意图、平台和负责人 |
| Query | 实际提交给平台搜索的文字 |
| 视频 | 爬虫抓回的原始视频记录,保留标题、作者、平台 ID 和原始 URL |
| 任务 | 某条 Query 在某个平台的一次执行 |
| 入库 | 视频通过检查、下载并写入内容库 |
| 版本 | 某次已保存或已发布的策略配置,支持比较和恢复 |
实体名单和意图是策略的两个配置字段:实体名单回答“抓谁”,意图回答“想看什么”。纯享集锦、混剪集锦、画面讲解、人物故事是视频内容类型,不新增上层包装名称。
Seed、candidate_id、processing_run_id、download_task_id、asset_id、trace_id 等仅作为开发和排障字段,不作为老板或运营需要学习的新产品概念。
5. 数据链路与信息架构

5.1 页面信息架构
左侧只保留 8 个入口:
- 今日概览:看总体量、趋势、异常和数据时间。
- 策略建议:按覆盖、抽检可入库率、有结果 Query 与入库量判断扩量、优化、观察或暂停。
- 抓取链路:看目标到入库的每一步数量和当前问题。
- 策略列表:横向比较覆盖、有结果 Query、任务成功率和每日入库。
- 内容分布:看四类内容和三个平台的构成。
- 数据质量:看策略来源、原始 URL、运动标签、延迟任务和重复归因。
- 统计说明:查看时间、去重、策略贡献和覆盖口径。
- 产品需求:在新标签页打开本 PRD。
Query、视频、任务和配置不再作为全局入口。用户必须先选择具体策略,再在右侧详情中查看“概览、每天、Query、视频、任务、配置”。这样可以避免进入 Query 或视频后不知道当前属于哪个策略。
5.2 默认展示原则
- 默认展示结论、异常和可比较指标,不默认展开完整名单或全部 Query。
- 所有可行动的异常必须能够下钻到具体 ID。
- 所有“总量”必须标注去重、归因和时间口径。
- 当天数据必须显示统计截至时间并标注“尚未结束”。
- 策略目标分类与视频真实分类必须分开展示。
- 静态数字、状态标签、分布条和普通说明不做成可点击元素。
- 只有“打开详情、切换范围、执行操作、打开原视频”四类元素显示手型、悬停和键盘焦点。
5.3 目标态业务链路
页面固定主链路为:目标 → 策略 → Query → 抓回视频 → 内容处理 → 下载 → 入库。
| 阶段 | 业务问题 | 核心输入 | 核心输出 | 默认看什么 |
|---|---|---|---|---|
| 目标 | 我们到底要补什么内容 | 内容定义、运动范围、优先级、验收线 | target_version_id | 目标完成率、未覆盖范围 |
| 策略 | 用哪一组方法长期完成目标 | 实体、意图、场景、平台和阈值 | strategy_version_id | 覆盖率、贡献、异常 |
| Query | 实际去平台搜什么 | 实体、意图、场景和平台写法 | query_id、seed_id | 生成率、执行率、有结果 Query 占比 |
| 抓回视频 | 爬虫原样抓回了什么 | 任务返回结果 | candidate_id、original_url | 视频量、字段完整率、重复率 |
| 内容处理 | 为什么保留或拒绝 | 视频、规则版本、模型版本 | processing_run、verdict | 各步骤通过率、错误率、耗时 |
| 下载 | 媒体是否真正可获得 | 通过检查的视频 | download_task_id、media_ref | 成功率、重试、失败原因 |
| 入库 | 最终进入内容库的是什么 | 媒体、视频信息、所属策略 | asset_id、canonical_url | 入库量、抽检结果、后续使用 |
5.4 自动化管线原则
- 运行时不读 Excel。 正式配置从数据库读取;Excel 只用于一次性导入和可审阅导出。
- 配置发布后不可静默修改。 名单、意图、模板、规则、模型和阈值都生成版本,历史任务继续绑定原版本。
- 每一步输入输出固定。 处理步骤有明确契约,便于替换实现而不改变上下游。
- 重复执行不重复入库。 同一 run_id 重试不会重复创建视频、处理记录、下载任务或入库资产。
- 失败可重试。 支持从失败步骤继续,也支持使用新版本重新处理既有视频。
- 原始事实不覆盖。 原始标题、URL、平台 ID、任务返回和旧处理结论长期保留,新结论新增版本。
5.5 开发排障字段
每次业务运行生成一个 trace_id;每个模块执行生成 module_run_id。统一模块运行契约至少包含:
| 字段 | 含义 |
|---|---|
| trace_id / run_id | 一次端到端运行与一次调度批次 |
| module_name / module_version | 模块名称和实际执行版本 |
| input_ref / output_ref | 输入和输出对象引用,不把大对象重复塞进日志 |
| status | pending、running、success、partial、failed、skipped |
| started_at / finished_at | 开始、结束和耗时 |
| metrics_json | 输入量、输出量、通过率、去重率等模块指标 |
| error_code / error_detail | 可聚合错误码与脱敏错误详情 |
| retry_of / replay_reason | 重试来源和人工或自动重放原因 |
任何一条入库视频的完整开发追踪主线为:target_version_id → strategy_version_id → query_id → seed_id → task_id → candidate_id → processing_run_id → download_task_id → asset_id。这些字段只在“来源记录”和开发排障中展示。
5.6 视频抽检与数据反馈
固定运营闭环为:看策略 → 抽视频 → 看数据 → 调整策略 → 观察新一轮。
- 看策略:先定位覆盖不足、转化下降、平台偏移或模块异常。
- 抽视频:从问题范围内按平台、运动、Query 和处理原因分层抽样,避免只看最热或最差内容。
- 看数据:同时看抓回、处理损耗、下载成功、入库与人工准确率。
- 调整版本:修改实体、意图、模板、规则或阈值,填写变更原因并发布新版本。
- 观察新一轮:对比发布前后同口径窗口,保留抽检视频和指标快照,不用单日偶然波动下结论。
5.7 先业务闭环,再平台化
P0 直接围绕体育内容和当前四类目标跑通固定链路,不先做自由拖拽式编排。P1 将 Excel 配置迁移到系统并补审批、发布和恢复旧版本。P2 在处理契约、来源记录和指标稳定后,再抽象成其他内容业务可复用的能力。
5.8 老板查看策略的流程
老板不需要逐个阅读实体名单和 Query,而是按固定次序做决策:
- 先确认数据时间、来源记录完整率和抽检数量是否可用。
- 按“优化 → 扩量 → 观察 → 暂停”阅读策略,先处理影响大且有明确动作的项。
- 对每个策略同时看目标覆盖、抽检可入库率、有结果 Query、近 7 天入库和每条 Query 的产出。
- 点击判断依据,抽查不超过 10 个代表视频、最差 Query 和版本前后对比。
- 确认负责人、下一动作、完成日期和复盘时间,不在线会中直接改配置。
默认判断规则:
| 建议动作 | 必要证据 | 系统行为 |
|---|---|---|
| 扩量 | 覆盖达标或快速改善;抽检可入库率过线;有结果 Query 和单位产出不退化 | 允许扩名单或扩意图,仍受日 Query 上限限制 |
| 优化 | 覆盖、抽检、有结果 Query 或成本至少一项低于要求,且有可定位问题 | 必须填写问题所在:实体、意图、模板、平台、处理或下载 |
| 观察 | 指标处于警戒线附近或受平台短期波动影响,证据不足以改策略 | 固定下次复查时间和观察指标,期间不改预算 |
| 暂停 | 重复投入高、来源记录不可信、连续质量退化或投入产出显著低 | 停止新任务,保留历史数据、任务记录和恢复入口 |
5.9 策略运营配置与发布流程
运营端采用固定五步向导,不提供自由拖拽编排。
| 步骤 | 运营要完成的事 | 系统自动检查 | 输出 |
|---|---|---|---|
| 1. 范围 | 选业务目标、运动/赛事范围、内容类型、平台、负责人和日 Query 上限 | 字段完整性、权限、重名和范围冲突 | config_draft_id |
| 2. 名单与意图 | 选择实体名单和意图,设置必选、优先级和覆盖线 | 重复实体、空名单、不适用组合和组合上限 | entity_intent_diff |
| 3. Query | 检查组合方式、平台 Query 示例和新增/停用明细 | 去重、模板冲突、日上限、预计成本和黑名单命中 | query_estimate_id |
| 4. 处理与下载 | 选择处理步骤、下载并发、重试和超时 | 必要步骤不可缺失,存储配额和平台限流需可用 | processing_download_diff |
| 5. 检查并发布 | 抽检视频,确认调整数量、审批人和恢复版本 | Query 上限、抽检可入库率、游戏误抓率、来源记录和审批状态 | approval_id → strategy_version_id |
默认发布要求:预计 Query 不超过日上限;至少抽检 150 条视频;抽检可入库率不低于 80%;游戏等误抓不高于 2%;所有必要处理步骤可用;恢复版本已选定;审批通过。高风险调整先执行 10%,24 小时内达到要求才扩大。
6. 功能需求
6.1 FR-01 今日概览
首页核心指标随时间范围和平台筛选切换:
- 抓回视频数。
- canonical URL 去重视频数。
- 入库视频数。
- 任务成功率。
- 运行中策略数与异常策略数。
- 实体覆盖率。
- 无结果 Query 数与涉及实体数。
- 数据延迟和最近成功同步时间。
首页趋势默认展示最近 7 天,支持切换今天、近 7 天、近 30 天。今天的数据使用条纹或“当前时点”标记,不能直接与完整昨日混用。
6.2 FR-02 策略健康度列表
列表每行代表一个策略版本,默认按异常优先级排序。字段包括:
| 字段 | 说明 |
|---|---|
| 建议动作 | 扩量、优化、观察或暂停;由规则生成建议,管理者可确认或修改 |
| 策略 | 名称、范围、负责人、版本 |
| 状态 | 草稿、运行中、需关注、已暂停、已归档 |
| 目标内容 | 四类目标内容,可多选 |
| 实体覆盖率 | 已覆盖实体数 / 目标实体数;覆盖标准见统计说明 |
| 抽检可入库率 | 最近一次 150 条分层抽检中人工判定可入库的比例,同时展示样本数和时间 |
| 有结果 Query | 至少抓回一条视频且通过质量要求的 Query 数 / 执行 Query 数 |
| 任务成功率 | 成功任务数 / 已结束任务数 |
| 今日入库 | 当天当前时点的去重入库视频 |
| 日环比 | 与昨日同一统计时点对比;日终后改为完整日对比 |
| 近 7 天入库 | 最近 7 个自然日的去重入库视频 |
| 异常 | 未关闭的异常数 |
| 判断依据 | 系统对建议的一句话解释,可下钻至数据、抽检视频和版本对比 |
| 下一动作 | 负责人可执行的具体任务、期限和下次复查时间 |
支持按策略、负责人、状态、运动、赛事、内容类型、平台搜索或筛选;支持只看异常、排序、分页和导出。
6.3 FR-03 策略基本信息与版本
策略详情页必须展示:
- 稳定 strategy_id 和当前 strategy_version_id。
- 名称、负责人、状态、生效时间、最近修改人。
- 运动、赛事和平台范围。
- 实体名单版本、意图版本、Query 模板版本、过滤规则版本。
- 覆盖阈值与异常阈值。
- 最近一次成功执行时间、最近一次数据固化时间。
历史统计必须绑定当时的策略版本。切换版本时,页面同时切换对应的名单、Query 和统计,不允许用当前版本覆盖历史。
6.4 FR-04 策略每日数据
每个策略提供按日查看入口,默认最近 7 天,支持近 30 天和自定义日期范围。趋势指标可切换:
- 抓回视频。
- 去重视频。
- 入库视频。
- 执行 Query。
- 无结果 Query。
- 任务成功率。
- 有结果 Query 占比。
每日明细表至少包含日期、抓回视频、去重视频、入库视频、执行 Query、有结果 Query 占比、任务成功率和失败任务。点击某一天进入该日任务记录,筛选状态通过 URL 参数保留。
支持与前一周期对比。对比基线默认为前 7 天同星期,近 30 天页面可选择前 30 天或过去 4 周同星期中位数。
6.5 FR-05 策略到入库的数量
按固定步骤展示策略从名单到最终入库的数量,并明确每一步口径:
- 策略目标与目标实体。
- 实体 × 意图组合。
- 生成并实际执行的 Query。
- 任务抓回视频。
- 视频去重。
- 通过可访问性、黑名单和游戏过滤。
- 识别为目标内容类型并补齐标签。
- 下载成功。
- 最终入库。
每一步提供转化率与环比。任何一步下降均可查看由哪些平台、实体或 Query 造成。
6.6 FR-06 名单与意图覆盖情况
表格每个数字表示一个 entity_id × intent_id 组合:
- 绿色:有效视频数达到覆盖阈值。
- 黄色:有结果但低于阈值。
- 红色:已执行但没有抓回视频。
- 灰色:未生成或不适用。
默认阈值为最近 30 天至少 5 条去重有效视频,可由策略配置。页面支持实体层级、现役/退役、赛事、内容类型和平台筛选。
6.7 FR-07 Query 链路
Query 默认按“实体 × 意图”聚合,避免一次展示数万条平台 Query。展开后显示:
- 语义组合与大白话生成配方。
- 平台 Query 原文和 query_id。
- 模板版本、语言、平台、创建时间。
- 执行次数、抓回视频、去重视频、入库视频和转化率。
- 对应 seed_id、task_id 和最近失败原因。
Query 需要区分“已生成”“等待执行”“已执行”“有结果”“无结果”和“已停用”。
6.8 FR-08 视频明细与人工标注
视频明细支持服务端搜索、筛选、分页,字段包括:
- 标题、作者、平台、发布时间和视频 ID。
- canonical URL 与原始平台 URL。
- 播放量、点赞量及抓取时间。
- 种子目标内容类型与内容识别类型。
- 所属策略、Query 和任务;开发排障时可展开内部 ID。
- 入库状态、过滤原因、人工结论和标注人。
人工可标注“可入库、不可入库、待确认”,并选择原因。标注仅改变审核结论,不改写最初抓回的视频记录。
6.9 FR-09 数据质量
每日监控以下完整性:
- 策略来源完整率。
- 原始 URL 完整率。
- canonical URL 生成率。
- 运动标签完整率。
- 内容类型识别覆盖率。
- 延迟任务与卡死任务。
- 多 Query 重复归因率。
- 日事实表与资产明细对账差异。
每项质量指标支持查看缺失明细并导出,不允许只展示一个无法解释的百分比。
6.10 FR-10 分享与导出
- 所有筛选状态写入 URL,支持直接分享固定视图。
- 列表支持导出当前筛选结果,导出任务异步执行。
- 大于 10 万行时只允许异步导出并通过通知中心领取。
- 导出文件必须携带统计时间、时区、去重口径、策略版本和筛选条件。
6.11 FR-11 基础能力链路总览
页面以一条连续链路展示目标、策略、Query、抓回视频、内容处理、下载和入库。每个步骤展示数量、相邻转化率、异常数、最近运行时间和负责模块。点击后展示输入、输出、版本、运行状态、失败原因和任务样例;点击数量可进入对应明细。
全链路支持按日期、目标、策略、运动、平台和内容类型筛选。所有节点共享同一筛选上下文,禁止不同模块各自使用无法对账的时间和去重口径。
6.12 FR-12 配置中心与发布
系统内维护以下配置,不允许线上运行依赖本地 Excel:
- 目标范围、策略和验收阈值。
- 实体名单、实体层级和生效区间。
- 意图、场景、平台 Query 模板和语言规则。
- 黑白名单、游戏排除词、去重和可访问性规则。
- 内容识别模型、阈值和元数据富集映射。
- 下载策略、并发、限流、重试和超时。
每次编辑形成草稿,发布前展示影响范围和预计新增 Query,发布后生成不可变版本;支持恢复到上一稳定版本。一次性 Excel 导入必须经过字段校验、变更预览和人工确认,导入完成后系统只使用数据库版本。
配置中心必须同时提供当前生效版本、当前草稿、上次稳定版本和预计影响。运营修改任何配置后,系统实时重算实体数、必选组合数、去重 Query 数、预计每日 Seed/Task 数、预计下载量和存储量。估算结果带 estimate_id 和输入版本,确保审批人看到的就是待发布内容。
配置页不默认铺开所有名单和 Query;首层展示数量、变更、门槛和代表样例,详细名单、全部 Query 和字段级变更通过搜索、分页或导出查看。
6.13 FR-13 任务运行记录
每个模块提供运行列表和单次运行详情,支持按状态、版本、日期、策略和错误码筛选。单次运行展示事件时间线、输入输出数量、耗时、重试、跳过原因以及关联对象 ID。失败模块可从原输入重试;产品或运营重新执行时必须填写原因并保留新旧结果。
6.14 FR-14 内容处理与下载
默认内容处理顺序为:字段解析与可访问性 → canonical 规范化与去重 → 黑名单和游戏过滤 → 内容类型识别 → 运动、赛事、球队、球员等元数据富集 → 质量判定。每一步独立记录结论,不允许只保存最终“通过/拒绝”。
下载模块负责队列、平台限流、指数退避重试、媒体校验、存储引用和终态同步。下载失败不得删除候选与处理事实;达到重试上限后进入人工或定时重试队列。
6.15 FR-15 视频抽检与数据迭代
策略详情提供固定抽检入口,可按平台、运动、Query、处理原因和时间分层随机抽样。人工标注可入库、不可入库或待确认,并记录原因。每个策略版本展示发布前后同口径指标、抽检准确率和差异视频,帮助判断是扩大抓取、调整规则还是修改 Query。
6.16 FR-16 策略建议
系统按固定规则为每个策略生成“扩量、优化、观察、暂停”建议,同时输出证据和下一动作。建议只是决策辅助,管理者确认或修改后才写入操作记录。
策略建议默认只展示必要依据:目标覆盖、最近一次抽检可入库率、有结果 Query、近 7 天入库、每百 Query 入库、数据时间和核心问题。任一依据不可用时,页面显示“依据不足”,不自动给出扩量建议。
管理者可查看建议规则版本、确认动作、指定负责人和到期时间,但无权直接绕过配置、抽检和审批修改线上策略。
6.17 FR-17 发布前检查、审批与恢复
- 抽检按内容类型、平台、实体等级、意图、新增 Query、无结果风险和高误抓风险分层,不允许只随机抽最热内容。
- 默认样本数为 150;影响 Query 超过 5 万、新增运动或新增处理模块时,样本数提高到至少 500。
- 审批记录必须包含配置变更、预计 Query、成本/资源预估、抽检结果、检查结论、先跑 10% 的方案和恢复版本。
- 发布后先执行 10%,与上一稳定版本对照;监控任务成功率、有结果 Query、抽检可入库率、游戏误抓、下载成功率和单位 Query 产出。
- 任一阻断指标突破停止线时自动停止新任务,5 分钟内恢复上一稳定版本;新版本已生成的数据和来源记录不删除。
6.18 FR-18 导航、锚点与返回
一级页面必须支持以下锚点:
| 页面 | 锚点 |
|---|---|
| 今日概览 | #overview |
| 策略建议 | #review |
| 抓取链路 | #pipeline |
| 策略列表 | #strategies |
| 内容分布 | #distribution |
| 数据质量 | #quality |
| 统计说明 | #contract |
策略详情使用 #strategy/{strategy_id}/{tab},其中 tab 仅允许 overview、daily、query、videos、runs、config。任务日期可追加为 #strategy/{strategy_id}/runs/{YYYY-MM-DD};配置步骤可追加为 #strategy/{strategy_id}/config/{scope|entities|queries|processing|release}。
交互规则:
- 点击一级导航后平滑滚动到对应锚点,并更新左侧选中状态和 URL。
- 手动滚动时只更新左侧选中状态,不连续写入浏览器历史。
- 第一次打开策略详情时新增一条浏览器历史;详情内切换标签、日期、Query 或配置步骤时替换当前历史,不堆积返回层级。
- 浏览器返回一次应关闭策略详情并回到打开前的一级页面。
- 直接打开策略深链时必须恢复策略、标签页、日期或配置步骤;无效 ID 回退到默认策略概览并显示提示。
- 点击关闭按钮、遮罩或按 Escape 均关闭详情;关闭后焦点返回触发元素。
- 详情打开时,Tab 焦点不得离开右侧详情;移动端菜单打开时显示遮罩,点击遮罩关闭。
7. 指标口径
7.1 核心结果指标
| 指标 | 字段名 | 公式 | 去重与归因 |
|---|---|---|---|
| 抓回视频 | raw_recall_count | 任务返回的视频记录数 | 不去重,可按 Query 多重计数 |
| 去重视频 | canonical_dedup_count | distinct canonical_asset_key | 全局按 canonical URL / 平台视频 ID 去重 |
| 基础过滤通过 | base_filter_pass_count | 去重后通过黑名单、可访问性等规则 | 规则版本化 |
| 目标类视频 | target_classified_count | 内容识别为目标类型的视频 | 可多标签;需标注分类版本 |
| 入库视频 | valid_ingest_count | 去重且状态为 ready/available 的视频 | 策略内去重;跨策略可多重归因 |
| 策略贡献 | strategy_attributed_count | distinct strategy_id + canonical_asset_key | 各策略相加可大于全局总量 |
| 抓回记录 | candidate_count | 任务原样返回并成功保存的记录数 | 原始层不去重,保留 task_id |
| 处理通过 | processing_pass_count | 完成全部必选模块且 verdict=pass | 按 processing_policy_version 统计 |
| 下载成功 | download_success_count | 下载终态为 success 且媒体校验通过 | download_task_id 唯一 |
7.2 执行与覆盖指标
| 指标 | 公式 | 说明 |
|---|---|---|
| Query 执行率 | executed_query_count / generated_query_count | 生成后是否真正被调度执行 |
| 有结果 Query | nonzero_query_count / executed_query_count | 至少抓回 1 条视频的 Query 占比 |
| 达标 Query | effective_query_count / executed_query_count | 默认至少产生 1 条去重入库视频,可配置 |
| 抽检可入库率 | review_pass_count / reviewed_decided_count | 待确认不进分母;必须同时展示样本数、抽样方式与数据时间 |
| 游戏内容误抓率 | false_sport_recall_count / reviewed_count | 游戏、动画或其他非真人体育误抓;发布默认要求 ≤ 2% |
| 每百 Query 入库 | valid_ingest_count / executed_query_count × 100 | 衡量策略扩量效率,不以抓回量代替 |
| 单条入库视频成本 | 策略计算资源成本 / valid_ingest_count | 成本包含爬虫任务、模型、下载与存储;P0 先完成可归集记账 |
| 跨策略重叠率 | 被多个策略抓到的去重视频 / 该策略去重视频 | 用于发现重复投入,不直接删除同一视频的多策略来源 |
| 任务成功率 | successful_task_count / finished_task_count | running 与 pending 不进入分母 |
| 实体覆盖率 | covered_entity_count / target_entity_count | 实体至少有一个必选意图达标 |
| 实体意图覆盖率 | covered_entity_intent_count / required_entity_intent_count | 每个必选组合达到 N 条有效视频 |
| 抓回到入库转化 | valid_ingest_count / raw_recall_count | 用于判断处理损耗,不代表内容准确率 |
| 模块通过率 | module_output_pass_count / module_input_count | 每个处理模块独立统计,跳过需单列 |
| 模块错误率 | failed_module_run_count / finished_module_run_count | 业务拒绝不等于系统错误 |
| 下载成功率 | successful_download_count / finished_download_count | pending、running 不进入分母 |
| 端到端周期 | asset_available_at - task_created_at | 同时展示 P50、P90、P95 |
| 日环比 | (today - yesterday_same_cutoff) / yesterday_same_cutoff | 当天未结束时必须使用同一时点 |
7.3 数据质量指标
| 指标 | 公式 | 目标 |
|---|---|---|
| 策略来源完整率 | 有 strategy/query/seed/task 的入库视频数 / 应记录来源数 | ≥ 98% |
| 原始 URL 完整率 | original_url 非空视频 / 视频总数 | ≥ 99.5% |
| 运动标签完整率 | sport_id 非空归因数 / 应带标签归因数 | ≥ 98% |
| 日事实对账差异 | abs(日事实汇总 - 明细重算) / 明细重算 | ≤ 0.5% |
| 数据新鲜度 | 当前时间 - 最近成功聚合时间 | ≤ 20 分钟 |
| 任务记录完整率 | 有 input/output/version/status 的 module_run / 应执行 module_run | ≥ 99% |
| 下载归因完整率 | 有 candidate、processing、download、asset 关联的成功下载 / 成功下载 | ≥ 99% |
7.4 时间口径
- 默认时区:Asia/Singapore。
- 默认日期字段:首次成功入库时间 first_ingested_at。
- 抓回视频趋势可切换 task_finished_at,但不能与入库趋势混算。
- 当天每 15 分钟增量聚合;D-1 于次日 02:00 固化。
- 迟到数据允许回补 D-2 至 D-7,必须记录 revision_at 和 revision_reason。
8. 异常规则
| 异常 | 默认触发条件 | 严重度 | 处理入口 |
|---|---|---|---|
| 策略未运行 | 当日计划时间后 30 分钟仍无 Task | 高 | 策略运行记录 |
| 任务失败 | 任务成功率低于 95% | 高 | 失败 Task 列表 |
| 入库骤降 | 今日同时间较过去 7 天同时间中位数下降 30% | 高 | 策略每日趋势 |
| 无结果 Query 集中 | 有结果 Query 占比低于 80% 或无结果 Query ≥ 20 | 中 | 策略内 Query |
| 覆盖不足 | 实体意图覆盖率低于策略目标 10pp | 中 | 策略覆盖情况 |
| 平台偏移 | 单平台占比较 7 日均值变化超过 20pp | 中 | 平台构成 |
| 策略来源缺失 | 策略来源完整率低于 98% | 高 | 数据质量明细 |
| URL 缺失 | 原始 URL 完整率低于 99.5% | 中 | 视频明细 |
| 数据延迟 | 最近聚合成功时间超过 20 分钟 | 高 | 聚合任务监控 |
异常支持确认、忽略至某日、关闭和备注;所有动作写入审计日志。阈值按策略版本配置,全局阈值只作为默认值。
9. 数据模型
本章开始出现的英文表名和字段名只用于研发实现和排障,不是页面需要新增的产品概念。
9.1 维表与关系表
| 表 | 主键 | 关键字段 | 用途 |
|---|---|---|---|
| dim_target | target_id | name, owner_id, status | 稳定业务目标身份 |
| dim_target_version | target_version_id | target_id, scope_json, acceptance_json, effective_from/to | 目标范围与验收快照 |
| dim_strategy | strategy_id | name, owner_id, status | 稳定策略身份 |
| dim_strategy_version | strategy_version_id | strategy_id, version, effective_from/to, config_json | 保存历史配置快照 |
| dim_config_draft | config_draft_id | strategy_id, base_version_id, draft_json, status, editor_id | 保存未发布配置和当前编辑状态 |
| bridge_strategy_entity | version_id + entity_id | required, tier, valid_from/to | 策略使用的实体名单 |
| bridge_strategy_intent | version_id + intent_id | required, coverage_threshold | 策略使用的意图与阈值 |
| dim_query_recipe | recipe_id | entity_id, intent_id, context_json, template_version | 语义组合与生成配方 |
| dim_platform_query | query_id | recipe_id, platform, query_text, status | 实际平台 Query |
| dim_processing_policy | processing_policy_version | ordered_modules, required_flags, thresholds | 内容处理编排与阈值 |
| dim_module_version | module_version_id | module_name, implementation_ref, config_json | 可执行模块版本 |
| dim_download_policy | download_policy_version | concurrency, timeout, retry_json, storage_target | 下载策略版本 |
| dim_release_policy | release_policy_id | sample_rule, gates_json, canary_rule, rollback_rule | 统一抽检、审批、先跑比例和恢复规则 |
9.2 事实表
| 表 | 粒度 | 关键字段 | 保留策略 |
|---|---|---|---|
| fact_crawl_task | 每个 Task | task_id, seed_id, query_id, status, counts, error_code | 长期保留 |
| fact_content_candidate | 每个 Task 返回候选 | candidate_id, task_id, platform_id, original_url, raw_payload_ref | 长期保留原始事实 |
| fact_module_run | 每个候选 × 模块执行 | module_run_id, trace_id, module_version_id, input_ref, output_ref, status, error_code | 长期保留 |
| fact_processing_run | 每个候选 × 处理策略 | processing_run_id, candidate_id, policy_version, verdict, reason_codes | 长期保留 |
| fact_download_task | 每个下载任务 | download_task_id, candidate_id, policy_version, status, retry_count, media_ref, checksum | 长期保留 |
| fact_asset_attribution | 每个 Asset × Query | asset_id, canonical_key, strategy_version_id, query_id, seed_id, task_id | 长期保留 |
| fact_strategy_daily | 每日 × 策略版本 × 平台 | raw, dedup, valid, query, task, coverage | 每日快照 |
| fact_query_daily | 每日 × Query | execute, recall, dedup, valid, zero_flag | 每日快照 |
| fact_module_daily | 每日 × 模块版本 × 范围 | input, pass, reject, fail, skip, latency_percentiles | 每日快照 |
| fact_download_daily | 每日 × 平台 × 策略 | created, success, failed, retried, latency_percentiles | 每日快照 |
| fact_data_quality_daily | 每日 × 质量项 × 范围 | numerator, denominator, issue_count | 每日快照 |
| fact_manual_review | 每次人工标注 | asset_id, verdict, reason, reviewer, reviewed_at | 长期保留 |
| fact_review_sample | 每个抽检批次 | sample_id, strategy_version_id, sample_rule_json, before_after_window | 长期保留 |
| fact_query_estimate | 每次草稿预估 | estimate_id, config_draft_id, input_versions, generated, deduped, daily_budget, cost_estimate | 至少保留 2 年 |
| fact_sample_run | 每次发布前抽检 | sample_run_id, config_draft_id, stratification_json, sample_size, verdict_metrics | 长期保留 |
| fact_strategy_release | 每次提交、审批、发布或恢复 | release_id, draft_id, approval_id, from/to_version_id, status, canary_percent, rollback_reason | 长期保留 |
| fact_strategy_decision | 每次管理者决定 | decision_id, strategy_id, suggested_action, confirmed_action, evidence_snapshot, owner, due_at | 长期保留 |
| fact_strategy_budget_daily | 每日 × 策略版本 | query_budget, executed_query, task_cost, model_cost, download_cost, storage_cost | 每日快照 |
9.3 唯一键与索引
- 入库视频的全局唯一键优先使用 platform + platform_video_id;缺失时使用规范化 original_url 哈希。
- fact_asset_attribution 唯一键为 asset_id + query_id + first_task_id。
- fact_strategy_daily 唯一键为 stat_date + strategy_version_id + platform。
- fact_content_candidate 唯一键优先为 task_id + platform_video_id,缺失时使用 task_id + original_url_hash。
- fact_module_run 唯一键为 trace_id + candidate_id + module_version_id + attempt_no。
- fact_download_task 通过 idempotency_key 防止重试重复创建任务或入库视频。
- fact_query_estimate 使用 config_draft_id + draft_revision 唯一,配置再次修改后必须重新估算。
- fact_sample_run 和 fact_strategy_release 必须绑定同一 draft_revision,防止用旧抽检批准新配置。
- 视频检索索引至少包含 strategy_id、query_id、sport_id、content_type、platform、status、first_ingested_at。
- 所有事实表保留 created_at、updated_at、source_updated_at 和 revision_at。
10. 技术与存储方案
10.1 数据职责
- PostgreSQL:策略、版本、来源记录、任务和日事实表的事实来源。
- Elasticsearch:百万级视频标题、URL、标签、ID 和状态检索。
- 对象存储:候选原始 payload、大字段处理产物、下载媒体和校验结果。
- 队列/工作流:串联 Query 调度、候选落盘、处理模块、下载与入库,支持重试和重放。
- 聚合任务:每 15 分钟计算当天增量,凌晨固化历史日事实。
- Cloudflare Pages:承载前端静态资源,不保存百万级明细。
- Cloudflare Worker 或现有后端 API:鉴权、汇总查询、服务端分页和导出任务。
10.2 为什么不能继续使用单 HTML 数据文件
- 百万级 JSON 会导致首次加载、内存和搜索性能不可接受。
- 静态数据无法保证当天增量、迟到修订和权限控制。
- 浏览器端筛选无法稳定执行跨表归因和 canonical 去重。
- 原始 URL、用户标注和内部 ID 不应无鉴权公开发布。
10.3 聚合策略
- 任务完成后写入任务事实和入库视频来源。
- 增量任务按 strategy_version_id、platform 和日期更新当日事实。
- 每日 02:00 重算 D-1 并固化。
- 每日对账任务使用明细重算结果与日事实表比较。
- D-2 至 D-7 迟到数据触发可追踪修订。
- 模块完成后写入 module_run 和业务对象状态,再通过事件触发下一模块。
- 配置发布采用版本号;运行开始时固化本次实际使用的全部版本,途中不热替换。
11. API 需求
| 接口 | 用途 | 关键参数 |
|---|---|---|
| GET /api/dashboard/summary | 首页汇总与趋势 | from, to, platform, sport, content_type |
| GET /api/strategy-review | 管理决策表、建议动作和证据摘要 | as_of, owner, action, confidence, page |
| POST /api/strategy-decisions | 确认或修改系统建议,分派下一动作 | strategy_id, action, owner, due_at, note |
| GET /api/pipeline/summary | 目标到入库各阶段数量、转化和异常 | from, to, target_id, strategy_id, platform |
| GET /api/traces/{trace_id} | 端到端事件时间线与模块输入输出 | include_payload, include_retries |
| GET /api/strategies | 策略健康列表 | date, status, owner, anomaly_only, sort, page |
| GET /api/strategies/{id} | 策略基本信息与版本 | version_id |
| GET /api/strategies/{id}/daily | 每日趋势与明细 | from, to, platform, metric |
| GET /api/strategies/{id}/coverage | 实体 × 意图矩阵 | version_id, entity_type, intent_id |
| GET /api/strategies/{id}/queries | Query 聚合与平台 Query | date, entity_id, intent_id, platform, page |
| GET /api/queries/{id}/assets | Query 对应视频 | status, content_type, page, page_size |
| GET /api/tasks | 运行记录 | date, strategy_id, query_id, status |
| GET /api/candidates | 抓回视频列表 | task_id, strategy_id, processing_status, page |
| GET /api/processing-runs | 内容处理记录 | module, version, verdict, reason, page |
| GET /api/download-tasks | 下载任务与失败原因 | platform, status, error_code, page |
| GET /api/data-quality | 质量汇总与问题明细 | date, issue_type, scope, page |
| POST /api/assets/{id}/review | 写入人工标注 | verdict, reason_code, note |
| GET /api/review-samples | 抽检批次、样本与前后对比 | strategy_version_id, status, page |
| POST /api/config-drafts | 创建配置草稿 | target, strategy, entities, intents, templates, rules |
| PUT /api/config-drafts/{id} | 更新配置草稿并生成新 revision | expected_revision, patch, change_reason |
| POST /api/config-drafts/{id}/estimate | 预估组合、Query、Task、下载与资源影响 | revision, platforms, horizon |
| POST /api/config-drafts/{id}/sample-runs | 创建发布前分层抽检 | revision, sample_size, stratification_rule |
| POST /api/config-drafts/{id}/submit-approval | 锁定草稿、估算与抽检并生成审批单 | revision, estimate_id, sample_run_id, approver |
| POST /api/approvals/{id}/decision | 审批通过或驳回 | decision, note |
| POST /api/releases/{id}/canary | 先跑部分配置并创建观察窗口 | percent, monitor_window, gate_policy_id |
| POST /api/strategy-versions/{id}/rollback | 停止新 Seed 并恢复上一稳定版本 | target_version_id, reason, release_id |
| POST /api/module-runs/{id}/replay | 从原输入重放指定模块 | target_version, reason |
| POST /api/exports | 创建异步导出 | view, filters, columns |
所有列表接口使用服务端分页,默认 page_size=50,最大 200。接口响应统一返回 data_as_of、timezone、counting_contract、strategy_version_id 和 next_cursor。
12. 权限与审计
| 角色 | 查看汇总 | 原始 URL | 标注 | 编辑草稿 | 提交审批 | 审批/发布 | 导出 |
|---|---|---|---|---|---|---|---|
| 管理者 | 是 | 是 | 否 | 否 | 否 | 按风险级别 | 是 |
| 策略运营 | 是 | 是 | 是 | 是 | 是 | 否 | 是 |
| 内容运营 | 是 | 是 | 是 | 否 | 否 | 否 | 是 |
| 开发 | 是 | 是 | 否 | 是 | 是 | 仅紧急恢复 | 是 |
| 访客 | 脱敏汇总 | 否 | 否 | 否 | 否 | 否 | 否 |
查看原始 URL、导出、人工标注、异常关闭和策略修改均写入 audit_log。生产页面不得公开暴露内部 ID 与原始 URL。
13. 交互与状态要求
13.1 什么可以点击
| 元素 | 是否可点 | 点击结果 | URL 是否变化 |
|---|---|---|---|
| 左侧一级导航 | 是 | 平滑滚动到页面锚点,并更新选中状态 | 是,写入一级锚点 |
| 策略建议整行 | 是 | 打开该策略概览 | 是,写入策略深链 |
| 策略列表整行 | 是 | 打开该策略概览 | 是,写入策略深链 |
| 待处理问题 | 是 | 打开对应策略的概览、每天或 Query;数据质量问题跳到数据质量 | 是 |
| 抓取链路步骤 | 是 | 在当前卡片下方切换该步骤的输入、系统处理、输出和当前情况 | 否,不离开当前页面 |
| 覆盖数字 | 是 | 带入实体和意图,打开 Query | 是,替换当前策略深链 |
| 每日图表日期、每日表格行 | 是 | 打开该日期的任务记录 | 是,记录日期 |
| Query 行 | 是 | 打开该 Query 抓回的视频 | 是,切换为视频标签 |
| 原始视频链接 | 是 | 在新标签页打开原平台 URL | 否,当前页面保持不变 |
| 配置步骤 | 是 | 切换当前编辑步骤 | 是,记录配置步骤 |
| 筛选、搜索、导出、新建、保存、抽检、提交 | 是 | 执行对应操作并给出反馈 | 按操作类型决定 |
13.2 什么不可以点击
- 首页六个核心数字只用于查看,不打开详情,也不显示手型。
- 状态标签、建议标签、内容类型标签、覆盖进度条和分布条不可点击。
- 静态说明表、统计说明和配置对比表不可点击,不使用整行悬停。
- 来源记录中的技术 ID 在 P0 只用于查看;复制功能单独使用复制按钮,不让每个 ID 都变成链接。
- 不存在目标页面或没有上下文的入口不得保留;因此不提供全局“覆盖、Query、入库明细”入口。
13.3 视觉与反馈
- 可点击行使用轻微背景变化,并在文字区展示“查看 →”;静态行没有悬停变化。
- 所有按钮和链接都有
:hover、:active和可见的:focus-visible。 - 页面锚点保留顶部 78px 安全距离,不被固定顶栏遮住。
- 策略详情打开后焦点进入关闭按钮;关闭后返回原触发元素。
- 操作成功使用页面右下角短提示,不使用浏览器 alert;失败在操作位置显示原因和重试按钮。
- 当前数据为固定快照时,页头显示“真实数据快照”和统计截至时间;未接通线上执行的按钮统一使用“生成预览”等文案,反馈必须明确写“未写入线上、未提交审批、不会触发爬虫”。
13.4 浏览器与移动端
- 浏览器前进和返回必须恢复一级锚点或关闭策略详情,不得出现空白页或错误策略。
- 复制策略深链到新窗口,必须直接恢复同一策略和标签页。
- 策略详情为模态侧栏,打开时背景不可操作;Tab 焦点限制在侧栏内,Escape 可关闭。
- 移动端侧栏占满宽度;主菜单打开时显示遮罩,点击遮罩或导航项关闭菜单。
- 大表只允许表格容器横向滚动,页面本身不得横向溢出;最长按钮文案必须换行或缩短。
13.5 数据状态
- Loading:使用与表格和图表结构一致的骨架屏。
- Empty:区分“筛选无结果”“策略未运行”“尚未生成 Query”。
- Error:展示可复制 request_id,并支持重试。
- Partial:当天与仍在运行的任务使用“当前时点”状态。
- Stale:数据超过 20 分钟未更新时,顶部状态栏变为警告。
- Pagination:视频与 Query 明细必须服务端分页。
- 配置步骤保留草稿和当前步骤;页面离开前提示未保存改动。
- 名单、意图、模板或平台变化后延迟 300ms 重算 Query;超出日上限时指出最大增量来源。
- 未过发布前检查时,发布按钮禁用,并说明负责人、修复入口和下次检查条件。
14. 非功能需求
| 类别 | 要求 |
|---|---|
| 性能 | 首页 P95 ≤ 2 秒;策略详情 P95 ≤ 2.5 秒;明细翻页 P95 ≤ 2 秒 |
| 估算性能 | 1.5 万 Query 以内的草稿影响预估 P95 ≤ 5 秒;更大估算转异步任务 |
| 数据量 | 支撑 100 万视频、10 万 Query、1 万实体和 2 年日事实 |
| 新鲜度 | 当天数据延迟 ≤ 20 分钟 |
| 可用性 | 月可用性 ≥ 99.5% |
| 一致性 | 首页、策略详情与导出使用同一事实表和口径版本 |
| 发布一致性 | 估算、抽检、审批和发布必须绑定同一 config_draft_id + revision;不一致时整单失效 |
| 可追溯 | 汇总数字可追到目标和策略版本;明细可追到 Query、任务、抓回视频、处理、下载与入库 |
| 幂等 | 同一幂等键重复执行不创建重复视频、下载任务或入库记录 |
| 重试 | 可重试错误自动指数退避;达到上限后进入死信与人工处理 |
| 可重放 | 使用原输入与指定新版本重放,旧结果不可覆盖且新旧可比较 |
| 可观测 | 模块输出数量、通过率、错误率、P50/P90/P95 耗时和队列积压可监控 |
| 发布安全 | 先跑数据最长延迟 5 分钟;突破停止线后 1 分钟内停止新任务,5 分钟内恢复上一版本 |
| 安全 | 鉴权后访问;原始 URL 与内部 ID 不在公开静态文件中 |
15. 埋点与运营日志
需要记录以下产品事件:dashboard_view、strategy_review_view、strategy_decision_confirm、pipeline_stage_open、trace_open、filter_change、strategy_open、daily_metric_change、coverage_cell_open、query_open、candidate_open、module_run_open、download_task_open、replay_create、original_url_open、review_submit、config_draft_create、config_draft_save、query_estimate_create、sample_run_create、approval_submit、approval_decision、canary_release、config_publish、strategy_rollback、export_create、anomaly_acknowledge。
埋点用于判断哪些统计真正被使用,不用于替代业务事实表。
16. 上线阶段
P0:体育业务闭环真实运行
- 以体育/NBA 现有策略为第一条真实链路,建立目标、策略稳定 ID 和版本。
- 接通 Query、任务、抓回视频、内容处理、下载和入库的端到端来源记录。
- 建立 strategy_daily、query_daily、module_daily、download_daily、data_quality_daily 事实表。
- 接通抓取链路、策略列表、每日趋势、覆盖情况、Query、抓回视频、处理、下载和视频抽检。
- 接通策略建议,展示覆盖、抽检、有结果 Query、入库、判断依据和下一步。
- 建立策略草稿、Query 检查和分层抽检最小能力,线上运行不再直读 Excel。
- 完成真实 URL 鉴权、服务端分页、导出、数据对账和关键模块重试。
P1:配置脱离 Excel,可运营
- 建立目标、策略、实体、意图、模板、规则和下载策略配置中心。
- 支持完整五步配置、变更预览、分层抽检、审批、先跑 10%、自动恢复和一次性 Excel 校验导入。
- 增加异常确认、关闭、备注和通知。
- 增加人工视频标注和抽检统计。
- 增加策略与处理版本对比、配置变更记录和指定模块重放。
- 增加 30 天、自定义日期和前周期对比。
P2:平台化与数据优化
- 计算实体和意图边际贡献。
- 自动发现重复 Query、低效 Query 和平台偏移。
- 基于覆盖缺口建议新增实体、意图或 Query。
- 抽象通用目标、策略、Query、处理模块和下载契约,支持其他内容业务接入。
- 基于抽检视频和前后数据给出规则、模板、模型和下载策略优化建议。
17. 验收标准
- 任一策略可查看连续 7 天逐日数据,日汇总与明细重算差异不超过 0.5%。
- 管理者能在 5 分钟内完成所有运行策略的扩量、优化、观察或暂停判断,每个判断均可下钻到指标、抽检视频和 Query。
- 策略运营可从“新建策略”完成范围、名单与意图、Query、处理与下载、检查并提交审批,全程不直读 Excel。
- 预计 Query 超过日上限、抽检未完成、抽检可入库率低于 80%、游戏误抓高于 2% 或未设恢复版本时,无法发布。
- 审批人可在一张审批记录中看到配置变更、预计 Query、分层抽检、预计资源、先跑 10% 和恢复方案。
- 先跑 10% 时突破停止线,1 分钟内停止新任务,5 分钟内恢复上一稳定版本,新旧数据均可追溯。
- 任一策略汇总可追溯到 strategy_version_id。
- 任一 Query 可追溯到 seed_id、task_id、candidate_id、processing_run_id、download_task_id、asset_id 和原始 URL。
- 任一入库视频可反向追到目标、策略、Query、抓回记录、各处理步骤、下载和实际使用版本。
- 线上运行时不读取本地 Excel;一次性导入必须校验、预览差异并发布为正式版本。
- 每个处理步骤记录输入引用、输出引用、版本、状态、耗时、错误和重试关系。
- 内容处理明细能分别解释可访问性、去重、黑名单、游戏排除、分类、富集和质量判定结果。
- 下载任务能查看成功率、重试次数、失败原因、媒体引用与校验结果。
- 策略调整可创建固定抽检批次,并展示发布前后同口径数据和视频差异。
- 同一视频被多个 Query 抓回时,全局总量只计一次,Query 贡献可多重归因且页面明确提示。
- 当天数字展示统计截至时间,日环比使用昨日同一时点。
- 历史缺少策略来源的视频不进入当前策略覆盖率。
- 策略每日趋势支持指标切换、前周期对比和按日下钻。
- 数据质量问题可查看具体明细并导出。
- 100 万视频规模下,明细使用服务端分页且页面不一次性加载全量数据。
- 桌面和移动端无页面级横向溢出,原始 URL 可在有权限时正常打开。
- 八个左侧入口均能跳到正确锚点,固定顶栏不遮挡标题,左侧选中状态随导航和滚动正确变化。
#strategy/nba-player/query、#strategy/nba-player/runs/2026-07-15、#strategy/nba-player/config/queries可在新窗口直接恢复对应详情。- 从一级页面打开策略后,浏览器返回一次关闭详情并回到原页面;详情内切换标签不会增加额外返回层级。
- 策略建议行、策略列表行和每日表格行支持 Enter 与 Space;覆盖格子、Query 行和每日图表日期使用原生按钮。
- 静态核心数字和配置说明表的鼠标样式为默认,不能出现虚假可点击反馈。
- 移动端菜单有遮罩,详情宽度等于视口宽度,Tab 焦点不离开详情。
18. 风险与待决策
- “入库视频”最终采用 ready、available 还是人工通过状态,需要内容库统一定义。
- 四类内容是否互斥;若多标签,管理汇总应采用主标签还是允许总和超过总量。
- 实体覆盖阈值是否统一为 5 条,还是按实体等级和内容类型配置。
- 老视频是否只保留“历史未归因”,还是允许通过离线模型补归因并标记置信度。
- “有结果 Query”是否只要求至少 1 条视频,还是增加 7 天最小入库贡献与抽检条件。
- 当前策略版本变更后,覆盖率的基线从生效日重新计算还是保留跨版本对比。
- 原始 URL 与内部 ID 的查看和导出权限由谁审批。
- P0 现有调度器和下载器能否原生透传 trace_id、幂等键与版本;若不能,需要适配层。
- 哪些处理步骤属于阻断型,哪些只打标签;跳过和人工放行是否进入入库。
- 配置发布由产品、运营还是开发审批,不同风险等级是否需要双人确认。
- 爬虫任务、模型、下载和存储成本能否按 strategy_version_id 归集;若不能,“单条入库视频成本”只能暂停对外展示。
- 默认抽检 150 条是否足以支撑四类内容和三平台分层;需根据真实标注计算置信区间后调整。
- 审批时限和紧急恢复权限由谁承担;若审批长期等待,运营会回到线下文件绕过系统。
- 系统生成的“扩量/优化/观察/暂停”建议在哪些证据缺失时必须降级为“证据不足”,不能为了填满决策表而虚假确定。
19. 本轮 V1.3 已完成内容
- 页面现有数字统一按截至 2026-07-15 11:05 的真实数据快照呈现;配置按钮明确标注尚未触发线上任务。
- 左侧入口由 11 个收敛为 8 个;Query、视频、任务和配置统一放回具体策略详情。
- 业务层统一使用策略、Query、视频、任务、入库、版本,不再新增策略方向、策略单元等同义词。
- 一级页面增加固定锚点;策略、标签页、任务日期和配置步骤支持可复制深链。
- 浏览器返回可关闭策略详情并回到原页面;策略内切换标签不堆积返回历史。
- 策略建议行、策略列表行、覆盖数字、日期和 Query 均可下钻,并补齐键盘操作和焦点恢复。
- 静态数字、状态标签、分布条和普通表格不再显示手型或虚假悬停。
- 移动端菜单增加遮罩,策略详情增加焦点限制,页面和表格无页面级横向溢出。
- 新增常驻“统计说明”和可展开的数据质量明细,替代只显示几秒的提示。
- 配置步骤文案收敛为:范围、名单与意图、Query、处理与下载、检查并发布。
当前网页用于展示真实数据快照和走查完整操作;线上执行能力以本 PRD 的 API、权限和发布要求为准。