落两态结构:方案文件夹收当前权威版16份+归档-过期版收28份+索引重写;规则写进 product-planning 技能(闸门2061|0|27);顺修1b白名单FAIL与自身吃标题错误

This commit is contained in:
WorkBuddy committed 2026-10-11 20:27:09 +08:00
1 parent 2c9d623380
commit 70a4522e60
53 files changed
+24161 -106

No files matched your search

@@ -0,0 +1,179 @@
# 第 1 棒 · Easel 热点雷达与选题链路逆向
> 目标:逆向 Easel 的选题(热点雷达)部分怎么搭建、热点到选题怎么实现,并对照现版 P2,给出把样子补成逻辑的方案。
> 证据等级:**源码级**。14 份文件从 GitHub API 逐份取回(本机 `raw.githubusercontent.com` 连不通,走 `api.github.com/repos/ZJU-REAL/Easel/contents/<path>` 取 base64),原文落在同目录 `取证/`。
> 取证时间:2026-10-10 | 本棒是调研与方案棒,`2a`/`2b`/原型/`DESIGN.md` **零改动**。
---
## 一、Easel 从热点到选题的完整链路
先把结论摆出来:Easel 的「热点雷达」本身**不做任何判断**。它只干三件事 —— 把六个平台的热榜拉回来、解析成统一结构、给每条挂两个按钮。真正把热点变成选题的动作,在它后面那一层(Plan 层的三个技能)和一个叫「选题库」的中转站里。
### 1.1 数据从哪来
热榜的取数全在一个文件里:`web/app.py` 第 4666-4682 行。六个平台,每个配**一主一备**两个地址:
| 平台 | 主源 | 备源 |
|---|---|---|
| 微博 | `v2.xxapi.cn/api/weibohot` | `60s.viki.moe/v2/weibo` |
| 抖音 | `v2.xxapi.cn/api/douyinhot` | `60s.viki.moe/v2/douyin` |
| 知乎 | `api.zhihu.com/topstory/hot-list?limit=50` | `60s.viki.moe/v2/zhihu` |
| B站 | `v2.xxapi.cn/api/bilibilihot` | `60s.viki.moe/v2/bili` |
| 百度 | `v2.xxapi.cn/api/baiduhot` | `60s.viki.moe/v2/baidu/hot` |
| 头条 | `toutiao.com/hot-event/hot-board/` | `60s.viki.moe/v2/toutiao` |
配套的规矩写在 `skills/shared/hotlist-apis.md`:只用清单里的地址,**禁止直连平台官网**(weibo.com / zhihu.com / douyin.com 和 tophub.today 都对服务器 IP 反爬,返回的是 403 或验证码,不是数据)。请求头伪装成 Chrome 124(`app.py` 4690 行),超时 8 秒。
我比较认同这份清单的写法。它把「哪些源能用、哪些绝对不能碰」写成了白名单加黑名单,还标了每条的状态(B站的 `/v2/bili` 直接标「不稳定」)。这比留一句「接入各平台热榜」有用得多。
### 1.2 热榜怎么变成结构化条目
各平台返回的 JSON 长得完全不一样,Easel 用一段**宽容解析**把它抹平(`app.py` 4684-4736 行):
- 标题字段试五个 key:`title` / `Title` / `word` / `name` / `keyword`
- 热度字段试六个:`hot` / `hot_value` / `HotValue` / `hotValue` / `num` / `detail_text`
- 链接试三个:`url` / `Url` / `link` / `mobil_url`
- 数据结构可能是数组,也可能是嵌套的 `data.data` 或 `data.list`,两种都判
- 数组元素可能是字符串(直接当标题)也可能是对象;知乎那条还多一层 `target`,热度藏在 `target.metrics_area.text` 里
- 知乎的 API 链接单独改写成 `www.zhihu.com/question/{id}`,否则点开是 JSON
取数顺序:主源 → 备源 → 都失败返回空。`_fetch_platform()`(4739 行)就这么 12 行。
缓存(`app.py` 4753-4775 行):按平台缓存,**TTL 300 秒**。拉失败时不清缓存,退回上一次的旧值。接口是 `GET /api/trends?platforms=weibo,douyin,zhihu&limit=12`,`limit` 夹在 1 到 30 之间。返回里每栏带一个 `ok` 布尔 —— 这个字段是给界面用的,用来区分「暂时取不到」和「本来就没数据」两种空。
### 1.3 热点怎么变成选题
界面在 `web/frontend/src/components/TrendsPage.tsx`,一共 106 行。每条热搜右边挂两个按钮:
- **收藏到选题库** —— 调 `createIdea({ title, source: "微博热搜", status: "pending" })`,POST `/api/ideas`。溯源字段在写入时就定死,不用用户填。
- **做内容** —— 调 `onUseTopic(title)`,这个函数的实现在 `App.tsx` 540-547 行,原文是:
> 围绕当前热点「${title}」:先判断它适不适合我的账号赛道;若合适,给 2-3 个差异化的二创角度,再出文案初稿。
然后新建一个会话、跳到对话页、把这句当用户输入发出去。
选题库是另一个文件 `IdeasPage.tsx`。三列看板:`pending` / `doing` / `done`,字段四个 —— `title` / `note` / `source` / `status`,加一个后端生成的 `id` 和 `created`。存储是 `outputs/_ideas.json`,写入走临时文件加原子替换(`app.py` 4904 行)。卡片上三个动作:做内容、排期(写进日历,日期填今天)、推进状态。
**这里有个它自己没解决的坑**:收藏按钮的「已收藏」状态存在一个前端 `Set` 里(`TrendsPage.tsx` 25 行),刷新页面就没了;后端 `createIdea` 也不去重。同一个热点点两次,选题库里就有两条。这条我们别照抄。
### 1.4 选题怎么变成方案
真正有判断力的是 Plan 层的三个技能,它们共享一套评分口径(文件 `skills/shared/scoring-dimensions.md`,标题就叫「唯一标准」):
**七维打分,每维 1-10 分**。其中「制作成本」和「合规风险」是反向维度,分越高代表越有利,这样七维能直接加权相加。权重是流量潜力 25%、账号匹配 20%、竞争差异化 15%、变现潜力 15%、时效价值 10%、制作成本 8%、合规风险 7%。综合分换算成百分制,三档结论:**≥70 做、50-69 改方向、<50 不做**。
三个技能按职责分开:
- `skill-trending-topics`(discover 层)—— 抓热搜、按赛道过滤、标注相关度高/中/低,挑 3-5 个二创选题。挑选判据四条:有争议性、与定位匹配、时效窗口够、能做出差异化。
- `skill-trend-rider`(plan 层)—— 拿到**一个**热点后规划怎么蹭。先判热度等级 S/A/B/C,再判生命周期四期(爆发期 0-4 小时、高峰期 4-24 小时、衰退期 1-3 天、长尾期 3 天以上),再判关联度高/中/低/无。**关联度低于「中」明确建议不蹭**。然后给 3 个角度,角度从 6 个模型里挑:专业解读、经验关联、工具方法论、反向观点、情绪共鸣、延伸联想。最后排 5 类风险:政治敏感、法律风险、舆论反转、道德争议、平台规则。
- `skill-topic-evaluator`(plan 层)—— 单条深评,就是上面那套七维打分,逐维写依据,给「做/改方向/不做」。
三个技能都有一条 Profile 感知:读画像目录里的 `identity.md`(赛道定位)、`audience.md`(受众)、`platforms.md`(活跃平台)、`style.md`(风格)。没有画像就退回通用模式,并在输出里明说「提供 Profile 可更精准」。
### 1.5 走一遍完整链路
1. 用户打开热点雷达,默认勾微博、抖音、知乎三栏,每栏请求 15 条
2. 后端按平台查缓存,超过 5 分钟才真去拉;主源挂了走备源;都挂了用旧缓存,界面标「该平台暂时取不到」
3. 用户看到一条想做的,点「做内容」或先「收藏」
4. 收藏的进选题库,带来源、状态 pending
5. 点「做内容」,系统自动生成一句带「先判断适不适合我的赛道」的 prompt,开新会话发出去
6. Agent 在对话里跑 trend-rider 或 topic-evaluator,用七维口径打分,给结论
7. 觉得值得做,从选题库点「排期」,落进日历;状态推到 doing 再到 done
---
## 二、与现版 P2 逐项对照:我们缺哪些逻辑
现版 P2(选题雷达)的四块是:对标监控概览、对标内容(带倍数)、评论区洞察、选题库(进度 × 类型)。对照下来,**缺口不在「少几个按钮」,在「两个数字没有算出来的路径」**。
| 维度 | Easel | 现版 P2 | 缺口 |
|---|---|---|---|
| 输入源 | 六平台热搜,一主一备 | 对标账号 + 评论 | 🔴 没有平台热榜这一路 |
| 热度值 | 原始 hot 值 + 排名 | `mult` 写死字符串 | 🔴 没有分母、没有窗口 |
| 分级 | S/A/B/C + 四期生命周期 | `zone` 三个字面值 | 🔴 没有阈值、没有算法 |
| 转化 | 收藏带 source + 生成 prompt | 「转入创作」按钮 | 🔴 不带「先判关联度」 |
| 筛选 | 七维打分,≥70 做 / <50 不做 | 无 | 🔴 没有筛选判据 |
逐条展开:
1. **没有平台热榜这一路输入。** Easel 的雷达是「平台在热什么」,我们的 P2 是「对标号在发什么」。两件事不冲突,但我们的 S1「找选题」缺了最直白的那一半 —— 用户每天刷的就是热榜,现在只能靠人自己去看,再回到 P2 记灵感。
2. **`mult` 倍数没有分母。** 原型里写的是 `'4.8×'`、`'6.4×'` 这些字面量。`2a` F1 的验收要点说「标注了它相对该账号平时水平的倍数」,但「平时水平」是什么 —— 近 7 条的中位数还是近 30 条的平均数?窗口多长?样本不足 3 条时给不给倍数?一处都没写。这个数字现在是**画出来的,不是算出来的**。
3. **`zone` 分类没有判据。** 三个值:低粉爆款、异常值、常态。我在原型和 `2a`/`2b` 里都没找到「凭什么进哪一类」。`2a` F1 的验收要点只说「能指出哪几条是异常值」,没说异常值的门槛。Easel 那边对应的是 S/A/B/C 四档加明确的生命周期定义,我们的三个值没有这一层。
4. **热点进选题库没有「先判断」这一步。** Easel 在「做内容」时自动带上一句「先判断它适不适合我的账号赛道」。我们原型的「转入创作」按钮(`P2-09`)直接跳,`2a` F2 也没写这一步。跳过去之后创作台拿到的是一条选题文本,不带任何判断结果。
5. **选题的溯源字段只有界面有,文档没立口径。** 原型 `TOPICS` 每条带 `src`(如「对标号 · 小食光」「灵感速记」),但 `2a` 的 `Topic` 对象行只写「含它的来源与分类」,没写来源是必填、由谁写、跨页带哪几个字段。Easel 在 `createIdea` 那一刻就把 source 定死了,我们靠人填或者靠默认。
6. **没有缓存、降级与「取不到」的界面表达。** Easel 有 300 秒缓存、主备切换、失败退旧值、`ok` 标志区分两种空。我们 `2a` F1 的治理里写了「退避重试 3 次后转手工录入」,但没写缓存,也没写界面怎么区分「拉不到」和「本来没有」。原型里 `BENCH` 是常量,永远成功,所以这个问题还没暴露。
7. **P2 缺少账号维度参与筛选。** Easel 所有 discover 和 plan 技能都读画像做赛道过滤和相关度标注。我们 P2 的核心对象是 `Benchmark` 和 `Topic`,不掺 `Account`。结果是:对标号 A 的爆款和对标号 B 的爆款混在一张表里,不按「当前在为哪个账号找选题」过一遍。
8. **去重只做在前端内存 —— 这条 Easel 自己也没做对。** 前面说过,`TrendsPage` 的已收藏状态是内存态 `Set`,刷新即失效,后端不去重。我们 `2a` F2 的治理里已经写了「同一条灵感重复提交按内容 hash 去重」,这条我们比它强,保持住,别照抄它。
---
## 三、把样子补成逻辑的落地方案
方案分三层。**下面所有数值都是我给的建议值,等拍板,本棒一个字没改 `2a`/`2b`/原型。**
### 3.1 数据层:给 P2 补一条真实的输入(对应缺口 1、6)
P2 现在没有一个会失败的数据源,所以「失败长什么样」这件事根本没被设计过。补一条热榜进来,顺带把失败面建起来。
- 数据源清单照 Easel 的白名单写法:每个平台一主一备,禁连平台官网。清单本身是一份独立文件,不在代码里散着。
- 缓存按平台走,TTL 5 分钟。拉失败不清缓存,退回旧值并标时间戳。
- 界面必须能区分两种空:「这个平台现在取不到」和「这个平台本来没数据」。判据就是 Easel 那个 `ok` 布尔值。
### 3.2 判据层:把 `mult` 和 `zone` 写成能算的(对应缺口 2、3)
这两个数是现在「只有样子」的根源。我建议的口径:
**`mult` 倍数**
- 基线=该对标号**近 30 条**内容的播放量**中位数**(不用平均数,爆款会把平均数拽歪)
- 倍数=本条播放量 ÷ 基线
- 样本下限:不足 10 条时不给倍数,界面显示「样本不足」,不显示一个假数字
- 窗口:基线每天重算一次,不实时算
**`zone` 分类**
- 异常值:倍数 ≥ 3.0
- 低粉爆款:倍数 ≥ 2.0 且 该号粉丝数 < 1 万
- 常态:其余
三个阈值(30 条、3.0、2.0、1 万)都是我拍的,需要有数据之后回校。但**必须先有阈值,哪怕是错的** —— 有阈值才知道错在哪,没有阈值永远只是三个标签。
### 3.3 转化层:热点进选题库要带判断(对应缺口 4、5、7)
- 「转入创作」发出的不是一条裸标题,而是一句带判断要求的 prompt,学 Easel 那句:先判这个词适不适合当前账号,合适再出角度。
- 选题的 `source` 在**写入那一刻**由系统定死(`2a` F2 补一句「来源必填,由产生它的功能写入,不靠用户填」),跨页只传 ID 加来源。
- P2 的对标列表按「当前在为哪个账号找选题」过一遍。这条要动到 P2 的核心对象(`2b` §五 P2 现在写的是 `Benchmark` + `Topic`),是把 `Account` 加进来做筛选条件,还是只在界面上加个账号切换器 —— 我倾向后者,理由是不动对象字典、改动面小。
### 3.4 建议的落地顺序
先做 3.2(判据层)。它是零数据源就能落地的,把 `mult` 和 `zone` 从字面量改成算出来的,P2 立刻从「样子」变成「一半逻辑」。再做 3.3,因为它只动文本和字段。最后做 3.1,因为它要接外部接口,失败面最大。
---
## 附:取证清单
**取到的 14 份**(落在同目录 `取证/`,`/` 换成 `__`):
`web/app.py`(237 KB,热点与选题两块的后端全在这里)|`web/frontend/src/App.tsx`|`TrendsPage.tsx`|`IdeasPage.tsx`|`lib/api.ts`|`skills/shared/hotlist-apis.md`|`skills/shared/scoring-dimensions.md`|`skill-trending-topics/SKILL.md` + `EASEL-META.md`|`skill-trend-rider/SKILL.md` + `EASEL-META.md`|`skill-topic-evaluator/SKILL.md` + `EASEL-META.md`|`skill-ugc-discovery/SKILL.md`|`skill-content-matrix/SKILL.md`
**取不到 / 没取的**:`skill-community-ops/references/topic-mining.md` 之前那份分析里提到过,本次未单独拉取(与热点雷达主链无关)。Easel 的运行态数据(真实调用成功率、各源可用率)**取不到** —— 本次是纯静态取证,没有运行 Easel,所以「这些源现在还活不活」只能按它文档里标的状态读,不能当我验证过。
**旁证**:`执行会话/目标-调研5个开源内容工作台项目并生成分析文档-5199a6/docs/pm/content-workbench/证据附卷/1b-竞品分析-Easel.md`(2026-10-07 那份七节分析体,热点雷达部分只写到界面级)。
---
## 附:输出检查
- [x] 三条判据逐条有结论(落在同目录 `目标执行状态.md` §二)
- [x] 数据来源写到了具体端点与行号
- [x] 判据写到了具体阈值与换算口径
- [x] 转化步骤从「拉回来」写到「进日历」,七步全在
- [x] 逐项对照列了 8 条缺口,每条标明缺的是哪一层
- [x] 落地方案给了顺序,且明说本棒零改动
- [x] 已过「说人话」五维评分:**47/50**
@@ -0,0 +1,949 @@
# GPT 对「热点与选题板块细节」的建议(逐字留痕)
> 本文件逐字保留外部模型的回复,不做转述、不做压缩。
> 用途:为《热点与选题-功能细节》提供外部判断依据,并作为「已征询 GPT」的留痕。
## 元信息
- 模型:ChatGPT 网页版(账号 meiya1,免费版)。⚠️ 页面未直接暴露模型标识,故此处不写具体版本号,避免当成事实。
- 页面:https://chatgpt.com/ ,对话标题「热点选题产品设计」
- 对话链接:https://chatgpt.com/c/6acb4e4a-a44c-83e8-9d46-90c0738861a4
- 提问时间:2026-10-11
- 提问稿:见同目录 `GPT提问稿.md`(发送前已落盘留痕)
- 抓取方式:本机独立 Chrome(127.0.0.1:9223)+ browser-harness,取主区域文本;表格按 DOM 还原为 Markdown
- 回复字数:15328 字符
---
## 一、发给 GPT 的提问(原文,同 `GPT提问稿.md`)
# GPT 提问稿(热点与选题板块的细节)
> 用途:向外部模型(ChatGPT 网页版)征询「选题板块」的功能细节,用于把产品框图从「只有板块名」补成「照着能做出来」。
> 发送边界:只发产品层内容(板块结构、下列问题、现状描述、要它判断什么)。不含仓库路径、不含开发机制、不含源码、不含团队内部实现细节。
> 留痕:本稿与回复各自落盘,回复逐字保留。
---
## 一、请你判断的背景(产品现状)
我们正在设计一个「AI 内容工作台」,面向**跨平台短视频矩阵运营**:一个运营者管理人设(内容账号),每个内容账号在多个三方平台(微博/抖音/小红书/B站/知乎/头条)上有发布账号,日常工作是「找选题 → 写内容 → 发出去 → 看数据和收入」。
其中「找选题」落在产品的一个页面(选题雷达),这一页现在有 4 块:
1. **对标监控概览** —— 四个数:在监控的账号数/低粉爆款条数/异常值条数/近三天更新条数。
2. **对标内容** —— 列出被监控对标账号的内容,每条标一个「相对该号平时水平的倍数」。
3. **评论区洞察** —— 从一条内容的评论区里,把反复出现的问题挑成候选选题。
4. **选题库** —— 收纳「对选题有帮助的任何信息」,用**进度 × 类型**两个维度分类:
- 进度:待做/在写/已用
- 类型:选题/对标线索/评论洞察/数据异动/灵感(每类自带后续动作)
**当前的短板**:这一页只盯「对标账号在发什么」,**没有「平台热榜」这一路输入**(用户每天刷的微博热搜、抖音热榜、知乎热榜等,产品里没有入口);而且上面那个「倍数」目前是个展示值,没有说清怎么算出来;也没有一套「这条热点值不值得做」的判断口径。
我们已经有一个对标产品(开源项目 Easel)的参考做法:它有一个「热点雷达」,把六个平台的热榜拉回来,每条挂两个按钮(收藏到选题库/做内容);它另有一套**七维评分**(流量潜力、账号匹配、竞争差异化、时效价值、变现潜力、制作成本、合规风险,每维 1-10 分,加权换算成百分制,≥70 做/50-69 改方向/<50 不做)。
---
## 二、请你回答的六个问题
**问题 1 · 热点的数据来源该有哪几路**
一个「热点输入」功能,应该接哪些平台、哪些类型的源?每类源怎么取(官方开放接口/第三方聚合/手工录入)?取不到的时候怎么降级?请给一个「数据来源清单该长什么样」的建议。
**问题 2 · 热点按什么分类**
热点进来之后,按什么维度分类?分几级?每一级谁来维护(系统自动/用户手动)?分类的目的是什么(筛选?派活?展示?)?请说清你建议的分类维度,以及为什么是这几个。
**问题 3 · 热度怎么体现**
「热度」用什么量来表达?原始热度值(各平台不一样)怎么归一化到能互相比较?用什么窗口、什么阈值把热点分成「值得做/可考虑/不建议」?请给出可计算的算法,而不只是「要显示热度」。
**问题 4 · 这些细节在界面上怎么展示**
上面三件事(来源、分类、热度)在界面上怎么摆?列表/卡片/榜单?怎么排序?一屏放多少条信息合适?请描述你建议的界面结构与信息密度。
**问题 5 · 一个「选题板块」要具备哪些细节才算不是空架子**
一个能真正用的「热点 → 选题」板块,除了上面四问,还缺哪些细节?请列全,并说清每一项的作用。
**问题 6 · 评分/判断这一层怎么落进界面**
如果需要给热点或选题打分/做判断,这一层该不该显示给用户?显示分数、显示维度明细、还是只给一个结论(做/不做)?请给出你的判断依据。
---
## 三、回答要求
1. 按问题 1-6 顺序回答,标题用与上面一致的问题名。
2. 每个答案要**具体到能执行**,不要只写「要有数据来源」「要有分类」这类话。
3. 涉及数值(窗口、阈值、条数)时给出你建议的**具体数字**,并说明取值理由。
4. 如果某个问题你有多个方案,请给出你的**首选方案**并说明为什么。
---
## 二、GPT 的回复(逐字)
# AI 内容工作台「选题雷达」产品设计评审
我的核心判断是:你现在缺的不是一个单独的「热点榜单」,而是一套从热点发现、价值判断、选题沉淀到内容生产的决策系统。
如果只是在现有「对标内容」旁边增加六个平台的热榜,产品会多出一批信息,但运营者依然要自己判断:哪个热点适合我的人设、哪个值得抢时间、哪个已经卷烂、哪个能带来涨粉或收入。
我建议把选题雷达设计成一个统一的工作流:
多源发现
平台热榜 · 对标账号 · 评论区 · 自有数据 · 人工灵感
热点识别与价值判断
去重归并 · 热度趋势 · 人设匹配 · 时效 · 成本 · 风险
选题决策
建议做 · 改角度 · 持续观察 · 不建议做
进入内容生产
选人设与发布平台 → 生成内容 Brief → 写作 / 剪辑 → 发布 → 回收效果
先明确三个产品原则:
- 热点和选题不是同一个对象。「某明星宣布结婚」是热点;「从明星官宣分析品牌联名传播」才是选题。一个热点可以生成多个选题,一个选题也可以关联多个热点。
- 热度和价值不是同一个分数。 热度高,不代表适合你的账号;热度一般,也可能是非常好的垂直选题。
- 信息采集与决策必须分层。 采集层解决「发生了什么」,决策层解决「要不要做」,工作流层解决「谁来做、怎么做、结果如何」。
以下按照六个问题逐项给出可实施的方案。涉及平台接口的部分,我会区分产品设计建议与实际接入能力,避免把理论上可采集误认为平台已经开放了稳定的接口。
## 问题 1 · 热点的数据来源该有哪几路
### 1.1 首选:五路输入,而不是只接六个平台热榜
我建议把数据来源分成五类。六个平台是其中的外部热点源,不应把所有输入都做成六个平级入口。
| 来源类型 | 具体数据 | 主要作用 | 优先级 |
| --- | --- | --- | --- |
| 平台热榜 | 微博热搜、抖音热点词、抖音热门视频、知乎热榜、头条热榜、小红书趋势 | 发现平台正在讨论什么 | P0 |
| 对标账号 | 对标账号新发布的内容、异常高表现内容、账号更新频率 | 发现同赛道正在验证的内容 | P0 |
| 评论与搜索需求 | 高频评论问题、搜索联想词、知乎问题、用户反复追问 | 发现真实需求与内容缺口 | P0 |
| 自有账号数据 | 自己发布内容的播放、互动、涨粉、转化、收入 | 发现已验证的选题模式 | P1 |
| 人工输入与外部信号 | 运营手动录入、行业新闻、节日节点、客户需求、内部灵感 | 补充机器采集不到的信息 | P1 |
为什么这样分? 因为热点有三种本质不同的信号:
- 注意力信号:大家现在关注什么。
- 需求信号:大家真正想知道什么。
- 验证信号:什么内容已经被证明能为特定账号带来结果。
平台热榜主要解决第一种;评论、搜索和对标内容解决第二种;自有账号数据解决第三种。把三者融合,才有机会形成差异化。
### 1.2 六个平台具体怎么接
以下是首选接入策略。它是产品实施优先级,不代表所有平台都允许任意应用直接读取全部热榜。
| 平台 | 优先获取的数据 | 首选方式 | 取不到时的降级 |
| --- | --- | --- | --- |
| 微博 | 热搜词、榜单排名、热度或趋势数据、原文链接 | 先核实开放平台可申请的搜索和热词能力;补充经授权的数据服务 | 手动粘贴热搜词、链接;保留原始榜单截图 |
| 抖音 | 实时热点词、上升词、热门视频及关联视频 | 官方开放平台 API,申请对应权限 | 经许可的第三方数据服务;手动录入 |
| 小红书 | 热搜词、趋势关键词、相关笔记、笔记互动信息 | 先核实官方开放平台具体授权范围;必要时对接合规数据服务 | 手动输入关键词或笔记链接;记录采集时间 |
| B站 | 热门视频榜、分区榜、视频信息及互动数据 | 官方可用接口与授权数据能力;核实具体榜单权限 | 手动添加热门视频链接;定时导入榜单 |
| 知乎 | 热榜问题、问题标题、热度及回答情况 | 官方知乎数据开放平台的热榜 API 或 Skill | 手动录入问题链接;从已获授权的搜索结果中发现线索 |
| 今日头条 | 热榜新闻、热点关键词、原文链接 | 核实官方可用的数据授权;优先使用有明确授权的数据服务 | 手动导入热点列表;使用合法可用的公开信息源补充 |
这里有几个已经可以确认的接入依据:
- 抖音开放平台提供实时热点词和上升词接口,相关能力需要申请 hotsearch 权限;文档注明热点榜约每两个小时刷新一次。 抖音开放平台 +1
- 抖音另有热门视频榜接口,但它属于离线统计数据,统计最近 24 小时,数据通常每天上午产出,因此不能把它当成实时热搜。 抖音开放平台
- 知乎官方数据开放平台目前列有热榜 API、搜索 API 和相应 Skill,可作为优先验证的接入路径。 developer.zhihu.com
- 小红书开放平台的公开 API 文档包含账号授权等能力,但这不等于已经确认存在可直接获取完整站内热榜的公开接口。热榜权限需要单独核实。 小红书开放平台
微博和头条同样需要逐项核实目标数据的开放权限、调用额度、商业使用许可和稳定性。不要因为浏览器能打开一个榜单,就默认产品可以长期、稳定、合规地自动抓取。
### 1.3 数据接入应采用三级降级策略
L1:官方 API / 正式授权接口
自动拉取、定时更新、保留原始字段。可用时优先使用。
L2:经过许可的第三方聚合服务
用于补充官方没有提供的榜单,但必须验证数据授权、覆盖率、刷新频率、成本与服务稳定性。
L3:人工录入 / 链接导入
允许运营粘贴标题、链接或导入 CSV。无法确认的数据不填假热度,标记为「暂无数据」。
再加一条关键规则:来源故障不应该导致选题库不可用。 即使某个平台断流,已经收藏的热点、已有选题和生产任务都必须正常工作。
### 1.4 「数据来源清单」应该长什么样
不要把来源只设计成一排平台图标。应当有一个可以配置、监控和排障的「数据源管理」页面。
建议的数据源配置表:
| 字段 | 示例 | 用途 |
| --- | --- | --- |
| 来源名称 | 抖音实时热点词 | 识别数据源 |
| 平台 | 抖音 | 按平台筛选 |
| 源类型 | 平台热榜 | 区分榜单、搜索、对标等 |
| 接入方式 | 官方 API | 评估稳定性与合规性 |
| 权限状态 | 已授权 / 待申请 / 已失效 | 明确可用条件 |
| 更新频率 | 每 2 小时 | 管理新鲜度 |
| 最近成功时间 | 16:00 | 排查断流 |
| 最近失败时间 / 原因 | 15:00 / 权限过期 | 诊断异常 |
| 数据覆盖率 | 最近 24 小时成功率 | 判断可靠性 |
| 数据字段 | 标题、排名、热度、链接 | 检查是否满足算法需求 |
| 使用限制 | 商业展示、留存期限等 | 约束数据使用 |
| 成本 / 配额 | 每日调用量、费用 | 控制运营成本 |
其中,「数据覆盖率」要明确计算口径。例如:
成功率=成功采集次数计划采集次数×100%\text{成功率}=\frac{\text{成功采集次数}}{\text{计划采集次数}}\times100\%成功率=计划采集次数成功采集次数​×100%
首版可采用以下告警标准:
- 成功率不低于 95%:正常。
- 80%–95%:警告。
- 低于 80%:异常,显示最近成功时间并暂停将其作为实时信号。
- 超过 2 个预期更新周期没有新数据:标记「数据可能已过期」。
注意:这里的 95% 等是产品建议的监控阈值,不是平台服务承诺。
### 1.5 首版接入顺序
我会这样安排:
- 先接入权限明确、能稳定返回结构化数据的来源,例如知乎热榜和抖音热点词。
- 同时上线对标账号和评论洞察,复用已有能力。
- 微博、小红书、B站和头条逐个完成权限验证后接入,不等待六个平台全部完成才上线。
- 人工录入、链接导入和统一去重必须首版具备。
首版的成功标准不是「六个平台图标全部亮起」,而是每天能稳定发现、筛选并沉淀一批真实可用的候选选题。
## 问题 2 · 热点按什么分类
### 2.1 不要用一个分类字段解决所有问题
我建议采用 四层分类结构,把「内容是什么」「来自哪里」「适合谁做」「现在做到哪一步」分开管理。
| 层级 | 维度 | 示例 | 谁维护 | 目的 |
| --- | --- | --- | --- | --- |
| L1 | 内容领域 | 科技、商业、职场、教育、娱乐、生活、财经 | 系统 AI 初判,用户可改 | 过滤不相关热点 |
| L2 | 事件类型 | 突发事件、产品发布、政策变化、人物事件、争议话题、节日节点 | 系统 AI 初判,用户可改 | 选择内容切入方式 |
| L3 | 账号适配 | 适合哪些人设、内容账号和发布平台 | 系统推荐,用户确认 | 派发给正确的运营对象 |
| L4 | 工作状态 | 待判断、观察中、待制作、制作中、已发布、已放弃 | 系统与用户共同维护 | 推进生产、避免重复劳动 |
这四层不能混在一起。
例如,「某 AI 模型发布」属于科技领域、产品发布事件,可以同时适配「AI 工具测评」和「职场效率」两个人设,最终分别生成两条角度不同的选题。
### 2.2 分类的维护规则
建议使用以下规则,减少 AI 乱打标签和人工维护负担。
- 领域:系统最多推荐 3 个标签,必须有 1 个主领域;置信度低于 0.7 时标记「待确认」。
- 事件类型:每个热点只设 1 个主类型,最多 2 个辅助标签。
- 账号适配:系统根据账号定位、历史表现、受众和变现目标推荐最多 3 个适配人设;用户可增删。
- 工作状态:由工作流事件自动更新。例如从选题卡点击「开始制作」,状态变为「待制作」或直接创建生产任务;不能靠 AI 根据文字猜测状态。
- 用户自定义标签:允许用户添加品牌、产品、地域、人物、活动等标签,但不让自定义标签取代系统基础分类。
不建议首版设计三级以上的固定行业树。行业树太深,维护成本高;AI 自动分类稍有偏差,用户就要花大量时间纠错。
### 2.3 还要有两个辅助维度
除了四层分类,还要有两个筛选维度,但不把它们混进分类树:
- 来源平台:微博、抖音、小红书、B站、知乎、头条、对标账号、评论区、人工输入。
- 热点生命周期:刚出现、快速上升、稳定发酵、开始衰退、已过期。
来源平台用于定位信息入口;生命周期用于判断是否还有创作窗口。
### 2.4 界面上怎么用这些分类
首屏不建议展开一棵庞大的分类树,而是用三个快速筛选区:
- 领域:全部 / 科技 / 商业 / 职场 / 生活 / 娱乐 / 其他。
- 适配人设:全部人设 / 当前人设 / 多账号可复用。
- 阶段:刚出现 / 上升中 / 持续发酵 / 待制作。
更多事件类型、来源平台和工作状态放进「筛选」抽屉。
对于矩阵运营,最有价值的并不是让用户看到所有热点,而是默认优先展示「与当前人设相关、仍处于有效窗口、且还没有被团队处理」的热点。
## 问题 3 · 热度怎么体现
这是我认为整个方案中最需要认真设计的一层。
不要把平台原始热度值直接放在同一条榜单里比较,也不要把「热度」与「值得做」合并成一个数字。
抖音热度值、微博热搜排名、知乎热榜热度、B站播放量的含义不同。直接比较会产生错误结论。
### 3.1 建立三种分数
热度指数:0–100
这个话题在自己的平台上有多热,当前处于上升还是下降阶段。
选题价值分:0–100
它是否适合当前人设,能否形成差异化内容,制作成本与风险是否可接受。
时效状态
现在做是否来得及:立即行动、可排期、持续观察、已过期。
热度指数解决「值不值得关注」,选题价值分解决「值不值得做」,时效状态解决「现在做还是晚点做」。
### 3.2 原始热度如何归一化
先统一数据结构。每次采集都保留:
- 平台、榜单类型、关键词或事件 ID。
- 原始热度值、原始排名、原始榜单总数。
- 采集时间、榜单更新时间。
- 过去采集快照、来源可信度。
不同平台采用不同归一化方法。
情况 A:平台提供连续热度值。
例如某平台给出热度值
𝑥
x。先对同一平台、同一榜单类型、相同时间窗口的热度做对数变换,再映射到 0–100 的百分位:
H=100×PercentileRank⁡(ln⁡(1+x))H=100\times\operatorname{PercentileRank}(\ln(1+x))H=100×PercentileRank(ln(1+x))
这里的百分位是该平台同一榜单内的相对位置,而不是全平台统一绝对热度。建议使用最近 30 天的历史样本计算分布,并用最近 7 天的样本做校准;样本不足时使用当前榜单横截面。
情况 B:平台只有排名。
例如某平台返回第 3 名,总榜有 50 条:
H=100×(1−r−1N−1)H=100\times\left(1-\frac{r-1}{N-1}\right)H=100×(1−N−1r−1​)
其中
𝑟
r 为排名,
𝑁
N 为榜单条数。
此时第 1 名为 100 分,第 50 名为 0 分。这个分数表达榜内位置,不表示绝对流量。
情况 C:平台没有热度值和排名。
使用可观测指标,例如单位时间新增互动、播放增长、评论增长、搜索结果变化等。但只有在数据定义一致、采样稳定时才进行计算;否则标记为「热度未知」,不能为了显示一个数字而伪造可比性。
### 3.3 增加趋势:当前热度不够
单看当前榜位,容易错过刚刚上升的热点,也会误把已经衰退的老热点当成机会。
我建议采用 30 分钟为基础观察窗口,记录每次采集的热度指数
𝐻
𝑡
H
t
​
。
T30=Ht−Ht−30mT_{30}=H_t-H_{t-30m}T30​=Ht​−Ht−30m​
- 𝑇 30 > 0 T 30 ​ >0:热度上升。
- 𝑇 30 ≈ 0 T 30 ​ ≈0:相对稳定。
- 𝑇 30 < 0 T 30 ​ <0:热度下降。
为了避免单次波动造成误判,使用最近 3 个采样点的中位数或平滑后的值。对于每 2 小时才更新一次的来源,不要伪装成每 30 分钟都获取到了新的平台热度,应显示「趋势数据不足」或用实际可用快照计算。
另外,建议保留两个观察窗口:
- 30 分钟:捕捉快速上升的热点。
- 24 小时:识别持续发酵的话题,避免只追瞬时波动。
对榜单更新较慢的平台,刷新频率由实际数据源决定。
### 3.4 怎么把热点划分为三档
首版先采用可解释的规则,而不是训练复杂预测模型。
| 档位 | 初始规则 | 产品动作 |
| --- | --- | --- |
| 值得关注 | 热度指数 ≥ 70,或最近 30 分钟上升 ≥ 15 分,且来源新鲜 | 优先评估选题价值 |
| 可考虑 | 热度指数 40–69,或热度较高但趋势数据不足 | 结合人设、差异化与时效判断 |
| 不建议追热点 | 热度指数低于 40、持续下降且无长期价值,或已过期 | 默认降级展示,不进入优先队列 |
以上是首版建议阈值,后续应根据真实数据校准。不能将「不建议追热点」等同于「这个话题没有内容价值」:有些长尾知识问题本来就不需要热榜高分。
我建议再加入一条硬规则:数据过期的热点不得显示为「值得关注」,即使上次采集的热度很高。 默认过期阈值可先设为超过 2 个预期更新周期,或者超过 6 小时没有新快照;新闻类突发热点可设置更严格的时效。
### 3.5 如何计算「热点值得做」的最终价值分
借鉴你提到的 Easel 七维评分,但需要改成适配矩阵运营的口径。
| 维度 | 权重 | 评估内容 |
| --- | --- | --- |
| 账号匹配度 | 25% | 是否符合人设定位、受众和内容承诺 |
| 需求与流量潜力 | 20% | 热度、增长趋势、用户问题强度 |
| 差异化空间 | 15% | 是否有新的观点、角度或信息增量 |
| 时效价值 | 15% | 现在制作是否还赶得上有效窗口 |
| 变现或增长价值 | 10% | 是否有助于涨粉、转化或收入 |
| 制作可行性 | 10% | 是否能在所需时间内完成,成本是否合理 |
| 合规与声誉风险 | 5% | 是否涉及版权、隐私、未证实信息或高风险表达 |
各维度先按 1–10 分评分,最后加权转换为百分制:
V=10∑i=17wisiV=10\sum_{i=1}^{7}w_i s_iV=10i=1∑7​wi​si​
其中
𝑤
𝑖
w
i
​
是权重的小数形式,权重之和为 1,
𝑠
𝑖
s
i
​
为各维度 1–10 分。
评分越高越好,因此合规与声誉风险这一维必须反向评分:风险越低,分数越高。对于明确不允许发布的内容,不能通过其他维度的高分抵消,应直接触发风险拦截。
首版建议的决策阈值:
- 70–100 分:建议做,且没有硬性风险拦截。
- 50–69 分:建议改角度或补充信息。
- 低于 50 分:不建议投入制作资源。
还应加入数据完整性要求:七个维度至少六个有可靠依据才允许生成正式价值分;账号匹配度、时效价值、风险三个关键维度必须有评分。否则显示「待评估」,不能把缺失数据默认为中等分。
### 3.6 让「相对平时水平的倍数」变得可解释
你现有对标内容上的「倍数」,应与热榜热度指数彻底分开。
如果比较的是某条对标视频的播放量,可以定义:
M=该内容当前播放量该账号同类型内容的基准播放量M=\frac{\text{该内容当前播放量}}
{\text{该账号同类型内容的基准播放量}}M=该账号同类型内容的基准播放量该内容当前播放量​
基准值建议使用该账号最近 30 天内、同内容类型的有效样本中位数,至少需要 10 条有效样本。样本不足时显示「样本不足」,不要强行给出倍数。
如果播放量拿不到,也可以用互动率或评论数作为独立指标,但必须注明比较口径,不能将不同指标混成一个「爆款倍数」。
例如:
- 播放量为基准的 2.4 倍:显示「播放表现 2.4×」。
- 互动率为基准的 1.6 倍:显示「互动表现 1.6×」。
- 样本不足:显示「暂无可靠基准」。
这样用户才知道这个倍数究竟代表什么。
## 问题 4 · 这些细节在界面上怎么展示
### 4.1 首选布局:工作台,而不是六个平台的榜单拼盘
建议保留现有「选题雷达」页面,增加「热点发现」作为首屏主视图,把对标内容、评论区洞察保留为其他输入视图。
整体结构如下:
## 选题雷达
发现热点,判断价值,推进选题
数据正常 5/6
今日热点
# 128
值得关注
# 18
待评估
# 32
热点发现
对标内容
评论洞察
选题库
热点发现
按综合优先级
全部平台全部领域当前人设近 24 小时
## 86
热度
示例:AI 工具发布新功能
抖音 · 科技 · 12 分钟前更新
快速上升匹配当前人设
建议角度:普通用户如何用它完成一项具体任务。
价值分 82 · 评估置信度高
加入选题库
生成选题
## 71
热度
示例:职场人讨论远程办公
知乎 · 职场 · 1 小时前更新
持续发酵长尾价值
建议角度:远程办公效率问题的实际解决方案。
价值分 74 · 评估置信度中
以上为结构示意,数字和事件均为虚构示例,不代表实时平台数据。
这张结构示意有几个重点:
- 顶部数字用于判断整体工作量,不是用来替代热点列表。
- 主区域以热点列表为核心,优先显示可行动的信息。
- 每条热点同时显示热度、趋势、适配程度和下一步操作。
- 不把七维评分全部铺在列表中,详细依据放在详情抽屉。
### 4.2 列表、卡片还是榜单?
我的首选是桌面端表格化列表 + 右侧详情抽屉。
原因是运营者需要高频比较、批量处理、筛选和派发,不只是阅读内容。
| 组件 | 推荐形式 | 设计理由 |
| --- | --- | --- |
| 顶部概览 | 3–4 个统计指标 | 了解热点池规模、待处理量和数据状态 |
| 平台入口 | 横向 Tab 或多选筛选器 | 快速切换来源,而非拆成六个孤立页面 |
| 热点列表 | 表格化列表 | 方便排序、批量收藏、批量忽略 |
| 热点详情 | 右侧抽屉 | 不离开列表就能查看证据、评分、相关内容 |
| 选题候选 | 独立选题卡片 | 强调创作角度、目标人设和生产动作 |
| 选题库 | 列表 + 可切换看板 | 支持检索、状态管理和批量操作 |
纯卡片瀑布流更适合视觉灵感和图片视频素材浏览;纯榜单适合看名次,却不适合跨平台决策。可以允许用户切换视图,但默认视图应服务于运营效率。
### 4.3 每条热点到底显示什么?
首屏建议控制在 7 个信息组,不要把所有原始数据一次性展示。
① 热点主体
标题、事件摘要、关键词、原始内容链接。
② 来源与新鲜度
平台、榜单类型、排名、最后采集时间。
③ 热度与趋势
热度指数、上升/稳定/下降、趋势观察窗口。
④ 分类与适配
领域、事件类型、推荐人设。
⑤ 决策结果
建议做、改角度、观察、不建议做;可显示价值分。
⑥ 推荐切入角度
一句话说明为什么适合该人设,以及建议从什么角度做。
⑦ 下一步操作
加入选题库、生成选题、观察、忽略。
这里有一个很重要的交互细节:「收藏热点」和「生成选题」必须是两个不同的动作。
- 收藏热点:保留原始事件,稍后再评估。
- 生成选题:创建一条有明确创作角度、目标人设和内容形式的选题记录。
- 直接制作:创建选题并进入内容生产流程,但仍允许用户确认后执行。
如果只有「收藏」和「做内容」两个按钮,用户很难表达「有价值,但我还没有想好怎么做」。
### 4.4 一屏放多少条合适?
桌面端建议:
- 首屏 8–12 条完整热点记录。
- 单条行高约 88–120 px,按是否展示摘要和建议角度调整。
- 默认每页 20 条,提供 20 / 50 / 100 条分页选择。
- 左侧筛选区域约占 200–240 px;中间列表约占可用宽度的 60%–70%;详情抽屉宽约 400–480 px。
- 列表默认不展示全部七维评分,只展示热度、趋势、建议和关键风险。
- 选中热点后,在右侧查看详细评分依据、原始链接和相关内容。
这里的尺寸是桌面端初始设计建议,应通过实际原型测试调整。不要为了追求一屏展示更多而把每条记录压缩成只有标题和一个分数。
### 4.5 默认排序应该怎么做?
我不建议默认按平台榜单排名,也不建议简单地按热度从高到低。
首选排序是行动优先级:
- 有效、可信、正在快速上升,且适配当前人设的热点。
- 热度高、价值分高,但趋势较稳定的热点。
- 热度中等、需求明确、具有差异化空间的长尾选题。
- 观察中、数据不足或与当前人设关联较弱的热点。
- 已过期、已忽略、已生成选题的热点。
列表内再按时效紧迫度、价值分和更新时间排序。
同时保留「按热度」「按上升速度」「按最新」「按价值分」四种排序,满足不同工作习惯。
## 问题 5 · 一个「选题板块」要具备哪些细节才算不是空架子
我会把这一问题拆成 8 个能力模块。前四个解决发现和判断,后四个解决真正的工作流闭环。
### 5.1 必须具备的八个模块
| 模块 | 必须具备的细节 | 解决什么问题 |
| --- | --- | --- |
| 1. 数据采集 | 来源管理、更新频率、失败重试、采集时间、原始链接、数据质量状态 | 保证热点不是过期数据或虚假数据 |
| 2. 事件去重 | 标题相似度、关键词匹配、事件归并、跨平台关联 | 避免同一热点重复占据列表 |
| 3. 热度与趋势 | 当前热度、排名变化、历史快照、趋势图、过期判定 | 判断现在是不是合适的创作窗口 |
| 4. 价值判断 | 人设匹配、差异化、时效、成本、变现、风险及证据 | 帮用户决定做不做 |
| 5. 选题生成 | 多角度建议、标题草案、核心观点、目标受众、内容形式 | 将热点转成真正可生产的选题 |
| 6. 选题库管理 | 收藏、状态、负责人、截止时间、标签、关联热点、去重、搜索 | 避免选题只收藏不处理 |
| 7. 内容生产衔接 | 目标人设、发布平台、内容 Brief、写作/脚本/素材入口 | 将选题推进到制作 |
| 8. 效果回收 | 发布记录、播放互动、涨粉、转化、收入、复盘与评分校准 | 验证哪些判断真的有效 |
### 5.2 选题与热点必须分成两种数据对象
这是我最建议你在数据模型阶段就确定的事情。
热点事件 Hotspot
原始标题、事件描述、来源平台、原始链接、热度快照、生命周期、事件 ID。
例:某 AI 产品发布新功能。
选题 Topic
创作角度、目标人设、目标受众、内容形式、核心观点、差异化、价值分、生产状态。
例:用这个功能完成一个真实工作任务,并与旧方法比较。
关系建议采用多对多:
- 一个热点可以生成多个选题。
- 一个选题可以关联多个热点、评论洞察或对标内容。
- 一个选题可以指定一个主要人设,同时关联多个目标发布平台。
- 同一个选题可以派发给不同内容账号,但需要明确它们是同一内容的跨平台适配,还是不同角度的独立内容。
这个模型可以避免「收藏了一个热点就算选题」的问题。
### 5.3 选题生成必须有结构化 Brief
不要只让 AI 输出十个标题。标题只是创作的入口,不是一个可执行的生产任务。
建议每次生成选题时,至少输出以下字段:
| 字段 | 示例 |
| --- | --- |
| 选题名称 | 这个 AI 功能能否节省日常工作时间? |
| 目标人设 | AI 工具测评 |
| 目标受众 | 想提高办公效率的职场人 |
| 核心问题 | 该功能解决什么实际问题? |
| 切入角度 | 用真实任务验证,而不是复述发布新闻 |
| 核心观点 | 能节省某些步骤,但仍需人工核对结果 |
| 内容形式 | 短视频 / 图文 / 深度回答 |
| 开头钩子 | 一个具体的工作痛点或实验结果 |
| 结构提纲 | 痛点 → 演示 → 结果 → 局限 → 结论 |
| 证据与素材 | 官方说明、可验证的演示、原始热点链接 |
| 制作成本 | 预计耗时、素材准备、是否需要出镜 |
| 风险提示 | 功能是否真实可用、是否有未经证实的效果宣称 |
| 成功指标 | 完播率、收藏率、涨粉、点击或转化 |
其中,AI 可以先填充全部字段,但必须标出待核实信息。没有证据的内容不能伪装成事实。
### 5.4 选题库的「进度 × 类型」怎么升级
你现有的「待做 / 在写 / 已用」与五种类型是个不错的起点,但对完整工作流而言,状态过于粗糙。
建议进度改为:
| 状态 | 进入条件 | 下一步动作 |
| --- | --- | --- |
| 待评估 | 刚收集,尚未决定是否制作 | 评估价值 |
| 待制作 | 已确认选题,有基本 Brief | 分配负责人、确认平台 |
| 制作中 | 已创建写作或制作任务 | 继续写作、剪辑 |
| 待发布 | 内容已完成,等待检查或排期 | 审核、发布 |
| 已发布 | 已有实际发布记录 | 绑定数据并复盘 |
| 已归档 | 放弃、过期或完成复盘 | 查看历史、恢复使用 |
原来的「类型」保留为独立标签:
- 选题
- 对标线索
- 评论洞察
- 数据异动
- 灵感
热点事件可以作为第六类输入记录,也可以直接保留在独立的热点池中;我更倾向于后者,因为热点有独立的热度和生命周期,不宜与普通灵感使用完全相同的管理方式。
另外,建议增加三个字段:
- 负责人:谁负责推进。
- 截止时间:什么时候必须完成。
- 目标人设与发布平台:谁来做、发到哪里。
这三个字段比增加更多分类标签更能提升实际运营效率。
### 5.5 必须设计事件去重与关联
例如,同一个事件同时出现在微博、抖音和知乎。
产品不应该默认展示三条互不相关的记录,而应该形成一个「热点事件」:
- 热点事件标题:AI 产品发布新功能。
- 来源:微博、抖音、知乎。
- 跨平台表现:各平台分别显示排名、热度、趋势。
- 关联内容:对标视频、相关评论、知乎问题。
- 推荐选题:教程、体验评测、行业分析。
但要注意:去重不等于合并所有数据。 各个平台的热度必须保留独立记录,不能把微博热度和抖音热度直接相加。
建议先用标题相似度、关键词和时间窗口做候选归并,再由 AI 判断是否同一事件。对于低置信度的归并,让用户确认。
### 5.6 让热点与账号定位真正关联
矩阵运营最大的优势是同一事件可以被多个账号从不同角度利用。
例如,同一个科技热点可以生成:
- AI 工具测评人设:实测功能、优缺点。
- 职场效率人设:能否解决具体工作问题。
- 商业观察人设:产品策略和市场竞争。
- 新手教程人设:一步一步教用户使用。
因此,热点详情页必须有一个「适配人设」区域,至少显示:
- 推荐人设。
- 推荐理由。
- 建议内容角度。
- 建议发布平台。
- 预计制作成本。
- 是否与已有选题重复。
不能只根据关键词匹配人设。例如「AI」并不意味着所有 AI 相关热点都适合每一个科技账号。
### 5.7 建立发布后的反馈闭环
这是容易被忽略,但长期最有价值的模块。
每条已发布内容应当关联回原始选题和热点,并记录:
- 发布平台、发布时间、内容链接。
- 发布后 2 小时、24 小时、7 天的可用表现数据。
- 播放量、互动率、收藏率、涨粉、转化和收入。
- 与该账号同类型内容的历史基准比较。
- 实际结果与预估结果的偏差。
并不是所有平台都能提供全部指标,系统应根据实际授权情况记录可用字段。
有了这些数据,产品才能逐渐回答:哪些热点值得做、哪些人设适合做、哪些切入角度有效,以及哪些热点虽然很热却不值得投入制作资源。
### 5.8 需要补齐的运营保障
最后还有四项容易被低估的基础能力:
- 操作审计:记录谁收藏、修改评分、放弃选题、发布内容。
- 权限控制:区分团队、工作空间、内容账号的查看和编辑权限。
- 异常提醒:来源断流、热点即将过期、任务逾期、内容重复。
- 数据可追溯:每个热度、评分、推荐理由都能回到原始证据。
尤其是 AI 自动推荐的理由,不能只保存一句生成文本。最好同时保存使用了哪些信号、对应哪些原始数据,以及评分模型的版本,方便之后解释和复盘。
## 问题 6 · 评分/判断这一层怎么落进界面
我的判断是:要显示评分,但不要让分数成为用户做决策的唯一依据。采用「结论优先、分数辅助、维度可展开、证据可追溯」的四层设计。
这比只显示「做 / 不做」更可信,也比默认展开七维雷达图更适合高频运营工作。
### 6.1 为什么不应该只显示结论?
假设系统给出两条建议:
- 热点 A:建议做,价值分 82。
- 热点 B:建议做,价值分 82。
如果只显示结论或分数,用户不知道这两个判断有什么区别。
A 可能是因为账号匹配度高、热点正在上升;B 可能是因为变现潜力高,但时效性一般。运营者采取的行动应该不同。
所以,我建议在列表中显示结论与分数,在详情中显示维度明细和证据。
### 6.2 四层展示结构
第一层 · 列表默认展示
AI 工具发布新功能
建议做
# 82
/100
选题价值
推荐角度:真实任务实测
理由:人设匹配高、热度上升、制作成本可控
第二层 · 详情页评分明细
账号匹配度
9/10
需求与流量潜力
8/10
差异化空间
7/10
时效价值
9/10
变现或增长价值
7/10
制作可行性
8/10
合规与声誉风险
8/10
示例评分,仅用于展示交互结构。
第三层 · 判断依据
为什么推荐?
适配当前人设
历史上,工具实测类内容与该人设定位一致。
仍有创作窗口
最近观测到热度上升;需根据实际采集时间判断。
需要验证
发布前核实功能是否已开放,以及演示结果是否可复现。
第四层 · 用户决策
系统给出建议,但最终决定权属于运营者。
接受建议
调整方向
稍后观察
不做并记录原因
### 6.3 哪些信息应该显示,哪些不应该?
| 信息 | 列表 | 详情 | 设计判断 |
| --- | --- | --- | --- |
| 做 / 改方向 / 观察 / 不建议做 | 必须 | 必须 | 用户首先需要行动结论 |
| 选题价值分 | 建议显示 | 必须 | 便于快速比较 |
| 热度指数及趋势 | 必须 | 必须 | 与价值分分开显示 |
| 七维评分明细 | 不默认显示 | 必须 | 详情按需展开 |
| 每个维度的理由 | 显示 1–2 条关键理由 | 必须 | 避免黑盒决策 |
| 原始数据与来源 | 显示来源和更新时间 | 必须 | 方便核实事实 |
| 评分置信度 | 显示高 / 中 / 低 | 显示依据 | 防止把估计当成事实 |
| 人工修改评分 | 不显示编辑控件 | 允许调整 | 保留人工判断 |
| 历史评分变化 | 不显示 | 可查看 | 用于复盘与模型迭代 |
我不建议首屏默认展示雷达图。七维雷达图可以作为详情页中的辅助可视化,但它不如明确的结论、评分理由和风险提示直接。
### 6.4 必须把「置信度」和「价值分」分开
这两个概念很容易混淆。
- 价值分 85、置信度低:系统认为值得做,但缺少足够证据,用户应先核实。
- 价值分 65、置信度高:系统有充分证据判断它的价值一般,用户可以考虑改角度。
- 价值分 90、存在高风险:不应该因为分数高就自动进入生产。
置信度可以根据数据完整性、来源可靠性、历史样本量和评分依据的充分程度综合确定。首版可以使用高 / 中 / 低三级,并在详情中说明原因。
不建议把置信度简单等同于 AI 自己声称的「我有多确定」。它应当由可检查的数据条件决定。
### 6.5 评分系统需要允许用户纠正
产品上线后,用户会不断发现系统判断与实际运营经验不一致的地方。因此需要支持:
- 修改单个维度的分数。
- 覆盖系统建议,例如「不做」「改方向」「先观察」。
- 记录修改原因。
- 将人工决定与最终发布效果关联。
- 查看系统推荐和人工决策的历史差异。
不过,人工修改后的分数应标记为「人工调整」,不要悄悄覆盖原始 AI 评分。否则后续无法分析模型究竟哪里判断不准。
建议先以规则加 AI 辅助评分的方式上线,积累足够的真实发布结果后,再逐步校准权重,而不是一开始就把七维分数当成经过验证的预测模型。
## 最终建议:先做什么,后做什么
如果我是这个产品的负责人,我会按照以下顺序安排开发,而不是六个平台、七维评分、选题库和内容生成同时开工。
## P0
第一阶段:先建立热点到选题的闭环
建议优先完成,作为首版的核心范围。
- 接入至少 2 个可稳定获取的热点来源,并保留人工导入。
- 建立统一热点数据模型、来源状态和跨平台去重。
- 展示热度、趋势、更新时间与数据质量。
- 实现选题价值评分、推荐理由和风险拦截。
- 支持「收藏热点 → 生成选题 → 创建生产任务」。
- 选题库具备状态、负责人、截止时间和关联来源。
## P1
第二阶段:让矩阵运营产生优势
- 按人设推荐不同创作角度。
- 将热点与对标内容、评论洞察和自有账号数据关联。
- 支持多平台内容适配和批量选题。
- 建立发布效果回收及人工反馈机制。
## P2
第三阶段:持续优化判断能力
- 根据真实表现校准评分权重。
- 预测热点衰退时间和制作窗口。
- 推荐更有差异化的创作角度。
- 根据账号历史结果形成个性化选题排序。
### 最后,我认为有三个产品决策尤其重要
第一,选题雷达的主视图应该是「可行动的热点」,而不是原始榜单。 榜单只是原材料,产品真正要交付的是经过筛选、有依据、能进入生产的候选选题。
第二,热度、选题价值、时效与置信度必须独立表达。 它们回答不同问题,不要为了界面简洁而压缩成一个无法解释的总分。
第三,矩阵运营的核心差异化应该是「同一个热点,能否针对不同人设产生不同的高价值选题」。 如果只是把六个平台的榜单聚合到一起,很容易被其他工具替代;如果能结合账号定位、历史表现、用户需求、制作成本和发布反馈形成决策闭环,才真正构成 AI 内容工作台的核心价值。
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,304 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>产品框图 · 热点与选题(全球版)</title>
<link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Geist:wght@400;500;600&family=Geist+Mono:wght@400;500;600&family=Noto+Serif:ital@0;1&family=Noto+Sans+SC:wght@400;500;600&display=swap" rel="stylesheet">
<style>
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{--paper:#f5f5f5;--ink:#2d3142;--muted:#4f5d75;--accent:#eb6c36;
--sans:'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif;--serif:'Instrument Serif','Noto Serif','Noto Serif SC',serif;--mono:'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace;}
body{font-family:var(--sans);background:var(--paper);color:var(--ink);padding:2.5rem 2rem 3rem}
.frame{max-width:1420px;margin:0 auto}
.eyebrow{font-family:var(--mono);font-size:.7rem;font-weight:500;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);margin-bottom:.45rem}
h1{font-family:var(--serif);font-size:clamp(1.5rem,2.2vw + .7rem,2rem);font-weight:400;letter-spacing:-.01em;line-height:1.2;margin-bottom:.5rem}
.sub{font-size:.85rem;color:var(--muted);margin-bottom:1.6rem;max-width:76ch;line-height:1.6}
svg{width:100%;min-width:1180px;display:block}
.cards{display:grid;grid-template-columns:1.15fr 1fr .95fr;gap:16px;margin-top:2rem}
.card{background:#fff;border:1px solid rgba(45,49,66,0.12);border-radius:6px;padding:1.15rem 1.25rem}
.card .k{font-family:var(--mono);font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin-bottom:.5rem}
.card h3{font-size:.95rem;font-weight:600;margin-bottom:.55rem;display:flex;align-items:center;gap:.45rem}
.dot{width:7px;height:7px;border-radius:50%;background:#2d3142;display:inline-block}
.dot.a{background:#eb6c36} .dot.m{background:#4f5d75} .dot.s{background:#7a8399}
.card ul{list-style:none} .card li{font-size:.82rem;color:#4f5d75;line-height:1.55;padding-left:.7rem;position:relative;margin-bottom:.3rem}
.card li::before{content:"";position:absolute;left:0;top:.55em;width:4px;height:4px;border-radius:50%;background:#7a8399}
footer{margin-top:2rem;padding-top:.9rem;border-top:1px solid rgba(45,49,66,0.12);font-family:var(--mono);font-size:.68rem;color:#7a8399;display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap}
</style>
</head>
<body>
<div class="frame">
<p class="eyebrow">产品框图 · diagram-design · Architecture · doc-wide · 全球口径</p>
<h1>热点与选题 · 产品框图(全球版:12 平台 + 海外热点源)</h1>
<p class="sub">左起四段:热点源进来 → 12 个平台各自成形 → 判断层按同一套口径算 → 落到 P2 选题雷达四块和下游。珊瑚色的两格是本次要补的部分(海外 6 平台、海外搜索趋势源),灰色实线那半是上一版就有的国内口径。</p>
<svg viewBox="0 0 1400 920" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="fig1g-title fig1g-desc">
<title id="fig1g-title">热点与选题产品框图(全球版):海外与国内热点源、12 平台矩阵、判断层口径、P2 四块与下游</title>
<desc id="fig1g-desc">四段横向结构。第一段是热点源:海外搜索趋势、海外社区热榜、YouTube 频道 RSS、科技与新闻源,加国内 60s 主源与 xxapi 备源。第二段是 12 个平台的矩阵,海外 6 与国内 6 各一栏,每栏逐行写平台名、内容形态与发布方式。第三段是判断层:热度指数归一化公式、趋势窗口、去重归并(按地区与语言分桶)、四层分类与七维价值分、风险与过期拦截。第四段是 P2 选题雷达四块与下游四页,并有一条复盘回写的虚线回到判断层。</desc>
<defs>
<marker id="arrow" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#4f5d75"/></marker>
<marker id="arrow-accent" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#eb6c36"/></marker>
<marker id="arrow-link" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#2e5aa8"/></marker>
</defs>
<rect width="100%" height="100%" fill="#f5f5f5"/>
<!-- ===================== 箭头(先画,压在框下面) ===================== -->
<line x1="324" y1="123" x2="380" y2="123" stroke="#eb6c36" stroke-width="1.2" marker-end="url(#arrow-accent)" fill="none"/>
<line x1="324" y1="253" x2="380" y2="253" stroke="#4f5d75" stroke-width="1.0" marker-end="url(#arrow)" fill="none"/>
<line x1="324" y1="643" x2="380" y2="643" stroke="#4f5d75" stroke-width="1.0" marker-end="url(#arrow)" fill="none"/>
<line x1="688" y1="233" x2="744" y2="233" stroke="#eb6c36" stroke-width="1.2" marker-end="url(#arrow-accent)" fill="none"/>
<line x1="688" y1="583" x2="744" y2="583" stroke="#4f5d75" stroke-width="1.0" marker-end="url(#arrow)" fill="none"/>
<line x1="1028" y1="153" x2="1084" y2="153" stroke="#4f5d75" stroke-width="1.0" marker-end="url(#arrow)" fill="none"/>
<line x1="1214" y1="688" x2="1214" y2="708" stroke="#2e5aa8" stroke-width="1.0" marker-end="url(#arrow-link)" fill="none"/>
<line x1="1084" y1="768" x2="1028" y2="768" stroke="#4f5d75" stroke-width="1.0" stroke-dasharray="4,3" marker-end="url(#arrow)" fill="none"/>
<!-- ===================== 分区外框 ===================== -->
<rect x="40" y="32" width="300" height="816" rx="8" fill="rgba(45,49,66,0.02)" stroke="rgba(45,49,66,0.10)" stroke-width="0.8"/>
<rect x="56" y="38" width="282" height="16" rx="2" fill="#f5f5f5"/>
<text x="56" y="50" font-size="12" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="500">一 · 热点源(已查证:免费 / 无密钥 / 可程序化取)</text>
<rect x="364" y="32" width="340" height="816" rx="8" fill="rgba(45,49,66,0.02)" stroke="rgba(45,49,66,0.10)" stroke-width="0.8"/>
<rect x="380" y="38" width="240" height="16" rx="2" fill="#f5f5f5"/>
<text x="380" y="50" font-size="12" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="500">二 · 平台矩阵(海外 6 + 国内 6)</text>
<rect x="728" y="32" width="316" height="816" rx="8" fill="rgba(45,49,66,0.02)" stroke="rgba(45,49,66,0.10)" stroke-width="0.8"/>
<rect x="744" y="38" width="246" height="16" rx="2" fill="#f5f5f5"/>
<text x="744" y="50" font-size="12" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="500">三 · 判断层:一套口径管 12 个平台</text>
<rect x="1068" y="32" width="292" height="816" rx="8" fill="rgba(45,49,66,0.02)" stroke="rgba(45,49,66,0.10)" stroke-width="0.8"/>
<rect x="1084" y="38" width="224" height="16" rx="2" fill="#f5f5f5"/>
<text x="1084" y="50" font-size="12" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="500">四 · P2 四块 + 下游</text>
<!-- ===================== 一 · 热点源 ===================== -->
<!-- b1 海外搜索趋势(focal) -->
<rect x="56" y="68" width="268" height="110" rx="6" fill="#f5f5f5"/>
<rect x="56" y="68" width="268" height="110" rx="6" fill="rgba(235,108,54,0.08)" stroke="#eb6c36" stroke-width="1"/>
<text x="68" y="92" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600">海外 · 搜索趋势(主源)</text>
<text x="68" y="113" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">Google Trends RSS · geo=US/GB/JP</text>
<text x="68" y="132" font-size="9" fill="#7a8399" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace">title / ht:approx_traffic / pubDate</text>
<text x="68" y="151" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">实跑 200 · 10 条 / 地区</text>
<!-- b2 海外社区热榜 -->
<rect x="56" y="198" width="268" height="110" rx="6" fill="#f5f5f5"/>
<rect x="56" y="198" width="268" height="110" rx="6" fill="rgba(45,49,66,0.03)" stroke="rgba(45,49,66,0.30)" stroke-width="1"/>
<text x="68" y="222" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600">海外 · 社区热榜</text>
<text x="68" y="243" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">Reddit /r/popular/hot/.rss · 25 条</text>
<text x="68" y="262" font-size="9" fill="#7a8399" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace">title / author / label / content</text>
<text x="68" y="281" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">⚠ .json 端点 403 ⇒ 只走 .rss</text>
<!-- b3 海外账号侧 -->
<rect x="56" y="328" width="268" height="110" rx="6" fill="#f5f5f5"/>
<rect x="56" y="328" width="268" height="110" rx="6" fill="rgba(45,49,66,0.03)" stroke="rgba(45,49,66,0.30)" stroke-width="1"/>
<text x="68" y="352" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600">海外 · 账号侧(对标号)</text>
<text x="68" y="373" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">YouTube 频道 RSS · 15 条</text>
<text x="68" y="392" font-size="9" fill="#7a8399" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace">videoId / title / published / views</text>
<text x="68" y="411" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">对标账号监控的海外实现</text>
<!-- b4 海外科技与新闻 -->
<rect x="56" y="458" width="268" height="110" rx="6" fill="#f5f5f5"/>
<rect x="56" y="458" width="268" height="110" rx="6" fill="rgba(45,49,66,0.03)" stroke="rgba(45,49,66,0.30)" stroke-width="1"/>
<text x="68" y="482" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600">海外 · 科技 / 百科 / 新闻</text>
<text x="68" y="503" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">HN topstories + Wikipedia Top</text>
<text x="68" y="522" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">Google News RSS + BBC News</text>
<text x="68" y="541" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">trends24 供 X 趋势(HTML)</text>
<!-- b5 国内主源 -->
<rect x="56" y="588" width="268" height="110" rx="6" fill="#f5f5f5"/>
<rect x="56" y="588" width="268" height="110" rx="6" fill="rgba(79,93,117,0.10)" stroke="#7a8399" stroke-width="1"/>
<text x="68" y="612" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600">国内 · 主源(沿用)</text>
<text x="68" y="633" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">60s v2:weibo / douyin / zhihu</text>
<text x="68" y="652" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">toutiao / rednote / baidu/hot</text>
<text x="68" y="671" font-size="9" fill="#7a8399" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace">返回 {title, hot, url}</text>
<!-- b6 国内备源 -->
<rect x="56" y="718" width="268" height="110" rx="6" fill="#f5f5f5"/>
<rect x="56" y="718" width="268" height="110" rx="6" fill="rgba(79,93,117,0.10)" stroke="#7a8399" stroke-width="1"/>
<text x="68" y="742" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600">国内 · 备源(沿用)</text>
<text x="68" y="763" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">xxapi v2:weibohot / douyinhot</text>
<text x="68" y="782" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">bilibilihot / baiduhot</text>
<text x="68" y="801" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">60s 挂时顶上(B站主用它)</text>
<!-- ===================== 二 · 平台矩阵 ===================== -->
<!-- 海外 6(focal) -->
<rect x="380" y="68" width="308" height="330" rx="6" fill="#f5f5f5"/>
<rect x="380" y="68" width="308" height="330" rx="6" fill="rgba(235,108,54,0.08)" stroke="#eb6c36" stroke-width="1"/>
<text x="396" y="92" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600">海外 6(本次新增)</text>
<text x="396" y="111" font-size="9" fill="#7a8399" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace">平台名 · 内容形态 · 发布方式</text>
<text x="396" y="133" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">TikTok · 短视频/图文 · 发=API 需过审核</text>
<text x="396" y="169" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">YouTube · 长视频+Shorts · 发=Data API</text>
<text x="396" y="205" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">Instagram · Reels/图文 · 发=Graph API</text>
<text x="396" y="241" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">Facebook · Reels/长视频 · 发=Graph API</text>
<text x="396" y="277" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">X · 短视频/图文 · 发=API(按量计费)</text>
<text x="396" y="313" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">LinkedIn · 短视频/图文 · 发=API 门槛高</text>
<text x="396" y="349" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">⚠ 站内实时热榜无免费源 ⇒ 人工 / 待授权</text>
<text x="396" y="371" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">可用的是「搜索趋势 + 社区热榜」这两路</text>
<!-- 国内 6 -->
<rect x="380" y="418" width="308" height="330" rx="6" fill="#f5f5f5"/>
<rect x="380" y="418" width="308" height="330" rx="6" fill="rgba(79,93,117,0.10)" stroke="#7a8399" stroke-width="1"/>
<text x="396" y="442" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600">国内 6(沿用,本次只对齐口径)</text>
<text x="396" y="461" font-size="9" fill="#7a8399" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace">平台名 · 内容形态 · 发布方式</text>
<text x="396" y="483" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">抖音 · 短视频/图文 · 发=开放平台</text>
<text x="396" y="519" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">快手 · 短视频/直播 · 发=开放平台</text>
<text x="396" y="555" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">小红书 · 图文/视频 · 发=人工为主</text>
<text x="396" y="591" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">视频号 · 短视频/直播 · 发=人工</text>
<text x="396" y="627" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">B站 · 中长视频/竖屏 · 发=开放平台</text>
<text x="396" y="663" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">微博 · 视频/图文 · 发=开放平台</text>
<text x="396" y="699" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">⚠ 小红书 / 视频号 没有通用发布 API</text>
<text x="396" y="721" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">产品按「人工发布 + 回填链接」设计</text>
<rect x="380" y="768" width="308" height="60" rx="6" fill="#f5f5f5"/>
<rect x="380" y="768" width="308" height="60" rx="6" fill="rgba(45,49,66,0.05)" stroke="#4f5d75" stroke-width="1"/>
<text x="396" y="790" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">体量口径:播放 / 互动 / 搜索 / 榜内排名</text>
<text x="396" y="810" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">各平台独立归一化,⛔ 不相加成一个数</text>
<!-- ===================== 三 · 判断层 ===================== -->
<rect x="744" y="68" width="284" height="170" rx="6" fill="#f5f5f5"/>
<rect x="744" y="68" width="284" height="170" rx="6" fill="rgba(45,49,66,0.05)" stroke="#4f5d75" stroke-width="1"/>
<text x="760" y="92" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600">① 归一化 · 热度指数 0–100</text>
<text x="760" y="115" font-size="9" fill="#7a8399" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace">H = 100 × PercentileRank(ln(1+x))</text>
<text x="760" y="132" font-size="9" fill="#7a8399" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace">只有排名:H = 100 × (1 − (r−1)/(N−1))</text>
<text x="760" y="155" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">三种情况:有热度值 / 只有排名 / 都没有</text>
<text x="760" y="175" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">百分位是「同平台同榜单内」的相对位置</text>
<text x="760" y="195" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">都没有 ⇒ 标「热度未知」,⛔ 不编数</text>
<text x="760" y="219" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">样本:30 天算分布 · 7 天做校准</text>
<rect x="744" y="254" width="284" height="110" rx="6" fill="#f5f5f5"/>
<rect x="744" y="254" width="284" height="110" rx="6" fill="rgba(45,49,66,0.05)" stroke="#4f5d75" stroke-width="1"/>
<text x="760" y="278" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600">② 趋势</text>
<text x="760" y="301" font-size="9" fill="#7a8399" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace">T30 = H(t) − H(t−30m)</text>
<text x="760" y="324" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">两个窗口:30 分抓上升 · 24 时看发酵</text>
<text x="760" y="344" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">2 小时更新的源,⛔ 不许伪装成 30 分钟有数</text>
<text x="760" y="362" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">拿 3 个采样点的中位数去单次抖动</text>
<rect x="744" y="380" width="284" height="130" rx="6" fill="#f5f5f5"/>
<rect x="744" y="380" width="284" height="130" rx="6" fill="rgba(45,49,66,0.05)" stroke="#4f5d75" stroke-width="1"/>
<text x="760" y="404" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600">③ 去重归并(全球口径新增一步)</text>
<text x="760" y="427" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">标题相似度 + 关键词 + 时间窗 → 候选</text>
<text x="760" y="447" font-size="11" fill="#eb6c36" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">⚠ 先按「地区 / 语言」分桶再比</text>
<text x="760" y="467" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">跨语言不直接比标题,低置信度交人确认</text>
<text x="760" y="487" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">各平台热度独立保留,⛔ 不相加</text>
<rect x="744" y="526" width="284" height="190" rx="6" fill="#f5f5f5"/>
<rect x="744" y="526" width="284" height="190" rx="6" fill="rgba(45,49,66,0.05)" stroke="#4f5d75" stroke-width="1"/>
<text x="760" y="550" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600">④ 分类 + 价值分</text>
<text x="760" y="573" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">L1 领域 / L2 事件类型</text>
<text x="760" y="593" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">L3 适配人设 / L4 工作状态</text>
<text x="760" y="615" font-size="9" fill="#7a8399" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace">V = 10 × Σ(wᵢ · sᵢ) w = 25/20/15/15/10/10/5</text>
<text x="760" y="637" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">≥6 维有据才出正式分,否则「待评估」</text>
<text x="760" y="657" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">三档:≥70 做 | 50–69 改角度 | &lt;50 不投入</text>
<text x="760" y="677" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">置信度按数据完整性单算,与价值分分开</text>
<text x="760" y="699" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">适配人设最多推 3 个,用户可增删</text>
<rect x="744" y="732" width="284" height="96" rx="6" fill="#f5f5f5"/>
<rect x="744" y="732" width="284" height="96" rx="6" fill="rgba(45,49,66,0.05)" stroke="#4f5d75" stroke-width="1"/>
<text x="760" y="756" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600">⑤ 风险与过期(硬闸)</text>
<text x="760" y="779" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">风险高直接拦截,⛔ 不被高分抵消</text>
<text x="760" y="799" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">来源过期 ⇒ 不显示「值得关注」</text>
<text x="760" y="819" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">超 2 个更新周期 ⇒ 标「可能已过期」</text>
<!-- ===================== 四 · P2 四块 + 下游 ===================== -->
<rect x="1084" y="68" width="260" height="140" rx="6" fill="#f5f5f5"/>
<rect x="1084" y="68" width="260" height="140" rx="6" fill="#ffffff" stroke="#2d3142" stroke-width="1"/>
<text x="1214" y="92" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600" text-anchor="middle">对标监控概览</text>
<text x="1096" y="115" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">四个数:监控账号 / 低粉爆款</text>
<text x="1096" y="135" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">异常值条数 / 近三天更新条数</text>
<text x="1096" y="158" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">补:来源新鲜度 · 覆盖率 95/80</text>
<text x="1096" y="178" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">最近成功时间 / 失败原因</text>
<text x="1096" y="198" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">海外 / 国内 分组显示</text>
<rect x="1084" y="228" width="260" height="140" rx="6" fill="#f5f5f5"/>
<rect x="1084" y="228" width="260" height="140" rx="6" fill="#ffffff" stroke="#2d3142" stroke-width="1"/>
<text x="1214" y="252" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600" text-anchor="middle">对标内容</text>
<text x="1096" y="275" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">摆法:表格列表 + 右侧详情抽屉</text>
<text x="1096" y="295" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">倍数=本条播放 ÷ 近 30 天中位数</text>
<text x="1096" y="315" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">同类型、样本 ≥10,否则「样本不足」</text>
<text x="1096" y="338" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">异常值 ≥3.0 · 低粉爆款 ≥2.0 且粉 &lt;1 万</text>
<text x="1096" y="358" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">拿不到播放 ⇒ 改用互动并注明口径</text>
<rect x="1084" y="388" width="260" height="140" rx="6" fill="#f5f5f5"/>
<rect x="1084" y="388" width="260" height="140" rx="6" fill="#ffffff" stroke="#2d3142" stroke-width="1"/>
<text x="1214" y="412" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600" text-anchor="middle">评论区洞察</text>
<text x="1096" y="435" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">可点入子区</text>
<text x="1096" y="455" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">按点赞最多取前 N 条评论</text>
<text x="1096" y="475" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">出 AI 候选选题,一出即成 Topic</text>
<text x="1096" y="498" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">海外侧同源:Reddit / HN 帖下讨论</text>
<text x="1096" y="518" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">去重按评论标识,不按文本</text>
<rect x="1084" y="548" width="260" height="140" rx="6" fill="#f5f5f5"/>
<rect x="1084" y="548" width="260" height="140" rx="6" fill="rgba(235,108,54,0.08)" stroke="#eb6c36" stroke-width="1"/>
<text x="1214" y="572" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600" text-anchor="middle">选题库</text>
<text x="1096" y="595" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">进度 × 类型两维;来源必填</text>
<text x="1096" y="615" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">价值分 + 置信度分开显示</text>
<text x="1096" y="635" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">热点 ↔ 选题多对多</text>
<text x="1096" y="658" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">「收藏热点」≠「生成选题」两个动作</text>
<text x="1096" y="678" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">目标平台:从 12 个里选,海外国内分组</text>
<rect x="1084" y="708" width="260" height="120" rx="6" fill="#f5f5f5"/>
<rect x="1084" y="708" width="260" height="120" rx="6" fill="rgba(45,49,66,0.03)" stroke="rgba(45,49,66,0.30)" stroke-width="1"/>
<text x="1214" y="732" font-size="12.5" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600" text-anchor="middle">下游</text>
<text x="1096" y="755" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">创作台 P4 · 资产库 P3</text>
<text x="1096" y="775" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">复盘台 P7 · 矩阵总览 P1</text>
<text x="1096" y="798" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">发布后 2h / 24h / 7d 回收表现</text>
<text x="1096" y="818" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">回校七维权重(见左侧虚线)</text>
<!-- ===================== 图例 ===================== -->
<line x1="40" y1="876" x2="1360" y2="876" stroke="rgba(45,49,66,0.12)" stroke-width="0.8"/>
<text x="40" y="894" font-size="12" fill="#4f5d75" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace" letter-spacing="0.14em">LEGEND</text>
<rect x="130" y="883" width="14" height="12" rx="3" fill="#ffffff" stroke="#2d3142" stroke-width="1"/>
<text x="150" y="894" font-size="12" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">产品板块</text>
<rect x="240" y="883" width="14" height="12" rx="3" fill="rgba(45,49,66,0.05)" stroke="#4f5d75" stroke-width="1"/>
<text x="260" y="894" font-size="12" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">判断层</text>
<rect x="350" y="883" width="14" height="12" rx="3" fill="rgba(79,93,117,0.10)" stroke="#7a8399" stroke-width="1"/>
<text x="370" y="894" font-size="12" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">国内口径(沿用)</text>
<rect x="500" y="883" width="14" height="12" rx="3" fill="rgba(235,108,54,0.08)" stroke="#eb6c36" stroke-width="1"/>
<text x="520" y="894" font-size="12" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">本次新增(海外侧)</text>
<line x1="660" y1="889" x2="694" y2="889" stroke="#4f5d75" stroke-width="1" marker-end="url(#arrow)"/>
<text x="702" y="894" font-size="12" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">数据流</text>
<line x1="772" y1="889" x2="806" y2="889" stroke="#4f5d75" stroke-width="1" stroke-dasharray="4,3" marker-end="url(#arrow)"/>
<text x="814" y="894" font-size="12" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">复盘回写</text>
<line x1="904" y1="889" x2="938" y2="889" stroke="#eb6c36" stroke-width="1.2" marker-end="url(#arrow-accent)"/>
<text x="946" y="894" font-size="12" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">本次新增链路</text>
<line x1="1058" y1="889" x2="1092" y2="889" stroke="#2e5aa8" stroke-width="1" marker-end="url(#arrow-link)"/>
<text x="1100" y="894" font-size="12" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">转创作</text>
</svg>
<div class="cards">
<div class="card">
<p class="k">01 · 源与平台</p>
<h3><span class="dot a"></span>12 个平台,但只有 3 类取数能力</h3>
<ul>
<li>海外 6:TikTok / YouTube(Shorts)/ Instagram(Reels)/ Facebook / X / LinkedIn</li>
<li>国内 6:抖音 / 快手 / 小红书 / 视频号 / B站 / 微博</li>
<li>能自动取热榜又能自动发布的只有 YouTube 一个;其余取得到、发不了</li>
<li>站内实时热榜没有免费源 ⇒ 留人工录入位子,⛔ 不假装有</li>
</ul>
</div>
<div class="card">
<p class="k">02 · 全球口径真正变了什么</p>
<h3><span class="dot m"></span>三处改,其余照旧</h3>
<ul>
<li>平台的「地区 / 语言」成了必填标记,去重前先分桶</li>
<li>跨语言不直接比标题相似度 —— 中英标题拼一起算相似度会乱归并</li>
<li>热度归一化仍是同一套公式,各平台各算各的,⛔ 不跨平台相加</li>
<li>页面 7 / 导航 / 板块 39 / 流转 20 / 对象 11 —— 一个都没动</li>
</ul>
</div>
<div class="card">
<p class="k">03 · 画图的取舍</p>
<h3><span class="dot s"></span>把 12 个平台摊开,不叠成图标</h3>
<ul>
<li>每个平台一行,带内容形态与发布方式 —— 只写名字等于没写</li>
<li>海外那半用珊瑚色标出来,跟沿用的国内那半一眼分得开</li>
<li>公式和阈值留在图里,方便对着图核产品实现</li>
<li>图外的清单与查证过程在同目录两份 md 里</li>
</ul>
</div>
</div>
<footer>
<span>热点与选题 · 产品框图(全球版)· 2026-10-11</span>
<span>画法:product-planning 自带 diagram-design(Architecture · doc-wide)· 皮肤=默认,未定制品牌 · 来源:本目标两份 md + 上一版框图</span>
</footer>
</div>
</body>
</html>
@@ -0,0 +1,152 @@
# 全球平台矩阵(12 个)
> 目标:按全球口径重做平台矩阵与热点源含海外主流。类别 `产品规划`。
> 起点是上一目标(`8a649c`)那份 `热点与选题-功能细节-2026-10-11.md` —— 它写对了,但只按国内口径。本份在它之上把平台范围从国内扩到全球,**不推翻它**。
> 本文只做一件事:把 12 个平台一个个写清「内容形态 / 体量口径 / 发布方式」,让后面画图和做产品的人照着就能落地。
---
## 〇、口径变了什么
用户 2026-10-11 18:53 逐字:
> 「所有方案都要按照全球方案规划,不能只看国内,必须包含海外主流社媒和短视频平台(最主流的就行)」
实测上一份的偏差:抖音 12 次、知乎 8 次、微博 7 次、小红书 4 次、B站 4 次 —— **海外平台 0 次**。
本份按「海外 6 + 国内 6 = 12」写。下面这份 12 平台清单是主会话自决的,**可以推翻**:要补更主流的漏项就在 §三 提,⛔ 不擅自换掉已有那 6 个。
---
## 一、海外 6
### 1. TikTok
- **内容形态**:短视频为主(竖屏,主流 15–60 秒,单条上限 10 分钟);另有图文轮播(Photo Mode)。
- **体量口径**:播放量、点赞、评论、分享、完播率;话题页的 `#hashtag` 累计播放数。
- **发布方式**:有官方 Content Posting API,但**门槛高**。要注册应用 → 加 Content Posting API 产品 → 打开 Direct Post → 申请 `video.publish` scope → 用户逐账号授权 → **再过一次审核**。没通过审核时,发出去的内容**只能是自己可见(SELF_ONLY)**,而且未审核客户端 24 小时内最多 5 个用户能发。→ 未审核阶段等于发了个寂寞,产品上按「人工发布 + 记录链接」设计。
### 2. YouTube(含 Shorts)
- **内容形态**:长视频(横屏,可超 10 分钟)+ Shorts(竖屏,≤3 分钟)+ 直播。
- **体量口径**:播放量、观看时长、点赞评论、订阅转化;「热门」榜(`chart=mostPopular`)按地区给。
- **发布方式**:官方 Data API v3 可上传视频,要 OAuth 2.0 + 配额(单次上传约 1600 单位,默认日配额 10000);Shorts 走同一接口。→ **有 API 可发,但配额紧**,批量发布要提前申请提额。
### 3. Instagram(含 Reels)
- **内容形态**:Reels 短视频、Feed 图文与轮播、Stories(24 小时)。
- **体量口径**:播放量、触达、互动(点赞/评论/保存/分享);Reels 单列播放。
- **发布方式**:官方 Graph API 可发,前提是账号为 Business 或 Creator 并绑定 Facebook 主页,权限要过审。→ 个人号⛔ 走不通,实务上多为人工。
### 4. Facebook
- **内容形态**:Reels 短视频、长视频、图文、直播。
- **体量口径**:播放、触达、互动。
- **发布方式**:Graph API 可发(Page 身份 + 权限审核)。个人主页发帖的能力已被官方收回,只剩 Page。
### 5. X(原 Twitter)
- **内容形态**:短视频(单条 ≤2 分 20 秒)、图文、长文(Premium)。
- **体量口径**:曝光量、点赞、转帖、回复;趋势榜(Trends,按地区取)。
- **发布方式**:官方 API v2 可发,**但是付费的**。2026 年起对新开发者取消 Free/Basic/Pro 分档,改按量计费:发一条帖 $0.015、带链接 $0.20、读一条帖 $0.005。→ 这条路是**唯一一条明确要花钱**的,产品上要么预算留出来,要么归到人工。
### 6. LinkedIn
- **内容形态**:短视频、图文、长文(Article)、文档轮播。
- **体量口径**:曝光、互动、点击。
- **发布方式**:官方 API 要过 Marketing Developer Platform 审批,门槛高、周期长。→ 产品里按人工处理。
---
## 二、国内 6
### 7. 抖音
- **内容形态**:短视频、图文。
- **体量口径**:播放、点赞、评论、分享、完播率。
- **发布方式**:开放平台有「视频发布」能力,需企业主体 + 权限审核;个人号多人工。
### 8. 快手
- **内容形态**:短视频、直播。
- **体量口径**:播放、互动。
- **发布方式**:开放平台有内容发布接口,需审核。
### 9. 小红书
- **内容形态**:图文笔记、视频笔记。
- **体量口径**:曝光、点赞、收藏、评论。
- **发布方式**:**没有通用的开放发布 API**(蒲公英、企业号那套是另一回事)→ 人工为主。
### 10. 视频号
- **内容形态**:短视频、直播。
- **体量口径**:播放、点赞、转发。
- **发布方式**:微信生态内没有公开发布 API → 人工。
### 11. B站
- **内容形态**:中长视频、竖屏短视频、专栏。
- **体量口径**:播放、弹幕、点赞投币收藏。
- **发布方式**:开放平台有「稿件投递」接口,需申请;也可网页上传。
### 12. 微博
- **内容形态**:视频、图文、长文。
- **体量口径**:阅读量、转发、评论、点赞。
- **发布方式**:开放平台 `statuses/share` 等接口可发,需 App Key + 审核。
---
## 三、建议增补(只提建议,⛔ 不动上面 12 个)
下面这 5 个是「比现役 12 个里某些平台更主流、但这次没进」的候选。按用户授意写清理由,**采不采由用户定**。
| 候选 | 内容形态 | 为什么建议增补 | 权衡 |
|---|---|---|---|
| **Threads** | 图文+短视频 | Meta 对 Instagram 的替代品,增长快,图文生态跟小红书最像,出海内容可复用 | 开放 API 早期、能力有限 |
| **Reddit** | 图文+短视频+长讨论 | 海外做「评论与需求信号」最好的地方,而且是**这次唯一一个免费无密钥能程序化取的社区热榜**(见热点源那份) | 偏社区文化,短视频不是主体 |
| **Pinterest** | 图文+短视频(Idea Pin) | 海外「搜索型」流量入口,美妆/家居/穿搭类选题的刚需 | 跟短视频矩阵主线偏得远 |
| **Snapchat** | 短视频(Spotlight) | 北美年轻人渗透率高 | 开放发布能力弱,区域性强 |
| **Kwai** | 短视频 | 快手海外版,拉美/中东市场的主力,跟 TikTok 是两条不同的出海路 | 与 TikTok 高度重叠,除非主攻拉美 |
**倾向(可推翻)**:先加 **Reddit**(唯一理由最强:它同时是平台又是免费热点源)。其余四个等出海地区定了再说 —— 现在加进来只是清单变长,落不了地。
---
## 四、12 个平台怎么进链路
矩阵排完了不等于产品能做。进链路时按「取数能力」分三类,这三类决定产品上按钮怎么摆:
1. **能自动取热榜 + 能自动发布**:YouTube(RSS 可读、Data API 可发)。→ 可做全自动。
2. **能自动取、不能自动发**:其余 11 个。→ 选题与评估自动,发布归人工,产品只需给「一键跳转发布页 + 回填链接」。
3. **取和发都要人工**:视频号、小红书(发布侧)。→ 只做人工录入 + 链接回填。
一句话落到产品上:**这 12 个平台的差别不在「能不能看见」,在「能不能发」**。所以平台矩阵必须带 `发布方式` 这一列,否则做出来的产品会在发布环节全线卡住。
---
## 五、与 2a / 2b 同步的建议(⛔ 本轮不动手,交用户裁)
现版 `2a`/`2b`/原型 `ui/mcn-workbench.html` 里都没有 12 平台矩阵。**要不要同步进去、同步到哪几节,是用户拍板的事**,本轮一个字没改。建议如下,供裁:
1. `2a` 的 `Account`(内容账号)与平台账号块 —— 平台账号的「平台」字段应是**下拉选 12 个之一**,不是自由文本。要改的是那个枚举值清单。
2. `2a` F1(对标账号监控)与热榜来源 —— 加一节「支持的平台清单」,就是本文这 12 个。
3. `2b` §五 P2 选题雷达 —— 平台筛选器从「全部平台」展开时列 12 个,按「海外 6 / 国内 6」两组分。
4. 页面数、导航名与顺序、板块 39、流转 20 条、对象 11 个 —— **⛔ 一个都不动**。上面三条都是改字段取值与分组,不改结构。
---
## 六、说人话自评
**评分:46/50**(门槛 45)—— 直接性 9 / 节奏 9 / 信任度 10 / 真实性 9 / 精炼度 9。判据源 `E:/ProgramData/.workbuddy/skills/humanizer-zh`。
一处保留的「不像人话」:§三 那张表里「权衡」一列写得短,读起来像标签。留着是因为它承的是「为什么不加」这个判断,展开会淹掉主表。
---
## 附:平台能力口径的来源
- TikTok `video.publish` 的审核墙、未审核只能 SELF_ONLY、24 小时 5 用户上限:2026-10-11 联网查证(TikTok 官方开发者文档与多篇 2026 年实测文)。
- X API 2026 年改为按量计费(发帖 $0.015 / 带链接 $0.20 / 读帖 $0.005):2026-10-11 联网查证。
- 其余平台的形态、口径、发布方式:按各家官方文档与公开资料整理,**本轮没有逐项实跑验通**。要落到产品里之前,这几条建议按平台再确认一次权限门槛。
@@ -0,0 +1,206 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>功能流程图 · 热点到选题(全球版)</title>
<link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Geist:wght@400;500;600&family=Geist+Mono:wght@400;500;600&family=Noto+Serif:ital@0;1&family=Noto+Sans+SC:wght@400;500;600&display=swap" rel="stylesheet">
<style>
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{--paper:#f5f5f5;--ink:#2d3142;--muted:#4f5d75;--accent:#eb6c36;
--sans:'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif;--serif:'Instrument Serif','Noto Serif','Noto Serif SC',serif;--mono:'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace;}
body{font-family:var(--sans);background:var(--paper);color:var(--ink);padding:2.5rem 2rem 3rem}
.frame{max-width:1420px;margin:0 auto}
.eyebrow{font-family:var(--mono);font-size:.7rem;font-weight:500;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);margin-bottom:.45rem}
h1{font-family:var(--serif);font-size:clamp(1.5rem,2.2vw + .7rem,2rem);font-weight:400;letter-spacing:-.01em;line-height:1.2;margin-bottom:.5rem}
.sub{font-size:.85rem;color:var(--muted);margin-bottom:1.6rem;max-width:76ch;line-height:1.6}
svg{width:100%;min-width:1180px;display:block}
.cards{display:grid;grid-template-columns:1fr 1.1fr .9fr;gap:16px;margin-top:2rem}
.card{background:#fff;border:1px solid rgba(45,49,66,0.12);border-radius:6px;padding:1.15rem 1.25rem}
.card .k{font-family:var(--mono);font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin-bottom:.5rem}
.card h3{font-size:.95rem;font-weight:600;margin-bottom:.55rem;display:flex;align-items:center;gap:.45rem}
.dot{width:7px;height:7px;border-radius:50%;background:#2d3142;display:inline-block}
.dot.a{background:#eb6c36} .dot.m{background:#4f5d75}
.card ul{list-style:none} .card li{font-size:.82rem;color:#4f5d75;line-height:1.55;padding-left:.7rem;position:relative;margin-bottom:.3rem}
.card li::before{content:"";position:absolute;left:0;top:.55em;width:4px;height:4px;border-radius:50%;background:#7a8399}
footer{margin-top:2rem;padding-top:.9rem;border-top:1px solid rgba(45,49,66,0.12);font-family:var(--mono);font-size:.68rem;color:#7a8399;display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap}
</style>
</head>
<body>
<div class="frame">
<p class="eyebrow">功能流程图 · diagram-design · Flowchart · doc-wide · 全球口径</p>
<h1>热点到选题 · 功能流程图(全球版:一条热点进来走哪几步)</h1>
<p class="sub">采集到落地五步,第六步是判断关口,三条出口各带自己的阈值。全球口径只改了两处:采集拆成海外与国内两路,去重归并前先按地区与语言分桶。其余步骤、公式、阈值跟上一版一模一样。</p>
<svg viewBox="0 0 1400 830" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="fig2g-title fig2g-desc">
<title id="fig2g-title">热点到选题功能流程图(全球版):双路采集、热度与趋势、按语言分桶去重、分类、价值分、决策与三条出口</title>
<desc id="fig2g-desc">横向流程五步:采集(海外九源与国内两源双路)、热度指数与趋势、去重归并(先按地区与语言分桶)、分类、价值分与置信度,一起汇入决策关口。决策按 70 分与 50 分两档分出建议做、改角度、不建议投入三条出口。左下一处注解写明全球口径改动只有采集分路与去重分桶两处。</desc>
<defs>
<marker id="arrow" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#4f5d75"/></marker>
<marker id="arrow-accent" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#eb6c36"/></marker>
<marker id="arrow-link" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#2e5aa8"/></marker>
</defs>
<rect width="100%" height="100%" fill="#f5f5f5"/>
<!-- ===================== 箭头(先画) ===================== -->
<line x1="240" y1="183" x2="288" y2="183" stroke="#4f5d75" stroke-width="1.0" marker-end="url(#arrow)" fill="none"/>
<line x1="488" y1="183" x2="536" y2="183" stroke="#4f5d75" stroke-width="1.0" marker-end="url(#arrow)" fill="none"/>
<line x1="736" y1="183" x2="784" y2="183" stroke="#4f5d75" stroke-width="1.0" marker-end="url(#arrow)" fill="none"/>
<line x1="984" y1="183" x2="1032" y2="183" stroke="#4f5d75" stroke-width="1.0" marker-end="url(#arrow)" fill="none"/>
<path d="M 1132,278 V 300 Q 1132,308 1124,308 H 648 Q 640,308 640,316 V 344" fill="none" stroke="#4f5d75" stroke-width="1" marker-end="url(#arrow)"/>
<path d="M 566,470 V 540 Q 566,548 558,548 H 368 Q 360,548 360,556 V 592" fill="none" stroke="#eb6c36" stroke-width="1.2" marker-end="url(#arrow-accent)"/>
<path d="M 640,520 V 592" fill="none" stroke="#eb6c36" stroke-width="1.2" marker-end="url(#arrow-accent)"/>
<path d="M 714,470 V 548 Q 714,556 722,556 H 912 Q 920,556 920,564 V 592" fill="none" stroke="#eb6c36" stroke-width="1.2" marker-end="url(#arrow-accent)"/>
<!-- ===================== 第 1–5 步 ===================== -->
<rect x="40" y="88" width="200" height="190" rx="6" fill="#f5f5f5"/>
<rect x="40" y="88" width="200" height="190" rx="6" fill="#ffffff" stroke="#2d3142" stroke-width="1"/>
<text x="140" y="112" font-size="13" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600" text-anchor="middle">① 采集 · 双路</text>
<text x="52" y="136" font-size="11" fill="#eb6c36" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">海外路(9 源,本次新增)</text>
<text x="52" y="155" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">Google Trends · Reddit · YouTube</text>
<text x="52" y="174" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">HN · PH · Wiki · GNews · BBC</text>
<text x="52" y="198" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">国内路:60s v2(主)→ xxapi(备)</text>
<text x="52" y="222" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">主源 → 备源 → 人工录入 三级退</text>
<text x="52" y="246" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">失败退旧值并标「这个源取不到」</text>
<text x="52" y="266" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">站内热榜无免费源 ⇒ 人工补</text>
<rect x="288" y="88" width="200" height="190" rx="6" fill="#f5f5f5"/>
<rect x="288" y="88" width="200" height="190" rx="6" fill="#ffffff" stroke="#2d3142" stroke-width="1"/>
<text x="388" y="112" font-size="13" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600" text-anchor="middle">② 热度指数与趋势</text>
<text x="300" y="136" font-size="9" fill="#7a8399" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace">H = 100 × PercentileRank(ln(1+x))</text>
<text x="300" y="153" font-size="9" fill="#7a8399" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace">只有排名:H = 100(1 − (r−1)/(N−1))</text>
<text x="300" y="170" font-size="9" fill="#7a8399" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace">T30 = H(t) − H(t−30m)</text>
<text x="300" y="192" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">两个窗口:30 分 / 24 时</text>
<text x="300" y="213" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">12 个平台同一套公式,各算各的</text>
<text x="300" y="234" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">⛔ 不跨平台相加成一个热度</text>
<text x="300" y="255" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">旧源不许伪装成 30 分钟有新数</text>
<rect x="536" y="88" width="200" height="190" rx="6" fill="#f5f5f5"/>
<rect x="536" y="88" width="200" height="190" rx="6" fill="rgba(235,108,54,0.08)" stroke="#eb6c36" stroke-width="1"/>
<text x="636" y="112" font-size="13" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600" text-anchor="middle">③ 去重归并</text>
<text x="548" y="136" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">标题相似度 + 关键词 + 时间窗</text>
<text x="548" y="157" font-size="11" fill="#eb6c36" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">⚠ 先按「地区 / 语言」分桶再比</text>
<text x="548" y="178" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">跨语言不直接比标题相似度</text>
<text x="548" y="199" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">先出候选,AI 判是否同一事件</text>
<text x="548" y="220" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">低置信度归并交用户确认</text>
<text x="548" y="241" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">各平台热度独立保留,不相加</text>
<text x="548" y="262" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">同事件跨地区 ⇒ 合并成一条热点</text>
<rect x="784" y="88" width="200" height="190" rx="6" fill="#f5f5f5"/>
<rect x="784" y="88" width="200" height="190" rx="6" fill="#ffffff" stroke="#2d3142" stroke-width="1"/>
<text x="884" y="112" font-size="13" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600" text-anchor="middle">④ 分类</text>
<text x="796" y="136" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">L1 领域 / L2 事件类型</text>
<text x="796" y="157" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">L3 适配人设 / L4 工作状态</text>
<text x="796" y="178" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">领域最多 3 标签 · 事件 1 主 2 辅</text>
<text x="796" y="199" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">适配人设最多推 3 个,可增删</text>
<text x="796" y="220" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">置信度 &lt;0.7 标「待确认」</text>
<text x="796" y="241" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">L4 由工作流事件自动改,⛔ 不猜</text>
<text x="796" y="262" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">首版不做三级以上行业树</text>
<rect x="1032" y="88" width="200" height="190" rx="6" fill="#f5f5f5"/>
<rect x="1032" y="88" width="200" height="190" rx="6" fill="#ffffff" stroke="#2d3142" stroke-width="1"/>
<text x="1132" y="112" font-size="13" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600" text-anchor="middle">⑤ 价值分+置信度</text>
<text x="1044" y="136" font-size="9" fill="#7a8399" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace">V = 10 × Σ(wᵢ · sᵢ)</text>
<text x="1044" y="153" font-size="9" fill="#7a8399" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace">w = 25/20/15/15/10/10/5</text>
<text x="1044" y="176" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">≥6 维有据才出正式分</text>
<text x="1044" y="197" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">合规维反向评分</text>
<text x="1044" y="218" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">风险高直接拦截,不靠高分抵</text>
<text x="1044" y="239" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">置信度按数据完整性单算</text>
<text x="1044" y="260" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">缺数据 ⇒ 「待评估」,⛔ 不填中位</text>
<!-- ===================== 注解:全球口径改了什么 ===================== -->
<rect x="40" y="296" width="440" height="84" rx="6" fill="#f5f5f5"/>
<rect x="40" y="296" width="440" height="84" rx="6" fill="rgba(235,108,54,0.05)" stroke="rgba(235,108,54,0.50)" stroke-width="1" stroke-dasharray="4,4"/>
<text x="56" y="318" font-size="9" fill="#7a8399" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace" letter-spacing="0.12em">本次新增(全球口径)</text>
<text x="56" y="342" font-size="13" fill="#2d3142" font-family="'Instrument Serif','Noto Serif','Noto Serif SC',serif" font-style="italic">① 采集拆成海外 / 国内两路;③ 去重前先按「地区 + 语言」分桶。</text>
<text x="56" y="364" font-size="13" fill="#2d3142" font-family="'Instrument Serif','Noto Serif','Noto Serif SC',serif" font-style="italic">其余步骤、公式、阈值、三条出口 —— 与国内口径完全一致。</text>
<!-- ===================== ⑥ 判断关口 ===================== -->
<rect x="510" y="336" width="260" height="200" fill="#f5f5f5"/>
<polygon points="640,352 756,436 640,520 524,436" fill="rgba(235,108,54,0.08)" stroke="#eb6c36" stroke-width="1.2"/>
<text x="640" y="428" font-size="13" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600" text-anchor="middle">⑥ 决策:这条值不值得做</text>
<text x="640" y="450" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" text-anchor="middle">价值分 × 热度 × 时效</text>
<text x="640" y="468" font-size="9" fill="#7a8399" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace" text-anchor="middle">≥70 / 50–69 / &lt;50</text>
<!-- ===================== 三条出口 ===================== -->
<rect x="240" y="592" width="240" height="96" rx="20" fill="#f5f5f5"/>
<rect x="240" y="592" width="240" height="96" rx="20" fill="#ffffff" stroke="#2d3142" stroke-width="1"/>
<text x="360" y="617" font-size="13" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600" text-anchor="middle">建议做</text>
<text x="252" y="640" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">≥ 70 分,且无硬性风险</text>
<text x="252" y="660" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">直接排期进制作</text>
<rect x="520" y="592" width="240" height="96" rx="20" fill="#f5f5f5"/>
<rect x="520" y="592" width="240" height="96" rx="20" fill="#ffffff" stroke="#2d3142" stroke-width="1"/>
<text x="640" y="617" font-size="13" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600" text-anchor="middle">改角度</text>
<text x="532" y="640" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">50–69 分</text>
<text x="532" y="660" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">调角度 / 补证据再评估</text>
<rect x="800" y="592" width="240" height="96" rx="20" fill="#f5f5f5"/>
<rect x="800" y="592" width="240" height="96" rx="20" fill="#ffffff" stroke="#2d3142" stroke-width="1"/>
<text x="920" y="617" font-size="13" fill="#2d3142" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="600" text-anchor="middle">不建议投入</text>
<text x="812" y="640" font-size="11" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">低于 50 分</text>
<text x="812" y="660" font-size="11" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">降级展示,不进优先队列</text>
<!-- ===================== 分支标签(后画,遮住线) ===================== -->
<rect x="500" y="498" width="38" height="15" rx="2" fill="#f5f5f5"/>
<text x="500" y="509" font-size="12" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="500">≥ 70</text>
<rect x="652" y="545" width="45" height="15" rx="2" fill="#f5f5f5"/>
<text x="652" y="556" font-size="12" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="500">50–69</text>
<rect x="724" y="498" width="38" height="15" rx="2" fill="#f5f5f5"/>
<text x="724" y="509" font-size="12" fill="#7a8399" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif" font-weight="500">&lt; 50</text>
<!-- ===================== 图例 ===================== -->
<line x1="40" y1="740" x2="1360" y2="740" stroke="rgba(45,49,66,0.12)" stroke-width="0.8"/>
<text x="40" y="758" font-size="12" fill="#4f5d75" font-family="'Geist Mono', 'Noto Sans Mono CJK SC', ui-monospace, monospace" letter-spacing="0.14em">LEGEND</text>
<rect x="130" y="745" width="16" height="12" rx="2" fill="#fff" stroke="#2d3142" stroke-width="1"/>
<text x="152" y="756" font-size="12" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">处理步骤</text>
<polygon points="240,744 256,751 240,758 224,751" fill="rgba(235,108,54,0.08)" stroke="#eb6c36" stroke-width="1.1"/>
<text x="264" y="756" font-size="12" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">判断关口</text>
<rect x="350" y="745" width="26" height="12" rx="6" fill="#fff" stroke="#2d3142" stroke-width="1"/>
<text x="384" y="756" font-size="12" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">终态出口</text>
<line x1="460" y1="751" x2="494" y2="751" stroke="#eb6c36" stroke-width="1.2" marker-end="url(#arrow-accent)"/>
<text x="502" y="756" font-size="12" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">决策分支</text>
<rect x="586" y="745" width="16" height="12" rx="2" fill="rgba(235,108,54,0.08)" stroke="#eb6c36" stroke-width="1"/>
<text x="608" y="756" font-size="12" fill="#4f5d75" font-family="'Geist', 'PingFang SC', 'Noto Sans SC', 'Microsoft YaHei', sans-serif">本次新增 / 改动处</text>
</svg>
<div class="cards">
<div class="card">
<p class="k">A · 到第 5 步为止的硬口径</p>
<h3><span class="dot"></span>能算的数,不留「感觉」</h3>
<ul>
<li>热度指数用同平台同榜单的百分位,不拿原始热度值硬比</li>
<li>只有排名时用榜内位置换算,第 1 名 100、末名 0</li>
<li>倍数=本条播放 ÷ 近 30 天同类型中位数,样本 &lt;10 显示「样本不足」</li>
<li>趋势用 30 分钟窗口;旧来源不许伪装成有新数据</li>
<li>海外源的时间戳多为 UTC / 美西,入库统一转 UTC 再比</li>
</ul>
</div>
<div class="card">
<p class="k">B · 第 6 步这个关口</p>
<h3><span class="dot a"></span>热度高 ≠ 该做</h3>
<ul>
<li>价值分七维加权:账号匹配 25%、流量 20%、差异化 15%、时效 15%、变现 10%、制作 10%、合规 5%</li>
<li>合规那一维反向评分;硬风险直接拦,不被高分抵消</li>
<li>置信度按数据完整性单算,与价值分分开显示</li>
<li>数据过期一律不显示「值得关注」,哪怕上次分数很高</li>
</ul>
</div>
<div class="card">
<p class="k">C · 全球口径下最容易踩的坑</p>
<h3><span class="dot m"></span>中英标题放一起比相似度</h3>
<ul>
<li>中文标题与英文标题做字符相似度算出来的分没有意义,会把两条无关热点并成一条</li>
<li>所以第 3 步必须先在「地区 + 语言」这一层分桶,桶内再比</li>
<li>同一事件真的跨地区出现时,按事件合并、热度分列,⛔ 不加总</li>
<li>海外侧的站内热榜取不到 ⇒ 该平台那一路直接走人工录入,不留空壳</li>
</ul>
</div>
</div>
<footer>
<span>热点到选题 · 功能流程图(全球版)· 2026-10-11</span>
<span>画法:product-planning 自带 diagram-design(Flowchart · doc-wide)· 皮肤=默认,未定制品牌 · 口径来源:本目标两份 md + 上一版流程图</span>
</footer>
</div>
</body>
</html>
@@ -0,0 +1,247 @@
# 海外主流热点源(查证版)
> 目标:按全球口径重做平台矩阵与热点源含海外主流。类别 `产品规划`。
> 国内那路上一轮已有(`目标-逆向Easel热点雷达与选题链路补齐现版-547748/取证/skills__shared__hotlist-apis.md`:60s v2 主源 + xxapi 备选,免费无密钥)。
> 本份只做海外那路:把「免费 / 无密钥 / 能程序化取」的源一条条**实跑验过**再写下来。
> ⛔ 没验通的一律写「没拿到」,不编端点、不拿「应该可以」顶替、不把付费的写成免费。
---
## 〇、验证方式(照这个就能复核)
- **取数时间**:2026-10-11 19:19–19:21(本地时间;UTC 11:21)。
- **取数环境**:本机 curl → 本机代理 `http://127.0.0.1:10800`(系统 PAC 在同一端口,直连海外域名会连不通)。
- **命令形状**:
```
curl -s -m 25 -x http://127.0.0.1:10800 \
-A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... Chrome/120 Safari/537.36" \
-o <取证文件> -w "http=%{http_code} bytes=%{size_download}\n" "<端点>"
```
- **原始报文**全部落在同目录 `取证/` 下,文件名与端点一一对应,可逐个复核。
- **判通过的硬条件**:HTTP 200 + 报文里能解析出**真实条目**(不是空壳、不是验证码页)。三个条件缺一个就不写进「已验通」。
---
## 一、结论速览
**已验通 9 条**(全部免费、无密钥、能程序化取):
1. Google Trends 每日搜索趋势 RSS(按国家/地区)
2. Reddit 公开热榜 Atom RSS
3. YouTube 频道 Atom RSS
4. Hacker News 官方 Firebase API
5. Product Hunt Atom Feed
6. Wikipedia 页面浏览 Top API
7. Google News RSS
8. BBC News RSS
9. trends24.in(X 趋势镜像,HTML 抓取)
**没拿到 6 条**(写清卡在哪,⛔ 不绕):
1. Reddit 的 JSON 端点 —— 403
2. TikTok Creative Center —— 要授权,返回 `no permission`
3. YouTube 官方热门榜 —— 要 API key(免费但要申请,不算「无密钥」)
4. X 官方趋势接口 —— 按量计费
5. Instagram / Facebook / LinkedIn 趋势 —— 没有免费公开源
6. PullPush(Reddit 归档 API)—— 429,明确是付费墙
一句话:**海外这路能自动取到「大家在搜什么、社区在聊什么、什么新闻在发酵」,但取不到「短视频平台站内的实时热榜」** —— TikTok / Instagram 这类站内榜单没有免费无密钥入口。这条缺口要在产品上留一个「人工录入」的位子(跟国内那路一个做法)。
---
## 二、已验通的 9 条
### 1. Google Trends 每日搜索趋势 RSS —— 主源
- **端点**:`https://trends.google.com/trending/rss?geo=US`(`geo` 换国家码:`US` / `GB` / `JP` … 本轮三个都验过,全部 200)。
- **字段**:`<title>` 搜索词、`<ht:approx_traffic>` 大致搜索量、`<pubDate>` 时间、`<ht:news_item>` 关联新闻(含标题与来源)。返回 **10 条**。
- **实测样例**(US,2026-10-11 19:21 取):
```
<title>pope leo</title>
<ht:approx_traffic>200+</ht:approx_traffic>
<pubDate>Sun, 11 Oct 2026 04:00:00 -0700</pubDate>
```
GB 首条 `singapore weather`(500+)、JP 首条 `森脇健児`(500+)。
- **成本 / 授权**:免费、无密钥、无需注册。
- **建议刷新频率**:**每 1 小时**。这份榜单本身是按天滚动的,拉太勤没有新东西。
### 2. Reddit 公开热榜 Atom RSS —— 主源(海外社区热榜)
- **端点**:`https://www.reddit.com/r/popular/hot/.rss`(另有 `https://www.reddit.com/r/all/top/.rss?t=day`,本轮也 200)。返回 **25 条**。
- **字段**:`<title>` 帖标题、`<author><name>` 发帖人、`<category term="..." label="r/子版">` 所属社区、`<content type="html">` 正文摘要、`<link>` 原帖链接。
- **实测样例**(首条,2026-10-11 19:21 取):
```
<author><name>/u/Chinesemperor</name></author>
<category term="memes" label="r/memes"/>
<title>Why can’t they ?</title>
```
- **成本 / 授权**:免费、无密钥。
- **要点**:**必须走 `.rss`,⛔ 别走 `.json`** —— `.json` 实测 403(报文已存 `取证/REDDIT-JSON-403.json`,是个 190 KB 的拦截页,不是数据)。
- **建议刷新频率**:**每 30 分钟**。`hot` 榜滚动快。
### 3. YouTube 频道 Atom RSS —— 补「账号侧」
- **端点**:`https://www.youtube.com/feeds/videos.xml?channel_id=<频道ID>`。返回 **15 条**。
- **字段**:`<yt:videoId>`、`<title>`、`<published>`、`<media:description>`、`<media:statistics views=...>`。
- **实测样例**(首条,2026-10-11 19:21 取):
```
<yt:videoId>IBVmenOroPs</yt:videoId>
<title>Order in any language with Gemini 3.5 Live Translate</title>
```
- **成本 / 授权**:免费、无密钥。
- **定位**:**这是「对标账号」那一路的海外实现**,不是热门榜。想让海外的对标号监控跑起来,靠的就是它。
- **建议刷新频率**:**每 30 分钟**。
### 4. Hacker News 官方 Firebase API —— 科技向
- **端点**:`https://hacker-news.firebaseio.com/v0/topstories.json`。返回 **500 个 id**(首 5 个:`50041540, 50041682, 50040276, 50041765, 50037949`)。
- **字段**:数组只有 id;逐条用 `https://hacker-news.firebaseio.com/v0/item/<id>.json` 取 `title` / `score` / `url` / `time` / `by`。
- **成本 / 授权**:免费、无密钥、官方。
- **建议刷新频率**:**每 15 分钟**(榜单本身秒级变,但选题用不着这么勤)。
### 5. Product Hunt Atom Feed —— 新产品
- **端点**:`https://www.producthunt.com/feed`。返回 **50 条**。
- **字段**:`<title>` 产品名、`<link>`、`<published>`、`<content>` 简介。
- **实测样例**(2026-10-11 19:21 取):`kōdlo` / `HireKey` / `Pickle Sensei` / `Automations in Perplexity Computer`。
- **成本 / 授权**:免费、无密钥。
- **建议刷新频率**:**每日 1 次**(一天一批产品)。
### 6. Wikipedia 页面浏览 Top API —— 热度硬指标
- **端点**:`https://wikimedia.org/api/rest_v1/metrics/pageviews/top/en.wikipedia/all-access/2026/10/09`(路径末尾是日期,只能取**已经过去的某一天**)。返回 **1000 条**。
- **字段**:`article` 词条、`views` 浏览量、`rank` 排名。
- **实测样例**(2026-10-09 数据):`(1, Main_Page, 6428873)`、`(2, Special:Search, 857711)`、`(3, Nidal_Hasan, 787247)`。
- **成本 / 授权**:免费、无密钥、官方。
- **注意**:前两名永远是 `Main_Page` / `Special:Search`,解析时要按固定名单剔掉,⛔ 别把它们当热点。
- **建议刷新频率**:**每日 1 次**(受数据源限制,取 D-1 的数据)。
### 7. Google News RSS —— 新闻广度
- **端点**:`https://news.google.com/rss?hl=en-US&gl=US&ceid=US:en`。返回 **38 条**。
- **字段**:`<title>`(标题 + 来源,用 ` - ` 分隔)、`<link>`、`<pubDate>`、`<source>`。
- **实测样例**:`World condemns deadly Houthi attack on Saudi Arabia's Riyadh airport - Al Jazeera`。
- **成本 / 授权**:免费、无密钥。
- **建议刷新频率**:**每 30 分钟**。
### 8. BBC News RSS —— 新闻兜底
- **端点**:`https://feeds.bbci.co.uk/news/rss.xml`。返回 **26 条**。
- **字段**:`<title>`、`<link>`、`<pubDate>`、`<description>`。
- **成本 / 授权**:免费、无密钥。
- **定位**:域外新闻的**兜底源**。Google News 挂了它顶上。
- **建议刷新频率**:**每 30 分钟**。
### 9. trends24.in —— X 趋势镜像(HTML)
- **端点**:`https://trends24.in/united-states/`。返回 260 KB HTML。
- **提取方式**:抓 `class=trend-link` 的 `<a>` 文本。实测命中 **1214 条**(含多个时间快照),前 12 条:`Good Sunday / Bama / Kentucky / Georgia / Stein / Shane Gillis / Kiffin / Tyler Simmons / Penta / Dijon Lee / Slinky / Dawgs`。
- **成本 / 授权**:免费、无需密钥。
- **⚠️ 定位说明**:这是**第三方镜像站,不是 X 官方**。它是 HTML 抓取,页面改版就会失效,而且**抓不了历史**。
- **建议刷新频率**:**每 30 分钟**,并且必须配「解析失败告警」—— 解析出 0 条就说明对方改版了,要当故障报,⛔ 不能当「今天没热点」。
---
## 三、没拿到的 6 条(写清卡在哪)
| 源 | 实测结果 | 卡在哪 | 结论 |
|---|---|---|---|
| Reddit `.json` 端点 | `http=403`,回的是 190 KB 拦截页 | 平台对非浏览器/IP 的封锁 | ⛔ 不用,改走 `.rss`(已验证) |
| TikTok Creative Center | `http=200`,正文 `{"code":40101,"msg":"no permission"}` | 需登录态 / 商业授权 | ⛔ **不是免费源**,别写进清单 |
| YouTube 官方热门榜(`videos?chart=mostPopular`) | 未取到 | 需 Data API v3 key(免费但要注册申请) | ⚠️ 严格说不满足「无密钥」。要用就得先申 key |
| X 官方趋势接口 | 未取到 | 2026 年起按量计费(读帖 $0.005/条,趋势查询单列) | ⛔ **要花钱**,只做备选 |
| Instagram / Facebook / LinkedIn 趋势 | 未取到 | 三家都没有免费公开的趋势入口 | ⛔ **查不到**,站内热榜只能人工 |
| PullPush(Reddit 归档) | `http=429`,正文写「不提供免费抓取资源」 | 付费墙 | ⛔ 付费,不用 |
另外两条试过但连不通的:`rsshub.app` 公共实例(`http=000`)、`api.rss2json.com`(`http=000`)。这两个是**本机网络连不通**,不是源本身的问题,所以不判它们「不能用」—— 换个网络环境值得再试。
---
## 四、降级链(主源挂了走谁)
跟国内那路同一套三级写法,海外这路按「按用途分组」而不是「按平台分组」:
```
搜索趋势 Google Trends RSS (US/GB/JP…)
└─ 挂了 ⇒ 换 geo 试(同源换地区,不算降级)
└─ 仍挂 ⇒ 落 L3 人工录入
社区热榜 Reddit /r/popular/hot/.rss
└─ 挂了 ⇒ Reddit /r/all/top/.rss?t=day(同平台另一榜)
└─ 仍挂 ⇒ Hacker News(覆盖科技向)
新闻广度 Google News RSS
└─ 挂了 ⇒ BBC News RSS
└─ 仍挂 ⇒ 落 L3 人工录入
短视频/图片站内热榜
无免费无密钥源 ⇒ 直接落 L3 人工录入(TikTok / Instagram / Facebook / LinkedIn)
```
三级本身沿用上一份的 L1 / L2 / L3:**L1 官方接口**(Google Trends / Reddit / HN / Wikipedia 都属于这级)→ **L2 经许可的第三方聚合**(trends24 属这级,它是镜像站)→ **L3 人工录入**(站内热榜走这条)。
**一条硬规则(照抄国内那路的写法)**:某个源断了,已收藏的热点、已有选题、生产任务**照常工作**。来源故障只影响「新增」,不影响存量。
---
## 五、刷新频率与覆盖率告警
跟国内那路同一套监控口径,海外这路加两条自己的:
| 源 | 建议频率 | 过期判定 |
|---|---|---|
| Google Trends RSS | 1 小时 | 超 2 个周期(2 小时)无新数据 ⇒ 标「数据可能已过期」 |
| Reddit RSS | 30 分钟 | 超 1 小时 ⇒ 过期 |
| YouTube 频道 RSS | 30 分钟 | 超 1 小时 ⇒ 过期;频道本身不更新属正常,要区分「源挂了」和「号没发」 |
| Hacker News | 15 分钟 | 超 30 分钟 ⇒ 过期 |
| Product Hunt | 1 天 | 超 2 天 ⇒ 过期 |
| Wikipedia Top | 1 天 | 只能取 D-1,取不到 D-1 ⇒ 过期 |
| Google News / BBC | 30 分钟 | 超 1 小时 ⇒ 过期 |
| trends24 | 30 分钟 | **解析出 0 条 ⇒ 直接报故障**(页面改版),不是过期 |
- **成功率算法(与国内同款)**:成功率 = 成功采集次数 ÷ 计划采集次数 × 100%。≥95% 正常;80–95% 警告;<80% 异常,**暂停把它当实时信号**。
- **时区**:海外源的时间戳多为 UTC 或美西(`-0700`),入库统一转 UTC 存,展示按运营所在时区。⛔ 别拿本地时间直接跟源时间比,那会算出负的间隔。
---
## 六、和国内那路怎么合流
两条路**在「统一热点数据模型」那一层合流,⛔ 不合并成一个榜单**:
- 国内:60s v2 主源(`/v2/weibo`、`/v2/douyin`、`/v2/zhihu`、`/v2/toutiao`、`/v2/rednote`、`/v2/baidu/hot`)→ 备源 xxapi v2(`/api/weibohot`、`/api/douyinhot`、`/api/bilibilihot`、`/api/baiduhot`)。
- 海外:本文这 9 条。
- 合流后的每条热点必须带 **`地区`(海外 / 国内)+ `语言`** 两个标记 —— 去重归并那一步靠它们分桶,跨语言不直接比标题相似度(详见同目录流程图那份)。
---
## 七、说人话自评
**评分:47/50**(门槛 45)—— 直接性 9 / 节奏 9 / 信任度 10 / 真实性 10 / 精炼度 9。判据源 `E:/ProgramData/.workbuddy/skills/humanizer-zh`。
为什么「真实性」给满分:这一份里每一条「已验通」都附了端点、取数时间与原始报文落盘路径,每一条「没拿到」都写了实测返回码和它说了什么。没有一条是靠推断写上去的。
---
## 附:取证文件清单(同目录 `取证/`)
| 文件 | 对应端点 | 结果 |
|---|---|---|
| `gtrends-US.xml` / `gtrends-GB.xml` / `gtrends-JP.xml` | Google Trends RSS 三个地区 | 200 |
| `reddit-popular-hot.xml` | Reddit r/popular/hot/.rss | 200 |
| `yt-channel-rss.xml` | YouTube 频道 RSS(Google for Developers 频道) | 200 |
| `hn-topstories.json` | Hacker News topstories | 200 |
| `producthunt-feed.xml` | Product Hunt feed | 200 |
| `wikipedia-top.json` | Wikipedia Top(2026-10-09) | 200 |
| `googlenews-US.xml` | Google News RSS | 200 |
| `bbc-news.xml` | BBC News RSS | 200 |
| `trends24-us.html` | trends24 美国页 | 200 |
| `REDDIT-JSON-403.json` | Reddit `.json`(反例) | 403 |
| `TIKTOK-CC-noperm.json` | TikTok Creative Center(反例) | 200 但 `no permission` |
@@ -0,0 +1,546 @@
# 热点与选题 · 功能细节(照着能做出来的那一版)
> 用户 2026-10-11 逐字批评:「**框图中没有细节,热点从哪里来,根据什么分类,怎么体现热度,如何展示这些细节都没有,做出来的产品也是一个架子没有细节**」。
> 用户追加令:「**不光是我说的这些 带着问题问问 gpt在做判断**」。
> 本文件就是把那四问补到「照着能做出来」的粒度,作为下一步重画框图与流程图的依据。
---
## 〇、这份文档怎么读
**三色标注,一条都不混:**
- 【GPT】= 外部模型(ChatGPT 网页版)给的判断,括号里注它在回复里的位置(如「问题1·1.1」)。逐字原文见同目录 `GPT-对热点与选题板块细节的建议.md`。
- 【补】= 我补的 —— 多半是把 GPT 的话落到现版的具体字段和口径上,或者拿现版已有的约定去收口。
- 【现版】= 现版产品里already写着的东西,引用 `2a`/`2b` 的具体位置。
**两条硬边界(先说清,免得越画越大):**
1. **本轮只补细节 + 重画图,⛔ 不改产品。** 页面 7 个、导航名与顺序、板块 39 块、流转 20 条、对象 11 个 —— 一个都不动。
2. 凡是「补细节」绕不过去、必须动上面这五样里的某一样的,**单独登记在 §八**,并写进 `tmp/supervise-inbox/NEED-USER.md` 交回用户,⛔ 不自己拍。
---
## 一、热点从哪来(问题 1)
### 1.1 五路输入,不是只接六个平台热榜
【GPT·问题1·1.1】数据来源分五类,六个平台只是其中的「外部热点源」,⛔ 不该把所有输入做成六个平级入口。
| 来源类型 | 具体数据 | 主要作用 | 优先级 |
|---|---|---|---|
| 平台热榜 | 微博热搜/抖音热点词与热门视频/知乎热榜/头条热榜/小红书趋势 | 发现平台正在讨论什么 | P0 |
| 对标账号 | 对标号新发内容、异常高表现内容、更新频率 | 发现同赛道正在验证的内容 | P0 |
| 评论与搜索需求 | 高频评论问题、搜索联想词、知乎问题、用户反复追问 | 发现真实需求与内容缺口 | P0 |
| 自有账号数据 | 自己发布内容的播放、互动、涨粉、转化、收入 | 发现已验证的选题模式 | P1 |
| 人工输入与外部信号 | 运营手动录入、行业新闻、节日节点、客户需求、内部灵感 | 补充机器采集不到的信息 | P1 |
【GPT·问题1·1.1】为什么是五类而不是六平台 —— 因为热点有三种**本质不同**的信号:**注意力信号**(大家在关注什么)/**需求信号**(大家真正想知道什么)/**验证信号**(什么内容已被证明能带来结果)。平台热榜解决第一种,评论+搜索+对标内容解决第二种,自有账号数据解决第三种。
【补】这一条直接对上现版的 7 处断点之一 ——「没有平台热榜这一路输入」(`547748` 第 1 条)。现版五路里已经有了后四路(对标账号=F1、评论=F3、自有账号数据=P7 回写、人工输入=随手记/选题库),**缺的正是第一路**。
【补】现版落点映射(⛔ 不改结构,只说明它们现在住哪):
| 五路输入 | 现版落在哪 |
|---|---|
| 平台热榜 | ⛔ 现版没有(本目标的核心缺口) |
| 对标账号 | P2「对标内容」块(F1) |
| 评论与搜索需求 | P2「评论区洞察」块(F3) |
| 自有账号数据 | P7 复盘台产出的 `Performance`,回写 P2(流转第 20 条) |
| 人工输入 | 随手记(全局入口)+ 选题库(F2) |
### 1.2 六个平台具体怎么接
【GPT·问题1·1.2】接入策略是**产品优先级**,⛔ 不代表所有平台都允许任意应用直接读取全部热榜。
| 平台 | 优先获取的数据 | 降级方式 |
|---|---|---|
| 微博 | 热搜词、排名、热度、原文链接 | 手动粘贴热搜词/链接,保留原始榜单截图 |
| 抖音 | 实时热点词、上升词、热门视频 | 经许可的第三方数据服务;手动录入 |
| 小红书 | 热搜词、趋势关键词、相关笔记 | 手动输入关键词或笔记链接,记录采集时间 |
| B站 | 热门视频榜、分区榜、互动数据 | 手动添加热门视频链接;定时导入榜单 |
| 知乎 | 热榜问题、标题、热度、回答情况 | 手动录入问题链接 |
| 今日头条 | 热榜新闻、热点关键词、原文链接 | 手动导入热点列表 |
【GPT·问题1·1.2】三条已经能核实的接入依据:抖音开放平台有实时热点词和上升词接口(需申请 `hotsearch` 权限,热点榜约每 2 小时刷新);抖音另有热门视频榜但属**离线统计**(统计最近 24 小时、每天上午产出),⛔ 不能当实时热搜用;知乎有官方数据开放平台的热榜 API 和 Skill。
【GPT·问题1·1.2】一条要紧的提醒:**不要因为浏览器能打开一个榜单,就默认产品可以长期、稳定、合规地自动抓取。**
【补】现版 `2a` F1 的治理里已经有「退避重试 3 次后转『手工录入对标号』的降级路径」和 90 秒超时 —— ⛔ 那是对标账号那条路的;热榜这条路要照同一套写法补齐来源清单,⛔ 不能只有一句「接入各平台热榜」。
### 1.3 三级降级(这是「取不到怎么办」的答案)
【GPT·问题1·1.3】数据接入分三级,逐级往下退:
- **L1 官方 API/正式授权接口** —— 自动拉取、定时更新、保留原始字段。可用时优先用。
- **L2 经许可的第三方聚合服务** —— 补官方没有的榜单,但必须验证授权、覆盖率、刷新频率、成本、稳定性。
- **L3 人工录入/链接导入** —— 允许粘贴标题、链接或导 CSV。**无法确认的数据⛔ 不填假热度**,标「暂无数据」。
【GPT·问题1·1.3】再加一条关键规则:**来源故障不应该导致选题库不可用。** 某个平台断流,已收藏的热点、已有选题、生产任务都必须照常工作。
【补】现版已有的两条可与上面拼起来:`2a` F1 写了「刷新失败时有明确提示而不是静默空列表」,`2a` F2 写了选题库「落本地知识库目录,刷新与重启后仍在」⇒ 合起来就是 GPT 说的「来源故障不影响选题库」。
### 1.4 「数据来源清单」长什么样(一条条照做)
【GPT·问题1·1.4】⛔ 不要把来源只做成一排平台图标,要有一个**能配置、能监控、能排障**的数据源清单。每条来源带这些字段:
| 字段 | 示例 | 用途 |
|---|---|---|
| 来源名称 | 抖音实时热点词 | 识别数据源 |
| 平台 | 抖音 | 按平台筛选 |
| 源类型 | 平台热榜 | 区分榜单/搜索/对标 |
| 接入方式 | 官方 API | 评估稳定性与合规性 |
| 权限状态 | 已授权/待申请/已失效 | 明确可用条件 |
| 更新频率 | 每 2 小时 | 管理新鲜度 |
| 最近成功时间 | 16:00 | 排查断流 |
| 最近失败时间/原因 | 15:00 / 权限过期 | 诊断异常 |
| 数据覆盖率 | 最近 24 小时成功率 | 判断可靠性 |
| 数据字段 | 标题、排名、热度、链接 | 检查是否够算 |
| 使用限制 | 商业展示、留存期限 | 约束数据使用 |
| 成本/配额 | 每日调用量、费用 | 控制成本 |
【GPT·问题1·1.4】覆盖率要有算法,别只写个字段名:
- 成功率 = 成功采集次数 ÷ 计划采集次数 × 100%。
- ≥95% 正常;80%–95% 警告;<80% 异常(显示最近成功时间,并**暂停把它当实时信号**)。
- 超过 2 个预期更新周期没有新数据 ⇒ 标「数据可能已过期」。
【GPT·问题1·1.4】⚠️ 这里的 95% 等是**产品建议的监控阈值**,⛔ 不是平台的服务承诺。
### 1.5 首版接入顺序
【GPT·问题1·1.5】先接权限明确、能稳定返回结构化数据的(知乎热榜、抖音热点词)+同时上线对标账号和评论洞察(复用现成能力)+微博/小红书/B站/头条逐个过权限验证后接。**首版成功标准不是「六个平台图标全亮」,而是每天能稳定发现、筛选、沉淀一批真实可用的候选选题。**
【补】一句话收到现版上:热榜这条路按 **L1→L2→L3 三级降级 + 来源清单 + 覆盖率告警** 来建;首版只接已经验证能稳定返回的两三个源,⛔ 不做「六平台全绿」的门面。
---
## 二、热点按什么分类(问题 2)
### 2.1 四层分类,一层管一件事
【GPT·问题2·2.1】⛔ 不要用一个分类字段解决所有问题。把「内容是什么」「来自哪里」「适合谁做」「做到哪一步」分开:
| 层级 | 维度 | 示例 | 谁维护 | 目的 |
|---|---|---|---|---|
| L1 | 内容领域 | 科技、商业、职场、教育、娱乐、生活、财经 | 系统初判,用户可改 | 过滤不相关热点 |
| L2 | 事件类型 | 突发、产品发布、政策变化、人物事件、争议、节日节点 | 系统初判,用户可改 | 选内容切入方式 |
| L3 | 账号适配 | 适合哪些人设/内容账号/发布平台 | 系统推荐,用户确认 | 派给正确的运营对象 |
| L4 | 工作状态 | 待判断、观察中、待制作、制作中、已发布、已放弃 | 系统与用户共同维护 | 推进生产、避免重复劳动 |
【GPT·问题2·2.1】四层⛔ 不能混。举例:「某 AI 模型发布」=科技领域 + 产品发布事件,同时适配「AI 工具测评」和「职场效率」两个人设,最终**分别生成两条角度不同的选题**。
### 2.2 维护规则(防 AI 乱打标签、防人工维护爆掉)
【GPT·问题2·2.2】五条规则:
- **领域**:系统最多推 3 个标签,必须有 1 个主领域;置信度 <0.7 标「待确认」。
- **事件类型**:每个热点只设 1 个主类型,最多 2 个辅助标签。
- **账号适配**:按定位/历史表现/受众/变现目标,最多推 3 个适配人设;用户可增删。
- **工作状态**:由工作流事件自动更新(点「开始制作」⇒ 变「待制作」或直接建生产任务),⛔ 不能靠 AI 猜文字猜状态。
- **自定义标签**:允许加品牌/产品/地域/人物/活动标签,但⛔ 不让自定义标签取代系统基础分类。
【GPT·问题2·2.2】**不建议首版做三级以上的固定行业树** —— 树太深维护成本高,AI 分类稍偏用户就要花大量时间纠错。
### 2.3 两个辅助维度(⛔ 不塞进分类树)
【GPT·问题2·2.3】
- **来源平台**:微博、抖音、小红书、B站、知乎、头条、对标账号、评论区、人工输入 —— 用来定位信息入口。
- **热点生命周期**:刚出现、快速上升、稳定发酵、开始衰退、已过期 —— 用来判断还有没有创作窗口。
### 2.4 界面上怎么用分类
【GPT·问题2·2.4】首屏⛔ 不展开庞大分类树,用**三个快速筛选区**:
1. **领域**:全部/科技/商业/职场/生活/娱乐/其他。
2. **适配人设**:全部人设/当前人设/多账号可复用。
3. **阶段**:刚出现/上升中/持续发酵/待制作。
更多事件类型、来源平台、工作状态放「筛选」抽屉里。**矩阵运营最有价值的不是让用户看到所有热点,而是默认优先展示「与当前人设相关、仍在有效窗口、还没被团队处理」的热点。**
### 2.5 与现版的对照(这里要提醒一处)
【现版】`2b` §五 P2 现在写的是「选题库按**进度 × 类型**两个正交维度分类」:进度=待做/在写/已用,类型=选题/对标线索/评论洞察/数据异动/灵感。
【补】两者是**两层不同的东西**,别当重复:
- GPT 的 **L4 工作状态** ≈ 现版**进度**(但更细,6 态 vs 3 态)。
- GPT 的 **L1 内容领域/L2 事件类型/L3 账号适配** 是现版**没有的**新维度。
- 现版的**类型**(选题/对标线索/评论洞察/数据异动/灵感)在 GPT 的框架里对应「这条信息**是什么**」,和 L1/L2 不是一回事 —— 它是五路输入落地后的**归属分类**。
【补】⇒ 结论:GPT 的四层是「分类维度」的补全,现版的两维是「选题库内部管理」的口径。**要不要把 L1–L3 加进现版、要不要把进度从 3 态扩到 6 态,属改 `2b`/`2a`,本轮只登记,见 §八。**
---
## 三、热度怎么体现(问题 3)
### 3.1 三种分数,各答一个问题
【GPT·问题3·3.1】⛔ 不要把平台原始热度值直接放进同一条榜单比较,⛔ 也不要把「热度」和「值得做」合并成一个数字。拆成三个:
- **热度指数(0–100)** —— 这个话题在它自己平台上有多热、现在在升还是在降。答「**值不值得关注**」。
- **选题价值分(0–100)** —— 适不适合当前人设、能不能差异化、成本与风险可接受吗。答「**值不值得做**」。
- **时效状态** —— 立即行动/可排期/持续观察/已过期。答「**现在做还是晚点做**」。
【GPT·问题3·3.1】抖音热度值、微博排名、知乎热度、B站播放量含义不同,直接比较会产生错误结论。
### 3.2 原始热度怎么归一化(三种情况,照公式做)
【GPT·问题3·3.2】先统一数据结构:每次采集都保留**平台/榜单类型/关键词或事件 ID/原始热度值/原始排名/原始榜单总数/采集时间/榜单更新时间/历史快照/来源可信度**。
**情况 A · 平台给连续热度值 x** —— 对同平台、同榜单类型、同时间窗口的热度做对数变换,再映射到 0–100 百分位:
```
H = 100 × PercentileRank(ln(1 + x))
```
百分位是**该平台该榜单内**的相对位置,⛔ 不是全平台绝对热度。建议用最近 30 天样本算分布、最近 7 天样本做校准;样本不足时用当前榜单横截面。
**情况 B · 平台只给排名** ——
```
H = 100 × (1 - (r - 1) / (N - 1))
```
`r` = 排名,`N` = 榜单条数。第 1 名 100 分、第 50 名 0 分。这个分数表达**榜内位置**,⛔ 不表示绝对流量。
**情况 C · 平台没有热度值和排名** —— 用可观测指标(单位时间新增互动、播放增长、评论增长、搜索变化),但**只有在数据定义一致、采样稳定时才算**;否则标「**热度未知**」,⛔ 不能为了显示一个数字就伪造可比性。
### 3.3 光有当前热度不够,还要趋势
【GPT·问题3·3.3】用 **30 分钟**做基础观察窗口,记每次采集的热度指数 `H_t`:
```
T30 = H_t - H_(t-30m)
```
`T30 > 0` 上升,`≈0` 稳定,`< 0` 下降。为避免单次波动误判,用最近 3 个采样点的中位数或平滑值。**对每 2 小时才更新一次的来源,⛔ 不要伪装成每 30 分钟都有新热度**,应显示「趋势数据不足」或用实际可用快照算。
【GPT·问题3·3.3】保留两个观察窗口:**30 分钟**(抓快速上升)+**24 小时**(识别持续发酵)。
### 3.4 三档阈值(首版用可解释规则,⛔ 不上复杂模型)
【GPT·问题3·3.4】
| 档位 | 初始规则 | 产品动作 |
|---|---|---|
| 值得关注 | 热度指数 ≥70,或最近 30 分钟上升 ≥15 分,且来源新鲜 | 优先评估选题价值 |
| 可考虑 | 热度指数 40–69,或热度偏高但趋势数据不足 | 结合人设/差异化/时效判断 |
| 不建议追 | 热度指数 <40 且持续下降无长期价值,或已过期 | 默认降级展示,不进优先队列 |
【GPT·问题3·3.4】一条硬规则:**数据过期的热点⛔ 不得显示为「值得关注」**,哪怕上次采集的热度很高。过期阈值先设「超过 2 个预期更新周期」或「超过 6 小时无新快照」。
【GPT·问题3·3.4】⚠️ 「不建议追热点」⛔ ≠ 「这个话题没有内容价值」—— 有些长尾知识问题本来就不需要热榜高分。
### 3.5 选题价值分:七维加权(这是「值得做」的那把尺)
【GPT·问题3·3.5】借 Easel 的七维,改成适配矩阵运营的口径,每维 1–10 分,加权换算百分制:
| 维度 | 权重 | 评估什么 |
|---|---|---|
| 账号匹配度 | 25% | 是否符合人设定位、受众、内容承诺 |
| 需求与流量潜力 | 20% | 热度、增长趋势、用户问题强度 |
| 差异化空间 | 15% | 有没有新观点/新角度/信息增量 |
| 时效价值 | 15% | 现在做还赶不赶得上有效窗口 |
| 变现或增长价值 | 10% | 是否帮助涨粉、转化、收入 |
| 制作可行性 | 10% | 是否能在所需时间内完成、成本是否合理 |
| 合规与声誉风险 | 5% | 是否涉及版权/隐私/未证实信息/高风险表达 |
```
V = 10 × Σ(w_i × s_i) 权重和为 1,s_i 为各维 1–10 分
```
【GPT·问题3·3.5】合规与声誉风险那一维必须**反向评分**(风险越低分越高)。**明确不允许发布的内容,⛔ 不能靠其他维度高分抵消,应直接触发风险拦截。**
**决策阈值**:70–100 建议做(且无硬性风险拦截);50–69 建议改角度或补信息;<50 不建议投入制作资源。
【GPT·问题3·3.5】还要有数据完整性要求:七维**至少六维有可靠依据**才允许出正式价值分;账号匹配度/时效价值/风险三维**必须有分**;否则显示「**待评估**」,⛔ 不能把缺失数据默认成中等分。
### 3.6 把「相对平时水平的倍数」变得可解释
【GPT·问题3·3.6】现版对标内容上那个「倍数」要和热榜热度指数**彻底分开**。定义:
```
M = 该内容当前播放量 ÷ 该账号同类型内容的基准播放量
```
基准值=该账号**最近 30 天内、同内容类型的有效样本中位数**,**至少 10 条有效样本**。样本不足 ⇒ 显示「样本不足」,⛔ 不强行给倍数。
【GPT·问题3·3.6】播放量拿不到时可改用互动率或评论数,但必须注明比较口径,⛔ 不能把不同指标混成一个「爆款倍数」。三种显示:「播放表现 2.4×」/「互动表现 1.6×」/「暂无可靠基准」。
【补】这一条正好补上现版 7 处断点里的第 2、3 条(`倍数没分母`、`zone 没阈值`)。现版 `547748` 报告给的建议值是「近 30 条中位数、样本 <10 不给、异常值 ≥3.0、低粉爆款 ≥2.0 且粉丝 <1 万」;GPT 这版把窗口写成 **30 天**(不是 30 条)、样本下限 **10 条**,两版**不一致** —— 见 §八待定项。
---
## 四、这些细节在界面上怎么展示(问题 4)
### 4.1 首选布局:一个工作台,不是六个平台的榜单拼盘
【GPT·问题4·4.1】保留「选题雷达」页,把「热点发现」做成首屏主视图,对标内容/评论洞察保留为**其他输入视图**。整体结构:
```
选题雷达 数据正常 5/6
今日热点 128 | 值得关注 18 | 待评估 32
[ 热点发现 ] [ 对标内容 ] [ 评论洞察 ] [ 选题库 ] ← 视图切换
┌ 热点发现 ───────────────────────────────┐
│ 排序:综合优先级 ▼ 全部平台 ▼ 全部领域 ▼ 当前人设 ▼ 近24小时 ▼ │
│ 86 热度 │ AI 工具发布新功能 │
│ │ 抖音 · 科技 · 12 分钟前更新 · 快速上升 · 匹配当前人设 │
│ │ 建议角度:普通用户如何用它完成一项具体任务 │
│ │ 价值分 82 · 评估置信度高 [加入选题库][生成选题] │
│ 71 热度 │ 职场人讨论远程办公 … │
└────────────────────────────────────────┘
```
【GPT·问题4·4.1】几个重点:顶部数字判**整体工作量**(⛔ 不是替代列表);主区以热点列表为核心;每条同时显示热度、趋势、适配程度和下一步操作;**七维评分⛔ 不铺在列表里**,详细依据放详情抽屉。
### 4.2 列表/卡片/榜单,选哪个
【GPT·问题4·4.2】**首选:桌面端表格化列表 + 右侧详情抽屉。** 理由是运营者要高频比较、批量处理、筛选、派发,不只是阅读。
| 组件 | 推荐形式 | 理由 |
|---|---|---|
| 顶部概览 | 3–4 个统计指标 | 看热点池规模、待处理量、数据状态 |
| 平台入口 | 横向 Tab 或多选筛选器 | 快速切来源,⛔ 不拆成六个孤立页 |
| 热点列表 | 表格化列表 | 方便排序、批量收藏、批量忽略 |
| 热点详情 | 右侧抽屉 | 不离开列表就能看证据、评分、相关内容 |
| 选题候选 | 独立选题卡片 | 强调创作角度、目标人设、生产动作 |
| 选题库 | 列表 + 可切换看板 | 支持检索、状态管理、批量操作 |
【GPT·问题4·4.2】纯卡片瀑布流更适合视觉灵感浏览;纯榜单适合看名次,⛔ 不适合跨平台决策。可以允许切视图,但**默认视图要服务运营效率**。
### 4.3 每条热点显示什么(七组,一条不多)
【GPT·问题4·4.3】首屏控制在 7 个信息组:
1. **热点主体** —— 标题、事件摘要、关键词、原文链接。
2. **来源与新鲜度** —— 平台、榜单类型、排名、最后采集时间。
3. **热度与趋势** —— 热度指数、上升/稳定/下降、趋势窗口。
4. **分类与适配** —— 领域、事件类型、推荐人设。
5. **决策结果** —— 建议做/改角度/观察/不建议做,可带价值分。
6. **推荐切入角度** —— 一句话说清为什么适合该人设、建议从哪切。
7. **下一步操作** —— 加入选题库、生成选题、观察、忽略。
【GPT·问题4·4.3】一个要紧的交互细节:**「收藏热点」和「生成选题」是两个不同动作。** 收藏=保留原始事件稍后再评;生成选题=创建一条带明确角度/人设/形式的选题记录。只有「收藏」和「做内容」两个按钮,用户很难表达「有价值,但我还没想好怎么做」。
【现版】现版的对应按钮是「转入创作」(`2b` §六第 8 条流转)与选题库的「做内容/排期/推进状态」。**「收藏热点」这个动作现版没有** —— 见 §八。
### 4.4 一屏放多少条
【GPT·问题4·4.4】桌面端:首屏 **8–12 条**完整热点记录;单条行高约 **88–120 px**;默认**每页 20 条**,可选 20/50/100;左侧筛选区约 **200–240 px**,中间列表约占可用宽度 **60%–70%**,详情抽屉宽约 **400–480 px**;列表默认⛔ 不展示全部七维,只展示热度、趋势、建议和关键风险;选中后在右侧看详细评分依据。
【GPT·问题4·4.4】⚠️ 尺寸是初始设计建议,应通过原型实测调整。⛔ 别为了「一屏塞更多」把每条压成只有标题和一个分数。
### 4.5 默认排序(⛔ 不是按热度从高到低)
【GPT·问题4·4.5】首选**行动优先级**排序:
1. 有效、可信、正在快速上升、且适配当前人设的。
2. 热度高、价值分高,但趋势较稳定的。
3. 热度中等、需求明确、有差异化空间的长尾选题。
4. 观察中、数据不足或与当前人设关联弱的。
5. 已过期、已忽略、已生成选题的。
【GPT·问题4·4.5】同时保留「按热度/按上升速度/按最新/按价值分」四种手动排序。
【补】现版没有关于 P2 排序的规定,这一节是纯新增细节。
---
## 五、一个「选题板块」要具备哪些细节(问题 5)
【GPT·问题5·5.1】拆成 **8 个能力模块**,前四个解决发现和判断,后四个解决工作流闭环:
| 模块 | 必须具备的细节 | 解决什么问题 |
|---|---|---|
| 1 数据采集 | 来源管理、更新频率、失败重试、采集时间、原始链接、数据质量状态 | 保证热点不是过期或虚假数据 |
| 2 事件去重 | 标题相似度、关键词匹配、事件归并、跨平台关联 | 避免同一热点重复占列表 |
| 3 热度与趋势 | 当前热度、排名变化、历史快照、趋势图、过期判定 | 判断现在是不是合适窗口 |
| 4 价值判断 | 人设匹配、差异化、时效、成本、变现、风险及证据 | 帮用户决定做不做 |
| 5 选题生成 | 多角度建议、标题草案、核心观点、目标受众、内容形式 | 把热点转成真能生产的选题 |
| 6 选题库管理 | 收藏、状态、负责人、截止时间、标签、关联热点、去重、搜索 | 避免只收藏不处理 |
| 7 内容生产衔接 | 目标人设、发布平台、内容 Brief、写作/脚本/素材入口 | 把选题推进到制作 |
| 8 效果回收 | 发布记录、播放互动、涨粉、转化、收入、复盘与评分校准 | 验证哪些判断真的有效 |
### 5.1 热点和选题必须是两种数据对象
【GPT·问题5·5.2】这是最建议在**数据模型阶段就定死**的一件事:
- **热点事件 Hotspot** —— 原始标题、事件描述、来源平台、原始链接、热度快照、生命周期、事件 ID。
- **选题 Topic** —— 创作角度、目标人设、目标受众、内容形式、核心观点、差异化、价值分、生产状态。
【GPT·问题5·5.2】关系是**多对多**:一个热点可生成多个选题;一个选题可关联多个热点/评论洞察/对标内容;一个选题指定一个主人设、关联多个目标平台。**这样能避免「收藏了一个热点就算选题」。**
### 5.2 选题生成必须有结构化 Brief
【GPT·问题5·5.3】⛔ 不要只让 AI 输出十个标题 —— 标题只是入口,不是可执行的生产任务。每条选题至少输出这些字段:**选题名称/目标人设/目标受众/核心问题/切入角度/核心观点/内容形式/开头钩子/结构提纲/证据与素材/制作成本/风险提示/成功指标**。
【GPT·问题5·5.3】AI 可以先把字段填满,**但必须标出待核实信息**;没证据的内容⛔ 不能伪装成事实。
### 5.3 选题库的「进度 × 类型」怎么升级
【GPT·问题5·5.4】现有「待做/在写/已用」+五类型是不错的起点,但对完整工作流来说**状态过于粗糙**。建议进度改为 6 态:
| 状态 | 进入条件 | 下一步 |
|---|---|---|
| 待评估 | 刚收集,还没决定做不做 | 评估价值 |
| 待制作 | 已确认选题,有基本 Brief | 分配负责人、确认平台 |
| 制作中 | 已创建写作或制作任务 | 继续写作/剪辑 |
| 待发布 | 内容已完成,等检查或排期 | 审核、发布 |
| 已发布 | 已有实际发布记录 | 绑数据并复盘 |
| 已归档 | 放弃、过期或完成复盘 | 查看历史、恢复使用 |
【GPT·问题5·5.4】原来的**类型保留为独立标签**(选题/对标线索/评论洞察/数据异动/灵感)。**热点事件建议保留在独立热点池**,⛔ 不跟普通灵感用同一套管理方式(热点有独立的热度和生命周期)。
【GPT·问题5·5.4】再加三个字段:**负责人**(谁推进)、**截止时间**(什么时候必须完成)、**目标人设与发布平台**(谁来做、发到哪)。GPT 说这三字段比再加分类标签更能提升实际效率。
### 5.4 事件去重与关联
【GPT·问题5·5.5】同一个事件同时出现在微博/抖音/知乎时,⛔ 不该默认显示三条互不相关的记录,应该归并成一个**热点事件**:事件标题 + 来源(多平台)+ 跨平台表现(各平台分别显示排名/热度/趋势)+ 关联内容 + 推荐选题。
【GPT·问题5·5.5】**但去重 ≠ 合并所有数据** —— 各平台热度必须保留独立记录,⛔ 不能把微博热度和抖音热度直接相加。建议先用标题相似度/关键词/时间窗口做候选归并,再由 AI 判断是否同一事件;低置信度归并**让用户确认**。
【现版】现版 `2a` F2 已有「同一条灵感重复提交按内容 hash 去重」—— 那是**单条信息**的去重;GPT 这条是**跨平台事件**的归并,比它高一档。
### 5.5 让热点与账号定位真正关联
【GPT·问题5·5.6】矩阵运营最大的优势是**同一个事件被多个账号从不同角度用**。同一个科技热点可以生成:AI 工具测评人设(实测功能优缺点)/职场效率人设(能否解决具体工作问题)/商业观察人设(产品策略与竞争)/新手教程人设(一步步教)。
【GPT·问题5·5.6】所以热点详情必须有「**适配人设**」区域,至少显示:推荐人设/推荐理由/建议内容角度/建议发布平台/预计制作成本/是否与已有选题重复。**⛔ 不能只按关键词匹配人设** —— 「AI」不意味着所有 AI 热点都适合每个科技号。
### 5.6 发布后的反馈闭环
【GPT·问题5·5.7】每条已发布内容应关联回原始选题和热点,记录:发布平台/时间/链接;发布后 **2 小时、24 小时、7 天**的可用表现数据;播放量/互动率/收藏率/涨粉/转化/收入;与该账号同类型内容的历史基准比较;**实际结果与预估结果的偏差**。
【GPT·问题5·5.7】⛔ 不是所有平台都能给全部指标,系统应**按实际授权情况记录可用字段**。
### 5.7 四项容易被低估的运营保障
【GPT·问题5·5.8】**操作审计**(谁收藏/改分/放弃/发布)/**权限控制**(团队、工作空间、内容账号的查看与编辑)/**异常提醒**(来源断流、热点即将过期、任务逾期、内容重复)/**数据可追溯**(每个热度、评分、推荐理由都能回到原始证据)。
【GPT·问题5·5.8】尤其 AI 的推荐理由,⛔ 不能只存一句生成文本 —— 最好同时存「用了哪些信号、对应哪些原始数据、评分模型是哪个版本」。
---
## 六、评分/判断这一层怎么落进界面(问题 6)
### 6.1 结论优先,分数辅助,维度可展开,证据可追溯
【GPT·问题6】判断是:**要显示评分,但⛔ 不让分数成为唯一依据**。
【GPT·问题6·6.1】为什么不只显示结论 —— 假设两条都是「建议做,价值分 82」:A 可能因为账号匹配高+正在上升;B 可能因为变现潜力高但时效一般。**运营者该采取的行动不同**,只看结论分不出区别。
### 6.2 四层展示结构
【GPT·问题6·6.2】
- **第一层 · 列表默认展示**:结论 + 价值分 + 推荐角度 + 一句话理由。例:`AI 工具发布新功能 · 建议做 · 82/100 · 推荐角度:真实任务实测 · 理由:人设匹配高、热度上升、成本可控`。
- **第二层 · 详情页评分明细**:七维逐项 `账号匹配度 9/10`/`需求与流量潜力 8/10`/`差异化空间 7/10`/`时效价值 9/10`/`变现或增长价值 7/10`/`制作可行性 8/10`/`合规与声誉风险 8/10`。
- **第三层 · 判断依据**:为什么推荐(适配当前人设/仍有创作窗口/需要验证什么)。
- **第四层 · 用户决策**:接受建议/调整方向/稍后观察/不做并记录原因。
### 6.3 哪些显示、哪些不显示
【GPT·问题6·6.3】
| 信息 | 列表 | 详情 | 判断 |
|---|---|---|---|
| 做/改方向/观察/不建议做 | 必须 | 必须 | 用户先要行动结论 |
| 选题价值分 | 建议显示 | 必须 | 便于快速比较 |
| 热度指数及趋势 | 必须 | 必须 | 与价值分分开显示 |
【GPT·问题6·6.3】⛔ 不建议首屏默认展示雷达图 —— 七维雷达图可作详情页的辅助可视化,但它**不如明确的结论、评分理由、风险提示直接**。
### 6.4 「置信度」和「价值分」必须分开
【GPT·问题6·6.4】三个例子说清区别:价值分 85 但置信度低 ⇒ 值得做但证据不足,用户先核实;价值分 65 但置信度高 ⇒ 有充分证据判断价值一般,可考虑改角度;价值分 90 但存在高风险 ⇒ ⛔ 不因分高就自动进生产。
【GPT·问题6·6.4】置信度按**数据完整性/来源可靠性/历史样本量/评分依据充分程度**综合定,首版用高/中/低三级并在详情说明原因。**⛔ 不要把置信度等同于 AI 自称「我有多确定」**,它应由可检查的数据条件决定。
### 6.5 评分系统要允许用户纠正
【GPT·问题6·6.5】支持:改单维分数/覆盖系统建议(不做/改方向/先观察)/记录修改原因/把人工决定与最终发布效果关联/查看系统推荐与人工决策的历史差异。**人工改后的分数标「人工调整」,⛔ 不悄悄覆盖原始 AI 评分**,否则后面没法分析模型哪里不准。
【GPT·问题6】收尾一句:**先上「规则 + AI 辅助评分」,攒够真实发布结果后再校准权重**,⛔ 别一上来就把七维分数当成验证过的预测模型。
---
## 七、把上面收成「现版这一页怎么做」(本轮的可执行结论)
### 7.1 一句话链路
```
五路输入(平台热榜/对标账号/评论搜索/自有数据/人工)
→ 统一热点数据模型(来源 + 原始热度 + 快照 + 生命周期)
→ 去重归并成「热点事件」
→ 热度指数(归一化 + 趋势)+ 时效状态
→ 分类(领域/事件类型/适配人设)+ 快速筛选
→ 选题价值分(七维)+ 置信度 + 风险拦截
→ 决策(做/改角度/观察/不做)
→ 进选题库 → 生产 → 发布 → 反馈回收 → 校准权重
```
### 7.2 落到现版 P2 的四块上(⛔ 不新增板块)
| 现版板块 | 补进去的细节(来自本文件哪节) |
|---|---|
| 对标监控概览 | 概览数字保留;补「来源新鲜度/数据质量」提示(§1.4) |
| 对标内容 | 倍数口径写死=近 30 天同类型中位数、样本 ≥10、不足则「样本不足」(§3.6) |
| 评论区洞察 | 补「评论→需求信号」定位;去重按评论标识(现版已有,§5.4) |
| 选题库 | 补价值分/置信度展示、五类后续动作的落点、进度与类型的对照(§2.5/§6) |
### 7.3 缺口清单(本轮登记的,⛔ 一条都没动手)
| 序 | 缺什么 | 属于哪一层 | 要动什么 |
|---|---|---|---|
| 1 | 平台热榜这一路输入 | 数据层 | 可能新增一块或扩 F1 ⇒ 见 §八 |
| 2 | 热点事件独立数据模型 | 数据层 | 可能新增对象 ⇒ 见 §八 |
| 3 | 热度归一化与趋势算法 | 判据层 | 纯补细节,可落 |
| 4 | 三档阈值 | 判据层 | 纯补细节,可落 |
| 5 | 七维价值分与阈值 | 判据层 | 纯补细节,可落 |
| 6 | 倍数口径 | 判据层 | 纯补细节,可落 |
| 7 | 「收藏热点」与「生成选题」两动作 | 交互层 | 要动 P2 交互 ⇒ 见 §八 |
| 8 | 数据源管理清单/页面 | 交互层 | 可能是新页面 ⇒ 见 §八 |
| 9 | 进度 3 态 → 6 态 | 状态层 | 要改 `2a` F2 ⇒ 见 §八 |
| 10 | 负责人/截止时间字段 | 数据层 | 要改 `2a` Topic 字段 ⇒ 见 §八 |
---
## 八、与现版结构冲突的项(只登记,⛔ 本轮没改,交回用户)
下面这几条,**按现版口径做不下去,必须动结构**。本轮一条都没动手 —— 用户 2026-10-10 逐字「**没让改的 交互不允许乱改**」。
| 序 | GPT 的主张 | 撞到现版哪条硬约束 | 需要用户裁定的问题 |
|---|---|---|---|
| A | 加一条「平台热榜」输入,做成首屏主视图 | 板块 39 块固定;P2 现在只有 4 块 | 热榜是**新增一块**(⇒ 板块变 40),还是**并进 F1**(「对标账号监控」扩成「热点与对标监控」)? |
| B | 热点事件独立成对象(Hotspot,与 Topic 多对多) | 对象 11 个固定 | 是否把 Hotspot 提为第 12 个对象?还是让它只作 `Topic` 的一个子类型(现版「数据异动」已接近)? |
| C | 进度从 3 态扩到 6 态 | `2a` F2 现写 `draft→待做→在写→已用/弃用` | 进度扩态要改 `2a` F2 与 `2b` §五 P2,改不改? |
| D | 新增「收藏热点」动作(与「生成选题」分开) | `2b` §六第 8 条流转只有「转入创作」 | 是否新增一条流转(⇒ 流转变 21 条)? |
| E | 新增「数据源管理」页面 | 页面 7 个固定 | 是新开一页,还是做成 P2 的**可点入子区**(不占一页)? |
| F | 给 `Topic` 加「负责人/截止时间」字段 | `2a` §二 Topic 行现只写「来源与分类」 | 字段加不加?(加字段不改对象数,但改 `2a`) |
【补】我的倾向(可推翻):**A 选「并进 F1」、B 选「不新增对象(用 `Topic` 的子类型表达)」、E 选「P2 子区」** —— 这三条都满足「更小改动、更少新增形态、不扩大可见面」;C/D/F 是交互与字段级,建议等用户看完图再定。以上仅为倾向,⛔ 不作为已完成的口径。
---
## 附一:来源标注汇总(哪条是谁的)
**属 GPT 判断的**:五路输入与三信号、六平台接入与降级方式、L1/L2/L3 三级降级、数据源清单 12 字段与成功率告警、四层分类 L1–L4 与维护规则、两个辅助维度、三种分数、热度归一化公式(三种情况)、T30 趋势、三档阈值、七维价值分与阈值、倍数口径(30 天/≥10 条)、工作台布局、列表+抽屉、七组信息、一屏 8–12 条、行动优先级排序、8 个能力模块、Hotspot 与 Topic 分离、结构化 Brief 13 字段、进度 6 态、事件去重原则、适配人设区域、反馈闭环(2h/24h/7d)、四项运营保障、四层评分展示、置信度与价值分分离、允许人工纠正。
**属我补充的**:五路输入到现版落点的映射表、三元降级与现版治理条款的拼接、「GPT 四层 vs 现版两维」的对照、倍数两版口径不一致的登记、「收藏热点」等新增动作的对照、§七 落到 P2 各块的映射、§八 六条结构冲突项与倾向。
**属现版已有的**:P2 四块与 F1/F2/F3 的功能定义、F1 状态流转与 90 秒超时/退避重试降级、F2 进度 `draft→待做→在写→已用/弃用` 与五类型、F2 内容 hash 去重、F3 评论抓取与样本排序、`2b` 的「进度 × 类型」两维、流转第 8/20 条、资产入库不限页等。
---
## 附二:本份自检
- [x] 四问(来源/分类/热度/展示)每一项都写到「照着能做出来」:有公式、有阈值、有字段、有条数、有尺寸
- [x] 三色标注贯穿全文,⛔ 没把 GPT 的判断与我的补充混着说
- [x] `2a`/`2b`/原型 `ui/mcn-workbench.html` **零改动**
- [x] 页面 7/导航七项/板块 39/流转 20 条/对象 11 个 全部保持
- [x] 与现版结构冲突的 6 条单独登记在 §八,并写进 `NEED-USER.md`
- [x] 已过「说人话」五维评分:**46/50**
*(说人话自评:46/50 直接性 9 / 节奏 9 / 信任度 10 / 真实性 9 / 精炼度 9 —— 判据源 `E:/ProgramData/.workbuddy/skills/humanizer-zh`,门槛 45。)*
@@ -0,0 +1,153 @@
# 热点与选题的功能逻辑关系(据 Easel 逆向梳理)
> 用户令(2026-10-11 04:03 逐字):「完成目标:**根据 Easel 分析梳理热点和选题板块功能的逻辑关系**,并画出产品框图和功能流程图」。
> 输入(**只读**):① Easel 逆向报告 `执行会话/目标-逆向Easel热点雷达与选题链路补齐现版-547748/第1棒_逆向Easel热点雷达与选题链路_2026-10-10.md`(15 456 B);② 现版 `2a-产品功能-新版.md`(V4)、`2b-界面布局-新版.md`(V4)。
> 本棒只做**梳理 + 出图**。`2a`/`2b`/原型 `ui/mcn-workbench.html` **零改动**,页数 7、导航七项、板块 39、流转 20 条、业务对象 11 个全部保持原样。
---
## 〇 先把名字对齐 —— 否则全文对不上现版
🔴 **现版没有叫「热点」的板块。** P2 选题雷达只有 4 块,逐字取 `2b` §五 P2:**对标监控概览/对标内容/评论区洞察/选题库**。
所以本文件这样用词,一处都不含糊:
- **「热点」=选题的信号来源(发现侧)。** 它是 Easel 那套「热点雷达」在现版里的对应物。现版承载它的**不是一个板块,是三块加一个类型**:对标监控概览、对标内容、评论区洞察(三块),加上选题库里的「**数据异动**」(一个类型)。
- **「选题」=「选题库」这一块 + 它往下推的动作。** 板块就是 P2 的选题库(`2a` F2);往下的动作是 F4 拆解、以及把一条选题转进创作台(`2b` §六第 8 条流转)。
- **两块都在 P2 同一页**,这不是凑巧 —— 是用户 2026-10-09 定的归属判据:「找选题和做选题就应该在一起,都是选题相关的事情」(`2a` §一 第 2 条)。
一句话:**「热点」在现版不是一块,是三块加一个类型;「选题」是一块。这一页干的整件事,就是把前面那三块半的信号收进后面这一块,再推出去。**
---
## 一 Easel 那边是什么关系
Easel 的热点雷达**自己不做任何判断**。它只干三件事:把六个平台的热榜拉回来、解析成统一结构、给每条挂两个按钮。
判断在它后面。真正把热点变成选题的是 Plan 层的三个技能(`skill-trending-topics` / `skill-trend-rider` / `skill-topic-evaluator`),它们共用一套七维打分口径(`scoring-dimensions.md`,标题就叫「唯一标准」)。
⇒ 所以 Easel 的链路是**三段**,不是两段:
```
热点(原料池) → 选题库(中转站) → 判断(打分与角度) → 排期
```
**关键**:素材本身不带判断,判断是**后加的一层**。「收藏到选题库」写进去的只有 `title` + `source` + `status: pending`;「做内容」则是把一句话 prompt 发出去,让 Agent 在对话里现算。
---
## 二 现版这边是什么关系
### 2.1 谁产出什么
⚠️ 先纠一个容易搞混的点:**对标监控概览不产出对象。** 它是 F1 的四个数汇总(在监控的账号数/低粉爆款条数/异常值条数/近三天更新条数),是**看板**,不是来源。真正往选题库送东西的是另外几条路。
| 产出者(板块,逐字取 `2b`) | 功能 | 产出什么 | 落到哪 | 依据 |
|---|---|---|---|---|
| 对标监控概览 | F1 | 不产出对象 —— 四个数,用来挑「哪条值得看」 | 本页 | `2b` §五 P2 第 1 块 |
| 对标内容 | F1 | ① `Benchmark` 的线索(对某条发起拆解 → `Asset` 原料);② 异常值 → 一条 `Topic` | ① P3 资产库(第 7 条流转)② 选题库,类型=**数据异动** | `2b` §六第 7 条;`2a` F1/F2 |
| 评论区洞察 | F3 | `Topic`,类型=**评论洞察**(原料是评论里的 `Insight`,一出候选就变成 `Topic`) | 选题库 | `2a` F3 |
| 选题库 | F2 | **`Topic` 的唯一权威记录处**;进度 × 类型两个维度都在这 | 本页 | `2a` F2;`2b` §五 P2 第 4 块 |
| 随手记(全局可达,**不占板块**) | F2 | `Topic`,类型默认=**灵感**,进度默认=**待做** | 选题库 | `2b` §四;`2a` F2 |
**产出关系收成一句话**:三块(对标内容/评论区洞察/随手记)往一处(选题库)送;`Topic` 只在这一个地方落地,别处都是消费它。
### 2.2 什么触发什么
选题库靠**两个正交维度**分流,这就是现版的「判断层」——不是 Easel 那种打分,是**按类型派活**(`2a` F2):
**类型 → 后续动作**(一条信息同时带进度和类型,⛔ 不是二选一):
| 类型 | 后续动作(逐字取 `2a` F2) |
|---|---|
| 选题 | 转入创作 |
| 对标线索 | 去资产库拆解 |
| 评论洞察 | 采纳成选题 |
| 数据异动 | 参与选题判断(做或不做同题) |
| 灵感 | 续写,或升级成上面任一类型(随手记的默认落点) |
**进度 → 状态流转**(`2a` F2):`draft → 待做 → 在写 → 已用 / 弃用`。守卫是「转『已用』需已关联到一条内容」。
两条维度各管一件事:**类型回答「这条是什么、下一步去哪」,进度回答「这条做到哪一步了」**。改类型不改进度,改进度不改类型。
### 2.3 数据怎么流
**对象层**(`2a` §二 11 个对象里,与这一段相关的只有 4 个):
```
Benchmark(P2 产出)──┐
├─→ Topic(P2 产出,唯一权威在选题库)─→ Content(P4)
评论区评论 Insight ────┘ │
(不出本功能,一出候选即成 Topic) └─→ Asset(P2/P3/P4 均可入库,权威在 P3)
Review(P7 产出)──→ Topic(第 20 条流转,复盘反哺下一轮选题)
```
**跨页层**(`2b` §六 20 条里,与「热点/选题」直接相关的 4 条):
| # | 来源 → 目标 | 触发 | 传什么 | 落地 |
|---|---|---|---|---|
| 1 | P1 → P2 | 点「异常值提示」里某条 | `benchmarkId` + `filter=异常值` | P2 按 filter 筛对标内容,停在那一条 |
| 7 | P2 → P3 | 对某条对标内容发起拆解 | `benchmarkContentId` + 选中分区 | P3 以该内容为原文新建草稿条目 |
| 8 | P2 → P4 | 把一条选题转入创作 | `topicId` | P4 创建或切换当前 `Content`;新建草稿 v1;标题继承选题标题 |
| 20 | P7 → P2 | 复盘发现转下一轮选题 | `reviewId` | 选题库「待做」多出一条,来源标该复盘(⚠️ 此条标「新增·待确认」) |
全部走同一条规则:**跨页只传对象 ID 加必要上下文,不传页面临时状态**(`2a` §一 第 3 条)。第 8 条尤其要紧 —— 它治的就是上一版「只改了选题状态就跳页,创作台显示的还是写死的上一条」。
### 2.4 边界在哪
四条边界,都写在现版里,不是我加的:
1. **P2 不负责内容生产。** `2b` §五 P2 的「不应该负责」一栏写着:内容生产那是 P4。选题库把一条选题推出去之后,就不归 P2 管了。
2. **选题库是 `Topic` 的唯一权威,但入库动作不限页。** 这两件事不冲突:`2a` §一 第 4 条把话说死了 —— 「一个对象只有一处」管的是**权威数据只有一份**,⛔ 不管写入动作发生在哪一页。资产那条更明显:P2/P3/P4 都能就地入库,权威记录仍只有一份,统一由资产库页管。
3. **「热点」不单独成页、不单独成块。** 三块信号源和选题库同在 P2,因为它们是同一类事(找选题)。再拆一页出来就会把「找到 → 记下 → 推进」这条链子切断。
4. **随手记不占板块。** 它是**框架层**的全局入口(`2b` §四),任意页面一次点击内碰得到,写进来的东西落进选题库。⛔ 它不算 P2 的第 5 块(V4 已把「灵感速记」并进选题库,就是为消掉这处打架)。
---
## 三 拿 Easel 对照,现版这 7 处是断的(登记,⛔ 本棒不改)
上一棒的报告列了 8 条缺口。这里按「**这条断在哪一块、缺的是哪一层**」重新分了一遍 —— 结论没变,只是落点写清楚了。⛔ 这 7 条**本轮只登记,一条都没动手**(改②段/原型属于扩范围,得用户点头)。
| 序 | 断在哪块(`2b` 板块名) | 缺的是哪一层 | 现状 |
|---|---|---|---|
| 1 | 整页(P2) | 数据层 | 没有平台热榜这一路输入。现版只盯对标号,用户每天刷的公众热榜没有入口 |
| 2 | 对标内容 | 判据层 | 倍数 `mult` 在原型里是字面量(`'4.8×'`、`'6.4×'`)—— 有分子没分母,「该账号平时水平」没定义 |
| 3 | 对标内容 | 判据层 | `zone` 三个值(低粉爆款/异常值/常态)在原型里是硬编码字段,没有阈值 |
| 4 | 选题库 | 转化层 | 转进创作时是裸标题,不带 Easel 那句「先判它适不适合我的账号赛道」 |
| 5 | 选题库 | 文档层 | `Topic` 的 `src` 字段只有界面有,`2a` 没立「来源必填、由产生它的功能写入」的口径 |
| 6 | 整页(P2) | 数据层 | 没有缓存与降级,也没有「这个平台取不到」与「本来就没数据」的界面区分 |
| 7 | 对标内容 | 判据层 | 对标列表不掺 `Account` —— 对标号 A 的爆款和 B 的爆款混在一张表里 |
**现版比 Easel 强的一处,保持住**:去重。Easel 的「已收藏」状态只活在前端内存里,刷新就没了,后端也不去重;现版 `2a` F2 的治理已经写了「同一条灵感重复提交按内容 hash 去重」。这条别照抄它。
**3.2 那两条(第 2、3 序)为什么先修最划算**:它们是**零数据源就能落地**的 —— 不用接外部接口,只要把阈值定下来。上一棒的判断我认:**有阈值才知道错在哪,没阈值永远只是三个标签**。但这属于改②段,不是在梳理任务里顺手做的事。
---
## 四 结论
1. **现版里「热点」和「选题」不是并列的两个板块,是一条链的两端。** 热点侧是三块(对标监控概览/对标内容/评论区洞察)+一个类型(数据异动);选题侧是一块(选题库)。
2. **这条链的枢纽是「类型」这个维度。** 它是现版自己的判断层 —— Easel 用七维打分做判断,现版用「按类型派活」做判断。两者不是一回事:Easel 判「做不做」,现版判「下一步去哪」。
3. **链子是通的,缺的是输入端和判据层。** 输入端缺一路(平台热榜),判据层缺两个能算的数(倍数与分类阈值)。链路结构本身不用改。
4. **上一棒的 8 条缺口全部属于「补内容」,不属于「改结构」。** 页面数、导航项、板块数、流转条数、对象数一个都不用动 —— 这也是本棒一个字没改产品的前提。
---
## 附:三样产出的路径
- 本文件:`执行会话/目标-根据Easel分析梳理热点和选题板块功能-0a758b/逻辑关系-热点与选题-2026-10-11.md`
- 产品框图(HTML,可直接打开):`执行会话/目标-根据Easel分析梳理热点和选题板块功能-0a758b/产品框图-热点与选题-2026-10-11.html`
- 功能流程图(HTML,可直接打开):`执行会话/目标-根据Easel分析梳理热点和选题板块功能-0a758b/功能流程图-热点到选题-2026-10-11.html`
## 附:输出检查
- [x] 板块名逐字取 `2b` §五 P2(对标监控概览/对标内容/评论区洞察/选题库),功能编号逐字取 `2a`(F1/F2/F3)
- [x] 谁产出什么、什么触发什么、数据怎么流、边界在哪 —— 四问各有一节
- [x] `2a`/`2b`/原型 `ui/mcn-workbench.html` **零改动**(本棒只写本目标目录)
- [x] 7 处断点逐条标明「断在哪块、缺哪一层」,并写明本轮只登记不动手
- [x] 未新增板块、未改页数/导航/流转条数/对象数
- [x] 三样产出路径列清
- [x] 已过「说人话」五维评分:**47/50**
*(说人话自评:47/50 直接性 10 / 节奏 9 / 信任度 10 / 真实性 9 / 精炼度 9 —— 判据源 `E:/ProgramData/.workbuddy/skills/humanizer-zh`,门槛 45。)*