Skip to content

Under the Hood 透明度报告

Under the Hood 报告每天收集账号与帖子的标签,按月聚合,再以页面和 JSON 展示;9 月 18 日起加入法律合规下架

Updated

这一页回答什么

  • Under the Hood 报告是什么,谁能看到,覆盖哪个时间段。
  • 每日任务收集哪些帖子标签、账号标签和下架记录,怎样计数。
  • 服务层怎样把每日数据聚合成月度报告,页面与 JSON 展示哪些字段。
  • 上游在 9 月 18 日加入的“法律合规导致的限流”信息怎样进入报告。
  • 报告不展示哪些标签。

核心结论

  1. 报告按月生成,只覆盖上一个完整的 UTC 月。 月末之后至少 10 天才生成该月报告;该月观察期未完成时,退回再上一个月(under-the-hood/strato/columns/underTheHoodReport.User.strato:20、:172-191、:626-631)。
  2. 资格:账号注册满 365 天,且报告月内至少发了 10 条帖子。 被封禁的账号查不到报告(underTheHoodReport.User.strato:18-19、:597-600、:680-689)。
  3. 报告只展示白名单内的标签。 白名单含帖子标签 19 种、账号标签 12 种。每种标签都附“含义”和“对可见性的影响”两段说明(under-the-hood/strato/lib/underTheHoodLabels.strato:3-184)。
  4. 帖子标签按“带标签的帖子数 / 当月帖子数”展示;账号标签按“生效天数 / 当月天数”展示(underTheHoodReport.User.strato:369-461)。
  5. 9 月 18 日起,报告可以展示下架记录。 下架记录包括第三方举报确认违法、法律请求和 DMCA,并写明涉及的国家(underTheHoodLabels.strato:186-260)。开关 under_the_hood_report_takedowns_enabled 控制是否展示,开源默认关闭(under-the-hood/strato/lib/params.strato:21-22)。
  6. 整个报告也由开关控制,开源默认关闭(params.strato:15-16、under-the-hood/jetfuel/routes/download.tsx:7-8)。源码未包含线上的开关值。

数据流

flowchart LR
    subgraph DAILY["每日任务 scalding"]
        P["UthDailyPostsJob: 帖子标签"]
        A["UthDailyAccountLabelsJob: 账号标签"]
        TP["UthDailyPostTakedownLabelsJob: 帖子下架"]
        TA["UthPctdAccountTakedownEventsJob: 账号下架"]
    end
    P --> M["UthUserMonthMhPublisherJob: 按用户按月聚合"]
    A --> M
    TP --> M
    TA --> M
    M --> MH["Manhattan: userMonthAggregates"]
    MH --> S["Strato 列 underTheHoodReport.User"]
    S --> G["GraphQL user_under_the_hood_report"]
    G --> W["jetfuel 页面"]
    G --> J["JSON 下载"]

依据:任务文件见 under-the-hood/scalding/;存储列见 under-the-hood/strato/columns/mh/userMonthAggregates.strato;GraphQL 查询见 under-the-hood/jetfuel/gql/underTheHoodReport.gql:1-28。

每日任务收集的数据

帖子标签(UthDailyPostsJob)

  • 输入:帖子表、帖子安全标签事件流、帖子安全标签快照(under-the-hood/scalding/UthDailyPostsJob.scala:51-94)。
  • 观察窗:任务在每条帖子发出后观察 7 天(开源默认值,UthDailyPostsJob.scala:438)。
  • 计数口径如下(UthDailyPostsJob.scala:347-421):
    • carried:观察窗内曾被加上该标签的帖子数。
    • removed:上述帖子中,在观察窗结束前标签被移除或到期的帖子数(UthDailyPostsJob.scala:335-345)。
  • 任务同时统计每个用户每天的“合格帖子”数,作为分母(UthDailyPostsJob.scala:96)。
  • 输出行包含:用户、发帖日、标签、carried、removed、观察天数、是否已定稿、部分帖子 id(under-the-hood/thrift/uth_serving.thrift:124-135)。

