Skip to content

限流与 shadowban:源码里的可见性机制

可见性过滤的四种裁定、只对站外推荐生效的账号标签、自动打标签与豁免、Under the Hood 能看到什么,以及民间 shadowban 说法与源码的对照

Updated

本页面向创作者和运营,回答“我是不是被限流了”。本页只讲 For You 推荐流,不讲搜索和通知。本页不贴代码;每条结论附一个源码出处,技术细节见文末链接的技术页。

结论

源码里有一种机制,最接近民间说的 shadowban:账号标签。账号带上某些标签后,它的全部帖子不再推荐给非关注者;关注者和作者本人看不出异常。

这套机制有四个特点:

  1. 它是开源的。 判定逻辑在 可见性过滤(visibility filtering,下称 VF)里,规则清单写在源码中(visibility-filtering/rules/levels.rs:318-361)。
  2. 它按标签判断,不按分数。 排序决定先后,VF 决定能不能出现。打分公式的 30 项全部是行为预测,不读安全标签(xai-value-model/scoring.rs:79-218)。
  3. 标签多数由规则和模型自动打上,多数带过期时间。 常见是 7 天或 30 天。
  4. 用户能看到一部分标签。 Under the Hood 月度报告展示 12 种账号标签和 19 种帖子标签,但有资格门槛,开源默认关闭。

可见性过滤:选帖之后的最后一道检查

home-mixer 选出帖子后,对每条帖子询问 VF(home-mixer/candidate_pipeline/phoenix_candidate_pipeline.rs:485-487)。VF 读取标签、关系和账号状态,给出四种裁定之一(visibility-filtering/models/verdict.rs:20-29):

裁定 含义 home-mixer 的动作
ALLOW 正常展示 保留
NOTICE 展示,并附一条受限说明 保留
INTERSTITIAL 展示,但加一层遮罩,用户点开才能看 保留
DROP 不展示 剔除

home-mixer 只剔除 Drop 一类(包括“此帖不可用”的占位和未完成检查的结果),带遮罩的帖子保留在流里(home-mixer/filters/vf_filter.rs:22-27)。

VF 对同一条帖子用两张规则清单。规则清单在源码里叫安全级别(safety level):

  • 站内候选(你关注的人发的)用 TimelineHome。
  • 站外候选、被引用帖和回复串的上文帖,用更严格的 TimelineHomeRecommendations(home-mixer/candidate_hydrators/vf_candidate_hydrator.rs:70-106)。

后者包含前者的全部规则,再多出一组“只对推荐生效”的规则。同一条帖子因此可以推给关注者,却不推给非关注者。

flowchart LR
    C["选出的帖子"] --> Q{"查看者关注了作者?"}
    Q -- "是:站内" --> L1["TimelineHome<br/>基础规则"]
    Q -- "否:站外" --> L2["TimelineHomeRecommendations<br/>基础规则 + 推荐专属规则"]
    L1 --> V["ALLOW / NOTICE / INTERSTITIAL / DROP"]
    L2 --> V
    V --> F["只剔除 DROP"]

只对站外推荐生效的账号标签:最接近 shadowban 的机制

它是什么

账号带上下列任一标签,它的帖子在非关注者的 For You 里全部被丢弃(visibility-filtering/rules/levels.rs:318-332):

  • 垃圾与风险类:SpamHighRecall、Compromised(账号被盗)、ReadOnly(只读)、ImpersonationHighPrecision(冒充)、AbusiveHighRecall(辱骂)、DoNotAmplify(不放大)(visibility-filtering/rules/levels.rs:65-72)。
  • 成人内容类:NsfwHighRecall、NsfwHighPrecision、NsfwAvatarImage、NsfwBannerImage、NsfwNearPerfect,以及作者自标或审核员标记的 NSFW 账号状态(visibility-filtering/rules/author_rules.rs:155-202)。

这些规则只在 TimelineHomeRecommendations 里。站内候选走 TimelineHome,不含这些规则,所以:

谁在看 看到什么 依据
作者本人 一切正常 规则的作用对象排除作者(visibility-filtering/rules/rule_spec/rule.rs:100-115)
关注者 For You 的站内部分照常出现;Following 时间线照常出现。NSFW 类账号的媒体可能加遮罩 Following 时间线只用 TimelineHome(home-mixer/candidate_hydrators/vf_following_candidate_hydrator.rs:11)
非关注者 推荐里看不到这个账号的任何帖子 visibility-filtering/rules/levels.rs:318-332

