推薦系統架構設計:從分層漏斗到工程落地
摘要:推薦系統分層不是工程慣例,而是延遲約束的數學結果:二十萬物品用單一精算模型逐一打分需要二十秒,而線上預算只有幾十毫秒。本文拆解推薦漏斗的四層職責與延遲預算——召回負責高覆蓋、粗排負責快速過濾、精排負責精確預估、重排負責多樣性與業務規則,並說明雙塔為何只適合召回、多路召回怎麼配額與兜底、冷啟動與新鮮度在架構上怎麼留口子,以及特徵一致性與離線線上評估如何銜接。
很多人第一次設計推薦系統時會問:能不能用一個模型直接給全庫物品打分然後取前二十?答案在一個算術題裡:二十萬物品,每物品 0.1 毫秒,總計二十秒,而線上留給推薦的時間通常只有幾十毫秒——差了兩個數量級。這不是模型夠不夠好的問題,是算力分配方式問題。
於是業界收斂到同一個答案:分層漏斗。每一層用不同的模型、不同的延遲預算,把候選集縮小一個數量級,把算力花在真正影響結果的地方。
本文講工程:推薦漏斗怎麼分層、每層的延遲預算與模型選型、多路召回怎麼配、特徵平台與離線線上評估怎麼銜接。概念層面(推薦系統是什麼、三層各自原理)見姊妹篇《什麼是推薦系統?召回、排序、重排三層架構解析》,本篇聚焦怎麼落地。
關鍵要點
- 分層是延遲約束的數學必然,不是工程慣例:全庫精算比預算慢兩個數量級。
- 召回層追求覆蓋率而非精度,多路並行取聯集,每路都要有兜底。
- 雙塔模型適合召回因為物品向量可離線預計算;排序階段候選只剩幾百條,付得起交叉特徵的重模型。
- 重排管的是排序模型不管的事:多樣性、新鮮度、去重、疲勞度、業務規則。
- 冷啟動與探索流量必須在架構上留口子,否則系統會圍繞自己的歷史選擇固化。
- 特徵平台保證訓練與線上服務的特徵一致,缺失是安靜但昂貴的 bug 來源。
一、四層漏斗:每層的職責與預算
工業界常見的漏斗是四層,每層的輸入規模、延遲預算和核心目標都不同:
召回層:從數千萬到數十億的全量物品庫縮到數千候選,預算約 50 毫秒,核心目標是高召回率——不遺漏好內容。這一層允許精度差,只要假陰性率足夠低,用戶可能感興趣的東西進了下一層就行。
粗排層:數千縮到數百,預算約 10 毫秒,用輕量模型快速濾掉低質量候選。它存在的意義是給精排減負,讓昂貴的模型只看值得看的候選。
精排層:數百縮到數十,預算約 30 毫秒,用深度模型精細預估用戶偏好。個性化的質量主要在這一層決定。
重排層:數十條結果做最後調整,預算約 5 毫秒,處理多樣性、時效性、去重與業務目標,產出最終展示順序。
不同規模的系統層數可以合併或拆分,但職責邊界是一致的:越靠前越看重覆蓋與速度,越靠後越看重精度與業務約束。分層帶來的最大好處是每層可以獨立優化、獨立迭代——改重排的多樣性規則不必動召回模型。
二、召回層:多路並行,取聯集
召回層的核心矛盾是時間不夠精確計算,解法是多路並行召回:用幾種不同策略同時跑,各自取一部分,合併去重。
常見的幾路包括:協同過濾(找相似用戶喜歡的、或找與用戶歷史交互物品相似的)、雙塔向量召回(用戶向量與物品向量的近似檢索)、序列行為召回(基於會話內的行為序列推相似物品)、即時熱榜(保證新內容與新用戶有覆蓋)、圖召回(基於用戶-物品二部圖的鄰域關係)。
配額上有參考做法:向量路 200 條、協同路 150 條、內容親和路 100 條、熱度新鮮路 50 條,去重後得到 400 到 500 條候選。每路有獨立的延遲預算(並行執行,總計控制在幾十毫秒內),並且每路都要有兜底——向量索引不可用時,系統仍能靠協同與內容路出結果,而不是整體失敗。
多路召回的價值不在「多」,而在互補:協同過濾抓行為相似,內容路解決冷啟動,熱度路保證新鮮,序列路捕捉會話內的即時意圖。只用一路,就必然有一類需求落空。
三、排序層:雙塔只用於召回,精排要交叉特徵
一個高頻問題是:為什麼召回用雙塔,排序不用?
因為雙塔的用戶編碼與物品編碼相互獨立,物品向量可以離線全部預計算好,線上只需算一次用戶向量再走近似檢索,這是它能在毫秒級覆蓋千萬物品的原因。代價是用戶與物品之間沒有細粒度交互,表達力有限。
到了排序階段,候選只剩幾百條,算得起貴得多的模型。這一層要用能建模用戶特徵、物品特徵與上下文特徵之間交叉關係的重模型,把用戶歷史、物品屬性、時間、設備等全部作為輸入,輸出精確的互動概率預估。業界常用的結構包括寬深學習、深度交叉網絡一類。
粗排可以看作精排的低成本近似:特徵更少、模型更淺,目標是快速淘汰明顯不合適的候選,而不是給出最終順序。
四、重排層:排序模型不管的那些事
排序模型優化的是一個標量目標,比如點擊概率。但真實產品要滿足的約束遠不止「最可能被點擊」,剩下的都交給重排:
多樣性:避免十條結果高度同質。純按點擊概率排,很容易出現同一品類、同一風格、同一作者的連續堆疊,用戶翻兩屏就倦了。
新鮮度與時效:新內容、新商品需要曝光機會;時效性內容(活動、資訊)有生命週期。
去重與疲勞度:近期已曝光、已點擊、已購買的內容要降權或過濾;同一物品在多推薦位重複出現要處理。
業務規則與策略:庫存與價格約束、合規與內容安全、特定品類的扶持或限制。這類規則放在模型裡訓練既不穩定也不可解釋,放在重排層是唯一合理的位置。
2026 年的一個新變化是:部分大平台開始把大模型引入重排,用對用戶意圖的推理作為額外排序信號。但這條路的延遲與成本都很高,多數團隊只把它用在少量高價值流量上,而不是全量。
五、冷啟動、新鮮度與探索:架構上要留口子
冷啟動不是邊緣問題。新用戶沒有歷史、新物品沒有交互,在很多產品裡這部分流量佔比並不低,必須在架構上預留兜底:
新用戶走熱門與上下文候選——地域、設備、時間、來源入口都能提供弱信號;產品側也可以用首次偏好選擇來快速建模。
新物品在積累到足夠交互之前,用內容特徵生成的向量進入召回,靠屬性相似而非行為相似獲得曝光。
意圖快速變化的場景(比如電商瀏覽會話)要用會話與序列模型,只看長期歷史畫像會跟不上當前意圖。
還有一件容易被忽略的事:探索機制。一個只展示自己已經排得高的物品的推薦系統,會慢慢餓死它賴以改進的探索數據——沒曝光過的物品永遠學不到反饋。常見做法是用傾向性加權糾正位置偏差,或固定留一小部分流量做探索。不做這件事,系統會圍繞自己的歷史選擇逐步固化,越推越窄。
六、特徵一致性與評估銜接
架構裡有個不顯眼但極其關鍵的組件:特徵平台。它保證訓練時用的特徵與線上服務時能拿到的特徵是同一套計算邏輯。這個一致性一旦缺失,模型在線上表現會莫名其妙地劣於離線,而且極難排查——特徵穿越、時間窗口口徑不一致、線上線下兩套實現,都屬於這類「安靜但昂貴」的 bug。
評估上要走兩段:離線指標門禁,線上實驗定論。離線用歷史數據算準確率、召回率與排序質量指標,便宜且快,能攔掉明顯更差的模型;但離線指標只是代理不是證明,它無法反映位置偏差、新穎性效應與延遲變化。因此離線過關後必須做線上 A/B,用真實業務目標(互動時長、轉化、單會話收入)判斷,再決定是否全量。從離線指標直接跳全量,是推薦系統「上線了卻沒證明有用」的常見原因。
常見問題
問:能不能不分多層,直接用一個模型排全庫?
答:規模小的時候可以,規模一大就不行。二十萬物品、每物品 0.1 毫秒也要二十秒,而線上預算通常幾十毫秒,差兩個數量級。分層不是風格選擇,是延遲約束下的必然結果:前層用便宜模型換覆蓋,後層把算力集中到少數候選上換精度。
問:召回層為什麼強調覆蓋率而不是準確率?
答:因為召回漏掉的東西,後面任何一層都補不回來——精排再準也只能從已給的候選裡挑。所以召回允許精度差,只要假陰性率足夠低,把用戶可能感興趣的內容送進下一層即可。精度問題留給排序層解決,這才是分層設計的分工本意。
問:多路召回到底要幾路?
答:沒有固定答案,但可以按互補性配:行為相似一路(協同或圖)、語義相似一路(雙塔向量)、屬性相似一路(內容,解決冷啟動)、熱度新鮮一路(保證新內容覆蓋)、會話序列一路(捕捉即時意圖)。參考配額是向量 200、協同 150、內容 100、熱度 50,去重後 400 到 500 條。關鍵是每路互補且各有兜底。
問:雙塔模型為什麼不適合做精排?
答:雙塔的用戶側與物品側獨立編碼,物品向量可預計算,這讓它在千萬級候選上做到毫秒級檢索,代價是用戶與物品之間缺乏細粒度交互,表達力有限。精排階段候選只剩幾百條,算得起帶交叉特徵的重模型,能同時利用用戶歷史、物品屬性與上下文的交互信號,精度明顯更高。
問:重排層到底在解決什麼問題?
答:解決排序模型優化不了的約束。排序模型只優化一個標量目標,而產品還要滿足多樣性(不要十條同質內容)、新鮮度(新內容要有機會)、去重與疲勞度(近期看過的降權)、業務規則(庫存、合規、品類扶持)。這些放在模型裡訓練既不穩定也不可解釋,放在重排層是合理位置。
問:為什麼離線指標漲了,線上效果卻沒動?
答:三個常見原因。一是特徵不一致——訓練時與線上服務時的特徵計算邏輯不同,是最隱蔽的一類;二是位置偏差與新穎性效應,離線數據反映的是舊模型的曝光結果,無法代表新排序下的真實分佈;三是延遲變化,重模型上線後超時或降級,抵掉了質量收益。所以離線只做門禁,結論必須靠線上 A/B。
關於通智雲
推薦系統的架構決策,本質是在延遲預算內分配算力:哪一層該便宜、哪一層該貴、哪些約束必須放在模型之外。通智雲(TENGENCE)專注企業公域引流獲客與私域轉化成交的增長技術,本文涉及的分層架構、多路召回與效果評估銜接是其持續關注的方向。
相關閱讀
- 甚麼是推薦系統?召回、排序、重排三層架構解析
- 協同過濾推薦系統實作:UserCF 與 ItemCF 全面對比
- 推薦系統冷啟動怎麼做?4 類場景的解法清單
- 推薦系統效果評估:CTR、CVR、多樣性與新穎性
- 推薦系統的「資訊繭房」問題與 5 種破解方法
資料來源
- Chapter 24: ML System Design — Architecture Patterns for Real-World Machine Learning——DataField:三層漏斗延遲預算(200,000→500 @30ms、500→50 @50ms、50→20 @20ms);單模型 20 秒與兩個數量級差距;多源召回配額(向量 200/協同 150/內容 100/熱度 50)與每路兜底。
- 如何構建一個大規模推薦系統:從架構到演算法到工程——侯瑞哲:四層漏斗延遲預算(召回 ~50ms / 粗排 ~10ms / 精排 ~30ms / 重排 ~5ms)與各自職責;五類召回路數與協同過濾的冷啟動與稀疏性短板。
- AI Recommendation Engine Explained 2026——ByteLedger:兩階段流水線而非單模型;2026 三個變化(雙塔成預設召回層、LLM 重排進入生產但限於高價值小流量、會話序列模型標準化);延遲預算塑造架構;純點擊率優化導致標題黨與探索數據飢餓。
- Design a large-scale recommendation feed (retrieval then ranking) for 100M users——AppliedAIPrep:召回 ~1–10ms / 排序 ~10–50ms / 重排 ~1ms;兩塔用於召回與交叉特徵模型用於排序的原因;冷啟動兜底;傾向性加權與探索切片糾正反饋迴路;離線 AUC/nDCG 門禁後線上 A/B。
- Recommender System Development Guide 2026——Pharos Production:三層職責定義;特徵平台保證訓練與線上一致及其代價;離線指標是代理不是證明、需 A/B 補上;自研/採購/微調三路決策。