本页面向创作者和运营,按开源源码列出 For You 推荐读取的用户数据。本页只列这套代码读了什么,不推测 X 在仓库之外收集了什么。每条结论附一个源码出处;开关值都是开源默认值,线上值可能不同。
结论
算法在三个位置读你的数据:
- 你刷 For You 时:home-mixer 按你的用户 ID 现查互动序列、关系、设置和画像,再交给模型和过滤器。
- 你发帖时:后台把你的账号资料写进帖子的嵌入,排序模型还读帖子的公开互动数。
- 可见性检查时:可见性过滤读你的敏感内容设置、年龄、账号年龄和所在国家。
其中分量最重的是互动序列:你最近点赞、回复、转发、停留过的帖子。排序不靠你填写的兴趣标签。
flowchart LR
REQ["请求:用户 ID + 国家 + 语言 + 设备"] --> QH["查询水合器<br/>现查序列、关系、画像"]
QH --> M["召回与排序模型"]
QH --> FL["过滤器"]
POST["你发的帖子 + 账号资料"] --> EMB["帖子嵌入与互动数"]
EMB --> M
M --> VF["可见性过滤<br/>读设置、年龄、国家"]
请求本身只带少量字段。其余数据由查询水合器(query hydrator)补齐。查询水合器是按用户 ID 去各个存储取一类数据的组件。内层流水线装配 21 个查询水合器(home-mixer/candidate_pipeline/phoenix_candidate_pipeline.rs:285-347)。
一、互动序列:模型的核心输入
home-mixer 向用户行为聚合服务取三条序列(home-mixer/candidate_pipeline/phoenix_candidate_pipeline.rs:286-294):
| 序列 | 给谁用 |
|---|---|
| 打分序列 | Phoenix 排序模型 |
| 沉浸式视频打分序列 | 视频沉浸页的打分,只在该场景开启 |
| 召回序列 | Phoenix 召回 |
排序模型的旗舰配置读取最近 1022 条互动,包括点赞、回复、转发、引用和浏览停留(phoenix/xrex/configs/xrecsys.py:316-319)。模型既看你做了什么,也看你刷到却没停留的帖子。
另有两组“近期互动信号”,开源默认开启(home-mixer/params/param.rs:735-746)。它们按类型列出你最近点赞、转发、回复、收藏、分享、原创发帖、展开图片和看完视频的帖子(home-mixer/models/engagement_signals.rs:5-15)。SimClusters 用这些帖子作种子,找相似帖子(home-mixer/sources/simclusters_source.rs:279-291)。
二、关系与设置
home-mixer 读取你的 6 项关系与设置(home-mixer/models/user_features.rs:7-14):
| 数据 | 用途 | 出处 |
|---|---|---|
| 关注名单 | 区分站内帖和站外帖 | home-mixer/candidate_pipeline/phoenix_candidate_pipeline.rs:301-303 |
| 拉黑名单 | 剔除你拉黑的作者,以及转发或引用他们的帖子 | home-mixer/filters/author_socialgraph_filter.rs:9-45 |
| 静音名单 | 剔除你静音的作者 | home-mixer/filters/author_socialgraph_filter.rs:9-45 |
| 订阅名单 | 判断你能否看订阅者专属帖 | home-mixer/candidate_pipeline/phoenix_candidate_pipeline.rs:304-306 |
| 屏蔽词 | 剔除命中你屏蔽词的帖子 | home-mixer/filters/viewer_muted_keyword_filter.rs:26-40 |
| 你的粉丝数 | 随请求读入 | home-mixer/server.rs:143 |
另外三项也影响你的推荐流:
- 谁拉黑了你。 作者拉黑你时,他的帖子也被剔除(
home-mixer/candidate_hydrators/blocked_by_hydrator.rs:24-49)。 - “允许 For You 推荐”设置。 这项设置为否时,For You 只给站内帖(
home-mixer/server.rs:100-101)。 - 你排除的话题。 请求带排除话题时,话题过滤器生效(
home-mixer/filters/topic_ids_filter.rs:15-17)。
三、已看与已推送记录
为了不重复推同一条帖子,home-mixer 读四份记录:
| 记录 | 来源 | 用途 | 出处 |
|---|---|---|---|
| 已看 ID | 客户端随请求带上 | 剔除你看过的帖子 | home-mixer/filters/previously_seen_posts_filter.rs:16-30 |
| 曝光布隆过滤器 | 请求未带时现查 | 一种压缩的“看过集合”,用途同上 | home-mixer/query_hydrators/impression_bloom_filter_query_hydrator.rs:15-17 |
| 已推送 ID | 客户端随请求带上 | 翻页时剔除已推给你的帖子 | home-mixer/filters/previously_served_posts_filter.rs:14-29 |
| 推送历史 | 外层流水线现查 | 外层模块的疲劳控制 | home-mixer/candidate_pipeline/for_you_candidate_pipeline.rs:210-216 |
已看 ID 还会写入 Kafka 消息队列,供下游使用;这一步受开关 EnablePublishSeenIdsToKafka 控制(home-mixer/side_effects/publish_seen_ids_to_kafka_side_effect.rs:35-37)。另一个“已曝光帖子”查询水合器在代码里构造了,但没有装进流水线(home-mixer/candidate_pipeline/phoenix_candidate_pipeline.rs:350)。
四、画像与请求上下文
home-mixer 把下列数据作为“用户上下文”发给 Phoenix 召回和排序(home-mixer/util/phoenix_request.rs:89-148):
| 数据 | 来源 | 开关(开源默认) | 出处 |
|---|---|---|---|
| 国家、语言、客户端版本、IP 地址、账号角色 | 请求自带 | 无 | home-mixer/util/phoenix_request.rs:89-97 |
| 年龄段、性别、州(地区) | 账号资料 | EnableContextFeatures(开) |
home-mixer/query_hydrators/user_demographics_query_hydrator.rs:14-16 |
| 年龄(岁) | 账号资料 | 无 | home-mixer/util/phoenix_request.rs:118 |
| 推断性别及置信分 | 系统推断 | EnableInferredGenderHydration(开) |
home-mixer/params/param.rs:811-816 |
| 关注的 Grok 话题、关注的推荐关注包 | 你主动选择 | EnableContextFeatures(开) |
home-mixer/query_hydrators/followed_grok_topics_query_hydrator.rs:24-26 |
| 由 IP 推算的经纬度和城市区域码 | 系统推断 | EnableIpFeature(开) |
home-mixer/query_hydrators/ip_query_hydrator.rs:14-16 |
| 已安装应用列表 | 设备数据 | EnableUserInstalledAppsHydration(开) |
home-mixer/params/param.rs:790-795 |
| 最近搜索词 | 你的搜索 | EnableRecentSearchQueriesHydration(关) |
home-mixer/params/param.rs:797-802 |
home-mixer 把数据发给模型,不等于模型一定使用它。排序模型的旗舰配置使用国家、语言、经纬度、性别和年龄,不使用已安装应用(phoenix/xrex/configs/xrecsys.py:351-359)。模型还为你的用户 ID 和 IP 地址各查一组哈希嵌入,见 哈希嵌入。
请求开始时,home-mixer 还用国家、语言、客户端、账号角色、是否绑定手机号、回流时间等字段,决定你落入哪组实验参数(home-mixer/server.rs:103-122)。
五、你发帖时:帖子公开互动数
排序模型给每条候选帖子读 5 个公开计数:点赞、回复、转发、引用、浏览(home-mixer/candidate_pipeline/phoenix_candidate_pipeline.rs:417)。帖子发布超过 1213200 秒(约 14 天)后,这 5 个计数置零,不再输入模型(phoenix/xrex/data/recsys/feature_config.py:87-88、phoenix/crates/common/xai-recsys/src/util.rs:765-790)。
新作者扶持也读你的粉丝数,以及帖子在首页的曝光数和点赞数(home-mixer/scorers/author_cold_start.rs:188-193、home-mixer/scorers/author_cold_start.rs:243-255)。详见 新号与冷启动。
六、你发帖时:嵌入里的作者画像
后台的 Grox 在帖子发布后生成帖子嵌入。嵌入是把帖子转成一组数字向量,用来比较相似度。v8.2 与 v8-search 两种嵌入的输入文本以“作者块”开头,作者块包含你的账号资料(grox/flows/mm_emb/renderer_v82.py:187-243):
- 显示名和用户名、简介、所属机构。
- 认证颜色:政府为灰标,企业为金标,付费为蓝标,后附订阅档位(
grox/flows/mm_emb/renderer_v82.py:245-266)。 - 粉丝数和关注数,各附一个档位标签。
- 注册月份、国家、账号语言。
- 是否受保护账号、是否有恶搞或评论账号标签。
- NSFW 标记:账号自标或被审核员标为 NSFW 时写入(
grox/flows/mm_emb/renderer_v82.py:277-284)。
同一段文字由不同账号发出,得到的嵌入不同。Phoenix 召回用帖子嵌入生成语义 ID(phoenix/README.md:110-114)。详见 多模态帖子嵌入器。
七、可见性规则读的数据
可见性过滤 决定一条帖子能不能展示给你。它读你的下列数据:
| 数据 | 作用 | 出处 |
|---|---|---|
| 是否允许显示敏感媒体 | 不允许时,成人或血腥媒体加遮罩 | visibility-filtering/rules/tweet_rules.rs:454-476 |
| 是否登录、是否未成年、是否未填年龄 | 对这三类查看者隐藏成人内容 | visibility-filtering/rules/tweet_rules.rs:294-380 |
| 账号国家与请求国家 | 未填年龄时,按国家清单判断是否隐藏成人内容 | visibility-filtering/rules/tweet_rules.rs:346-380 |
| 请求国家 | 法律下架和媒体地理限制按国家生效 | visibility-filtering/models/tweet.rs:74-98 |
| 账号是否注册不足 24 小时 | 新查看者规则 | visibility-filtering/hydration/decode/viewer.rs:116 |
| 拉黑、静音、静音转发、关注 | 对应丢弃规则;关注决定站内或站外 | visibility-filtering/rules/author_rules.rs:42-65 |
| 订阅关系、Trusted Friends 名单 | 订阅者专属帖与小圈子帖 | visibility-filtering/rules/tweet_rules.rs:396-452 |
八、标签路径读的数据
后台给账号打分的系统也读你的行为。它们不在请求时运行,结果变成账号标签。详见 账号级信号(agatha、bdsm、user-cred-v2):
- agatha:你的账号收到的拉黑、举报、垃圾举报,相对站外点赞的比率(
agatha/scalding/labels/rate_based_labels/RateBasedLabels.scala:29-57)。 - BDSM:你最近 512 个动作的序列,含动作类型、产品界面、停留时长、设备与客户端信号(
bdsm/README.md:26-29、bdsm/README.md:102-103)。 - user-cred-v2:谁关注你,以及近 7 天谁给你点赞、转发(
user-cred-v2/UserCredV2Config.scala:25、user-cred-v2/UserCredV2App.scala:79-100)。
边界
- 本页列的是开源代码读取的数据。X 在仓库之外收集和使用的数据,源码未包含。
- 带开关的数据,某次请求是否读取,取决于线上开关;线上开关值源码未包含。
- 用户行为聚合服务、人口属性服务等数据源的内部实现,源码未包含。
出处
| 结论 | 技术页 | 主要源码 |
|---|---|---|
| 21 个查询水合器 | home-mixer 编排层 | home-mixer/candidate_pipeline/phoenix_candidate_pipeline.rs:285-347 |
| 排序读最近 1022 条互动 | Phoenix 排序模型 | phoenix/xrex/configs/xrecsys.py:316-319 |
| 6 项关系与设置 | 过滤流水线 | home-mixer/models/user_features.rs:7-14 |
| 已看记录用于去重 | 过滤流水线 | home-mixer/filters/previously_seen_posts_filter.rs:16-30 |
| 发给 Phoenix 的用户上下文 | Phoenix 排序模型 | home-mixer/util/phoenix_request.rs:89-148 |
| 公开互动数约 14 天后不再输入 | Phoenix 排序模型 | phoenix/xrex/data/recsys/feature_config.py:87-88 |
| 嵌入里的作者画像 | 多模态帖子嵌入器 | grox/flows/mm_emb/renderer_v82.py:187-284 |
| 可见性规则读的设置与国家 | 可见性过滤(Visibility Filtering) | visibility-filtering/rules/tweet_rules.rs:294-394 |
相关页面
- 推荐系统工作原理 —— For You 的完整流程
- Phoenix 排序模型 —— 互动序列与用户画像 token
- home-mixer 编排层 —— 查询水合器在流水线里的位置
- 过滤流水线 —— 拉黑、静音、屏蔽词、去重
- 多模态帖子嵌入器 —— 作者块的完整字段
- 可见性过滤(Visibility Filtering) —— 可见性规则的输入
- 账号级信号(agatha、bdsm、user-cred-v2) —— 后台账号分数
- 限流与 shadowban —— 账号标签的效果
- 术语速查表