大模型上下文膨胀与 KV Cache 内存瓶颈

在构建通用智能体(General-purpose Agent)时,随着对话上下文的不断增长,模型性能往往会显著下降。这一问题的核心根源在于 KV Cache(键值缓存) 的膨胀。KV Cache 本质上存储了对话的历史信息,对于使用云端模型的用户而言,由于服务商已自动处理内存管理,这一痛点并不明显;但对于在本地设备(如 Mac)上部署模型的用户,KV Cache 随上下文增长而变大,甚至可能超过模型本身的体积,导致严重的资源竞争。特别是在 Mac 设备上,向量索引、模型权重和 KV Cache 共同争夺有限的共享 RAM 池,使得内存压力倍增。默认情况下,嵌入向量(Embeddings)使用 32 位全精度存储,但检索任务实际上仅需 3 到 4 位精度,这意味着 用户正在浪费五倍的内存资源在检索环节。

"If you push the context far enough, your KV cache might get bigger than model size."(如果将上下文推得足够远,你的 KV 缓存可能会比模型本身还要大。)

传统解决方案的局限性与 TurboQuant 的引入

在 TurboQuant 出现之前,业界尝试了多种方法来缓解内存压力,但每种方法都存在明显的权衡(Trade-off)。量化(Quantization) 技术可以将模型压缩至 4 位或 8 位以适配内存;上下文压缩(Context Compaction) 则在上下文末尾对内容进行摘要以节省空间;此外还有使用较小嵌入向量、CPU/磁盘卸载等方案。然而,这些方法往往需要在 质量、速度或专用硬件 之间做出妥协。TurboQuant 由 Google 研究团队在 ICLR 2026 会议上发布,它提出了一种全新的压缩算法,旨在将嵌入向量存储在 KV Cache 中,仅需 3-4 位而非传统的 32 位。其核心承诺是:在将向量压缩至 4 位以下时,不会损失检索质量。这一技术背后的关键在于理解检索的本质:搜索并不关心向量原本的样子,只关心哪个向量最接近查询。因此,只要保持相对距离不变,全精度或 TurboQuant 压缩后的向量在检索效果上是等效的。

"Search doesn't care what vector looks like. It only cares what's the closest to your query."(搜索并不关心向量长什么样,它只关心哪个最接近你的查询。)

TurboQuant 的两阶段压缩机制与精度控制

TurboQuant 的底层实现依赖于两种关键技术:Polar Quant 和 QJL。Polar Quant 负责向量的压缩,而 QJL 则用于修复残留误差。整个流程可以细分为三个阶段:首先,通过打乱向量来均衡数据分布;其次,使用标量量化(Scalar Quantization)技术将数据舍入到特定的桶(Bucket)中;最后,在 QJL 阶段,仅使用 1 位来修复剩余的误差,这正是其保持高精度的魔法所在。对于开发者而言,无需手动调优,只需设定 位预算(Bit Budget) 即可,其余工作由库自动处理。行业推荐的理想甜点区是 3.5 位,但在实际应用中,4 位 是一个兼顾性能与质量的稳妥选择。这种压缩方式不仅适用于模型推理层的 KV Cache,同样适用于 RAG 系统中的向量索引,从而在 Agent 检索层面实现内存成本的显著降低。

"The ideal sweet spot by the industry is 3.5 bit. But, in practice, you can land somewhere near 4 bits."(行业理想的甜点区是 3.5 位。但在实践中,你可以落在接近 4 位的地方。)

TurboAgent 实现与性能基准测试

为了落地 TurboQuant 技术,Super Agentic AI 开发了开源库 TurboAgent。该库允许开发者保留现有的 Agent 框架和向量数据库(如 Pinecone、Chroma DB 等),只需替换检索层中的索引部分即可生效。其工作流程为:首先使用标准的 32 位浮点索引运行基准测试,然后使用压缩后的大小进行压缩和重排序,再次运行检索。通过这种对比,可以在保持相同检索结果的前提下,显著减小内存占用。目前,TurboQuant 已被 llama-cpp、MLX、Ollama、LM Studio 等主流推理引擎逐步集成。对于构建 Agent 的用户,只需将检索层替换为 TurboAgent,即可利用其压缩优势。虽然具体的跑分数据在片段中未以表格形式完整列出,但核心结论是 在相同质量下,内存占用降低了五倍。开发者可以通过 GitHub 上的示例仓库(支持 SurrealDB、Lance DB 等)进行本地演示验证,体验从 Float32 到 4-bit 压缩后的性能提升。

