从商品推荐到 Agent:RAG 与长期记忆为什么都像一套召回排序系统
做商品推荐时我们面对的是一个经典问题商品很多但用户在当前时刻真正感兴趣的只有少数几个。系统需要从海量商品中找出候选过滤无效内容按用户兴趣排序并通过后续点击和购买持续修正结果。RAG 和 Agent 长期记忆看起来属于大模型应用但从工程结构上看它们与推荐系统高度相似区别只在于推荐的对象和优化目标。商品推荐推荐的是商品目标通常是点击、购买和长期留存。RAG 推荐的是能够支持回答的资料证据目标是相关、正确、可追溯。长期记忆推荐的是当前回答真正需要用到的用户偏好和稳定事实目标是回答一致、准确且不冒犯用户隐私。因此推荐系统的“数据采集、召回、过滤、排序、反馈闭环”是一套可迁移的工程范式而不是某一种只能用于电商的算法。1. 一个统一的视角从候选集合中找最该返回的信息三类系统都可以抽象为同一个问题给定当前请求和历史上下文从一个很大的候选集合中找出少量最有价值的信息。对应关系如下推荐系统RAG长期记忆商品库文档、网页、笔记的分块库用户的稳定偏好、目标、事实库用户当前行为和场景当前问题、已选择资料、会话上下文当前问题、当前会话和用户身份召回候选商品召回相关文档分块召回相关记忆无货、不可售、重复商品过滤权限、资料范围、低质量分块过滤用户归属、状态、敏感性、冲突记忆过滤点击/购买概率排序相关性和重排分数排序相关性、置信度、时效性排序点击、购买、退款反馈点赞点踩、引用正确性、回答质量反馈用户编辑删除、纠错和后续会话反馈这里的关键不是“它们都使用向量数据库”。向量检索只是召回手段之一真正相同的是系统都要解决候选集过大、结果不全相同、用户意图会变化以及结果需要被持续评估的问题。2. 商品推荐这套范式最成熟的形态电商商品池往往有百万级甚至更大不可能让一个模型对所有商品逐一精算。因此生产系统通常是多阶段的。采集行为和商品信息记录曝光、点击、收藏、加购、购买、退款同时维护商品类目、价格、品牌、库存和促销信息。多路召回快速找出几百到几千个候选商品。例如ItemCF根据“看过或买过 A 的用户也看过 B”召回相似商品也可以根据用户最近的行为序列、类目、关键词或商品向量召回。过滤和粗排去掉无库存、下架、不可配送、重复或用户明确不感兴趣的商品。精排和重排预测点击、购买或预期成交金额再控制多样性、新品曝光、价格范围和运营约束。反馈闭环新的点击、购买和退款进入日志用于更新相似关系、特征和排序模型。一个很具体的行业场景是商品详情页的“看了这件商品的人还看了什么”或“买了 A 的人也买了 B”。用户看了一双跑鞋系统会从与跑鞋共同浏览、共同加购或共同购买的商品中召回运动袜、鞋垫、速干衣等候选再结合价格区间、库存和用户近期行为排序而不是只靠“它们都属于运动类”这个粗糙规则。ItemCF可以被理解为在“用户—商品”二部图上利用共同邻居找相似物品。它不是知识图谱的同义词用户—商品交互图记录的是行为关系知识图谱记录的则是品牌、类目、作者、概念等更显式的语义关系。两者都能帮助推荐但不是同一种数据结构。3. RAG把“推荐商品”替换成“推荐证据”在知识工作台中用户并不希望系统随便给出一段看起来合理的答案而是希望回答能依据自己选择的资料并且能够追溯来源。因此 RAG 的候选不是商品而是资料里的证据片段。以 YouDaoNoteLM 的资料问答流程为例完整链路可以写成这里能看到推荐范式的直接迁移资料解析和分块相当于商品系统里的商品建模与特征建设。关键词检索、稠密向量检索、混合检索相当于多路召回。sourceIDs 过滤、权限校验、父子块去重和 TopK 截断相当于候选过滤。RRF 融合和重排相当于精排。父块回溯与引用收集则是 RAG 相比商品推荐多出来的“证据恢复”步骤。真实项目场景基于用户选中的资料生成面试回答假设用户在知识工作台中选择了项目架构文档、长期记忆设计文档和 RAG 设计文档并提出问题“为什么长期记忆不能只放在向量数据库里请按 STAR 法则回答。”系统不会把所有文档直接塞进 Prompt而是先根据问题生成适合检索的 query限定在用户选中的资料范围内再通过向量检索和关键词检索召回“向量库作为索引、副本”“MySQL 是事实源”“memory_id 关联”等片段融合、重排后回溯其所属父块最后由 Agent 组织成 STAR 回答并带上引用。这与商品推荐的差别在于商品推荐可以把十个候选商品平铺展示RAG 必须把多个证据综合为一段可验证的答案。所以 RAG 的排序目标不仅是“像不像问题”还要考虑证据完整性、来源可信度和上下文是否足以支撑回答。4. 长期记忆把“推荐证据”替换成“推荐用户信息”长期记忆服务的不是“资料里有什么”而是“这个用户长期有哪些稳定且值得影响回答的信息”。例如偏好的输出格式、长期学习目标、稳定的项目背景、明确要求保存的信息以及在多个会话中反复确认的事实。它同样有完整的数据链路。真实项目场景面试回答偏好的跨会话延续本文讨论中用户多次提出“面试回答希望简洁”“最好按 STAR 法则”“每个问题要基于这个 Agent 项目而不是大概念”。这类要求不是一次性的资料证据而是稳定的表达偏好适合作为候选长期记忆。一条写入后的记忆可以是{memory_id:mem_01,memory_type:output_preference,content:回答项目面试问题时优先使用简洁的 STAR 结构并结合 Agent 项目实现细节。,confidence:0.95,status:active,source:多轮用户明确要求,version:1}当用户下一次问“怎么解释长期记忆和会话摘要的区别”时系统会先把当前问题向量化在向量库里找到mem_01再通过memory_id回查 MySQL。MySQL 负责确认这条记忆确实属于当前用户、仍处于active状态、没有被用户删除或被新版本覆盖。验证通过后系统只把这条高相关记忆加入上下文Agent 就会自然地按简洁 STAR 风格回答。这里不能简单地说“用户画像同时存进 MySQL 和向量数据库”。更严谨的设计是MySQL 是事实源保存记忆正文、用户归属、类型、状态、置信度、来源、版本和生命周期信息支持更新、删除和审计。向量数据库是语义索引保存 embedding 与memory_id负责根据当前问题找候选。memory_id 是两者的关联键向量召回负责“找得像”MySQL 负责“这条记忆现在还能不能用、是不是这个用户的、内容是否可信”。这和推荐系统中的“召回索引 商品主数据”也很相似召回层追求快事实源追求可管理和可恢复。5. 为什么长期记忆比推荐更保守推荐错误的代价通常是这次商品不够合适长期记忆错误却可能持续影响之后的每一轮回答。例如用户说“这次写正式一点”如果被误写成永久偏好后续回答都会变得生硬。因此长期记忆的写入应当遵循以下边界只提取用户明确要求保存的信息、稳定偏好、长期目标和反复出现的事实。“本次、这次、临时”等一次性约束不写入长期记忆。敏感信息默认不写或进入需要确认的状态。模型输出不能直接当作用户事实它最多作为写入候选的上下文或证据。Agent 调用 RAG 工具获得的外部资料内容不能直接写成“用户的长期事实”。低置信度候选进入pending冲突的旧记忆可以降权、失效或被新版本覆盖。推荐系统会通过探索机制给新商品更多曝光长期记忆却不应该因为“需要探索”就把不确定的猜测注入上下文。它的第一原则是高精度和可控而不是召回越多越好。6. 反馈闭环不是让模型自己决定一切三类系统都需要反馈但反馈来源和可信度不同。系统直接反馈可观测指标需要谨慎的地方商品推荐点击、加购、购买、退款CTR、CVR、GMV、复购率点击高不代表用户真的满意RAG点赞点踩、引用正确性、追问RecallK、NDCG、回答满意度、引用覆盖率模型自评不能代替真实证据校验长期记忆用户修改、删除、纠错、点赞点踩原因误写率、冲突率、编辑删除率、召回延迟、token 增量不能把模型自己的猜测循环写回记忆长期记忆的评估也不是全部交给模型。可以分三层系统自动统计记录召回了哪些memory_id、最终注入了哪些、增加了多少 token、检索耗时多久、用户是否编辑或删除。用户显式反馈在回答后提供点赞或点踩并让用户选择“记错了我的偏好”“不应该使用这条记忆”“风格不符合预期”等原因。离线人工或模型辅助评估从已标注样本中判断当前问题是否应该召回某条记忆、写入是否正确、冲突是否被正确处理。模型可以辅助批量评估但高风险样本仍应由人工抽检。为了将反馈归因到具体记忆可以记录一条 memory tracerun_id user_id retrieved_memory_ids injected_memory_ids memory_token_count retrieval_latency_ms user_feedback feedback_reason有了这条链路用户点踩“记错了我的偏好”时系统能定位当时究竟注入了哪条记忆而不是只能知道“模型这次答得不好”。7. 结论复用的是范式不是照搬目标把 RAG 和记忆机制看作推荐系统范式的迁移有助于设计出更完整的 Agent用多路召回避免只依赖一种检索信号。用过滤和重排控制相关性、权限、状态和上下文长度。用反馈闭环判断系统是否真的提高了用户体验。用数据生命周期管理处理失效、冲突、合并和删除。但不能把三者完全等同。商品推荐关心“用户可能想买什么”RAG 关心“哪段资料可以作为可信证据”长期记忆关心“哪些用户信息应该在此刻被使用”。一句话总结是推荐系统是在推荐商品RAG 是在推荐证据长期记忆是在推荐对当前回答最有价值的用户状态。它们共享召回、过滤、排序和反馈的工程骨架但必须分别围绕转化、可信度和记忆准确性设计目标函数与安全边界。

