推荐系统架构设计:从分层漏斗到工程落地
摘要:推荐系统分层不是工程惯例,而是延迟约束的数学结果:二十万物品用单个精算模型逐一打分需要二十秒,而线上预算只有几十毫秒。本文拆解推荐漏斗的四层职责与延迟预算——召回负责高覆盖、粗排负责快速过滤、精排负责精确预估、重排负责多样性与业务规则,并说明双塔为什么只适合召回、多路召回怎么配额与兜底、冷启动与新鲜度在架构上怎么留口子,以及特征一致性与离线线上评估如何衔接。
很多人第一次设计推荐系统时会问:能不能用一个模型直接给全库物品打分然后取前二十?答案在一个算术题里:二十万物品,每物品 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 补上;自研/采购/微调三路决策。