tool

揭秘 X (Twitter) 推薦演演算法:xAI 開源「為您推薦」核心程式碼

August 14, 2026
Updated Aug 14
2 min read
揭秘 X (Twitter) 推薦演演算法:xAI 開源「為您推薦」核心程式碼

剖析 X 推薦演算法:貼文是如何出現在你的「為您推薦」?

X(原 Twitter)開源了決定「為您推薦」(For You)動態時報的核心推薦演算法原始碼(x-algorithm GitHub 倉庫)。這項舉措讓開發者與研究人員得以跳過行銷術語,直接檢視支撐全球最大社交平台之一的核心工程邏輯與系統架構。

圖片來源: GitHub - xai-org/x-algorithm: Algorithm powering the For You feed on X · GitHub


推薦系統的核心:雙管道協作架構

在 X 的設計中,「為您推薦」動態時報的組裝是單次請求即時生成的。整個系統架構由兩大管道(Pipelines)協同工作,並在 home-mixer/ 模組中完成整合:

  1. 帖子管道(Post Pipeline / PhoenixCandidatePipeline):負責候選帖子的檢索、過濾、排序與安全篩選。
  2. 混合管道(Blending Pipeline / ForYouCandidatePipeline):負責在已排序的帖子中,插入非模型排序的內容,例如廣告(Ads)、推薦關注(Who to Follow)、系統提示(Prompts)以及推送引導,最終由 BlenderSelector 進行交織(Interleaving)輸出。

這兩個管道建構於名為 candidate-pipeline 的高效、可組合的 Rust 框架之上。該框架實現了業務邏輯與管道監控的分離,並支援多個候選源與過濾器的並行執行。


請求路徑(Request Path)的七大步驟

當你打開 X App 載入「為您推薦」時,系統會在極短的延遲內執行以下請求路徑:

1. 查詢水合(Query Hydration)

系統首先讀取使用者的即時情境。最核心的輸入是用戶的即時互動序列(User Action Sequence),同時載入關注列表、黑名單與靜音帳號、已靜音的關鍵字、當前會話中已讀或已送出的帖子,以及關注的主題等。

2. 並行檢索候選源(Candidate Sources)

系統會同時在網內(In-Network)與網外(Out-of-Network)兩個方向平行調用候選源,目標是抓取數百到數千條潛在帖子:

  • 網內(In-Network):由 thunder/ 模組負責。它在記憶體中維護用戶關注帳號最新發布的帖子,並直接讀取出來。
  • 網外(Out-of-Network)
    • phoenix/ 檢索:將用戶與帖子映射為高維向量,利用向量相似度檢索最接近用戶興趣的貼文。
    • simclusters/ 檢索:根據「誰與什麼互動」將帳號與帖子劃分為不同的社區(Clusters),再計算社區相似度來召回潛在的網外優質帖子。

3. 候選水合(Candidate Hydration)

將初步召回的帖子補全完整的中繼資料(Metadata),包括帖子文本與媒體資源、作者詳情、帳號標籤、被引用的原始帖子、語言、實時互動計數(點讚、轉發數)以及作者的訂閱者狀態等。

4. 評分前過濾(Pre-Scoring Filters)

在進行昂貴的模型計算前,系統會依次調用 home-mixer/filters/ 下的十多個過濾器以減少計算浪費:

  • DropDuplicatesFilter:移除多個源召回的重複帖子。
  • AgeFilter:過濾掉發布超過 48 小時的陳舊貼文。
  • SelfTweetFilter:剔除用戶自己發布的貼文。
  • PreviouslySeen/ServedFilters:利用用戶曝光記錄,過濾已讀或在當前會話中已展示過的帖子。
  • MutedKeyword/AuthorSocialgraphFilter:攔截用戶靜音的關鍵字,以及用戶封鎖或靜音的帳號。
  • IneligibleSubscriptionFilter:剔除用戶無權訪問的訂閱者專屬(Subscriber-only)帖子。

5. 評分與排序(Scoring & Ranking)