账号标签(UthDailyAccountLabelsJob)

  • 输入:账号标签记录快照、Gizmoduck 用户修改日志、用户快照(under-the-hood/scalding/UthDailyAccountLabelsJob.scala:16-20、:64、:85、:122)。
  • 任务把 nsfw_admin 安全标记也当作账号标签 NsfwAdmin 收集(under-the-hood/scalding/GizmoduckSafetyFlags.scala:5-10)。
  • 判定口径:某天 UTC 0 点时标签处于生效且未过期,这一天就算生效(UthDailyAccountLabelsJob.scala:166-193)。依此推断:同一天内加上又移除、没有跨过 UTC 0 点的标签,不会被计入。

下架(9 月 18 日起)

  • 帖子下架:任务读取审计服务的 PCTD 动作日志与 DMCA 下架日志,并结合帖子事件(under-the-hood/scalding/UthDailyPostTakedownLabelsJob.scala:49-53、:76)。
  • 账号下架:任务读取审计服务的 PCTD 动作日志、用户快照与 Gizmoduck 修改日志(under-the-hood/scalding/UthPctdAccountTakedownEventsJob.scala:57-70)。
  • 下架行的标签名是下架原因名,并附国家码列表(uth_serving.thrift:52-63)。

服务层的聚合流程

underTheHoodReport.User 列按用户 id 查询,步骤如下(underTheHoodReport.User.strato:595-718):

  1. 账号被封禁时,返回空(:597-600)。
  2. 选择月份:取上一个 UTC 月;月末后不足 10 天时,再往前取一个月。开关 under_the_hood_report_max_month_bucket 可以设置月份上限(:172-191)。
  3. 该月观察未完成时,再退一个月(:620-645)。
  4. 检查资格:注册满 365 天,且当月合格帖子 ≥ 10 条。不满足时,只返回资格检查结果,不返回报告正文(:680-702)。
  5. 生成 JSON:包含时间段、生成时间、帖子数、帖子标签行、账号标签行(:463-523)。

帖子 id 的展示规则如下。这些规则在开关 under_the_hood_report_post_ids_enabled 打开时生效(params.strato:30-37、underTheHoodReport.User.strato:340-367):

  • 带该标签的帖子 ≤ 3 条:全部列出。
  • 带该标签的帖子占当月帖子 > 5%:不列出,改为附说明。
  • 其余情况:列出最新的至多 50 条。
  • 下架行:总是列出最新的至多 50 条。

页面与 JSON 展示的字段

字段 含义 锚点
时间段 报告月的起止日期,UTC underTheHoodReport.User.strato:475-479
Posts in period 当月合格帖子数 under-the-hood/jetfuel/routes/report.tsx:23
Post labels 每个标签:含义、对可见性的影响、3 of 40 posts · 7.50% 形式的占比、可选的帖子列表、申诉方式 report.tsx:28-78、underTheHoodReport.User.strato:369-422
Account labels 每个标签:含义、影响、5 of 31 days · 16.12% 形式的生效天数 report.tsx:34-50、underTheHoodReport.User.strato:424-461
How to appeal 开关 under_the_hood_report_appeals_enabled 打开时显示 params.strato:24-25、underTheHoodLabels.strato:437-520
JSON 下载 文件名 x-under-the-hood-<期间>.json under-the-hood/jetfuel/routes/download.tsx:6-24

页面说明文字写明:报告按“尽力而为”提供,并附开源代码链接(underTheHoodReport.User.strato:67-85)。

白名单:报告展示的标签

帖子标签如下(underTheHoodLabels.strato:3-111):

