缓存增强生成(CAG)

缓存增强生成(CAG)通过预加载静态知识提升大语言模型效率,降低延迟并简化架构,适用于静态、低延迟任务。

什么是缓存增强生成(CAG)?

缓存增强生成(CAG)是一种通过将知识以预计算键值(KV)缓存的形式预加载,从而提升大语言模型(LLM)性能与效率的新方法。

与在推理时动态检索外部知识的RAG不同,CAG通过在推理前将所有相关知识直接嵌入到模型扩展的上下文窗口中,彻底省略了检索环节。这种预加载策略让LLM能够利用预计算信息生成响应,极大降低了延迟并简化了系统架构。

通过将处理后的知识存储在键值缓存中,CAG确保模型能够即时获取回答查询所需的上下文。这种方法在知识库静态、规模较小或对低延迟有较高需求的场景下尤为有利。

CAG如何工作?

CAG主要包括三个阶段:

1. 外部知识预加载

  • 所有相关文档或数据集会在推理前预加载到模型的上下文窗口中。

  • 预加载内容被处理为键值(KV)缓存,捕获模型对知识的内部表示。例如:

    def preprocess_knowledge(model, tokenizer, prompt):
        input_ids = tokenizer.encode(prompt, return_tensors="pt").to(model.device)
        past_key_values = DynamicCache()
        outputs = model(input_ids=input_ids, past_key_values=past_key_values, use_cache=True)
        return outputs.past_key_values
    

此步骤确保模型能即时访问预处理的知识,无需实时检索。

2. 利用预计算缓存进行推理

  • 查询发起时,预计算的KV缓存会与查询输入结合。

  • 模型仅基于缓存知识和查询内容生成响应,无需额外检索。例如:

    def generate_response(model, query, kv_cache):
        input_ids = tokenizer.encode(query, return_tensors="pt").to(model.device)
        output_ids = model(input_ids=input_ids, past_key_values=kv_cache, use_cache=True)
        return tokenizer.decode(output_ids)
    

3. 缓存管理

  • 随着新查询的处理,缓存会增长。重置机制会将缓存截断回原始长度,以保证性能,并确保后续查询在预期上下文内进行。缓存重置示例:

    def clean_up(kv_cache, original_length):
        for i in range(len(kv_cache.key_cache)):
            kv_cache.key_cache[i] = kv_cache.key_cache[i][:, :, :original_length, :]
            kv_cache.value_cache[i] = kv_cache.value_cache[i][:, :, :original_length, :]
    

CAG的主要优势

  1. 低延迟
    无需实时检索,CAG响应速度快于RAG,非常适合对时效性要求高的应用。

  2. 高准确性
    通过预加载所有相关文档,CAG确保模型处理的是完整数据集,减少上下文缺失或检索错误的风险。

  3. 架构简化
    与需复杂检索流程的RAG相比,CAG结构更简单,降低了系统复杂性和维护成本。

  4. 规模化高效
    知识一旦预加载并缓存,后续查询几乎无需额外计算,适合在同一知识领域内频繁查询。

CAG的局限性

  1. 上下文窗口大小
    CAG依赖模型上下文窗口来预加载知识。当前LLM上下文窗口最大支持128,000个token,限制了可预加载的知识量。

  2. 知识库规模
    CAG更适用于静态且可控的知识库。对于大型或动态数据集,模型可能无法容纳所有相关信息。

  3. 静态知识
    CAG假设知识库在推理期间不变,不适用于需实时更新或动态集成知识的场景。

  4. 成本问题
    大型上下文窗口在预加载时会增加计算成本,对于需要频繁更新知识库的场景经济性较差。

CAG的应用场景

实际应用

CAG通常应用于知识库静态、规模可控且对低延迟有高需求的场景:

  • 客户支持聊天机器人
    示例:为软件产品预加载常见故障排查步骤,向用户提供即时响应。
    优势:消除检索错误,加快响应速度。

  • 文档分析
    示例:金融机构分析季度报告,或律所查询法规文档。
    优势:通过将所有相关文档预加载到模型,确保响应一致且准确。

  • 医疗助手
    示例:预加载医疗指南以辅助患者咨询。
    优势:确保多轮对话的连贯性和准确引用。

  • 教育与培训
    示例:解答企业培训中的常见问题。
    优势:简化部署,保证回答一致性。

与检索增强生成(RAG)对比

特性CAGRAG
知识处理预加载知识到上下文窗口运行时动态检索知识
系统复杂度简单,无需检索流程需额外检索组件
延迟性低,无需检索步骤高,需实时检索
可扩展性受限于上下文窗口大小适合大规模、动态数据集
错误风险无检索错误易受检索及排序错误影响
最佳应用场景静态、低延迟任务动态、大型或频繁更新任务

应用案例示例

CAG实践案例

  1. 人力资源系统
    企业将员工政策预加载到模型中,员工可查询具体规定并获得即时响应。

  2. 法律助手
    法律助手将相关案例法预加载到模型上下文,无需检索系统即可快速回答法律问题。

  3. 客户服务
    SaaS产品的聊天机器人预加载FAQ和故障指南,确保客户交互顺畅且响应迅速。

RAG用于动态场景

  1. 新闻聚合
    新闻应用用RAG动态检索并总结最新文章,为用户提供最相关的信息。

  2. 电商搜索
    RAG检索大型、频繁更新的产品目录中的商品详情及库存。

  3. 科研平台
    科研平台采用RAG从大型外部数据库检索相关论文和研究资料。

实现示例:Python中知识预加载

以下Python代码片段演示了如何为CAG向模型预加载知识:

