论文

面向商用 CPU 硬件的低延迟 LLM Web 搜索三层缓存架构

面向商用 CPU 硬件的低延迟 LLM Web 搜索三层缓存架构

ChatGPT search、Google 的 AI Overviews 与 Perplexity 等 AI 搜索产品,能基于实时网页结果给出 LLM 合成的答案。我们开发了 OreoLook(前身为 lixSearch),一个开源答案引擎,使用自动化浏览器智能体与按 provider 路由的 LLM 推理。其本地搜索、缓存、会话管理与 embedding 栈运行在 商用 CPU 硬件 上,答案合成则由远程推理 provider 完成。随着用量增长,会话丢失上下文、等价查询触发重复工作、URL 在不同会话间被反复 embedding。 我们提出 三层缓存架构: 1. Session Context Window:在 Redis 中维护近期消息的滚动窗口,溢出时自动转存为磁盘归档(采用 Huffman 压缩); 2. Semantic Query Cache:通过 embedding 向量上的 余弦相似度 捕捉同义改写,消除冗余的 LLM 调用; 3. URL Embedding Cache:跨会话去重 embedding 计算。 系统部署在单台 8 vCPU 的 Intel Cascade Lake 服务器(2 GHz、32 GB RAM)上,以三个容器化副本运行 30 个 Hypercorn worker 进程。实测 聚合 Redis keyspace 命中率 达 89.3%,读取延迟 0.1 ms,内存开销仅 1.38 MB。 后台 LRU 驱逐守护进程 会把空闲会话从 Redis 迁移到磁盘,并按需重新加载,使对话可在数小时甚至数天后、在配置的保留策略下恢复。

论文精读

TL;DR OreoLook 用三层缓存(会话上下文窗口、语义查询缓存、URL 嵌入缓存)在 8vCPU 服务器上消除重复 LLM 调用和嵌入计算,实现 89.3% Redis 命中率与 0.1ms 延迟。

问题

问题背景

AI 搜索产品如 ChatGPT search、Google AI Overviews 和 Perplexity 通过 LLM 合成基于实时网页的答案,但远程推理成本高、延迟敏感,对缓存和会话管理提出严苛要求。

现有方法局限

传统缓存依赖精确键匹配,无法识别语义等价查询(如同义改写、词序变化),导致重复触发 LLM 推理,浪费成本并增加端到端延迟。会话上下文管理常采用简单截断或全量保留:截断丢失关键历史,降低回答质量;全量保留则内存占用随会话长度线性增长,在 commodity CPU 硬件上难以扩展。此外,URL 嵌入计算缺乏跨会话去重,每个新会话对相同网页重复执行 embedding,浪费 CPU 周期。

难点与重要性

语义缓存需在 embedding 空间做近邻搜索,并权衡相似度阈值:阈值过低导致错误命中,过高则缓存命中率不足。会话持久化要在内存占用与恢复速度间取得平衡,还需支持数小时乃至数天后的会话恢复。AI 搜索产品竞争激烈,降低每次查询的推理成本和延迟是核心工程指标;在有限硬件上实现高缓存命中率与低内存开销,是此类系统的关键挑战。

行业类比

类似推荐系统中对用户/物品 embedding 的缓存复用,通过语义相似度去重避免重复计算,在有限资源下支撑高并发问答。

核心洞察

  • 三层缓存架构将 LLM 调用的计算冗余分解为语义查询、URL 嵌入、会话上下文三个独立维度,并分别用余弦相似度、去重和滚动窗口处理,而非传统单一 KV 缓存。这比现有基于精确匹配或最近邻的缓存方案更细粒度,能同时消除跨会话的重复嵌入与跨查询的语义等价 LLM 调用,降低 API 成本,并为缓存设计提供了从文本到语义的迁移范本。
  • 该系统的核心创新在于用 Huffman 压缩和后台 LRU 守护进程在 Redis 和磁盘间动态迁移会话,使 32GB 内存的 commodity CPU 服务器能支撑长时间、可恢复的对话。相比使用专用向量库或 GPU 的方案,它证明了在低资源环境下通过对冷热数据分层和压缩编码,也能获得 89.3% 缓存命中率和 0.1ms 读取延迟,工程实用价值高。

方法

输入与流程

  • 用户查询与会话 ID 作为输入,由协调器依次访问三个 Redis 逻辑数据库。
  • 首先查询 语义查询缓存(Redis DB 0):计算查询的嵌入向量,与已存键做余弦相似度匹配,超过阈值则直接返回缓存的 LLM 答案,跳过远程推理。
  • 若未命中,检查 URL 嵌入缓存(Redis DB 1),复用已计算的网页 URL 嵌入,避免跨会话重复计算。
  • 同时,会话上下文窗口(Redis DB 2)维护每个会话最近消息的滚动窗口;若会话在 Redis 中缺失,则从磁盘上的 Huffman 压缩归档(.huff)恢复。
  • 若语义缓存未命中,协调器调用远程 LLM 合成答案,并将结果写入语义缓存和会话窗口;窗口溢出时自动压缩归档到磁盘。

关键模块

  • Huffman 编码器:自研轻量压缩,比 gzip/zlib/lz4 更适合小文本,节省 CPU 和内存。
  • LRU 驱逐守护进程:后台定期扫描空闲会话,迁移到磁盘并释放内存,需要时按需恢复。
  • Redis 数据库分离:三个逻辑 DB 隔离不同数据类型,避免键冲突,方便独立配置和监控。