"We got agent, we ask the question. First, we will run with plain baseline float 32-bit index... then we compress and re-rank it with the smaller size and then run it again. And by doing that, we'll get the same results much smaller size."(我们有了 Agent,提出问题。首先,我们用纯基线 32 位浮点索引运行……然后用更小的尺寸进行压缩和重排序,再运行一次。通过这样做,我们将以更小的尺寸获得相同的结果。)

检索器替换带来的内存与性能飞跃

演示的核心在于对比基线检索器(Baseline Retriever)与 Turbo 检索器(Turbo Retriever)在相同 Agent 和文档环境下的表现。测试使用本地 Llama 模型(20 亿参数的小模型以加速加载)作为基础,并采用 Quantri 嵌入模型(0.6 亿参数,256 维)。在基线模式下,系统加载的是 float 32(32位浮点数) 格式的数据,其索引内存占用高达 8 KB。尽管需要等待模型加载,但最终 Agent 能够正确回答问题,证明基线方案的功能完整性。

随后,切换至使用 Turbo Quant 压缩与重排序(comp and re-ranked) 的检索器。关键变化在于,未改变任何 Agent 逻辑或文档内容,仅替换了检索器组件。结果显示,Turbo Quant 的索引内存占用骤降至 1.6 KB。这意味着在保持检索答案真实性(Grounded Answer)完全一致的前提下,内存占用减少了五倍。这一对比直观地展示了通过优化检索层而非整个模型,即可实现显著的内存效率提升。

"We haven't changed any agents. We haven't changed the documents. Only thing we did, we did change is a retriever. And that made And that made a big difference."

量化技术对比与行业现状分析

Turbo Quant 并非市场上唯一的量化方案,但其采用 3 到 4 位(bits) 的量化策略,同时优化 KV 缓存和向量数据,这在当前工具链仍在发展的背景下显得尤为独特。演讲者对比了其他几种主流方法:

  1. Milvus 中的 Rabbit 和 You:支持 1 到 4 位 量化,适合大型静态索引,但仅支持向量搜索,不支持 KV 缓存。
  2. VLLM 和 SGLine 中的 F8:采用 8 位 量化,已在相关框架中可用,但量化精度低于 Turbo Quant。

这种对比突显了 Turbo Quant 在平衡低比特量化与 KV 缓存支持方面的优势。对于需要同时处理向量检索和上下文缓存的 Agent 应用而言,仅支持向量搜索的解决方案存在局限性,而 8 位量化在内存节省上不如 3-4 位方案显著。

技术方案 量化位数 支持 KV 缓存 适用场景/备注
Turbo Quant 3-4 bits 是 向量与 KV 缓存同时优化,内存节省显著
Milvus (Rabbit/You) 1-4 bits 否 仅支持向量搜索,适合大型静态索引
VLLM/SGLine (F8) 8 bits 信息不足 已集成,量化精度较低

思维转变与落地建议

演讲者强调,用户需要改变思维模式:不要仅仅为了压缩而压缩,而应专注于检索(Ranking)的优化。搜索算法只关心哪个向量最接近,而不关心其具体表现形式。因此,通过替换现有检索器为 Turbo Quant,可以立即观察到效果。建议用户从小规模测试开始,在自己的数据上运行召回率(Recall)和延迟(Latency)基准测试,以验证实际收益。

为了进一步探索,演讲者提供了 GitHub 上的 Turbo Agents 仓库,用户可 Fork 并定制版本。此外,还推荐尝试基于 Lance DB 和 Serial DB 的最小化演示(Minimum Demos)。对于任何后续问题,可通过 X(原 Twitter)、LinkedIn 或 GitHub 联系演讲者 Shashi Jagtap。最终目标是让用户在底层使用 Turbo Quant 时,看到检索性能的神奇提升(magical results)。

"What you can take away from this talk is basically you need to change your mindset and only compress for ranking. As search only cares about the vector which is closest. Not how it look like."