跳到正文

长序列行为数据怎么处理?

Agent系统序列压缩、记忆选择与上下文管理方案

原题:当用户的交互历史非常长(如数千次点击或浏览记录)时,在构建生成式推荐或Agent系统时应如何有效处理长序列行为数据?请从序列压缩、记忆选择、上下文管理等角度说明技术方案。

Agent · 小红书真题

30 秒回答

  1. 时间衰减:$w t = e^{-\lambda \cdot \Delta t}$,近期行为权重指数级提升
  2. 重要性采样:基于点击/停留时长计算行为得分,Top-K检索
  3. 任务感知选择:Agent规划时,用当前query检索相关历史(类似RAG)
  4. 热记忆:最近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思想,动态分配显存

四、小红书场景的特殊考量

  1. 多模态行为:图文/视频浏览需统一embedding空间
  2. 实时性:新发布笔记需在分钟级进入用户记忆
  3. 负信号:曝光未点击同样重要,需设计负样本选择策略

最终方案往往是混合架构:短期用滑动窗口保证实时性,长期用向量检索+摘要压缩控制成本。

学习建议

建议系统学习该知识点

口语版讲法(约4分钟)

  • 本质是信息密度分层
  • 短期用滑动窗口,长期用摘要加向量检索
  • 一个业务例子:小红书用户行为处理
  • 落地风险:摘要质量、实时性、负信号
  • 个人倾向:混合架构,分而治之

这个问题本质上是在问,当用户历史行为太长,比如几千次点击浏览,我们怎么从海量噪音里捞出真正有用的信号来驱动生成式推荐。我的核心思路就是分层记忆加动态压缩。说白了,不同时间跨度的行为,信息密度不一样,得分开处理。

具体说一下。短期行为,比如最近一两天的,实时性要求高,对当前意图影响也直接,我一般直接用 滑动窗口,保留最近N条,比如50条或者100条,再早的直接丢掉。这个简单高效,但长期兴趣就靠它不行。长期的话,我会用两种手段配合。一种是 分层摘要,定期用轻量模型,比如T5-small,把用户过去一个月的浏览历史压缩成兴趣标签,比如'美妆穿搭''数码评测',而不是存原始item ID。另一种是向量检索,把所有历史行为embedding化,存到 HNSW 索引里,等需要的时候,用当前query去检索最相关的Top-10。这其实有点像 RAG 的思路,只不过检索的是用户自己的历史。

这里有个边界划分,你得想清楚:短期行为适合用滑动窗口保实时性,长期行为适合用摘要加向量检索保容量和灵活性。但真正落地,往往是两者混着来。举个例子,在小红书这种场景,用户刷了三个月,浏览记录几万条。我会这样搭:热记忆保留最近一天的所有行为,全量放进prompt;冷记忆把更早的历史按周做摘要,同时向量化存起来,按需检索。这样既保证了实时反馈,又不丢失长期偏好。

但这里有个坑,就是摘要的质量。如果你压缩得太狠,比如把一个月的浏览缩成三个标签,可能会丢掉细粒度的兴趣变化。所以前提是你的摘要模型得足够好,而且要做在线评估,比如定期用摘要回放历史行为,看召回率有没有掉。另外,实时性也是个挑战,新发布的笔记得在几分钟内进入用户记忆。我会给冷记忆建一个增量更新通道,新行为先进热记忆,再异步写入向量索引。还有一个常被忽略的点是负信号,比如曝光但没点击的记录,它们其实很重要,能反映用户不喜欢什么。我会在采样时给负样本一定权重,不能全丢了。

说到这个,我最近在思考一个问题:当用户行为包含多模态内容,比如图文和视频混在一起,怎么把它们映射到统一的embedding空间里?直接用 CLIP 可能不够精细,但专门训一个多模态行为模型成本又太高。这块我还在看,感觉是线上效果的一个瓶颈。

所以整体上,我更倾向一个混合架构,短期靠滑动窗口保障实时性,长期靠向量检索加摘要控制成本和容量。它不是一个固定的方案,而是根据业务场景动态调整各个模块的比例。比如电商场景,短期行为权重可以更大;内容平台,长期兴趣摘要可能更重要。核心就是分而治之,别想着用一个方法搞定所有。

关键一句:多模态行为如何统一到embedding空间,CLIP不够精细但专门训练成本高,是线上效果的瓶颈。

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设你在做一个电商推荐Agent,用户积累了上千次浏览记录,但模型输入长度有限。你会怎么压缩这些历史行为,同时不影响推荐效果?

  2. 问法 2 · 层层追问

    用户历史很长时你怎么处理?……如果直接截断会丢失信息,你有其他办法吗?……那怎么区分哪些历史更重要,比如用户很久前的行为还有用吗?

  3. 问法 3 · 直球架构

    对于数千步的用户行为序列,从序列压缩、记忆选择到上下文管理,请给出一个完整的技术方案。你会用哪些方法,为什么?

同模块相关题目