输出
最终向用户返回答案,同时更新三层缓存状态。在 8-vCPU Intel Cascade Lake 服务器(30 个 Hypercorn worker)上实测 89.3% 命中率,0.1 ms 读取延迟,内存开销仅 1.38 MB。

与同类方法的差异点:单一层级缓存无法同时解决语义重复、嵌入重算和会话恢复问题,本架构通过三层协同与 Huffman 压缩在通用 CPU 上实现低延迟长会话。

实验

实验设计

论文评估部署在 商品级 CPU 硬件 上的 OreoLook 系统,配置为单机 8-vCPU Intel Cascade Lake 服务器(2 GHz,32 GB RAM),运行 30 个 Hypercorn worker 进程,跨越 3 个容器化副本。系统处理真实搜索查询负载,评估指标包括 Redis 键空间命中率、读延迟、内存开销与压缩效率。三层缓存分别由 Session Context Window、Semantic Query Cache 和 URL Embedding Cache 贡献。

关键发现

整体 Redis 键空间命中率达到 89.3%,读延迟仅 0.1 ms,额外内存开销仅 1.38 MB。语义查询缓存通过余弦相似度匹配重述查询,显著减少重复 LLM 调用;URL 嵌入缓存跨会话去重嵌入计算;会话上下文窗口配合 Huffman 压缩归档,支持数小时至数天后恢复对话。压缩效率方面,Huffman 编码在会话文本场景取得更优的 CPU 时间与压缩率权衡。

基线对比解读

论文未提供传统基线的完整数值对比,但三层架构相对单层缓存或朴素截断的优势体现在:语义缓存避免了仅靠精确键匹配导致的冗余 LLM 推理,URL 嵌入缓存消除了跨会话重复嵌入计算。相对于直接使用商业 AI 搜索 API,OreoLook 在本地缓存与 CPU 推理上显著降低成本,但成本对比仅以定性描述为主。后续工作可补充与单层语义缓存或固定窗口截断的定量实验。

行业影响

落地场景

该架构适用于所有依赖 LLM 生成答案 且需处理高频相似查询的服务,尤其适合预算敏感的中小型团队:

  • AI 搜索引擎:如论文中的 OreoLook,对用户查询先做语义匹配,命中缓存直接返回,避免重复调用远程推理。
  • 企业知识库问答:员工提问往往语义相近,语义缓存可大幅降低 token 消耗。
  • 电商商品咨询:用户对同一商品的提问高度重复,“这家支持退货吗?”与“能退吗?”可命中同一缓存。
  • 客服机器人:会话上下文窗口支持长对话恢复,减少上下文丢失导致的错误回答。

商业价值

直接收益在 降本 与 提效 两条线:

  • 降本:语义缓存 消除冗余 LLM 调用,URL Embedding Cache 避免重复计算嵌入向量。论文报告 89.3% 命中率,意味着近九成请求无需实时推理,API 成本可下降一个数量级。
  • 提效:缓存命中延迟仅 0.1 ms,对比 LLM 推理数百毫秒甚至秒级,用户体验显著提升。同时单个 8-vCPU 服务器即可支撑 30 并发 worker,硬件成本极低。
  • 长会话支持:通过 Redis + Huffman 压缩磁盘归档,用户可隔天继续对话,提升留存。

与现有工作流集成

该架构可无缝嵌入主流 RAG 栈:

  • 在应用层与推理层之间增加一个 缓存中间件,使用 Redis 作为主存储,磁盘归档作为溢出,已有 Redis 集群可直接复用。
  • 语义缓存需集成一个轻量 embedding 模型(如 all-MiniLM-L6-v2),在查询进入 LLM 前计算相似度,阈值可配置。
  • URL Embedding Cache 适合爬取类任务,如新闻聚合或竞品监控,可结合现有任务队列(Celery/RQ)将 embedding 计算去重。
  • 多 worker 环境下使用 Redis 原子操作保证线程安全,与 Gunicorn/Hypercorn 等 ASGI 服务器兼容,无需重构现有服务。

局限

  • 论文仅在单台 8-vCPU Intel Cascade Lake 服务器(32 GB RAM)上评估,未覆盖多节点集群、高并发或故障恢复场景,因此无法验证三层缓存架构在大规模分布式部署下的扩展性与容错能力。实验负载可能来自自身服务,缺少多样化的真实世界流量测试,泛化性有待进一步检验。
  • 语义查询缓存的关键参数(相似度阈值、embedding 模型选择)未详细报告,可能存在两种风险:阈值过高导致语义等价查询未被命中,阈值过低导致不相关查询错误共享缓存,从而影响回答准确性。URL Embedding Cache 假设 URL 内容稳定,未讨论网页内容更新后缓存失效策略,可能返回过时信息。
  • 论文未与已有 LLM 缓存方案(如 GPTCache、LangChain 内置缓存)或通用高性能压缩算法(如 zstd)进行系统性能对比,难以证明三层架构与 Huffman 编码选择的独特优势。此外,Huffman 编码通常压缩率低于 LZ 系列算法,论文虽提及比较但未给出详细的取舍分析和适用场景界定。
论文Ayushman Bhattacharya2026-08-12原文

相关内容