x-algorithm-wiki · X For You 推荐系统源码解读

一条帖子如何走进你的 For You

这份笔记把 cclank/x-algorithm-wiki 的 29 页知识库重新压缩成一篇可读的技术导览:先从大白话理解系统,再进入召回、排序、过滤、广告、Grox 内容理解和运营误区。

源码基础:xai-org/x-algorithm @ 0bfc279 Wiki:29 页 / 5900+ 行 主题:推荐系统架构 整理时间:2026-05-18
请求 For You home-mixer总编排 Thunder关注的人近期帖子 Phoenix 召回站外相似内容 Phoenix 排序预测 22 类行为 排序信息流 + 广告 过滤 / 水合 / 打分 / TopK 选择

这不是“X 算法玄学”,而是一份源码地图

cclank/x-algorithm-wiki 是基于 xAI 开源的 x-algorithm 仓库做的深度知识库。它不是官方文档,也不是运营号式猜测,而是把开源代码里的 Rust 在线服务、Python/JAX 模型、流水线阶段、过滤器、打分器、内容理解服务逐页拆开,并给出文件与行号锚点。

它最有价值的地方,是把“X 推荐算法喜欢什么”这种模糊问题,改写成可验证的工程问题:候选从哪来?怎么过滤?模型预测什么?最终分怎么算?站外内容为什么会被折扣?广告怎么插?哪些流行说法根本对不上源码?

一眼看懂:五大组件

组件定位通俗类比技术要点
home-mixerFor You 请求的总编排层厨房总管外层流水线,负责帖子、广告、推荐模块等最终混排。
candidate-pipeline通用推荐流水线框架标准菜谱格式定义水合、取候选、过滤、打分、选择、side effect 等阶段。
Thunder站内帖子内存库随身速记本从实时流维护近期帖子,快速回答“我关注的人最近发了什么”。
PhoenixML 召回与排序核心HR 海选 + 面试官精排双塔召回 + Grok transformer 排序,预测多种互动行为。
Grox后台内容理解服务超市验货区离线/流式分析帖子,产出安全、垃圾、质量、嵌入等信号。

核心路径是:用户打开 For You,home-mixer 调度内层帖子流水线;Thunder 给出站内候选,Phoenix 召回站外候选;候选被水合、过滤、打分、选择;最后外层再把广告和模块混进结果里。

两层流水线:外层混排,内层选帖

Wiki 里一个关键洞察是:系统不是一条简单链路,而是两层 CandidatePipeline 嵌套。

外层 ForYouCandidatePipeline 历史水合 ScoredPosts Ads / Wtf / Prompts BlenderSelector 内层 PhoenixCandidatePipeline 15 个 Query 水合 6 个源 10 个水合 14 个过滤 3 个打分器 TopK

外层主要负责把“已经选好的帖子流”和广告、关注推荐、提示模块混起来;内层才是真正的帖子推荐系统。内层执行完整十阶段:Query 水合、依赖水合、取候选、候选水合、预打分过滤、打分、选择、选后水合、选后过滤、side effects。

一个工程设计点:水合和候选源通常可以并行,因为彼此独立;过滤和打分通常顺序执行,因为后一步依赖前一步的结果。

推荐系统的经典两段:召回粗筛,排序精排

Phoenix 召回:双塔检索

召回要从海量语料里找出几百到上千个候选。双塔的好处是把用户和帖子分别编码成向量:帖子向量可以离线预计算,线上只需要算用户向量,再做点积相似度和 top-K。

score(user, post) = user_vec · post_vec
topK = nearest_posts(user_vec, corpus_matrix)

这一步决定你有没有资格进入候选池。没有被召回,后面的精排再强也轮不到你。

Phoenix 排序:Grok transformer

排序把用户、互动历史、候选帖子拼成一条序列:[用户 | 历史 | 候选]。模型读取用户历史中的动作、停留、产品面等信号,对每个候选预测多种行为概率。

input = [user, history_1..S, candidate_1..C]
output = P(like), P(reply), P(retweet), P(dwell), ...

排序阶段还有一个聪明设计:候选之间互相看不见,单条候选分数只取决于它自己和用户上下文,便于稳定打分和缓存。