相关新闻

别再死记复杂度!手把手带你推导所有经典案例 —数据结构壹

别再死记复杂度!手把手带你推导所有经典案例 —数据结构壹

你好,我是林森lsjs 我的Github 地址:sqyCoder (Qiyang) GitHub 以博文记录成长,用心打磨代码与思维 目录 一、集合类引入 1.与数据结构的联系 二、时间复杂度 1.概念 2.计算 1.1 例1:O (N) 1.2 例2:O(MN) 1.3…

2026/10/11 6:39:46 阅读更多 →
RK3568笔记131:正点原子RK3568开发板蓝牙音箱完整实现指南

RK3568笔记131:正点原子RK3568开发板蓝牙音箱完整实现指南

若该文为原创文章,转载请注明原文出处。 一、前言 基于正点原子RK3568开发板的硬件平台,结合BlueALSA音频桥接方案,将开发板打造成一个功能完整的蓝牙音箱。实现手机蓝牙连接、A2DP音频播放,并优化了音质与连接稳定性。 技术架构 二、环境确认 项目 信息 开发板 正点原子…

2026/9/23 8:23:20 阅读更多 →
自动售货机商品识别YOLO模型训练实战:从6万张图片到98%识别率的完整复盘~YH

自动售货机商品识别YOLO模型训练实战:从6万张图片到98%识别率的完整复盘~YH

