1. 项目概述当“猜你喜欢”遇上生成式AI在电商和内容推荐领域“召回”环节就像是给用户准备一份海量商品的“候选清单”。传统的召回模型无论是基于协同过滤的“喜欢A的人也喜欢B”还是基于向量化双塔模型的“语义相似度匹配”本质上都是在已有的商品池里做“选择题”。它们擅长从历史行为中挖掘关联但想象力有限很难跳出用户既有兴趣的“舒适圈”去发现那些看似不相关、实则可能引发惊喜的潜在兴趣点。这就像一位只根据你过去点过的菜来推荐新菜品的厨师虽然稳妥但少了点“开盲盒”的惊喜感。“生成式召回”的出现正在尝试打破这个局面。它不再仅仅是“匹配”和“筛选”而是试图“创造”出候选。想象一下不是在海里捞针而是根据你对“针”的描述直接“生成”几根最符合你描述的“针”的草图再去库里找最像的实物。在得物这样的潮流社区电商平台上用户对“潮流”、“风格”、“搭配”的追求充满了主观性和探索性传统的召回方式有时会显得力不从心。生成式AI特别是大语言模型所具备的强大语义理解、逻辑推理和内容生成能力为我们打开了一扇新窗能否让模型像一位资深的潮流买手或搭配师一样根据用户当下的语境和意图“脑补”出他可能感兴趣的商品这正是我们在得物探索生成式召回技术的核心驱动力。我们面对的挑战和机遇并存一方面电商场景对结果的准确性、相关性和可控性要求极高生成模型的“幻觉”问题在这里是致命的另一方面社区丰富的用户生成内容UGC、商品详情的图文信息、以及用户复杂的浏览、搜索、互动序列又为生成式模型提供了肥沃的“理解”土壤。这篇分享我将从一个一线工程师的视角拆解我们如何将“生成式召回”这个听起来很前沿的概念一步步落地到得物的真实业务流中分享其中的技术选型、核心实现、踩过的坑以及我们对未来的一些思考。无论你是对推荐系统感兴趣的新手还是正在探索AIGC落地的同行希望这些实打实的经验能带来一些启发。2. 核心思路从“匹配”到“生成”的范式转变2.1 传统召回的技术瓶颈与业务诉求在深入生成式召回之前有必要先看看我们为什么需要它。得物的业务场景有几个鲜明特点商品非标品化严重同是T恤设计、联名、潮流元素天差地别、用户兴趣动态且多元今天看球鞋明天可能看露营装备后天又被一篇穿搭笔记种草了某款配饰、强社区属性驱动大量穿搭分享、开箱测评内容直接影响消费决策。传统的向量召回模型如双塔DSSM在这里会遇到几个典型问题冷启动与长尾商品曝光不足新上架的潮流单品、小众设计师品牌由于缺乏足够的交互数据其向量表示不够精准很难在召回阶段被有效触达。多模态信息利用不充分商品标题、详情文案、图片、用户评论、社区笔记等都是宝贵的信息源。传统模型通常将这些信息压缩成一个静态的向量过程中会损失大量细粒度语义和视觉风格信息。例如用户搜索“落日余晖配色”传统模型可能只能匹配到标题含“橙色”、“黄色”的商品而无法理解这是一种充满氛围感的色彩风格。复杂意图理解能力弱用户的真实意图往往隐藏在多轮交互和复杂查询中。比如用户先浏览了几双复古跑鞋又搜索了“cityboy穿搭”他的意图可能不再是单一的“跑鞋”而是“适合cityboy风格的、带有复古元素的鞋款或服装”。这种需要结合上下文进行推理的意图传统匹配模型难以精准捕捉。业务侧对我们的核心诉求很明确在保证相关性和准确率基本盘的前提下显著提升推荐的惊喜度Serendipity和探索性Exploration尤其要能挖掘潜在兴趣和带动长尾优质商品。生成式召回正是我们应对这些挑战的一次关键尝试。2.2 生成式召回的基本原理与架构设计生成式召回的核心思想是将召回任务重新定义为“条件生成”任务。具体来说我们利用大语言模型LLM将用户的历史行为序列、当前查询、上下文信息等作为“条件”或“提示”让模型生成一系列可能符合用户兴趣的“商品描述”或“商品标识符”然后再将这些生成的内容映射回实际的商品库。我们设计的整体架构分为离线和在线两个部分离线部分商品知识库构建这是基础。我们不是让LLM凭空创造商品而是让它基于一个丰富的“商品知识库”进行生成。这个知识库包含了所有商品的结构化信息ID、类目、品牌、价格和非结构化信息精炼后的标题、核心卖点、风格标签、从图片中提取的视觉特征关键词等。我们使用一个轻量级的Embedding模型为每个商品生成一个向量用于后续的快速检索。提示工程与模型微调设计用于引导LLM生成商品描述的提示模板。例如“根据用户的浏览历史[历史商品序列]以及他当前的搜索词‘[查询词]’生成5个该用户可能感兴趣的商品描述。描述应包含商品类型、主要风格、关键特征并避免生成实际品牌名和商品ID。” 为了提高生成结果与得物商品池的对齐度和可控性我们采用了LoRA等参数高效微调技术在高质量的用户上下文 理想商品描述数据对上对基础LLM进行微调。在线部分用户实时上下文编码当用户发起请求时系统会实时拼接用户的近期交互序列如最后点击的5个商品、搜索词、所在页面上下文等形成一段完整的提示文本。条件生成将拼接好的提示输入到部署好的、经过微调的LLM服务中。模型会基于概率生成多条例如10-20条商品描述文本。这里我们使用集束搜索或核采样策略在保证多样性的同时控制生成质量。生成描述到商品映射这是关键且富有挑战的一步。生成的描述是文本我们需要将其“落地”为具体的商品ID。我们采用了两阶段映射法阶段一粗筛。使用一个高效的向量检索服务如Milvus、Faiss将生成的商品描述通过同一个轻量级Embedding模型向量化然后从全量商品向量库中进行近似最近邻搜索召回Top K个例如200个候选商品。阶段二精排。由于向量检索可能存在语义漂移我们引入一个轻量级的交叉编码器模型。该模型以“生成的描述”和“候选商品的详情文本”作为输入直接输出一个匹配分数。根据这个分数对Top K个商品进行重排序选出最匹配的Top N个商品例如50个作为生成式召回通道的最终结果。多路召回融合生成式召回的结果不会单独使用。它会与传统的向量召回、协同过滤召回、热门召回等多路结果一起送入后续的排序模型进行统一打分和混排。我们的策略是让生成式召回充当“探索先锋”和“补充部队”的角色。关键设计思考为什么选择“生成描述-检索映射”的路径而不是让LLM直接输出商品ID这是出于可控性和可扩展性的考虑。直接输出ID要求模型记忆海量ID与特征的映射几乎不可能且极易出错。而生成描述的方式将LLM擅长的语义理解、推理生成能力与向量检索/交叉编码器擅长的精确匹配能力解耦架构更清晰也便于单独优化每一环。3. 核心实现提示工程、模型优化与系统集成3.1 提示词设计的艺术与科学提示工程是生成式召回效果的“方向盘”。我们的目标是设计出能让LLM稳定输出高质量、多样化、且符合业务约束的商品描述的提示词。经过大量AB测试我们总结出几个有效的设计模式角色扮演与任务明确给模型赋予一个明确的角色能显著提升生成结果的专业性和一致性。例如“你是一个专业的潮流穿搭顾问熟悉各类运动鞋、服装和配饰。请根据用户的行为推测他的穿搭喜好和潜在需求。”结构化输出要求要求模型按照特定格式输出便于后续程序化解析。例如“请严格按照以下格式生成描述每条描述一行风格: [具体风格] 类型: [商品类型] 关键特征: [特征1 特征2...]”。我们甚至尝试过让模型输出“伪SQL”或“属性键值对”以更好地对齐商品知识库。上下文信息的组织与加权不是简单罗列用户历史行为。我们会根据行为类型点击、收藏、购买、搜索、时间远近、商品价格档位等信息对历史序列中的商品进行重要性加权并在提示词中体现。例如“用户最近重点关注了[商品A 强调联名款] 此外还对[商品B 强调机能风]表现出兴趣。”负面约束与安全护栏明确告诉模型“不要”做什么至关重要。这包括不要生成品牌名称和具体商品ID避免侵权和事实性错误、不要生成平台未售卖的品类、避免生成带有敏感或不当特征的描述、避免过度重复相似特征。引入外部知识在提示词中动态插入一些实时信息如当前季节、热门潮流趋势词通过社区话题挖掘获得让生成结果更具时效性和潮流感。一个我们线上在用的简化版提示词示例你是一个得物平台的潮流推荐助手。请根据用户的近期行为为他生成可能感兴趣的商品描述。 用户近期交互序列按时间由近到远 1. 浏览了Nike Dunk Low 复古板鞋 白灰配色 2. 收藏了Carhartt 工装风多口袋工装裤 3. 搜索了“军事风搭配” 当前季节春季。 平台热趋词复古运动、轻户外、城市通勤。 请生成5条商品描述。每条描述应包含主要风格、商品类型、核心设计元素或材质特点。 请确保 - 描述具体但不要提及任何品牌名和具体商品型号。 - 风格需结合用户历史行为和当前热趋。 - 设计元素符合描述的风格。 输出格式 风格: [风格1] 类型: [类型1] 特征: [特征A 特征B] ...3.2 模型选型、微调与推理优化模型选型在开源LLM中我们选择了参数量在7B到13B之间的模型作为基础如ChatGLM3-6B、Qwen1.5-7B等。这个量级的模型在生成质量、推理速度和部署成本之间取得了较好的平衡。更大的模型如70B效果固然可能更好但线上推理延迟和成本难以承受。模型微调数据构建这是最大的挑战。我们通过人工标注、规则挖掘、利用排序模型“蒸馏”等方式构建了一个高质量的配对数据集。样本格式为{“context”: “用户历史序列和查询” “target”: “人工编写的理想商品描述”}。其中“理想商品描述”需要紧扣上下文且能对应到1个或多个真实商品。微调方法采用LoRA进行高效微调。在全量参数上微调不仅成本高还容易导致模型“遗忘”原有的通用知识。LoRA通过在Transformer层的注意力机制中引入低秩适配器只训练这些新增的少量参数就能让模型快速学习到我们的特定任务指令。我们主要对Query, Key, Value和输出投影层添加LoRA适配器秩一般设置为8或16。损失函数标准的交叉熵损失。但我们会对描述中关键的结构化部分如风格、类型的预测错误给予稍高的权重以强化模型对输出格式的遵循。推理优化量化使用GPTQ或AWQ等后训练量化技术将模型从FP16精度量化到INT4甚至INT3模型体积减小60%-70%推理速度提升2-3倍而对生成质量的影响在可接受范围内。推理框架采用vLLM或TensorRT-LLM等高性能推理框架。它们支持连续的批处理、PagedAttention等优化技术能极大提高GPU利用率和吞吐量降低单个请求的延迟。对于我们这种需要同时处理大量用户请求的在线服务至关重要。缓存策略对于常见的用户行为模式如“浏览了A、B商品”其生成结果在一定时间内是稳定的。我们设计了两级缓存内存缓存高频模式分布式缓存如Redis存储更多结果有效降低对LLM服务的直接调用压力。3.3 系统集成与工程化挑战将生成式召回模块无缝嵌入现有的推荐系统是一个复杂的工程问题。1. 延迟与吞吐的平衡 LLM的生成速度相对较慢即使优化后生成10条描述也需要几百毫秒。我们的解决方案是异步化与提前计算。异步生成用户请求到来时系统立即返回由传统召回通道构成的初始结果。同时异步触发生成式召回任务。当用户进行下一页浏览或短暂停留时生成式召回的结果已经就绪可以混入后续的推荐流中。这保证了首屏的响应速度。用户行为预计算对于活跃用户系统会定期如每半小时根据其最新的行为序列预运行生成式召回并将结果缓存起来。当用户请求发生时直接使用缓存结果实现“准实时”的效果。2. 映射检索的准确性保障 生成描述到商品ID的映射是效果衰减的主要环节。我们除了使用“向量检索交叉编码器精排”的两阶段方案还做了以下优化商品知识库的Embedding模型对齐用于构建商品向量库的Embedding模型与用于向量化生成描述的模型必须是同一个。如果不同两者向量空间不一致检索效果会急剧下降。我们选择了在电商语料上微调过的BGE或M3E等中文Embedding模型。交叉编码器的训练我们收集了生成描述 匹配商品 不匹配商品的三元组数据训练一个轻量级的BERT模型作为交叉编码器。负样本的构建很有讲究除了随机负例我们还加入了“困难负例”即向量检索得分较高但实际不匹配的商品这能显著提升模型的判别能力。3. 效果评估与监控体系 生成式召回的效果不能只看线上AB测试的最终业务指标如点击率、转化率还需要建立中间过程的监控。生成质量评估我们定义了几个自动评估指标生成描述的多样性Distinct-n、与用户历史的相关性通过一个小的判别模型打分、是否符合格式要求。这些指标会实时监控并报警。映射成功率监控跟踪“生成描述-成功映射到商品”的比例以及映射后商品的曝光点击情况。如果映射成功率持续走低需要排查是生成描述的问题还是检索模型的问题。线上AB实验这是最终检验场。我们为生成式召回设置了独立的实验桶对比基线桶无生成式召回核心观察指标不仅是CTR更重要的是人均曝光商品品类数、长尾商品曝光占比、惊喜商品的点击率等这些才是生成式召回价值的核心体现。4. 实战挑战与效果分析4.1 遇到的主要问题与解决方案在项目落地过程中我们踩了不少坑也积累了一些有效的应对策略。问题一LLM的“幻觉”与事实性错误这是生成式技术落地的通病。模型可能会生成平台根本不售卖的商品如“某奢侈品牌限量款跑鞋”或者描述与真实商品严重不符。我们的解法强化微调数据中的“真实性”约束在构造微调数据时确保每条“理想商品描述”都能明确对应到1-N个真实在售商品。在指令中反复强调“基于平台现有商品进行推测”。建立动态商品知识黑名单在提示词中可以加入当前不推荐或无效的品类、品牌列表作为负面约束。后置严格过滤在映射检索后增加一层基于商品类目、属性等规则的强过滤。对于映射到的商品会检查其类目是否与生成描述中的“类型”强相关不相关的直接过滤掉。问题二生成结果多样性不足或过度发散模型有时会陷入“模式复制”给不同用户生成高度相似的描述有时又会过于天马行空生成完全不靠谱的结果。我们的解法采样策略调优放弃贪心解码采用核采样并精心调整温度参数和top-p值。温度稍高如0.8-0.9有助于多样性但需要配合较低的top-p值如0.8来截断长尾低概率词防止胡言乱语。在提示词中注入随机种子在提示词末尾加入一个轻量的、可变的元素如“请从[街头、复古、运动、简约]等风格角度进行思考”其中的风格列表可以随机轮换以打破模型的固定思维。多提示词集成为同一个用户请求设计2-3个在角色或侧重点上略有不同的提示词模板分别生成结果后再去重合并可以有效增加候选集的多样性。问题三线上服务性能与成本压力LLM服务的高延迟和高成本是规模化应用的最大拦路虎。我们的解法模型瘦身与加速组合拳量化是必选项。结合模型剪枝移除不重要的神经元权重和知识蒸馏用大模型教小模型我们尝试将13B的模型压缩到3B左右在效果损失小于5%的情况下推理速度提升了一个数量级。请求合并与批处理在线服务端会将短时间内多个用户的生成请求前提是他们的历史序列经过聚类比较相似合并成一个批次发送给LLM推理服务。vLLM等框架对此有很好的支持能大幅提升GPU利用率。分级服务策略并非所有用户和场景都需要调用生成式召回。我们根据用户价值、活跃度以及当前场景如搜索后的推荐流 vs. 首页推荐流进行分级只对高价值用户或关键场景全量开启其他场景采用降级或抽样策略。4.2 线上AB实验效果与业务价值经过多轮迭代和优化我们将生成式召回接入了得物主站推荐场景进行严格的AB实验。实验周期为两周核心发现如下指标对照组 (基线模型)实验组 (基线生成式召回)相对变化说明整体CTR基准值1.2%显著提升生成式召回带来了新的有效曝光人均曝光商品品类数基准值8.5%显著提升推荐多样性明显增加长尾商品曝光占比基准值15.3%显著提升有效带动了非头部商品的流量惊喜项点击率基准值22.7%大幅提升用户对“意料之外”的好商品接受度高搜索后推荐场景CTR基准值3.1%大幅提升生成式召回对理解复杂搜索意图帮助巨大推荐服务平均响应延迟基准值35ms可控增加因异步化设计对首屏影响极小业务价值解读拓宽兴趣边界最核心的价值是打破了传统推荐系统的“信息茧房”。生成式召回像一个“探索引擎”能够基于用户已有兴趣进行合理外推将那些看似不相关、但内在逻辑相连的商品如从“复古跑鞋”联想到“复古运动夹克”推荐给用户带来了可观的惊喜项点击增长。激活长尾生态对于得物这样注重独特性和潮流感的平台大量优质的设计师品牌和新品处于长尾。生成式召回通过语义生成能更公平地触达这些商品为生态健康注入了活力。深化意图理解在搜索、内容种草等强意图场景下生成式召回展现出了更强的优势。它能将用户的简短查询或浏览内容扩展成丰富的商品需求描述从而进行更精准的匹配这直接体现在搜索后推荐场景的CTR大幅提升上。5. 未来展望与迭代方向生成式召回在得物的初步落地验证了其价值但这只是一个起点。我们认为下一步的进化将围绕以下几个方向展开1. 从“文本生成”到“多模态生成”当前的生成式召回主要基于文本信息。但得物的商品和内容是高度视觉化的。下一步我们将探索多模态大模型的应用。让模型不仅能读懂用户的历史文本行为还能“看到”用户点击过的图片、浏览过的视频从而生成融合了视觉风格如“低饱和度莫兰迪色系”、“廓形剪裁”、材质质感如“丹宁水洗效果”、“皮质光泽”的跨模态商品描述。这需要构建一个融合图文信息的统一商品知识库并在多模态模型上进行指令微调。2. 从“单点召回”到“序列生成与规划”目前的生成是“一次性”的生成N个独立的商品描述。未来的方向是生成一个连贯的商品序列或搭配方案。例如根据用户当前浏览的一件外套生成与之搭配的裤子、鞋子和配饰的完整描述序列。这需要模型具备更强的规划能力和时尚知识其输出可以直接用于构建“虚拟穿搭”或“场景化购物清单”等新功能。3. 与排序模型的深度协同目前生成式召回和后续的排序模型是相对独立的。一个更极致的思路是端到端的生成式推荐或者至少让生成与排序深度协同。例如可以将生成式模型作为一个“提案器”其生成的描述或中间层表示直接作为特征输入到排序模型中让排序模型在打分时就能考虑到这些“生成意图”。也可以探索基于强化学习的框架让生成模型根据排序模型反馈的点击信号进行在线学习。4. 可控性与可解释性的增强生成式模型的“黑盒”特性在商业系统中是一个风险。我们需要增强其可控性。例如开发更精细的“控制面板”允许运营同学通过调整一些参数如“探索系数”、“风格权重”来干预生成式召回的整体倾向。同时研究如何为生成的推荐结果提供简单的解释例如“根据您喜欢的X风格推荐了具有Y元素的商品”提升用户体验和信任度。生成式AI正在重塑推荐系统的技术架构。生成式召回作为第一块重要的拼图其价值在于将推荐的逻辑从“历史数据的拟合”部分转向了“未来需求的推理”。这条路充满挑战包括成本、幻觉、评估等诸多难题但其带来的推荐多样性和深度是传统方法难以企及的。在得物的实践中我们深刻体会到技术落地没有银弹关键在于找到技术与业务场景的最佳结合点用小步快跑、持续迭代的方式将前沿技术的潜力一步步转化为真实的用户价值和商业增长。这个过程既需要工程师对技术的深刻理解也需要对用户需求的敏锐洞察两者缺一不可。