孔某人的低维认知 01月16日
展望LLM应用的Memory技术发展
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文探讨应用层所需Memory相关技术的发展预判。回顾过去Memory发展,现状不佳。预测未来中短期,增长点来自模型层在Long Context方面的能力发展及Cache Context的优化和拓展。还提到模型层的Memory优化思路。

过去实现Memory的方式有几种类型,但发展缓慢

未来中短期Memory最可能的增长点在模型层

模型层的Memory优化需考虑多种需求和思路

Cache方案的突破在于有损保留部分信息

原创 孔某人 2025-01-15 14:15 北京

下一步的Memory能力提升会来自于模型层

TL;DR:下一步的Memory能力提升会来自于模型层。

0、前言

最近一段时间我也并没有在思考Memory或者Long Context相关的内容,但前一阵被人问了这方面的问题。所以就来谈下目前我对应用层需要的Memory相关技术的发展预判。

首先还是名词解释:并没有一种具体的技术叫做LLM应用的Memory,它跟Agent一样是一类很模糊很模糊的概念,某种意义上它描述的是一种理想,而不是某种已经达到60分的技术方案。

1、回顾过去的Memory发展

目前实现Memory的方式大概有几种类型的方案:

以上这几种方案的边界并不是非常明确的,其中后3种再更抽象的意义来看是一大类的。

这4类思路其实在1.5年之前就已经有了,过去的1.5年中并没有明显的发展。要说的可能也就是RAG方面的GraphRAG作为一个有些独特性的方案是新的。

在Long Context方面,在2024年1月(也就是一年前)大家就已经基本实现了128k context,一些1M context也已经宣发。但一年过去了,大部分模型也仍然只有128-200k context的水平。只有Gemini仍然坚守前沿模型1-2M context的能力。

当然也不是完全没有新的可能性,真正能够长期记忆并能内化的方案大概只有AlphaProof使用的方式,但这种方式目前对于应用层来说成本还太高。

某种意义上,可以说2024年的Memory是一潭死水,至少从公开的方案来说是这样的。可能会有一些团队会在本文评论区宣称自己实现什么什么NB的方式,但我对此都表示怀疑。

2、最可能的增长点

本节开始讨论对未来的预测,首先这个预测是对于未来中短期的,大概1-2年尺度。再远我就感觉很难看清了。

预测需要基于一些条件和判断,本文的预测基于以下基础判断:

据我推断,未来下一步最可能的增长点来自于:模型层在Long Context方面的能力的进一步发展,以及Cache Context方面的进一步成本优化和功能拓展

Long Context方面的能力提升是目前看起来最能被有效分摊成本的路线,特别是一些模型层重视的其他需要Long Context的功能会支撑模型层在这方面继续投入和竞争。

Context Cache已经事实上成为了一种更符合大家对于Memory(相对于Long Context)更低成本的期望,目前只是这个Cache的成本和延迟降低并不能保证一定命中。

应用层在Context之上还能做一些工作,但这方面的工作很难继续推进。特别是在通用场景方面,适合应用层能做的事情很有限。而且这方面的积累大概率会随着模型层能力的提升而被颠覆,这更加削减了应用层在这方面的投入意愿。

我目前对那些面向通用场景Memory的中间件层方案并不看好,这方面产品也并不多。我并没有去具体调研他们,这只是我的偏见,也没有看到他们在业内被广泛传播和推荐。

在这些条件下,我觉得2025年的局面就已经基本确定了,甚至2026年大概率也会如此。

3、模型层的Memory优化思路

我已经不关注LLM模型层的技术细节挺久了,所以并不能确认本节的判断都是适合的,我尽量谈一些能够普适各种架构方案的思路。

首先从视角来看,Memory仍然是一种Context,考虑到实际应用需求,它是一种Long Context,而且很多场景会明显长于目前的1M context,我估计模型层大概需要以10-100M context为目标。

但Memory确实还有一些普通Long Context没有的独特需求:

目前的Context Cache方案我认为是一个合适的Memory优化起点,它的一个最大问题是,KV Cache的成本很高。虽然已经有了DeepSeek MLA这样的方案来降低Cache成本,但幅度距离应用的需求还远远不够。我猜目前这方面做得最好的仍然是Gemini,但我无法猜测它的具体实现方式。

Cache方案的下一步突破我认为是有损地保留部分信息,实现O(Sqrt(L))甚至O(Log(L))的存储复杂度,其中L是输入prompt的token长度。并不是所有token的信息量都是一样的,很多内容的主要信息其实并不多。

但这里的一个问题是:如何“选择”哪些token/信息是应该重点保留的,哪些不是。但很遗憾,这是无法对于一般场景都有效实现的。这个问题不止对于模型层存在,在应用层一样存在。如果要记忆的数据是一篇文章,且要保持任何对于原文章的query都能在其存储之后被准确还原,那么最小存储成本的方案几乎就是完整存储该文章本身。当然还可以套一层无损压缩算法,但我们几乎无法从中丢弃任何信息,任何信息都可能被某个query使用。

模型层适合做的是通用方案,不适合对于具体场景进行特化,那么它必然要存储所有原始信息作为最差情况的兜底策略,但确实有可能做出某种高熵信息选择方案,构造出1级甚至多级的Cache来满足大部分常见情况的请求。如果能够确定被忽略的信息的总影响也不会影响到当前输出的token,那么就可以忽略那些信息。毕竟token是一种离散化的表达方式,影响低于一定水平后,就不再回影响token输出。

实际上我们还可以更进一步,让用户来提供一些示例query,来更准确地判断哪些信息需要保留在较高的cache层级,哪些可以放在较低的cache层级中。具体就是看这些query在计算中主要依赖哪些信息,那么这些信息都应该被优先保留。

关于Memory组合的问题,这方面模型层的同学应该能够自己设计出不少方案,这里就从略。简单介绍一种思路作为baseline:调整position mask,让各个Memory块之间不是相互可见的,各个Memory的耦合计算在这些Memory之后的token上进行。

A、结语

本次的文章就到此为止了。

一方面是给应用层的同学一个展望,或者说抛一个视角,该如何考虑自己的架构设计和模型层的未来演化。避免被未来的泥头车碾过。

另外一方面,也是给模型层的同学整理一下需求信息,疏通一下模型层和应用层之间的信息交流。


交流与合作

如果希望和我交流讨论,或参与相关的讨论群,或者建立合作,请私信联系,获取联系方式请点击 -> 联系方式

本文于2025.1.13首发于微信公众号和知乎,知乎链接:

https://zhuanlan.zhihu.com/p/18414341439

阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Memory能力 模型层 Long Context Cache Context
相关文章