前司作为新一代潮流网购社区,以“正品潮流电商 + 潮流生活社区”作为双引擎,DAU 近千万、年GMV 近千亿,然而 2026 年以来凡规模性指标均萎缩 15% 以上。在此背景下我参与了一个由 CTO 牵头的流量扶持项目,并担任算法侧负责人,统筹电商 Tab 页下的商品推荐(40%流量)和搜索(60%流量)工作。

彼时,平台已成立十年有余,市场竞争和内卷日益加剧,来自运营侧的新品扶持、促销活动、热门打爆、用户增长等需求增多,项目预期在现有搜推链路上建设统一的算法中台,集中管理不同业务品池的自然流量(非广告)分配:在 GMV、曝光到成交转化率(CTCVR)和点击率(CTR)不显著下降的前提下,让需要扶持的商品获得有效曝光,服务于月度活跃用户数(MAU)的增长目标。

在此之前,我已经实现了基于 PID 调控算法的流控保量链路,即根据累计曝光目标与实际曝光之间的偏差,以 weight*rankScore 的形式动态调整扶持强度。然而实际运行中,部分商品的曝光仍持续低于目标,首页瀑布流推荐尤为明显,其中又以新品池尤为明显。沿链路排查后,问题落到了候选供给上:推荐主链路虽然已有 DSSM 这样基于双塔模型的 U2I 向量召回,以及基于协同过滤的 I2I 召回,但考虑热门兜底、新品冷起、长尾覆盖、多样性等因素的召回路明显缺失或不足,且跨路配额尚未形成有效协同。因此,下游扶持权重只能改变已有候选的竞争力,无法弥补上游漏召;这也促使我们把优化重点从单独的流量调控,扩展到召回、排序与保量机制的整体配合。

经过方案调研,我明显察觉到业内对召回的研究多在模型和样本层面,特别是早期的负样本构造和近期的生成式语义召回(🚩 待我抽空新开一篇单独讨论),而关于完整的多路召回配置方案几乎没有一个标准答案或是公开方案。这倒也不奇怪,因为推荐、搜索、广告三个场景的召回工作各有侧重,推荐重在猜测兴趣、搜索重在 Query 相关性、广告重在变现效率,哪怕同样是推荐场景,首页瀑布流主要依赖 U2I + I2I 召回,而详情页、购物车场景主要是 I2I 召回。

多路召回中的覆盖与协同缺口

不考虑运营的口径,仅从商品维度分类,这次项目主要涉及新品、降价品、热门品、活动品四大类。中期来看,各品池累计数量占比达到商品总数的10%,而充足的品池与曝光的缺口并不冲突,主要原因集中在四个方面:

召回配额与曝光目标分属不同层次。召回 K 个新品,意味着这些商品获得了进入排序的资格;它们能否最终曝光,仍取决于粗排、精排和重排中的竞争结果。因此,召回层负责补齐候选覆盖,排序加权和重排约束负责调节竞争与页面结构,PID 等流量控制机制负责跟踪跨时段的累计曝光目标。

<aside> 💡

大多数时候我们都在关注召回链路的 Hit Rate、Precision 精确率、Recall 召回率等,但很少重视召回 item 的多样性。但其实曝光列表的多样性对用户疲劳度、LTV、长期留存率等指标都有着非常重要的意义,实际业务中这块工作常由重排链路来保障,但如果召回阶段就已经不具备多样性,那么后续工作也是无济于事的。在前司时,就经常需要人工排查多样性的 badcase,也是接触到多路召回配置的缺陷时才想到问题根本就不出在最后的重排环节,这下逻辑闭环了。

</aside>

<aside> 🤖

举个通俗的例子,如果我们想要看到丰富的赛跑比赛,就要划分多个组别,比如男子/女子、100m/200m、青年组/成年组、预赛/半决赛、奥运会/钻石联赛,这样我们就能看到各个组别的冠军站在领奖台上。如果像只有1、2路召回那样安排比赛,我们几乎永远只能看到美国和牙买加的那几位男性黑人选手,他们就好比前文所述的“用户近期交互过的近似品”,而那些青年选手、女选手就好比其他占比少的品,很难被TopK选中。

</aside>

短期方案及其局限性

短期方案是在主链路旁增加一条指定品池的召回路,并将召回的商品直接送入精排打分环节,此后这些保量商品的精排分会经过加权,再进行重排。这样每增加一个品池,就要搭建一条新的召回链路,并且给品池内的商品配置用来 I2I、U2I 检索的向量表征,为了取 TopK 还要上线一个轻量的打分模型。该方式的开发流程繁琐,因为不作为主链路统一监控维护而具备较高脆弱性,一度为了简化只配置了 I2I 向量召回,而且轻量模型与精排模型的排序标准、排序分量级缺乏统一,这也进一步导致临时的”保送”召回路的效果不佳。

具体流程是:配置 item 向量表(item_id、embedding、模型版本及更新时间),将指定品池中符合资格的商品建立或挂接到 ANN 索引;线上从用户近期行为中选择 trigger 商品,查询其向量,在业务品池内进行 I2I 检索;汇总、去重和过滤后,再用轻量模型打分取 TopK,送往后续排序。向量表负责存储表示,ANN 索引负责近邻检索,两者不是同一个概念。trigger 可以来自用户历史中的池外商品,但必须能取得同一向量空间、同一模型版本下的向量。

这条业务旁路仅使用向量相似度 I2I,因此候选覆盖受 trigger 和向量表示共同限制:trigger 集中于某一类目时,召回结果也容易集中;缺少有效 trigger 时可能空召回;新品向量质量不足时会漏召;有价格优势的活动品也未必与历史商品相似。后续轻量模型只能在这批候选中选优,无法恢复 I2I 未检索到的商品。旁路 TopK 因而只是 I2I 候选集内的最优结果,而非整个业务品池的最优结果。对规模较小的品池,池内检索通常比“全库近邻检索后再过滤”更能保住有效候选量;索引暂不支持池内过滤时,则需要有上限的过召回与补量。

除覆盖限制外,旁路直送还改变了候选进入排序的方式。轻量模型分数与主排序分数缺乏统一校准时,插入位置和流量配额会直接影响曝光质量。当时的 A/B 实验中,GMV、CTCVR 和 CTR 均出现下跌,表明新增扶持付出了整体效率代价。候选质量、I2I 漏召和分数不可比都可能参与其中,需要分别评估。长期建设的重点因此是为业务品池补齐内容、分组热门和受控探索入口,再将候选纳入首页统一排序,由带质量护栏的重排与 PID 协同完成累计曝光目标。

从业务问题到召回配置

首页瀑布流需要同时承接用户已有兴趣和发现潜在需求。连续翻页又进一步要求系统结合长短期历史、当前会话和已曝光记录,在相关性、候选新鲜度与业务扶持之间分配有限的排序容量。多路召回的配置,正是对这些需求的分工与协调。