作者和关注者都看不出异常。能察觉的信号只有“陌生人的曝光突然没了”。这正是民间对 shadowban 的描述。

它不是什么

  • 不是排序降分。 它是整条丢弃,不是乘一个系数。打分公式不读这些标签(xai-value-model/scoring.rs:79-218)。
  • 不是永久的。 多数自动标签带过期时间,例如 7 天(botmaker-rules/scarecrow/bot/PinnedLowQualityOrBadUrl.bot:36-41)。处置服务也打 30 天的标签,少数规则不设过期时间(abuse-enforcement-service/service-lib/rules/enforcement_user.yaml:5-189)。
  • 不影响关注者的站内推荐。 这是它和封禁的区别。封禁和停用对所有非作者丢弃(visibility-filtering/rules/author_rules.rs:7-19)。
  • 不是只靠人工开关。 下文列出的规则和模型会自动打这些标签。

关注者也可能少看到的情况(依代码推断)

两种情况下,关注者的 For You 也会少一部分帖子:

  1. 被引用帖和上文帖一律按推荐级别检查(home-mixer/candidate_hydrators/vf_candidate_hydrator.rs:76-81)。上文帖或被引用帖被丢弃时,引用它或回复它的帖子连带出局(home-mixer/candidate_hydrators/vf_candidate_hydrator.rs:140-170)。
  2. 因此,账号带 SpamHighRecall 等“对所有非作者生效”的标签时,它在自己回复串里的回复,可能连关注者也看不到。DoNotAmplify 和 AbusiveHighRecall 只对非关注者生效,不触发这种情况(visibility-filtering/rules/author_rules.rs:204-244)。同一批里上文帖本身也是站内候选时,站内结果覆盖站外结果(home-mixer/candidate_hydrators/vf_candidate_hydrator.rs:108-110)。

其他会让帖子消失的规则

对所有非作者丢弃的帖子标签

下列帖子标签在站内和站外都丢弃,关注者也看不到(visibility-filtering/rules/levels.rs:298-316):

  • SPAM(垃圾)、PDNA、BOUNCE(待审核或待作者删除)、FOR_EMERGENCY_USE_ONLY(应急)(visibility-filtering/rules/tweet_rules.rs:28-61)。
  • 4 类 FOSNR 标签:仇恨行为、暴力言论、辱骂、公民诚信(visibility-filtering/rules/tweet_rules.rs:141-167)。FOSNR 一般解读为“言论自由,不保证触达”,源码未给出全称。Under the Hood 对它的说明是“可发现性仅限作者主页”(under-the-hood/strato/lib/underTheHoodLabels.strato:75-98)。

只在推荐里丢弃的帖子标签

下列帖子标签只在站外推荐里丢弃,关注者仍能在站内看到(visibility-filtering/rules/levels.rs:147-152、visibility-filtering/rules/levels.rs:348-359):

  • SPAM_HIGH_RECALL、DO_NOT_AMPLIFY、MALICIOUS_URL(恶意链接)(visibility-filtering/rules/tweet_rules.rs:930-949)。
  • FOSNR_ABUSE_INSULTS(侮辱)(visibility-filtering/rules/tweet_rules.rs:169-174)。
  • 成人与血腥内容:NSFW_HIGH_RECALL、NSFW_HIGH_PRECISION、NSFW_CARD_IMAGE、GORE_AND_VIOLENCE_HIGH_PRECISION 等(visibility-filtering/rules/levels.rs:349-357)。
  • 含 DMCA 版权投诉媒体的帖子(visibility-filtering/rules/tweet_rules.rs:884-889)。

遮罩:不丢弃,但要点开才能看

查看者没有打开“显示敏感媒体”设置时,带 NSFW_HIGH_PRECISION、GORE_AND_VIOLENCE_HIGH_PRECISION 等标签的帖子加遮罩(visibility-filtering/rules/tweet_rules.rs:454-476、visibility-filtering/rules/levels.rs:133-140)。遮罩规则在站内和站外都生效。站外推荐里,这些帖子会先被上一节的丢弃规则拿掉。

法律下架:按国家生效

法律下架只在指定国家生效(visibility-filtering/models/tweet.rs:74-139):

  1. 帖子的下架原因 = 帖子自身原因 + 作者账号的原因(takedowns/tweet-entity-service/TakedownReasonsTransform.scala:52-69)。
  2. 请求国家等于下架国家,或下架是全球范围,VF 丢弃帖子;作者本人不受影响(visibility-filtering/rules/tweet_rules.rs:244-256)。
  3. 账号级的 DMCA 下架不执行,不会波及该账号的全部帖子(takedowns/gizmoduck/RedactUnenforcedTakedownsFilter.scala:64-81)。