标签 报告中写明的影响(摘要)
NSFW_HIGH_RECALL、NSFW_TEXT 不推荐给非关注者;对未成年、未填年龄、未登录者隐藏
NSFW_HIGH_PRECISION、NSFW_CARD_IMAGE、GORE_AND_VIOLENCE_HIGH_PRECISION、NSFW_ADMIN 加内容警告;不推荐给非关注者;对未成年、未填年龄、未登录者隐藏
SPAM_HIGH_RECALL、MALICIOUS_URL、DO_NOT_AMPLIFY 不推荐给非关注者
SPAM 在 X 上不展示
PDNA、BOUNCE 待审核或待作者删除期间不展示
FOR_EMERGENCY_USE_ONLY 显示提示,不进主页时间线
FOSNR_ABUSE、FOSNR_HATEFUL_CONDUCT、FOSNR_VIOLENT_SPEECH、FOSNR_CIVIC_INTEGRITY 可发现性仅限作者主页,所有人可见受限说明
FOSNR_ABUSE_INSULTS 不推荐给非关注者,所有人可见受限说明
BRAZIL_ELECTION_LEGAL 在巴西不进推荐

账号标签(underTheHoodLabels.strato:119-184):ReadOnly、Compromised、SpamHighRecall、NsfwHighRecall、NsfwHighPrecision、NsfwAvatarImage、NsfwNearPerfect、NsfwBannerImage、NsfwAdmin、ImpersonationHighPrecision、AbusiveHighRecall、DoNotAmplify。除 NsfwAdmin 外,报告对其余标签的影响都写为“帖子不推荐给非关注者”。

报告不展示的标签

以下标签存在于 VF 规则中,但不在白名单中(对比 visibility-filtering/rules/levels.rs 与 underTheHoodLabels.strato:3-184):

标签 在 VF 中的作用 是否影响 For You
账号:NotGraduated、AgathaSpamTopUser、EngagementSpammer、BlinkWorst、DownrankSpamReply 通知中对非关注者丢弃(levels.rs:89-100) 否
帖子:RISKY_HIGH_VIZ_REPLY、DUPLICATE_CONTENT、SMYTE_SPAM_TWEET、ABUSIVE、UNTRUSTED_URL、DUPLICATE_MENTION、DOWNRANK_SPAM_REPLY 通知中丢弃(levels.rs:208-218) 否
帖子:SOFT_NSFW 请求开启开关时,对新账号查看者在站外推荐中丢弃(visibility-filtering/rules/tweet_rules.rs:919-928) 是(条件触发)
帖子:LOW_QUALITY、MISINFO_*(公共利益标签) TimelineHomeHydration 级别的标签遮罩(tweet_rules.rs:70-87) 不在 For You 两个级别中
账号状态:作者自标 nsfw_user 站外推荐丢弃(visibility-filtering/rules/author_rules.rs:155-160) 是

AGATHA_SPAM、COPYPASTA_SPAM 等帖子标签由打标签规则写入(见 打标签规则)。它们不在 For You 两个级别的规则中,也不在白名单中。

设计决策

决策 理由
公开标签结果,不公开部分规则 用户能核对自己受到了什么影响,对手拿不到规则阈值(上游 README “What’s not in this repo?”)
帖子观察 7 天后才定稿 标签常在发帖后数小时到数天内被加上或撤销;过早统计会失真
月末后 10 天才生成报告 等待最后几天发出的帖子结束观察期
设资格门槛 新账号和低频账号样本太少,比例没有意义(推测)
标签占比超过 5% 时不列帖子 推测:避免大量列出帖子 id,同时用占比说明影响面
下架附国家码 下架只在特定国家生效;写明国家才能解释可见性

源码锚点

  • under-the-hood/strato/columns/underTheHoodReport.User.strato:18-20、:595-718 —— 资格、选月、查询流程
  • under-the-hood/strato/lib/underTheHoodLabels.strato:3-260 —— 标签与下架白名单及说明文字
  • under-the-hood/strato/lib/params.strato:15-37 —— 功能开关
  • under-the-hood/scalding/UthDailyPostsJob.scala:335-438 —— 帖子标签计数口径
  • under-the-hood/scalding/UthDailyAccountLabelsJob.scala:166-193 —— 账号标签按天判定
  • under-the-hood/scalding/UthDailyPostTakedownLabelsJob.scala:49-53 —— 帖子下架数据源
  • under-the-hood/thrift/uth_serving.thrift:52-80 —— 月度聚合结构
  • under-the-hood/jetfuel/routes/download.tsx:6-24 —— JSON 下载

相关页面

Type to search…

↑↓ navigate↵ selectEsc close