過濾後的候選帖子將送入核心預測與重排引擎:

  • 多目標預測(PhoenixScorer):採用基於 JAX 訓練、Rust 實時服務的 Phoenix Transformer 模型。它不會預測單一的「相關性」得分,而是預測用戶對該帖子採取各項操作的獨立機率,包括積極互動(讚、回覆、轉發、引用、分享、點擊展開等)、消極互動(不感興趣、靜音、舉報、不停留)以及停留時間(Dwell Time)。
  • 加權綜合評分(RankingScorer):將上述各項預測機率,乘以對應的權重(積極權重為正,消極權重為負)進行加權求和,公式為: $$ ext{Final Score} = \sum ( ext{weight}_i imes P( ext{action}_i))$$
  • 動態調整
    • 作者多樣性(Author Diversity):對同一作者的多條帖子乘以衰減因子,避免時報被單一作者霸屏。
    • 網外折扣(Out-of-Network Discount):對非關注帳號的帖子、轉發與回覆乘以小於 1 的折扣。
    • 新作者補償(New-Author Boost):對曝光量低於閾值的新創作者進行曝光扶持。
  • 多樣性重排(VMRanker):最後調用 vm-ranker/ 獨立服務,利用**行列式點過程(Determinantal Point Process, DPP)**算法,在帖子嵌入向量(Embeddings)空間上重新排序,略微犧牲頂部評分以換取相鄰帖子間的多樣性,避免同質化。

6. 選擇(Selection)

TopKScoreSelector 對最終重排得分進行排序,保留前 K 條最高分的帖子。

7. 評分後過濾(Post-Selection Filters)

排序確定後,進行最終的安全過濾:

  • VFFilter:向 visibility-filtering/(可見性過濾模組)查詢,移除判定為不允許顯示的貼文。
  • AncillaryVFFilter:如果貼文的父貼、引用貼或被轉發貼在 VFFilter 中被 Drop,則該貼也同步被連鎖剔除。
  • DedupConversationFilter:摺疊同一討論串(Thread)中過度分支的內容。

獨立的標籤與可見性路徑(Labeling & Visibility Path)

X 演算法架構中最核心的設計原則之一,就是將**「評分排序」與「安全過濾」徹底解耦**。排序決定位置,而可見性過濾決定帖子能否顯示。這條「標籤路徑」是在後台持續、非同步運行的:

┌────── 1. 持續內容理解 ──────┐       ┌────── 2. 標籤規則引擎 ──────┐       ┌───── 3. 儲存與調用 ─────┐
│ 帖子分析: grox, clip,      │ ───► │ 規則匹配: scarecrow          │ ───► │ 寫入標籤儲存, 於 Request │
│ media-model-proxy           │       │ (基於 botmaker 運行)         │       │ Path 由 visibility-      │
│ 帳號 PageRank: user-cred-v2 │       │ 安全與處罰:                 │       │ filtering/ 讀取過濾      │
│ 行為建模: bdsm, agatha      │       │ abuse-enforcement-service   │       │                          │
└─────────────────────────────┘       └─────────────────────────────┘       └──────────────────────────┘

1. 持續內容理解

當帖子發布或用戶產生互動時,後台服務會持續運行:

  • 帖子與媒體分類grox/ 對文本和媒體進行垃圾訊息、成人內容及暴力內容分類;media-model-proxy/clip/ 則提供圖像與文本的特徵嵌入(Embeddings)與敏感符號識別。
  • 帳號信譽與特徵user-cred-v2/ 在關注圖譜和互動邊上運行 PageRank 算法,為每個帳號計算全域權重(PageRank Score);bdsm/ 追蹤帳號的行為序列以識別協同性機器人(Bot)或異常濫用行為;agatha/ 則通過異步批處理,分析其他用戶對該帳號帖子的舉報、屏蔽相較於收藏(Favorites)的比例,判定是否需要打上限制標籤。

2. 標籤與安全規則(Labeling Rules)

  • scarecrow/ 規則引擎:實時對事件做出響應。它嵌入了名為 botmaker/ 的專屬規則語言編譯器與運行時,加載位於 botmaker-rules/scarecrow/ 的規則。其邏輯為:「當事件發生且滿足條件時,對帖子或帳號標記特定 Label」。
  • abuse-enforcement-service/:根據安全模型的預測分數,自動對帳號或帖子實施標記、挑戰(如驗證碼)或直接暫停處置。