另有一条按国家的推荐规则:带 BRAZIL_ELECTION_LEGAL 标签的帖子,在巴西不进推荐(visibility-filtering/rules/tweet_rules.rs:951-959)。上游 10-26 删除的是 home-mixer 的同名过滤器,这条 VF 规则仍在。

标签从哪里来:自动打标签的例子

标签由后台的标签路径写入,不在请求时计算。下表是源码里可核对的例子。阈值为开源默认值。

触发条件 结果 出处
新置顶的帖子含被判为 BAD 或 LOW_QUALITY 的链接 账号标签 SpamHighRecall,7 天 botmaker-rules/scarecrow/bot/PinnedLowQualityOrBadUrl.bot:1-42
最近 5 条帖子里至少 3 条带 NSFW_HIGH_PRECISION(60 天内) 账号标签 NsfwHighPrecision,7 天 safety-label-user-agg/postToUserLabelRules.strato:395-426
一天内至少 3 条帖子的媒体被判为成人内容 尝试打 NSFW 类账号标签 botmaker-rules/scarecrow/derived-feature/ApplyNsfwUserLabel.df:15-38
评分事件带 llm_slop_user(模型判定的低质量 AI 生成账号),且账号尚无 SpamHighRecall 账号标签 SpamHighRecall,7 天 abuse-enforcement-service/service-lib/rules/enforcement_user.yaml:118-123
帖子链接的信誉变为 UNSAFE 帖子标签 DO_NOT_AMPLIFY、MALICIOUS_URL 等 botmaker-rules/scarecrow/bot/rtf_tweets_on_unsafe_verdict.bot:1-35

来源分三类,详见各技术页:

  • 打标签规则:scarecrow 在事件发生时执行 botmaker 规则。
  • 处置与标签聚合:处置服务读模型分数后打标签;另一个任务按帖子标签累计给账号打标签。
  • 账号级信号:agatha、bdsm、user-cred-v2 给账号打分,供上面两类读取。

有些标签不影响 For You

部分自动标签只在通知里生效,不进入 For You 的两个安全级别:

  • 账号标签 AGATHA_SPAM_TOP_USER 等 5 种(visibility-filtering/rules/levels.rs:89-100)。
  • 帖子标签 RISKY_HIGH_VIZ_REPLY(高曝光风险回复)(visibility-filtering/rules/levels.rs:217)。

豁免:大号与政府账号

多数公开的打标签规则跳过三类账号(botmaker-rules/scarecrow/derived-feature/IsHighPageRankUser.df:3-18):

  1. 高 PageRank 账号:user-cred 分数不低于 54。user-cred 是在关注图上跑 PageRank 得到的 0–100 账号分。账号没有分数时,改用粉丝数大于 25000 判断。
  2. 政府认证(灰标)账号(botmaker-rules/scarecrow/derived-feature/IsUserGrayVerified.df:1-11)。
  3. 临时跳过名单里的账号。

豁免不是全局的。“5 条里 3 条成人内容”这条聚合规则不豁免高 PageRank 账号(safety-label-user-agg/postToUserLabelRules.strato:395-426)。处置服务也按粉丝数和 user-cred 分数跳过账号,但开源配置里的阈值是占位值 12.34(abuse-enforcement-service/service-lib/rules/enforcement_user.yaml:19-33)。

开源阈值里的占位值

以下数值是开源版的占位值,线上值源码未包含:

  • 处置服务的粉丝数与 user-cred 跳过阈值:12.34(abuse-enforcement-service/service-lib/rules/enforcement_user.yaml:19-33)。
  • 处置服务写死的粉丝上限检查:12345.67(abuse-enforcement-service/service-lib/src/safety_checks.rs:158-175)。
  • BDSM 行为模型的执法阈值:9.99,最少动作数 999999(bdsm/README.md:104-115)。

部分打标签规则没有公开,理由是降低被规避的风险(README.md:447)。

Under the Hood:你能看到什么,看不到什么

Under the Hood 是按月生成的标签透明度报告。

能看到的:

  • 白名单内的 19 种帖子标签和 12 种账号标签,每种附“含义”和“对可见性的影响”(under-the-hood/strato/lib/underTheHoodLabels.strato:3-184)。
  • 帖子标签按“带标签的帖子数 / 当月帖子数”展示;账号标签按“生效天数 / 当月天数”展示(under-the-hood/strato/columns/underTheHoodReport.User.strato:369-461)。
  • 法律下架记录和涉及的国家。这部分有单独开关,开源默认关闭(under-the-hood/strato/lib/params.strato:21-22)。