做AI视觉开门柜,核心就两件事:硬件跑得动,模型认得准。本文不讲理论,只讲数据准备、训练策略、部署优化这些实战细节。一、数据准备:6万张图是怎么来的很多人的第一反应是:"直接用公开数据集不就完了&…

2026/10/1 22:27:52 阅读更多 →

最新新闻

网上宠物店系统实战:SpringBoot+Vue3+MyBatis前后端分离部署

网上宠物店系统实战:SpringBoot+Vue3+MyBatis前后端分离部署

做这套网上宠物店系统,起因其实挺简单——有位做校园实训项目的朋友问我要一套完整的前后端分离案例,既要有电商的业务逻辑,又要覆盖主流技术栈。想着与其临时拼凑,不如把平时积累的东西整理成一套能跑、可扩展的系统。于是就有了…

2026/10/13 7:26:02 阅读更多 →
Unity事件中心从设计到落地:用广播解耦模块通信的完整实战

Unity事件中心从设计到落地:用广播解耦模块通信的完整实战

模块之间通信真的把人写痛过。接触Unity这几年,项目越往后越臃肿,最怕的就是那种到处FindObjectOfType、到处直接调别人public方法的老代码。某个系统崩了,日志里全是不相干的报错,改一行UI逻辑,结果角色移动跟着出问题…

2026/10/13 7:26:02 阅读更多 →
SpringBoot+Vue+MySQL实现陕西民俗网平台:毕业设计全流程解析

SpringBoot+Vue+MySQL实现陕西民俗网平台:毕业设计全流程解析

看到【毕业设计】SpringBootVueMySQL 中国陕西民俗网平台这个题目,我第一反应是:又是一个典型的“前后端分离 关系型数据库”的毕业设计项目。但仔细拆开看,它其实比普通的学生管理系统更有可聊的东西。它表面上是一个民俗文化展示网站&…

2026/10/13 7:26:02 阅读更多 →
Flutter for OpenHarmony实战:构建跨端盲盒App的完整技术方案

Flutter for OpenHarmony实战:构建跨端盲盒App的完整技术方案

做一个盲盒抽奖App的活儿,现在摆在面前的第一个问题不是业务逻辑,而是技术选型。团队接到的是一个需要在国产系统上跑起来的项目,目标平台是OpenHarmony生态,产品形态是一个集商城和抽奖玩法于一体的盲盒App。我当时的想法很简单&…

2026/10/13 7:26:02 阅读更多 →
Linux进程状态全解析:从R/S/D/Z到内核调度与排查实战

Linux进程状态全解析:从R/S/D/Z到内核调度与排查实战

两三年前我第一次遇到一批D状态进程堆积在服务器上的场景时,第一反应是找应用日志、分析服务线程,折腾了一个多小时毫无头绪,最后才发现问题是宿主机存储链路超时,所有进程都在等底层磁盘回包。那次之后我才真正意识到&#xff1a…

2026/10/13 7:26:02 阅读更多 →
Linux下SQL Server分区实战:性能优化与I/O协同

Linux下SQL Server分区实战:性能优化与I/O协同

1. 项目概述:为什么在 Linux 上谈 SQL Server 分区,不是“炫技”,而是刚需SQL Server On Linux 自 2017 年正式发布以来,已从“能跑”走向“稳跑”,再到如今的“高效跑”。但很多团队在迁移或新建 Linux 环境下的 SQL …

2026/10/13 7:25:02 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →