---
title: "Under the Hood 透明度报告"
description: "Under the Hood 报告每天收集账号与帖子的标签，按月聚合，再以页面和 JSON 展示；9 月 18 日起加入法律合规下架"
---

> Documentation Index
> Fetch the complete documentation index at: https://x-algorithm.vergego.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Under the Hood 透明度报告

## 这一页回答什么

- 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`）。源码未包含线上的开关值。

## 数据流

```mermaid
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` 等帖子标签由打标签规则写入（见 [打标签规则](https://x-algorithm.vergego.ai/concepts/labeling-rules/)）。它们不在 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 下载

## 相关页面

- [可见性过滤](https://x-algorithm.vergego.ai/concepts/visibility-filtering/) —— 标签在推荐中的实际效果
- [打标签规则](https://x-algorithm.vergego.ai/concepts/labeling-rules/)、[处置与标签聚合](https://x-algorithm.vergego.ai/concepts/enforcement/) —— 标签的来源
- [限流与 shadowban](https://x-algorithm.vergego.ai/guide/visibility-and-shadowban/) —— 白话版
- [你的数据](https://x-algorithm.vergego.ai/guide/your-data/)

Source: https://x-algorithm.vergego.ai/concepts/under-the-hood/index.mdx