3. 可見性判定(Visibility Filtering)

當請求路徑讀取到帖子標籤後,visibility-filtering/ 會依據規則(定義於 rules/registry.rs 中)輸出三種精確判定:

  1. ALLOW(允許):正常在動態時報中顯示。
  2. INTERSTITIAL(插頁遮罩):帖子保留在時報中,但表面會覆蓋一層警告遮罩(例如針對成人內容或血腥媒體),用戶點擊後方可穿透閱讀。
  3. DROP(直接丟棄):帖子被完全移出,絕不展示。

注意:某些嚴格的過濾規則(如高召回率的垃圾郵件攔截)僅適用於網外推薦,若用戶主動關注了該作者,相同的帖子則會被允許(ALLOW)顯示,以平衡安全性與用戶的自主選擇權。


關鍵技術設計決策

  1. 候選隔離排序(Candidate Isolation in Ranking):在 Transformer 進行推理時,候選帖子之間無法互相協同注意(Attention),它們僅能與用戶的情境特徵進行 Attention 計算。這項設計確保了帖子的預測評分完全獨立,不因批處理(Batch)中混入了哪些其他帖子而改變,從而使評分高度一致且可進行緩存。
  2. 哈希無庫向量查找(Hash-Based Embeddings):檢索與排序使用多個哈希函數直接進行嵌入向量尋找(Lookup)。這種設計無需維護龐大的靜態詞彙表,新發布的帖子或新註冊的用戶能立刻獲得向量表示並被推薦,解決了冷啟動問題。
  3. 行列式點過程多樣化:在 VMRanker 中利用 DPP 算法重排,在向量空間中拉開相鄰帖子間的距離,天然地防止了刷到過多相似主題的帖子,比傳統的硬性規則過濾更具語意柔性。

常見問題

Q1:公開程式碼會導致個人隱私外洩嗎? 不會。開源庫僅包含模型架構、訓練流程、管道邏輯與評分規則,並未包含任何個別使用者的隱私資料、真實互動矩陣或生產環境的特徵數據。

Q2:為什麼我的動態時報仍會出現完全不感興趣的「探索性」內容? 這是演算法有意的「探索與利用(Exploration and Exploitation)」策略。為了防止用戶陷入資訊繭房,並修正和更新推薦模型的泛化精度,系統會分配一定比例的流量進行實驗性推送,這在預評分階段表現為 InventoryHoldoutFilter 的確定性實驗分配。

Q3:演算法是否存在不透明或偏袒特定言論的可能? 為了回應公眾對黑箱推薦的質疑,X 伴隨演算法開源推出了一款 Under the Hood 標籤透明度工具(在 under-the-hood/ 中實現,可在 x.com/i/under_the_hood 訪問)。該工具會聚合並展示你帳號及帖子的可見性限制標籤,讓用戶能直接對照開源代碼中的規則,了解自己的貼文是否以及如何受到限制。

Q4:倉庫中開源了所有代碼嗎?有哪些被隱藏了? 出於安全防禦和防止惡意刷量(Gaming the system)的考量,有極少數的核心敏感配置被排除在開源倉庫之外,包括:

  • Grox 提示詞:例如用於引導 LLM 對內容進行理解與標籤判定時使用的 .j2 模板文件。
  • 部分 Botmaker 規則:特別是那些用於防範垃圾帳號惡意繞過、濫用系統的底層檢測規則。

研發與本地運行指南

對於希望動手實踐的開發者,X 演算法在 phoenix/ 目錄下提供了完整的 Cargo 專案空間、pyproject.toml 以及一鍵運行 QUICKSTART.md

專案隨附了合成數據生成器(Synthetic Data Generator)。開發者可以在本地一鍵編譯 Rust 預測層,並利用 JAX 與合成數據,從零到一完成一個輕量級 Phoenix 推薦模型的訓練與Serving推理,是學習現代大型推薦系統工程設計的教科書級實踐項目。

# 進入 Phoenix 開發目錄並查看快速開始指引
cd phoenix/
cat QUICKSTART.md

分享至:
Featured Partners

© 2026 Communeify. All rights reserved.