最终分怎么算:不是“互动越多越好”

Wiki 反复强调:Phoenix 模型只是输出多种行为概率,真正把概率变成排序分的是 RankingScorer。它大致做三步。

多行为概率点赞 / 回复 / 停留 / 举报... 加权求和正向加分,负向扣分 作者多样性同作者后续打折 OON 降权站外乘系数 Final Score = Σ(weight_i × P(action_i)) → diversity → out-of-network factor
机制它在干什么直觉解释
多行为预测预测点赞、回复、转发、点击、停留、关注作者,也预测不感兴趣、拉黑、静音、举报、没停留等负向行为。算法不是看“总互动”,而是看“正向概率减负向概率”。
作者多样性衰减同一作者在一次信息流计算中出现越多,后面的帖子分数乘数越小。刷屏不是多曝光,而是让自己的帖子互相稀释。
OON 降权站外候选在最终分上乘一个系数,站内候选不乘。关注流是基本盘;破圈要先被召回,再扛住折扣。
VMRanker可选的外部价值模型重排,由参数开关控制。主排序之后还可以灰度加一层价值模型。

过滤靠规则,打分靠学习

一个很重要的边界:Wiki 认为打分侧几乎删除手工特征,但过滤侧仍然是明确规则。过滤处理的是“能不能给你看”,排序处理的是“你有多可能喜欢”。

预打分过滤

例如已经看过、拉黑/静音、不可见、太旧、屏蔽词、付费可见性等。命中过滤器,候选可能还没进排序就被移除。

选后过滤

TopK 之后还会再做可见性、去重、对话级处理。原因是选中后有些上下文才完整。

广告混排

外层把广告插进帖子流。Wiki 提到 safe-gap 与 partition-organic 两类策略,重点是广告不要紧挨品牌不安全内容。

Grox 则在后台提前做内容理解:垃圾、安全、质量、回复、嵌入等信号,不等到用户打开 For You 时才现场计算。这个旁路架构把重计算从请求路径里拿出去,换来低延迟。

六个运营迷思:源码给出的反直觉答案

流行说法Wiki 的源码级纠偏真正该关注什么
多发帖 = 多曝光作者多样性衰减会让同一作者后续帖子打折。把好内容摊开,避免同一刷新窗口里自我竞争。
互动量越高越好负向行为也被预测并给负权重。避免标题党、划走、不感兴趣、举报。
泛内容容易破圈站外首先要过双塔相似度 top-K;泛而浅会让向量信号变糊。内容要对某个兴趣簇足够锐利。
套模板/关键词能骗算法打分侧没有这类手工特征;关键词更多出现在屏蔽过滤里。服务真实用户反应,而不是迎合不存在的模板规则。
会被同批大 V 挤掉候选隔离掩码让候选互相看不见,分数不依赖同批是谁。分数取决于“这条帖子 × 这个用户”。
有万能涨号攻略打分是 per-user 的,权重是 feature switch 参数,可随时实验调整。承认边界,关注内容与受众匹配。
这份 Wiki 最有价值的态度是克制:它能确定机制方向,例如“负向行为会扣分”“站外候选会乘系数”“同作者会衰减”;但它不声称知道线上真实权重、具体折扣、涨粉百分比。

必须记住的边界

开源仓库给了什么

给了推荐系统的代码骨架、Rust 在线服务、Python/JAX 模型、mini checkpoint、端到端推理脚本、召回与排序的大量机制。对学习工业推荐系统架构非常有价值。

开源仓库没给什么

没有给线上真实权重、生产模型、训练数据、完整 Grok 行为和 X 内部基础设施。home-mixer 也依赖大量内部服务,不能简单 clone 后跑成线上 X。

我的阅读建议

如果你想快速理解,按 guide/how-it-works.md → guide/the-five-components.md → guide/operating-myths.md 读。如果你想学推荐系统架构,直接看 concepts/system-architecture.mdconcepts/phoenix-retrieval.mdconcepts/phoenix-ranking.mdconcepts/scoring-and-ranking.md。如果你做内容运营,再补 guide/posting-guide.md,但不要把它当玄学攻略。