支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


另类RAG技术论文三篇分享、备忘

发布日期:2025-04-10 12:36:37 浏览次数: 1603 作者:柠檬叔的絮絮叨叨
推荐语

探索大模型知识增强的新范式,三篇论文带你深入了解RAG技术的创新方案。

核心内容:
1. Cache-Augmented Generation (CAG):零检索延迟的知识任务解决方案
2. Parametric RAG:参数化注入在知识增强中的应用
3. KBLAM:结构化知识库在知识增强中的作用与实现

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家

引言

在当今大模型技术飞速发展的时代,如何让语言模型(LLM)更高效、更准确地利用外部知识,一直是研究者和开发者关注的焦点。传统方法如检索增强生成(RAG)虽然有效,但面临着检索延迟、计算开销大、知识整合不充分等问题。近期,三篇创新性论文提出了截然不同的解决方案:Cache-Augmented Generation (CAG)Parametric RAG 和 KBLAM,分别从缓存优化、参数化注入和结构化知识库的角度,重新定义了知识增强的范式。

本文将带你深入解析这三种方法的核心理念与技术实现,并通过对比表格总结它们的优劣与适用场景。无论你是技术从业者还是AI爱好者,都能从中看到大模型知识增强的未来方向!


第一篇:

Don't Do RAG: When Cache-Augmented Generation is All You Need for Knowledge Tasks

这段代码实现了论文中提出的 Cache-Augmented Generation (CAG) 方法的核心逻辑,通过预加载知识文档并缓存LLM的KV(Key-Value)状态来加速推理。以下是代码的详细解析:


1. 核心功能

  • 目标:替代传统RAG的实时检索,通过预加载文档的KV Cache实现无检索的生成。
  • 关键优势
    • 零检索延迟:省去实时检索步骤。
    • 降低错误率:避免检索不相关文档的问题。
    • 长上下文支持:利用LLM的长上下文窗口(如Llama 3.1的128K tokens)。

2. 主要模块

(1) KV Cache 生成与存储

  • preprocess_knowledge()

    def preprocess_knowledge(model, tokenizer, prompt):
        input_ids = tokenizer.encode(prompt, return_tensors="pt").to(device)
        past_key_values = DynamicCache()
        outputs = model(input_ids, past_key_values=past_key_values, use_cache=True)
        return outputs.past_key_values
    • 输入:文档文本(prompt)。
    • 处理:将文档编码为token,通过LLM前向传播生成KV Cache(DynamicCache对象)。
    • 输出:包含文档所有层KV状态的缓存。
  • write_kv_cache() / read_kv_cache()

    • 将KV Cache序列化到磁盘(torch.save)或从磁盘加载,避免重复计算。

(2) 基于KV Cache的生成

  • generate()
    def generate(model, input_ids, past_key_values, max_new_tokens=300):
        for _ in range(max_new_tokens):
            outputs = model(input_ids=next_token, past_key_values=past_key_values, use_cache=True)
            next_token = outputs.logits.argmax(dim=-1)  # 贪心解码
            output_ids = torch.cat([output_ids, next_token], dim=1)
        return output_ids
    • 输入:用户查询的token(input_ids)和预加载的KV Cache。
    • 过程
    • 输出:生成的回答token。
  1. 复用KV Cache作为上下文。
  2. 仅对新生成的token计算自注意力(避免重复处理文档)。

(3) 缓存重置

  • clean_up()
    def clean_up(kv: DynamicCache, origin_len: int):
        for i in range(len(kv.key_cache)):
            kv.key_cache[i] = kv.key_cache[i][:, :, :origin_len, :]  # 保留原始文档的KV
    • 截断KV Cache到初始长度(origin_len),避免推理时累积的KV状态占用内存。