def preprocess_knowledge(model, tokenizer, prompt):
    input_ids = tokenizer.encode(prompt, return_tensors="pt").to(model.device)
    past_key_values = DynamicCache()
    outputs = model(input_ids=input_ids, past_key_values=past_key_values, use_cache=True)
    return outputs.past_key_values

该预加载机制确保模型在处理查询时无需外部检索,实现高效、低延迟的推理能力。

何时使用CAG

  1. 静态知识库
    适用于知识库不常变动的场景。

  2. 低延迟应用
    适合客户支持、教育或医疗等需要快速响应的系统。

  3. 高性价比场景
    当预加载知识可在多次查询中复用时,可减少计算开销。

CAG是满足速度、简洁性与一致性需求任务的高效替代方案,但受限于知识库的规模和静态特性。

缓存增强生成(CAG)相关研究

1. 移动边缘大语言模型服务的自适应上下文缓存

作者:Guangyuan Liu, Yinqiu Liu, Jiacheng Wang, Hongyang Du, Dusit Niyato, Jiawen Kang, Zehui Xiong

本论文针对移动边缘大语言模型(LLM)部署中的计算资源有限与检索延迟高等问题,提出了一种自适应上下文缓存(ACC)框架。该框架利用深度强化学习(DRL)优化缓存替换策略,同时考虑用户上下文、文档相似性及缓存失效开销。实验结果显示,ACC在11轮训练后缓存命中率超过80%,检索延迟比传统方法降低40%,本地缓存开销减少高达55%。该研究展示了ACC提升边缘LLM系统效率的潜力。
阅读论文

2. 通过重用已存KV缓存实现更经济的上下文增强LLM生成

作者:Hanchen Li, Yuhan Liu, Yihua Cheng, Kuntai Du, Junchen Jiang

本研究探索了在LLM应用中重用键值(KV)缓存以减少预填延迟的可行性,尤其针对重复输入文本场景。论文还考察了在云服务中存储与处理KV缓存时的经济性。作者提出了经过验证的分析模型,评估了在不同负载参数下,KV缓存存储及重用的云端计算、存储和网络成本。结果表明,对于长上下文负载,KV缓存重用可同时节省延迟和云成本,促进了更经济的上下文增强LLM系统发展。
阅读论文

3. MPIC:高效多模态LLM服务的无位置依赖多模态上下文缓存系统

作者:Shiju Zhao, Junhao Hu, Rongxiao Huang, Jiaqi Zheng, Guihai Chen

本文提出了MPIC(一种无位置依赖的多模态上下文缓存系统),旨在解决多模态大语言模型(MLLM)推理中的效率问题。传统系统对上下文略有不同时需重新计算整个KV缓存,导致效率低下。MPIC支持本地或远程存储KV缓存,并在推理时并行计算和加载缓存。结合重用与重计算机制,MPIC在保持精度的同时,将响应时间缩短至现有方法的54%。该研究展现了多模态LLM服务效率提升的可能性。
阅读论文

常见问题

什么是缓存增强生成(CAG)?

缓存增强生成(CAG)是一种通过将静态知识预加载到预计算的键值(KV)缓存中,提升大语言模型(LLM)性能的方法。与运行时检索外部知识的RAG不同,CAG会提前嵌入所有相关信息,降低延迟并简化AI系统架构。

CAG与RAG有何不同?

CAG在推理前将所有必要知识预加载到模型的上下文窗口,消除了实时检索需求,确保低延迟。而RAG则是在运行时动态检索相关信息,虽适合动态或频繁更新的知识库,但可能引入检索错误和更高延迟。

使用CAG有哪些优势?

CAG的主要优势包括低延迟、因全面预加载带来的高准确性、简化的系统架构,以及在静态知识领域内重复查询时的高效性。

CAG有哪些局限性?

CAG受限于模型上下文窗口的最大长度(目前可达128,000个token),适合静态且可控的知识库;对于动态数据集或需要频繁更新的场景效果较差。较大的上下文窗口在预加载时也会增加计算成本。

CAG最适用哪些场景?

CAG非常适合静态、低延迟的应用场景,如客户支持聊天机器人、文档分析、医疗助手、教育FAQ、HR政策查询和法律助手等——只要知识库变动不频繁且需要即时响应。

开始构建高效AI工作流

体验CAG及FlowHunt其他AI工具的强大功能。预约演示,了解低延迟、缓存增强解决方案如何改变您的业务。

了解更多

检索增强生成(RAG)与缓存增强生成(CAG)的对比
检索增强生成(RAG)与缓存增强生成(CAG)的对比

检索增强生成(RAG)与缓存增强生成(CAG)的对比

探索人工智能中检索增强生成(RAG)与缓存增强生成(CAG)的关键区别。了解RAG如何动态检索实时信息以实现灵活、准确的响应,而CAG则利用预缓存数据实现快速一致的输出。找出哪种方法更适合您的项目需求,并探讨实际应用场景、优势与局限性。...

1 分钟阅读
RAG CAG +5
检索增强生成(RAG)
检索增强生成(RAG)

检索增强生成(RAG)

检索增强生成(RAG)是一种先进的人工智能框架,将传统的信息检索系统与生成式大语言模型(LLM)相结合,通过整合外部知识,使AI生成的文本更加准确、及时且具有上下文相关性。...

1 分钟阅读
RAG AI +4
问答系统
问答系统

问答系统

基于检索增强生成(RAG)的问答系统结合了信息检索与自然语言生成,通过从外部来源补充相关、最新的数据,提升大语言模型(LLM)的回答能力。该混合方法提高了准确性、相关性和在动态领域的适应性。...

1 分钟阅读
AI Question Answering +4