看不到的:

  • 不在白名单的标签:只影响通知的账号标签、RISKY_HIGH_VIZ_REPLY、SOFT_NSFW、作者自标的 NSFW 状态等(under-the-hood/strato/lib/underTheHoodLabels.strato:3-184)。
  • 新号和低频账号的报告:账号要注册满 365 天,且报告月内至少发 10 条帖子(under-the-hood/strato/columns/underTheHoodReport.User.strato:18-19)。被封禁的账号查不到报告。
  • 当月的情况:报告只覆盖上一个完整的 UTC 月,月末后至少 10 天才出(under-the-hood/strato/columns/underTheHoodReport.User.strato:20)。

整个报告由开关控制,开源默认关闭;线上开关值源码未包含(under-the-hood/strato/lib/params.strato:15-16)。

民间说法与源码对照

民间说法 源码判定 依据
平台给账号挂了限流标记 有对应机制。 账号标签让全部帖子退出非关注者的推荐 visibility-filtering/rules/levels.rs:318-332
被限流后关注者也看不到 多数情况不对。 关注者的站内推荐和 Following 时间线不受这组规则影响;回复串和引用帖是例外 home-mixer/candidate_hydrators/vf_candidate_hydrator.rs:70-106
限流是永久的 不对。 自动标签多数 7 天或 30 天过期 abuse-enforcement-service/service-lib/rules/enforcement_user.yaml:5-189
限流就是排序分被乘了一个系数 不对。 打分公式不读标签;标签的作用是整条丢弃 xai-value-model/scoring.rs:79-218
站外降权是平台在惩罚我 不对。 站外系数 0.75 对所有站外帖相同;关注者发的回复和转发也乘 0.75 vm-ranker/params.rs:193-222
同一作者后面几条没量 = 被盯上了 不对。 作者多样性衰减只在单次请求内生效,衰减 0.5、下限 0.25 vm-ranker/params.rs:175-192
帖子推不出去 = 被限流 多半不对。 站外帖要先被候选源取到;没被取到,后面的打分和检查都不会发生 home-mixer/candidate_pipeline/phoenix_candidate_pipeline.rs:380-390

怎么判断自己是否带了账号标签

源码只支持以下判断:

  1. 看 Under the Hood 报告。前提:账号满 365 天、上月至少 10 条帖子、该功能对你开放。
  2. 对比两类曝光:关注者曝光正常、非关注者曝光同时断崖下跌,符合账号标签的表现。这是推测,源码不提供直接的查询接口。
  3. 回看触发条件:置顶帖是否含低质量链接、近期帖子是否多次被判成人内容。

出处

结论 技术页 主要源码
四种裁定 可见性过滤(Visibility Filtering) visibility-filtering/models/verdict.rs:20-29
只剔除 Drop 类,遮罩保留 可见性过滤(Visibility Filtering) home-mixer/filters/vf_filter.rs:22-27
站内与站外用两个安全级别 可见性过滤(Visibility Filtering) home-mixer/candidate_hydrators/vf_candidate_hydrator.rs:70-106
只对站外生效的账号标签 可见性过滤(Visibility Filtering) visibility-filtering/rules/levels.rs:65-72
上文帖、被引用帖被丢弃时连带出局 可见性过滤(Visibility Filtering) home-mixer/candidate_hydrators/vf_candidate_hydrator.rs:140-170
置顶坏链接 → SpamHighRecall 7 天 打标签规则(scarecrow 与 botmaker) botmaker-rules/scarecrow/bot/PinnedLowQualityOrBadUrl.bot:1-42
5 条里 3 条成人内容 → 账号标签 7 天 处置与标签聚合 safety-label-user-agg/postToUserLabelRules.strato:395-426
llm_slop_user → SpamHighRecall 7 天 处置与标签聚合 abuse-enforcement-service/service-lib/rules/enforcement_user.yaml:118-123
高 PageRank 与灰标豁免 账号级信号(agatha、bdsm、user-cred-v2) botmaker-rules/scarecrow/derived-feature/IsHighPageRankUser.df:3-18
法律下架按国家 可见性过滤(Visibility Filtering) visibility-filtering/rules/tweet_rules.rs:244-256
Under the Hood 资格与白名单 Under the Hood 透明度报告 under-the-hood/strato/columns/underTheHoodReport.User.strato:18-19

相关页面

Type to search…

↑↓ navigate↵ selectEsc close