召回、粗排、精排、重排分别是干什么的?2025 了,有什么变化
精炼回答
推荐系统的这四个阶段本质上是逐层过滤和优化的漏斗结构,目的是在海量候选集中高效找到最优推荐结果。
召回负责从百万甚至亿级的全量物品库中快速筛选出几百到几千个候选集,这个阶段更看重速度和覆盖度,常用的方法像协同过滤、向量检索、多路召回策略等,你可以理解为先把范围缩小到"可能感兴趣"的程度。粗排接手召回的候选集,用相对轻量的模型把几千个候选再筛到几百个,这里会引入简单的特征和模型预估点击率或者其他目标,平衡了一定的精度和性能开销。
精排才是真正用复杂模型精细打分的环节,会使用深度神经网络、大量特征交叉、多目标学习等技术,把几百个候选按预估效果排个精准的序,比如你在抖音刷到的视频顺序就是精排决定的。重排则在精排基础上考虑全局性约束,不再只看单个物品分数,而是要处理多样性、去重、打散同类内容、插入运营位等策略需求,确保最终展示列表既符合用户体验又满足业务目标。整个链路下来,既保证了系统性能不被拖垮,又让推荐质量逐步提升。
扩展分析
为什么需要分层设计
面试时回答这道题,最忌讳的就是一上来就背定义。面试官其实更想听到你对分层设计必要性的理解,而不是简单罗列四个阶段分别做什么。建议从一个实际问题切入:为什么不能用一个最强的模型直接给所有商品打分排序呢?
这个问题的答案藏在计算成本里。假设一个电商平台有1亿件商品,用户每次刷新首页,如果都用最复杂的深度学习模型给这1亿件商品打分,即使单次预测只需要10毫秒,总耗时也要277个小时。用户根本等不起,服务器也扛不住。所以推荐系统本质上是在解决一个用有限计算资源找到最优结果的工程问题。面试时可以先抛出这个矛盾,再引出分层架构是怎么优雅解决它的。
召回层要回答的核心问题是"快速缩小范围"。面试官追问召回的时候,你要强调两个关键词:覆盖率和性能。这里可以用一个具体的场景来说明,比如用户凌晨刷视频平台,此时可能有上千万个视频可以推荐,但召回层需要在几十毫秒内把范围缩小到几千个候选。这个阶段不要求特别精准,更重要的是别把用户真正感兴趣的内容漏掉。所以工程上会用多路召回策略,比如同时跑协同过滤、兴趣标签匹配、热门内容、地域相关等多个通道,每个通道各自召回几百个,最后合并去重得到总候选集。面试时可以说"召回阶段我会更关注召回率指标而不是准确率,宁可多召回一些不那么准的,也不能把好的漏掉,因为后面还有精排来纠正"。
粗排这个环节很多同学容易忽略,但面试时提到它会是个加分项。粗排存在的价值在于召回和精排之间有个巨大的性能鸿沟。召回可能给你3000个候选,但精排用复杂模型处理3000个样本还是太重了,粗排就承担了这个过渡角色。面试官如果问粗排和精排有什么区别,你可以从模型复杂度和特征工程两个维度回答。粗排通常用轻量级模型,比如简化版的浅层神经网络或者逻辑回归,特征也会精简很多,可能只用几十维核心特征快速打个分,把3000个候选筛到200个左右。这里的设计哲学是"保留大部分有潜力的候选,同时砍掉明显不合适的"。
精排才是整个链路的核心竞争力所在。面试时谈精排要展现你对模型复杂度的理解。这个阶段可以放开手脚用深度模型,可能是几百维甚至上千维的特征,包括用户长期兴趣、实时行为、物品多模态特征、交叉特征等等。模型结构可能是多层的深度神经网络,还会引入Attention机制、多目标学习等技术。举个例子,电商场景下精排不仅要预估点击率,还要同时预估转化率、客单价、用户满意度等多个目标,这些都需要在精排层通过复杂模型联合优化。面试官如果问精排的性能瓶颈怎么解决,你可以提到特征缓存、模型蒸馏、GPU加速这些工程优化手段。
重排层是个容易被低估但实际很关键的环节。面试时要说清楚重排和精排的本质区别:精排看的是单个物品的分数,重排看的是整个列表的质量。这里可以举个具体例子,假设精排给你200个商品按预估点击率排好了序,前10个可能有8个都是同一个品牌的手机。虽然单看每个分数都很高,但用户体验会很差,看起来像是在硬推这个品牌。重排就是要解决这类问题,加入多样性约束、类目打散、新品扶持、运营位插入等规则。面试官如果问重排的实现方式,你可以提到基于规则的方法,也可以说一些更高级的做法,比如用强化学习优化整个列表的长期收益,或者用MMR(最大边际相关性)这类算法同时考虑相关性和多样性。
整个链路走下来,候选集规模的变化是有讲究的。面试时可以给出一组量级数据来展示这个漏斗:全量物品可能是千万到亿级,召回后到千级,粗排后到百级,精排保持百级但顺序更精准,重排后最终展示可能就十几个到几十个。每个阶段的候选集规模下降都对应着计算成本和准确度的权衡。面试官可能会追问为什么不直接从召回到精排,跳过粗排。你可以回答说理论上可以,但工程实践中发现召回几千个候选直接用精排模型,延迟会从可接受的几十毫秒飙升到几百毫秒,这在C端应用里是不能容忍的。粗排用更低的成本解决了大部分明显不相关的候选,让精排可以把宝贵的计算资源集中在真正有竞争力的物品上。
实践落地的技术选型
面试时谈到具体技术方案,关键不是展示你背了多少算法名称,而是要让面试官感觉到你真的理解每一层为什么要这样设计。建议你准备一个串联四个阶段的完整案例,比如用户刷短视频或者浏览电商首页这种大家都熟悉的场景,然后用这个场景把各层的技术选型串起来讲,这样比干巴巴地列技术栈要生动得多。
召回层最容易体现你对工程权衡的理解。面试时可以这样组织语言:"召回层我会设计多路并行的策略,因为单一召回方式很难兼顾覆盖率和个性化。"然后举个具体例子,假设用户是个数码爱好者,协同过滤可以根据他过去点击过的手机找到相似用户喜欢的其他商品,这路召回可能返回300个;同时跑一路基于用户兴趣标签的召回,用户标签里有"摄影",就把带这个标签的商品召回200个;再加一路热门召回保底,避免新用户或者冷启动时没数据,这路返回100个;如果是晚上八点黄金时段,还可以加一路实时热点召回,把最近一小时爆款商品抓出来。这几路加起来可能有重复,去重后得到大约1500个候选。面试官听到这种回答会觉得你不是纸上谈兵,而是真的思考过怎么落地。
关于向量检索这个点,如果你简历里提到过相关项目,面试官很可能追问实现细节。你可以准备这样的回答思路:用Embedding把用户和物品都映射到同一个向量空间,然后用ANN算法做近似最近邻检索。面试时别只说算法名字,可以补充说"工程上我会用FAISS或者Milvus这类成熟工具,因为自己实现索引结构性价比不高"。如果面试官问向量怎么训练,你可以说用双塔模型分别编码用户特征和物品特征,目标是让用户点击过的物品向量和用户向量距离更近。这种回答显得你既懂原理又有落地意识。
下面是一个简化的双塔模型召回代码示例:
public class TwoTowerRecall {
private UserTowerModel userTower;
private ItemTowerModel itemTower;
private FAISSIndex vectorIndex;
/**
* 召回主流程
*/
public List<Item> recall(User user, int topK) {
// 用户塔编码用户特征
float[] userEmbedding = userTower.encode(
user.getRecentBehaviors(),
user.getInterestTags(),
user.getDemographics()
);
// 向量检索找到topK个最近邻物品
List<Long> itemIds = vectorIndex.search(userEmbedding, topK);
// 批量获取物品详情
return itemRepository.batchGet(itemIds);
}
/**
* 离线构建物品向量索引
*/
public void buildIndex(List<Item> allItems) {
List<float[]> itemEmbeddings = new ArrayList<>();
for (Item item : allItems) {
// 物品塔编码物品特征
float[] embedding = itemTower.encode(
item.getContentFeatures(),
item.getStatisticsFeatures(),
item.getCategoryInfo()
);
itemEmbeddings.add(embedding);
}
// 构建FAISS索引
vectorIndex.build(itemEmbeddings);
}
}
粗排层的技术选型特别能体现你对性能敏感度的认知。面试时可以强调粗排的核心矛盾是"既要比召回准,又不能像精排那么慢"。这里可以说:"我会选择逻辑回归或者三层以内的浅层神经网络,特征控制在几十维,主要用一些容易获取的统计类特征,比如物品的历史点击率、用户活跃度、类目匹配度这些。"面试官可能会问为什么不用复杂模型,你就可以接着说:"假设召回给了2000个候选,粗排需要在20毫秒内完成,平均每个样本只有0.01毫秒,这个时间约束下复杂模型根本跑不动。而且粗排的任务是粗筛,不是精准排序,用轻量模型把明显不合适的干掉就够了。"
public class CoarseRanker {
private LightweightModel model;
private FeatureExtractor extractor;
/**
* 粗排打分
*/
public List<ScoredItem> rank(User user, List<Item> candidates) {
List<ScoredItem> scoredItems = new ArrayList<>();
for (Item item : candidates) {
// 只提取轻量特征
float[] features = extractor.extractLightFeatures(
user.getActiveDays(), // 用户活跃天数
item.getHistoricalCTR(), // 物品历史点击率
item.getCategoryPopularity(), // 类目热度
matchScore(user, item) // 类目匹配度
);
// 轻量模型快速打分
float score = model.predict(features);
scoredItems.add(new ScoredItem(item, score));
}
// 排序并截断
return scoredItems.stream()
.sorted(Comparator.comparing(ScoredItem::getScore).reversed())
.limit(300)
.collect(Collectors.toList());
}
private float matchScore(User user, Item item) {
Set<String> userCategories = user.getPreferredCategories();
return userCategories.contains(item.getCategory()) ? 1.0f : 0.0f;
}
}
精排层是展示你对深度学习理解的好机会。面试时可以提几个业界常见的模型架构,但别只是罗列名字。比如你可以说:"精排层我会考虑用DIN这类带注意力机制的模型,因为它能捕捉用户兴趣的动态变化。"然后解释一下为什么需要Attention:"用户可能最近在看手机,但历史行为里还有很多看书的记录,Attention可以让模型在推荐手机时更关注近期的数码浏览行为,而不是简单地把所有历史行为平均化。"如果你熟悉Wide&Deep,也可以提到它的好处是同时建模记忆和泛化,Wide侧放一些人工设计的交叉特征保证稳定性,Deep侧用神经网络学习隐式特征提升上限。
特征工程在精排层特别关键,面试时可以准备一个具体的特征分类框架。你可以说:"精排的特征我会分几类来设计,用户侧包括长期兴趣标签、短期行为序列、人口统计学属性;物品侧包括内容特征、统计特征、时效性特征;交叉特征包括用户历史类目偏好和当前物品类目的匹配度这些。"如果面试官问特征怎么处理,你可以提到连续特征做归一化、类别特征做Embedding、序列特征用RNN或者Transformer编码。这里的关键是别把回答搞得太学术,要时刻和工程落地挂钩,比如说"Embedding维度我会根据类别基数设置,基数大的像商品ID可能要128维,类目这种只有几百个的用32维就够了"。
重排层的实践方案最容易被忽视,但恰恰是拉开段位的地方。面试时可以准备几个具体的重排策略。多样性控制可以这样说:"精排出来的列表可能前几个都是同类商品,我会用滑动窗口策略,保证连续N个位置里同一类目不超过M个。"打散策略可以举例说明:"如果有多个来自同一店铺的商品,即使它们分数都很高,我也会强制拉开距离,避免给用户'只推一家店'的感觉。"运营位插入是个很实际的需求,你可以说:"虽然精排完全按模型分数排序,但业务上可能需要在第3位和第8位固定插入广告或者运营活动商品,重排层要处理这种硬性约束,同时尽量不破坏整体的推荐质量。"
public class ReRanker {
/**
* 重排主流程:多样性控制 + 运营位插入
*/
public List<Item> rerank(List<ScoredItem> rankedItems, OperationConfig config) {
List<Item> result = new ArrayList<>();
Map<String, Integer> categoryCount = new HashMap<>();
int windowSize = 5;
int maxSameCategoryInWindow = 2;
for (int i = 0; i < rankedItems.size(); i++) {
ScoredItem current = rankedItems.get(i);
// 检查运营位插入
if (config.shouldInsertAd(result.size())) {
result.add(config.getAdItem(result.size()));
continue;
}
// 多样性控制:滑动窗口内同类目不超过阈值
String category = current.getItem().getCategory();
int recentCategoryCount = countInRecentWindow(result, category, windowSize);
if (recentCategoryCount < maxSameCategoryInWindow) {
result.add(current.getItem());
categoryCount.put(category, categoryCount.getOrDefault(category, 0) + 1);
} else {
// 跳过这个商品,尝试下一个
continue;
}
if (result.size() >= config.getFinalDisplayCount()) {
break;
}
}
return result;
}
private int countInRecentWindow(List<Item> items, String category, int windowSize) {
int start = Math.max(0, items.size() - windowSize);
int count = 0;
for (int i = start; i < items.size(); i++) {
if (items.get(i).getCategory().equals(category)) {
count++;
}
}
return count;
}
}
把整个链路串起来的时候,可以用一个完整的case walk-through。面试时可以这样组织:"假设用户是个喜欢健身的年轻女性,打开电商APP首页。召回层同时跑了六路策略,协同过滤根据相似用户召回了运动装备,标签匹配召回了健身课程和蛋白粉,热门召回保证了一些爆款,向量检索基于她的浏览Embedding找到了瑜伽垫,总共召回1800个候选。粗排用轻量模型快速打分,把那些明显和健身无关的商品过滤掉,比如虽然是热门但她从没看过的3C数码产品,留下300个。精排用DIN模型,注意力集中在她最近一周频繁浏览的运动内衣和跑鞋上,结合价格敏感度、品牌偏好等几百个特征精准打分,排出最优的200个。最后重排阶段,把前10个位置里的3个运动内衣打散,插入1个运营推的新品活动,保证既有跑鞋、瑜伽用品这些不同类目,又有不同价格带的商品,最终展示12个商品给用户。"这种完整的场景叙述会让面试官觉得你对整个系统有全局理解。
面试时如果被追问技术选型的依据,记得把性能指标挂在嘴边。召回可以说"我会监控召回率和延迟,目标是90%以上召回率控制在50毫秒内";粗排可以说"AUC比召回高3-5个点就算合格,延迟控制在20毫秒";精排可以说"这里追求AUC或者GAUC最大化,延迟可以放宽到100毫秒";重排可以说"除了点击率,还要看多样性指标和用户停留时长"。这些数字不用特别精确,关键是表现出你知道每一层有不同的优化目标和约束条件。
2025年的新变化:生成式推荐的崛起
如果你在2025年10月参加推荐系统面试,有个新趋势必须要了解:生成式推荐正在从理论探索走向工业级落地。传统的召回-粗排-精排-重排架构依然是主流,但头部公司已经开始探索统一的生成式架构。这个变化不是推翻传统架构,而是提供了一种新的可能性。
生成式推荐的核心思想是把推荐任务重构为序列生成问题,类似GPT生成文本那样,让模型直接生成用户的下一个交互物品。Meta的Generative Recommendation和美团的MTGR框架已经在工业界验证了这条路的可行性。它们用类似GPT的序列建模方式,把用户历史行为、实时特征、候选物品都编码成token序列,用一个统一的Transformer模型端到端地预测。这种方式最大的好处是消除了传统多阶段架构的目标不一致问题——召回追求覆盖率,精排追求准确率,两者目标本来就有冲突,生成式架构用一个模型统一优化,理论上能达到更好的全局最优。
更有意思的是Scaling Law在推荐系统的验证。快手的OneRec通过参数从0.015B扩展到2.633B,验证了模型越大效果越好这个规律在推荐领域也成立。模型FLOPs提升10倍,训练损失持续下降,用户停留时长提升0.54%-1.24%。美团MTGR也通过增大模型算力,在外卖推荐场景取得了近2年最大的收益提升。这给了我们一个启示:推荐系统也可以像大语言模型那样,通过堆算力和数据来持续提升效果。
但这里要保持清醒,生成式推荐不是银弹。它对工程能力要求极高,美团MTGR需要把样本前向推理FLOPs提升65倍才能在线上落地,推理成本反而降低了12%。这种极致的性能优化不是每个公司都能做到的。而且生成式推荐更适合用户序列长、物品语义丰富、需要深度推理的场景,比如长视频、图书、课程推荐。对于快消品电商、短视频这种更看重实时性和覆盖度的场景,传统架构可能依然更合适。
面试时如果被问到"生成式推荐会取代传统架构吗",你可以这样回答:"生成式推荐是2025年的重要趋势,但短期内不会完全取代传统架构。我认为未来3-5年可能会出现混合架构:召回层保留传统多路召回保证性能和覆盖度,粗排精排用生成式模型替代来提升效果,重排层保留规则策略满足业务约束。这样既能享受生成式模型的效果提升,又能保证系统的稳定性和可控性。"
另一个2025年绕不开的话题是大语言模型在推荐系统的应用。LLM确实在推荐场景有独特价值,但关键是找对用法。直接让LLM在线打分推理太慢了,比传统模型慢近1000倍,完全不现实。业界实践主要有三个方向:第一是离线用LLM生成特征,比如用户画像、物品embedding、推荐理由,存入特征库线上直接查表;第二是知识蒸馏,用大模型生成训练数据,训练一个小模型模仿大模型输出,线上用小模型;第三是混合推理,粗排用传统模型快速筛选,精排可以用稍大的模型,最终展示的十几个商品可以调用LLM生成解释。
蚂蚁的LLMRG工作很有代表性,它用大语言模型构建个性化推理图,通过推理将用户的历史行为和属性信息连接起来,并进行发散式延伸,构建出表达用户高阶兴趣的推理图。这种做法的好处是LLM不直接参与线上推理,而是在离线阶段帮助理解用户兴趣,生成的推理图作为特征输入传统推荐模型。这样既利用了LLM的推理能力,又避免了性能问题。
淘宝的URM模型解决了另一个关键问题:怎么把传统的ID embedding和LLM的文本embedding融合起来。协同过滤学到的ID embedding包含了用户行为的协同信号,但LLM很难理解这种信号;LLM生成的文本embedding语义丰富但缺少协同信息。URM通过多模态融合,让两种embedding在同一空间对齐,老用户、热门商品更依赖ID embedding,新用户、冷启动商品更依赖文本embedding,用门控机制动态调整权重。这种思路在2025年已经比较成熟了。
深入思考与经验沉淀
面试官抛出这道题的时候,表面上是在问技术架构,实际上是在透视你的系统思维能力。他想知道的不只是你能不能背出召回粗排精排重排的定义,而是你是否真正理解大规模工程系统里那些无法两全的权衡决策。很多同学会陷入一个误区,觉得只要把每个环节的算法说清楚就算过关了,但其实面试官更想听到的是你对"为什么要这样设计"的思考深度。
当你回答完基本概念后,面试官最常见的追问方向是各层效果评估。这时候千万别只说一句"看AUC指标"就完了,要展现你理解不同层级有不同的评估逻辑。面试时可以这样组织回答:"召回层我会更关注覆盖率和候选集质量的天花板,因为召回漏掉的内容后面再也没机会补救。粗排虽然也看准确性,但更重要的是验证它有没有错杀高分样本,所以我会统计精排top结果在粗排阶段的排序分布。精排关注的是线上AB测试的最终业务指标,比如点击率、停留时长这些。重排比较特殊,除了传统指标还要看多样性得分,可能需要用自定义的指标衡量列表整体质量。"这种回答方式体现了你知道每一层的目标函数本质上是不一样的。
调优经验的追问也很常见,这其实是在考察你有没有真正动手解决过实际问题。即使你没做过完整的四层系统,也完全可以聊单层的实践心得。面试时可以说:"我在项目里优化过召回层的延迟问题,当时发现多路召回并行请求时某一路特别慢会拖累整体响应时间,后来加了超时熔断机制,宁可某路召回失败也要保证整体可用性。"或者谈特征工程的坑:"精排模型上线后发现某个实时特征偶尔获取失败导致预测异常,后来做了特征降级方案,实时特征拿不到就用T-1天的统计特征兜底。"这些细节会让面试官觉得你不是只会谈理论,而是真的踩过坑。
遇到问题怎么排查也是个高频追问点。面试时可以准备一个troubleshooting的思路框架:"如果线上推荐效果突然变差,我会先看各层的日志和监控指标,定位是哪一层出了问题。比如发现精排模型AUC没变但点击率下降,可能是重排策略过度打散破坏了相关性。如果召回阶段候选集数量骤减,要排查是某路召回服务挂了还是索引数据更新出问题。"这种分层诊断的思路恰好呼应了前面讲的系统架构,展现出你的工程sense。
如果面试官问重排有没有更智能的做法,你可以提一下最优化方法。比如可以说:"基于规则的重排虽然直观,但很难量化多样性和相关性的平衡。我了解到有些团队会用MMR算法,它每次选择时既考虑物品和用户兴趣的相关度,又考虑和已选物品的差异度,通过一个参数动态平衡这两者。"或者提到强化学习的思路:"重排可以建模成序列决策问题,用强化学习优化整个列表的长期收益,但这种方法工程复杂度高,通常只有大厂才会投入资源尝试。"这种回答既展示了你的知识广度,又表现出对落地成本的清醒认识。
回答这道题的时候,最后可以升华一下,说分层架构体现的是推荐系统的工程智慧:不追求每个环节都完美,而是让每层在各自擅长的地方发挥价值,整体协同达到性能和效果的最优平衡。这种表达会让面试官觉得你不只是懂技术,还理解背后的工程trade-off。面试快结束时可以主动提一句:"这套分层架构虽然经典,但也不是唯一解法。我了解到2025年有些公司在探索生成式推荐,试图用统一模型替代传统的粗排精排,像美团的MTGR和快手的OneRec都已经在线上验证了效果。不同业务场景下架构选择会不一样,关键是找到自己场景下的最优平衡点。"这种开放性的思考会给面试官留下很好的印象,显得你不是教条主义者,而是理解技术服务于业务的本质。
高频追问与应对策略
Q: 召回如果有一路挂了怎么办?
这个问题考察的是你对系统稳定性的认识。你可以这样回答:"召回层我会设计降级策略,每路召回独立超时控制在50毫秒,某路失败不影响其他路。同时准备兜底召回,比如热门推荐和用户历史行为,保证至少有基础候选集返回。线上会监控各路召回成功率,触发告警阈值立即人工介入。实践中发现协同过滤这路偶尔会因为相似度计算超时,这时候宁可让它超时失败,也不能拖累整体响应时间。"
Q: 粗排真的有必要吗?为什么不直接召回→精排?
这个问题很常见,你需要用数据说话:"我们试过去掉粗排直接精排,发现两个问题:第一是精排延迟从100ms飙到800ms,因为要处理2000个候选而不是300个;第二是机器成本增加5倍,因为精排模型复杂度高。粗排用20%的成本解决了80%的明显错误样本,ROI很高。而且粗排可以用更简单的特征,很多实时特征获取成本高,粗排阶段可以不用,到精排阶段再获取,这也降低了整体成本。"
Q: 重排会不会破坏精排的效果?
这个问题需要你展现对全局优化的理解:"确实存在这个风险,所以我们的重排策略会设置约束:第一是只调整相邻位置,最多移动3个位置;第二是设置分数阈值,分差大于0.1的不允许调换;第三是通过AB测试验证每个重排策略,确保整体指标不降。实践中发现合理的重排能提升2-3%的用户体验指标,因为精排追求的是单物品分数最高,但用户真正在意的是整个列表的体验。"
Q: 冷启动用户怎么处理?
这个问题可以展现你的全链路思考:"分层应对。召回层提高热门召回和地域召回的权重,因为新用户没有个性化数据;精排层加入探索机制,随机插入一些优质新品,观察用户反馈;重排层确保类目多样性,让用户快速表达偏好。前3次请求主要做用户画像探索,第4次开始个性化推荐。2025年还有个新做法,就是用大语言模型根据用户注册时填的简单信息,生成一个初始画像,虽然不精准但总比完全随机好。"
Q: 你怎么看待生成式推荐?它会取代传统架构吗?
这是2025年的热门问题,需要保持客观理性:"生成式推荐是个很有前景的方向,Meta和美团的实践已经验证了它的可行性。它最大的优势是端到端优化,消除了传统多阶段架构的目标割裂问题,而且验证了Scaling Law,模型越大效果越好。但我认为短期内不会完全取代传统架构,原因有三:第一是工程门槛极高,需要极致的性能优化才能上线;第二是效果提升是场景化的,在长序列、语义丰富的场景效果明显,但简单场景反而不如传统方法高效;第三是可解释性和可控性变差,出问题时debug难度大。我觉得未来会是混合架构:召回保留传统方法保证性能,粗排精排探索生成式模型提升效果,重排保留规则满足业务约束。"
Q: 大模型推理这么慢,怎么用在推荐系统?
这个问题要展现你对性能的敏感:"确实,LLM推理比传统模型慢近1000倍,直接在线用不现实。业界主要有三种解法:第一是离线批量生成,用LLM每天凌晨给所有用户生成画像、给所有商品生成embedding,存入特征库,白天直接查表,延迟小于1毫秒;第二是知识蒸馏,用大模型生成大量标注数据,训练一个轻量级小模型模仿大模型,线上用小模型,延迟降低100倍;第三是混合推理,粗排用传统模型快速筛选,精排处理top200可以用稍大的模型,最终展示12个可以调用LLM生成解释。美团MTGR的实践表明,通过极致的性能优化,推理成本反而能降低12%,关键是优化做得够好。"
回答2025年的推荐系统面试题,核心是展现三个能力:第一是对传统架构的深入理解,包括为什么要分层、每层怎么设计、怎么优化;第二是对新技术的了解和判断,知道生成式推荐和大模型的价值与局限;第三是工程思维,任何技术讨论都要落到性能、成本、可维护性这些实际问题上。保持这种平衡感,你的回答就会显得既有深度又接地气。