3. 工作流程

  1. 预加载阶段prepare_kvcache):

  • 拼接所有文档为长文本,生成提示模板(含系统指令和上下文占位符)。
  • 调用preprocess_knowledge生成KV Cache并保存到文件。
  • 推理阶段kvcache_test):

    • 拼接问题到提示模板(可选是否复用预加载的上下文)。
    • 调用generate生成回答。
    • 用BERTScore评估生成答案与标准答案的相似度。
    • 加载预存的KV Cache。
    • 对每个问题:

    4. 关键参数与配置

    • 模型加载:支持4-bit量化(BitsAndBytesConfig)以降低显存占用。
    • 数据集:支持SQuAD、HotPotQA等,通过cag.dataset模块加载。
    • 实验控制
      • --maxKnowledge:限制预加载文档数量。
      • --usePrompt:是否在推理时重新传入上下文(对比实验)。

    5. 性能优化

    • 显存管理
      • 调用torch.cuda.empty_cache()清理显存碎片。
      • 通过clean_up避免KV Cache无限增长。
    • 时间统计:记录KV生成、推理耗时,验证效率提升。

    6. 与论文的对应关系

    • 理论落地:代码实现了论文的CAG三阶段(预加载、推理、缓存重置)。
    • 实验验证
      • 通过BERTScore量化生成质量(对应论文表2)。
      • 对比usePrompt选项模拟RAG与CAG的差异(无缓存 vs 有缓存)。

    7. 潜在改进点

    1. 动态混合检索:对超长文档,可结合CAG与稀疏检索(如BM25)处理边缘案例。
    2. 批处理支持:当前逐问题生成,可扩展为批量推理。
    3. 缓存压缩:探索KV Cache的量化/剪枝进一步降低内存占用。

    总结

    这段代码是论文方法的高效实现,核心创新点在于将文档预处理为KV Cache并复用,显著减少推理延迟。适合知识库规模可控的场景(如企业FAQ、客服系统),为LLM应用提供了一种轻量级知识集成方案。


    第二篇:

    Parametric Retrieval Augmented Generation

    这篇论文《Parametric Retrieval Augmented Generation》提出了一种新的检索增强生成(RAG)范式,称为参数化RAG(Parametric RAG),旨在解决传统RAG方法中存在的计算开销大、性能下降以及知识整合不充分等问题。以下是论文的核心内容总结:


    1. 研究背景与问题

    • 传统RAG的局限性:现有RAG方法通过将检索到的文档附加到输入上下文中来增强大语言模型(LLM)的生成,但存在以下问题:

      • 计算开销:长上下文增加推理延迟,尤其在复杂推理任务中性能下降。
      • 知识整合不足:LLM的内部知识存储在参数中,而上下文注入仅影响注意力机制,无法深度整合外部知识。
    • 研究问题:能否高效、灵活地将外部知识直接注入LLM的参数中?


    2. 方法:Parametric RAG

    核心思想

    通过文档参数化将外部知识直接整合到LLM的前馈网络(FFN)参数中,而非输入上下文。流程分为两个阶段:

    1. 离线文档参数化
    • 文档增强:对每个文档生成多版本改写和问答对(QA),增强知识覆盖。
    • 参数编码:使用LoRA(低秩适应)技术,将文档转换为低秩参数矩阵(每个文档约几MB),可插入FFN层。
  • 在线推理(RUG流程)
    • 检索(Retrieve):根据查询检索相关文档。
    • 更新(Update):合并文档的LoRA参数,动态更新LLM的FFN权重。
    • 生成(Generate):用更新后的LLM直接生成答案。

    优势

    • 效率:避免长上下文输入,减少在线计算成本(比传统RAG快29%-36%)。
    • 深度整合:外部知识直接融入LLM参数,与内部知识同等利用。
    • 灵活性:可与传统RAG结合(如“Combine Both”方法),进一步提升性能。

    3. 实验结果

    • 基准测试:在2WikiMultihopQA、HotpotQA等复杂推理任务上,Parametric RAG显著优于传统RAG(如LLaMA-8B上F1提升5-15%)。
    • 关键发现
      • 模型规模:参数化注入对大型模型(如LLaMA-8B)效果更显著。
      • 初始化策略:LoRA参数预训练(Warm-Up)比随机初始化性能更好。
      • 文档增强必要性:改写和QA生成对知识内部化至关重要。

    4. 贡献与未来方向

    • 主要贡献
      • 提出首个参数化RAG框架,实现高效知识注入。
      • 设计离线-在线分离的流程,平衡计算开销与性能。
    • 未来方向
      • 优化参数化存储效率(如仅处理高频访问文档)。
      • 探索跨模型通用的参数表示。
      • 扩展至智能体配置等应用场景。

    5. 开源与资源

    • 代码、模型与数据已开源:GitHub链接
    • 论文地址:arXiv:2501.15915

    总结

    Parametric RAG通过将知识直接编码到模型参数中,突破了传统RAG的瓶颈,为动态知识更新和高效推理提供了新思路。其模块化设计(如Combine Both)也展现了与传统方法的兼容性,具有广泛的实践潜力。


    第三篇:

    KBLAM: KNOWLEDGE BASE AUGMENTED LANGUAGE MODEL

    论文总结:KBLAM(KnowledgeBase Augmented Language Model)

    背景与动机

    大型语言模型(LLMs)虽然具备强大的知识和推理能力,但在需要结合外部知识的场景(如定义与模型参数不一致的概念)时表现受限。传统方法如监督微调(SFT)效率低且易导致灾难性遗忘,而检索增强生成(RAG)和上下文学习(in-context learning)分别面临检索模块分离和计算开销随上下文长度平方增长的问题。KBLAM提出了一种新的方法,通过结构化知识库(KB)和高效的注意力机制,实现外部知识的高效集成。

    核心方法

    1. 知识编码

    • 将非结构化文本转换为结构化知识三元组(<name>, <property>, <value>)。
    • 使用预训练句子编码器(如OpenAI的ada-002)将三元组编码为固定长度的键值向量对(称为“知识令牌”),通过线性适配器映射到LLM的嵌入空间。
  • 矩形注意力机制

    • 修改标准自注意力机制,允许输入令牌关注所有知识令牌(但不允许知识令牌相互关注),形成矩形注意力矩阵。
    • 计算复杂度从二次降为线性(相对于知识库大小),支持动态更新(无需重新训练)。
  • 指令微调

    • 使用合成数据训练适配器,学习将句子编码器空间与LLM嵌入空间对齐,而非直接记忆知识。
    • 支持多种任务类型(简单问答、多实体问答、开放式推理、拒绝回答无关问题)。

    优势

    • 高效性:计算和内存开销随知识库大小线性增长(优于上下文学习的平方增长)。
    • 动态更新:可随时增删改知识令牌,无需调整模型参数。
    • 可解释性:通过注意力分数直观追踪知识使用情况(如图4显示模型能准确聚焦相关三元组)。
    • 可靠性:通过指令微调学会拒绝回答知识库中不存在的信息,减少幻觉。

    实验结果

    1. 检索性能:在合成数据和真实Enron数据集上,KBLAM的注意力机制表现出高精度的检索能力(Top-5准确率接近BM25)。
    2. 推理能力:在问答和开放式推理任务中,性能与上下文学习相当,但内存占用显著更低(图6)。
    3. 可扩展性:支持超过10K三元组的知识库(单块A100 GPU),性能衰减较小(图3)。
    4. 抗幻觉:在无关问题上,KBLAM的拒绝回答精度优于上下文学习(图6c)。

    局限性与未来方向

    • 合成数据质量:对分布外数据(如Enron)的性能下降,需更多样化的合成数据。
    • 信息损失:固定长度编码可能丢失细节,未来可探索动态压缩率。
    • 训练成本:适配器微调需24-48小时(单GPU),但为一次性开销。

    开源与影响

    论文开源了代码、合成和Enron知识库数据集,为长上下文模型、幻觉控制等研究提供了资源。KBLAM的设计思想可扩展至其他模态或多跳推理任务。

    总结

    KBLAM通过结构化知识编码和矩形注意力机制,在保持预训练LLM通用能力的同时,实现了高效、动态、可解释的知识增强,为知识密集型NLP任务提供了新的解决方案。


    三种方法对比总结

    维度Cache-Augmented Generation (CAG)Parametric RAGKBLAM
    核心思想
    预加载文档的KV Cache,避免实时检索
    将外部知识编码为LoRA参数,动态更新FFN层
    结构化知识库+矩形注意力机制,实现高效知识检索与整合
    知识存储形式
    文档的KV状态缓存(显存/磁盘)
    低秩参数矩阵(LoRA)
    结构化三元组编码(键值向量对)
    延迟优化
    ⭐⭐⭐⭐(零检索延迟)
    ⭐⭐⭐(需参数合并,但无长上下文)
    ⭐⭐(需计算矩形注意力)
    适用场景
    静态知识库(如企业FAQ)
    动态知识更新(如实时文档流)
    结构化知识需求(如定义、属性查询)
    计算开销
    高初始缓存生成,低推理开销
    中等(需离线参数化)
    低(线性复杂度)
    知识整合深度
    中等(依赖注意力机制)
    高(参数直接修改模型行为)
    高(结构化编码+指令微调)
    动态更新支持
    ❌(需重新生成缓存)
    ✅(可增删LoRA模块)
    ✅(实时增删知识令牌)
    抗幻觉能力
    依赖模型原始能力
    中等(依赖参数覆盖)
    ⭐⭐⭐(可明确拒绝无关问题)
    典型应用
    客服系统、封闭域问答
    医疗/法律等专业领域
    知识图谱增强的复杂推理
    开源实现
    部分代码公开
    GitHub
    代码与数据集开源

    关键结论

    1. CAG 是速度王者:适合知识库固定、对延迟敏感的场景,但灵活性较差。
    2. Parametric RAG 是平衡之选:结合参数化与动态更新,适合需要频繁知识迭代的任务。
    3. KBLAM 是结构化专家:擅长处理定义、属性等精确知识,且抗幻觉能力突出。

    未来方向可能是三者融合:例如用KBLAM管理结构化知识,Parametric RAG处理动态文档,CAG加速高频查询——最终实现“知识增强的终极形态”。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询