Pipeline: 从发帖到展示的 7 步旅程
每条推文经历以下完整链路。任何一步不通过,都不会出现在用户 For You Feed 中。
home-mixer/query_hydrators/ 共 15+ 个 hydrator 并行加载
home-mixer/candidate_hydrators/ 共 16 个 hydrator
| DropDuplicatesFilter | 去重复帖子 ID |
| CoreDataHydrationFilter | 移除加载失败的帖子 |
| AgeFilter | 移除超过保留期的旧帖 |
| SelfTweetFilter | 移除查看者自己的帖子 |
| RetweetDeduplicationFilter | 同一原始内容的转推去重 |
| IneligibleSubscriptionFilter | 移除无权查看的付费内容 |
| PreviouslySeenPostsFilter | 移除已看过的帖子 (Bloom Filter) |
| PreviouslyServedPostsFilter | 移除本次会话已展示的帖子 |
| MutedKeywordFilter | 移除含用户静音关键词的帖子 |
| AuthorSocialgraphFilter | 移除被屏蔽/静音作者的帖子 |
| VideoFilter | 按设置过滤视频 |
| TopicIdsFilter | 话题匹配过滤 |
① PhoenixScorer — Grok-based Transformer 预测 15+ 种互动概率
② RankingScorer — 加权合成 + Author Diversity 衰减 + OON 权重调整
③ VMRanker — Value Model 服务端重排序(可选)
21 个评分维度
Phoenix Transformer 模型预测每条帖子在每个维度上的互动概率,然后加权合成最终得分。
正向信号
越高越好——这些信号推高帖子在 Feed 中的排名
| 维度 | 代码字段 | 含义 | 权重级别 |
|---|---|---|---|
| P(favorite) | favorite_score | 用户点赞的概率 | 最高 ≈ 1.0 |
| P(reply) | reply_score | 用户回复的概率 | 高 ≈ 0.5 |
| P(retweet) | retweet_score | 用户转推的概率 | 高 ≈ 0.3 |
| P(quote) | quote_score | 用户引用转推的概率 | 中等 |
| P(share) | share_score | 用户分享的概率 | 中等 |
| P(share_via_dm) | share_via_dm_score | 用户通过私信分享的概率 | 中等 |
| P(share_via_copy_link) | share_via_copy_link_score | 用户复制链接分享的概率 | 中等 |
| P(click) | click_score | 用户点击帖子的概率 | 中等 |
| P(profile_click) | profile_click_score | 用户点击作者头像的概率 | 中等 |
| P(dwell) | dwell_score | 用户停留阅读的概率 | 中等 ≈ 0.2 |
| Dwell Time | dwell_time | 预测停留时长(连续值) | 连续 |
| Click Dwell Time | click_dwell_time | 点击后停留时长 | 连续 |
| P(video_quality_view) | vqv_score | 视频质量观看概率(需满足最低时长) | 有条件 |
| P(photo_expand) | photo_expand_score | 用户展开图片的概率 | 较低 |
| P(follow_author) | follow_author_score | 用户关注作者的概率 | 加分 |
| P(quoted_click) | quoted_click_score | 点击引用帖子的概率 | 较低 |
| P(quoted_vqv) | quoted_vqv_score | 引用帖视频观看概率 | 较低 |
负向信号
越高越糟糕——这些信号会直接把帖子排名拉到底部
| 维度 | 代码字段 | 含义 | 危害级别 |
|---|---|---|---|
| P(not_interested) | not_interested_score | 用户点"不感兴趣"的概率 | 严重 |
| P(block_author) | block_author_score | 用户屏蔽作者的概率 | 致命 |
| P(mute_author) | mute_author_score | 用户静音作者的概率 | 严重 |
| P(report) | report_score | 用户举报帖子的概率 | 致命 |
| P(not_dwelled) | not_dwelled_score | 用户快速滑过不停留的概率 | 中等 |
[0, NEGATIVE_SCORES_OFFSET] 范围内,这意味着一条被频繁举报的帖子几乎不可能出现在任何人的 Feed 中。一次批量举报可能永久压低你的帖子在模型中的预测概率。权重体系可视化
基于 run_pipeline.py:356 示例权重和代码分析推断的相对权重。生产权重通过 Feature Switches 动态配置。
正向互动权重
后处理乘数
核心评分公式
三段式评分:加权合成 → 多样性调整 → OON 系数
// Step 2: 加权合成 weighted_score = 1.0×P(fav) + 0.5×P(reply) + 0.3×P(rt) + 0.2×P(dwell)
- w_share×P(share) + w_click×P(click) + … - w_block×P(block) - w_mute×P(mute) - w_report×P(report)
// Step 3: Offset (确保负分不会跌破 0) if weighted_score < 0: score = (weighted_score + negative_sum) / total_sum × NEGATIVE_OFFSET else: score = weighted_score + NEGATIVE_OFFSET
// Step 4: Author Diversity 衰减 multiplier = (1 - floor) × decay^position + floor adjusted_score = score × multiplier // position = 同一作者已出现次数
// Step 5: OON 调整 if !in_network: final_score = adjusted_score × effective_oon_weight else: final_score = adjusted_score // 关注列表内容不打折
user_roles(订阅等级)、account_age_days(账号年龄)、country(国家)、has_phone_number(是否绑定手机)动态调整。这意味着 X 可以在不部署代码的情况下,随时改变任何用户群体的推荐策略。DO / DON'T 操作指南
基于算法代码逻辑推导的确定性建议
DO — 一定要做
MIN_VIDEO_DURATION_MS 才能获得 VQV 权重加成。太短的视频等于放弃了一个完整的正向信号维度。mutual_follow_jaccard 是后排序信号。与目标受众互关,提高你在他们 In-Network 源中的优先级。has_media 是独立布尔信号,会被传入模型。纯文字帖少了一个维度的信号。post_age_bucket 是模型输入特征。超过 4800 分钟(80 小时)会进入溢出桶。DON'T — 千万不要做
slop_score(AI 灌水检测)。批量 AI 生成的低质内容会被检测并降分。not_dwelled_score 是独立的负向信号。开头无聊 = 快速滑走 = 负分。IneligibleSubscriptionFilter 会直接过滤非订阅者看不到的内容。MutedKeywordFilter 在评分前就过滤。含有广泛被静音关键词的帖子会从很多人的候选池中直接消失。MIN_VIDEO_DURATION_MS 的视频会让 VQV 权重直接为 0。流量池分层策略
算法对不同体量的博主有结构性的差异化处理
算法行为
- In-Network 为主 — 你的内容主要展示给关注你的人。Thunder 源直接推送到粉丝的候选池。
- OON 突破门槛高 — Phoenix Retrieval 需要你的帖子 embedding 与海量候选竞争。粉丝少 = 互动数据少 = embedding 向量缺乏独特性。
- Author Embedding 弱 — 模型通过
author_hashes编码你的身份。互动历史少的作者,其 embedding 不够"锐利"。 - P(follow_author) 是突破点 — 当 OON 用户看到你的帖子并关注你,这直接扩大你的 In-Network 覆盖。
- Mutual Follow Jaccard 极低 — 几乎没有共同关注网络,在排名后处理中处于劣势。
关键策略
PhoenixTopicsSource 检索到。这是小号进入 OON 候选池的最可靠路径。2. 极致单帖质量 — Author Diversity 衰减意味着你的第 2、3 条帖子分数大幅打折。用 1 条高质量帖击穿阈值,比发 5 条平庸帖效果好得多。
3. 引导关注转化 — P(follow_author) 是独立正向权重。每一个新关注者都直接扩大你的 In-Network 池。
4. 互关策略建网络 — 主动关注并与同领域创作者互动,提高
mutual_follow_jaccard 分数。算法行为
- In-Network + OON 双引擎 — 粉丝互动为帖子提供强初始信号,Phoenix Retrieval 将高互动帖推向全站。
- Author Embedding 成熟 — 大量互动数据让模型能准确预测"谁会喜欢你的内容",OON 检索精准度更高。
author_followers_count作为 VMRanker 输入 — 粉丝数量是 VMRanker 请求中的特征字段,影响 Value Model 的重排序。- Author Diversity 是核心约束 — 粉丝量大后,你可能同时有多条帖子进入同一用户的候选池。衰减效应更明显。
- 负向信号杠杆更大 — 覆盖面广意味着更多人可能触发 block/mute/report。负面信号的统计显著性更强。
关键策略
2. 利用引用推文 —
quoted_click_score 和 quoted_vqv_score 是独立维度。引用其他热门帖子可以搭载其互动热度。3. 分享驱动 — DM 分享和复制链接是独立信号。创作"值得转给朋友"的内容在这个阶段 ROI 更高。
4. 视频战略 — 发布超过最低时长门槛的视频,解锁 VQV 权重通道。大 KOL 的视频更容易被推荐给 OON 用户。
5. 订阅等级 — Premium/Premium+ 通过 Feature Switches 获得不同的排名参数。参数差异化的架构已确认存在。
流量池对比矩阵
| 维度 | 种子期 (0–1K) | 增长期 (1K+) | 代码出处 |
|---|---|---|---|
| 主要流量源 | Thunder (In-Network) | Thunder + Phoenix (In + OON) | phoenix_candidate_pipeline.rs |
| OON 检索精度 | 低 — embedding 向量模糊 | 高 — 大量互动训练数据 | recsys_retrieval_model.py |
| Author Diversity 衰减 | 影响小 — 候选池中很少出现多条 | 影响大 — 频繁多条同时候选 | ranking_scorer.rs |
| 负向信号风险 | 低 — 曝光少,绝对数量少 | 高 — 广泛曝光,批量 block 风险 | ranking_scorer.rs |
| VQV 收益 | 基础 — 视频触达有限 | 放大 — OON 推荐扩大视频曝光 | weighted_scorer.rs |
| Mutual Follow 影响 | 关键 — 唯一排名加成来源 | 辅助 — 互动信号已足够强 | mutual_follow_jaccard_hydrator.rs |
| Topic 系统价值 | 核心 — 进入 OON 的主要通道 | 补充 — 已有强自然检索 | phoenix_topics_source.rs |
| Feature Switch 参数 | 标准参数(可能因新用户有特殊值) | 可能因 user_roles / 订阅等级获得优化参数 | server.rs |
实操手册 — 一条帖子的完整优化
按照算法的评分公式,一条帖子的优化 Checklist
点赞优化
- 内容是否包含可共鸣的观点/金句?
- 是否提供了即时价值(实用、有趣、震惊)?
- 第一行是否就能让人产生"说得好"的反应?
回复优化
- 帖子末尾是否有明确的问题/讨论引导?
- 话题是否有多个合理立场(引发辩论)?
- 发布后 30 分钟内是否回复了评论?
转推优化
- 内容是否是"必须让别人也看到"类型?
- 是否包含原创数据/洞察/独家信息?
- 是否适合引用转推(QT 是独立信号)?
停留优化
- 开头是否足够吸引人阻止快速滑动?
- 内容长度是否足够支撑 5+ 秒阅读?
- 图片/视频是否值得仔细看?
视频优化
- 视频时长是否超过最低阈值?
- 前 3 秒是否有足够的吸引力?
- 引用帖中的视频也会被单独评分
负向防护
- 内容是否可能引发举报?
- 是否会让不感兴趣的人群看到?
- 是否含有常见静音关键词?
- 是否可能触发批量屏蔽?
这意味着:你的受众的行为定义了你的帖子的分数。吸引到正确的受众(高点赞、高回复、低屏蔽),比任何"黑科技"都有效。算法不是一个需要"破解"的黑箱,而是一面反映你内容质量和受众匹配度的镜子。