长序列行为数据怎么处理?
Agent系统序列压缩、记忆选择与上下文管理方案
原题:当用户的交互历史非常长(如数千次点击或浏览记录)时,在构建生成式推荐或Agent系统时应如何有效处理长序列行为数据?请从序列压缩、记忆选择、上下文管理等角度说明技术方案。
Agent · 小红书真题
30 秒回答
- 时间衰减:$w t = e^{-\lambda \cdot \Delta t}$,近期行为权重指数级提升
- 重要性采样:基于点击/停留时长计算行为得分,Top-K检索
- 任务感知选择:Agent规划时,用当前query检索相关历史(类似RAG)
- 热记忆:最近1-2天行为,全量放入prompt
回答与解析
核心思路:分层记忆 + 动态压缩
长序列处理的关键是区分信息密度——并非所有历史行为都同等重要。
一、序列压缩策略
| 方法 | 适用场景 | 核心思想 |
|---|---|---|
| 滑动窗口 | 实时性要求高 | 保留最近N条,丢弃过期行为 |
| 分层摘要 | 长期兴趣建模 | 用轻量模型(如T5-small)定期压缩历史为"兴趣标签"或"用户画像" |
| 聚类降维 | 行为类型多样 | 将相似行为聚类,用质心代表群组 |
小红书场景示例:将用户3个月的浏览记录按"美妆/穿搭/美食"聚类,每类保留高频关键词而非原始item ID。
二、记忆选择机制
- 时间衰减:$w_t = e^{-\lambda \cdot \Delta t}$,近期行为权重指数级提升
- 重要性采样:基于点击/停留时长计算行为得分,Top-K检索
- 任务感知选择:Agent规划时,用当前query检索相关历史(类似RAG)
工程实现:维护双记忆结构
- 热记忆:最近1-2天行为,全量放入prompt
- 冷记忆:历史行为向量化存入HNSW索引,按需检索Top-10
三、上下文管理优化
- KV Cache复用:对固定历史前缀预计算并缓存,避免重复编码
- 稀疏注意力:Longformer/BigBird模式,降低$O(n^2)$复杂度
- 分页调度:vLLM的PagedAttention思想,动态分配显存
四、小红书场景的特殊考量
- 多模态行为:图文/视频浏览需统一embedding空间
- 实时性:新发布笔记需在分钟级进入用户记忆
- 负信号:曝光未点击同样重要,需设计负样本选择策略
最终方案往往是混合架构:短期用滑动窗口保证实时性,长期用向量检索+摘要压缩控制成本。
学习建议
建议系统学习该知识点
口语版讲法(约4分钟)
- 本质是信息密度分层
- 短期用滑动窗口,长期用摘要加向量检索
- 一个业务例子:小红书用户行为处理
- 落地风险:摘要质量、实时性、负信号
- 个人倾向:混合架构,分而治之
这个问题本质上是在问,当用户历史行为太长,比如几千次点击浏览,我们怎么从海量噪音里捞出真正有用的信号来驱动生成式推荐。我的核心思路就是分层记忆加动态压缩。说白了,不同时间跨度的行为,信息密度不一样,得分开处理。
具体说一下。短期行为,比如最近一两天的,实时性要求高,对当前意图影响也直接,我一般直接用 滑动窗口,保留最近N条,比如50条或者100条,再早的直接丢掉。这个简单高效,但长期兴趣就靠它不行。长期的话,我会用两种手段配合。一种是 分层摘要,定期用轻量模型,比如T5-small,把用户过去一个月的浏览历史压缩成兴趣标签,比如'美妆穿搭''数码评测',而不是存原始item ID。另一种是向量检索,把所有历史行为embedding化,存到 HNSW 索引里,等需要的时候,用当前query去检索最相关的Top-10。这其实有点像 RAG 的思路,只不过检索的是用户自己的历史。
这里有个边界划分,你得想清楚:短期行为适合用滑动窗口保实时性,长期行为适合用摘要加向量检索保容量和灵活性。但真正落地,往往是两者混着来。举个例子,在小红书这种场景,用户刷了三个月,浏览记录几万条。我会这样搭:热记忆保留最近一天的所有行为,全量放进prompt;冷记忆把更早的历史按周做摘要,同时向量化存起来,按需检索。这样既保证了实时反馈,又不丢失长期偏好。
但这里有个坑,就是摘要的质量。如果你压缩得太狠,比如把一个月的浏览缩成三个标签,可能会丢掉细粒度的兴趣变化。所以前提是你的摘要模型得足够好,而且要做在线评估,比如定期用摘要回放历史行为,看召回率有没有掉。另外,实时性也是个挑战,新发布的笔记得在几分钟内进入用户记忆。我会给冷记忆建一个增量更新通道,新行为先进热记忆,再异步写入向量索引。还有一个常被忽略的点是负信号,比如曝光但没点击的记录,它们其实很重要,能反映用户不喜欢什么。我会在采样时给负样本一定权重,不能全丢了。
说到这个,我最近在思考一个问题:当用户行为包含多模态内容,比如图文和视频混在一起,怎么把它们映射到统一的embedding空间里?直接用 CLIP 可能不够精细,但专门训一个多模态行为模型成本又太高。这块我还在看,感觉是线上效果的一个瓶颈。
所以整体上,我更倾向一个混合架构,短期靠滑动窗口保障实时性,长期靠向量检索加摘要控制成本和容量。它不是一个固定的方案,而是根据业务场景动态调整各个模块的比例。比如电商场景,短期行为权重可以更大;内容平台,长期兴趣摘要可能更重要。核心就是分而治之,别想着用一个方法搞定所有。
关键一句:多模态行为如何统一到embedding空间,CLIP不够精细但专门训练成本高,是线上效果的瓶颈。
面试官还可能这样问
- 问法 1 · 场景切入
假设你在做一个电商推荐Agent,用户积累了上千次浏览记录,但模型输入长度有限。你会怎么压缩这些历史行为,同时不影响推荐效果?
- 问法 2 · 层层追问
用户历史很长时你怎么处理?……如果直接截断会丢失信息,你有其他办法吗?……那怎么区分哪些历史更重要,比如用户很久前的行为还有用吗?
- 问法 3 · 直球架构
对于数千步的用户行为序列,从序列压缩、记忆选择到上下文管理,请给出一个完整的技术方案。你会用哪些方法,为什么?