大规模语言模型(LLMs)的发展前景正迅速变化,检索增强生成(RAG)在将外部知识整合到LLM输出中占据主导地位。然而,缓存增强生成(CAG)作为一种有前景的替代方案开始崭露头角,为特定场景提供了简单和高效的解决方案。
在这篇文章中,我们将探讨:
✅ 什么是缓存增强生成技术(CAG)?
✅ CAG与RAG相比有何不同?
✅ 什么时候应该选择CAG而不是RAG?
✅ 用Python实现CAG的示例代码,其中涉及LLMs。
虽然RAG在运行时动态检索外部知识,CAG则将所有相关数据预先加载到模型的扩展上下文中并缓存推理状态。这不仅消除了检索延迟,还简化了架构,使之成为更佳的有限的数据集和静态的知识库的理想选择。
检索增强生成(RAG)一直是最常用的增强大型语言模型的外部数据工具。RAG动态查询一个向量数据库以检索相关信息,使模型能够访问超出其训练数据的最新信息。
不过,RAG 也存在一些挑战,
缓存增强生成(CAG) 通过将所有相关文档预加载到模型的上下文窗口来简化这一过程。CAG 不再动态检索数据,而是 缓存推理过程 ,从而使模型能够直接生成输出。
CAG:一切顺利:
CAG到底是怎么运作的?
1️⃣ 准备数据集: 选择所有相关知识文档。
2️⃣ 预加载上下文: 将数据集加载到 LLM的扩展上下文窗口 中。
3️⃣ 缓存推理状态: 存储推理状态以供重复查询。
4️⃣ 查询模型: 使用缓存的知识直接与模型交互。
5️⃣ 生成输出: 输出最终结果,无需检索延迟。
不过,CAG的的主要限制是当前大型语言模型的上下文窗口的大小,这限制了可以预加载的数据量。
下面是一个简单的 CAG 工作流示例,它使用了像 OpenAI 的 gpt-4
这样的 LLM API。
import openai # 预加载知识库(静态数据集) knowledge_base = """ 埃菲尔铁塔位于法国巴黎。 它于1889年建成,是世界上最著名的地标之一。 """ # 定义查询函数 def query_with_cag(context: str, query: str) -> str: """ 使用缓存增强生成技术查询预加载的知识库。 """ prompt = f"知识库:\n{context}\n\n查询: {query}\n回答:" response = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "system", "content": "你是一个关于历史地标的知识丰富的助手。"}, {"role": "user", "content": prompt} ], max_tokens=100, temperature=0.5 ) return response['choices'][0]['message']['content'].strip() # 示例查询: query = "埃菲尔铁塔位于哪里?" response = query_with_cag(knowledge_base, query) print("答案是:", response)
knowledge_base
这一部分包含了预加载的知识。答案是:埃菲尔铁塔位于法国巴黎。
这个例子说明了CAG通过扩展的上下文窗口减少对外部检索的依赖。
✅ 企业文档助手:静态数据集,如员工手册和用户手册。
✅ 医疗知识检索:医学指南或治疗协议。
✅ 法律文档预览:预加载合同和法律文件,以便快速分析。
✅ 在线学习平台:静态课程内容预加载,以支持动态查询。
缓存增强生成(CAG) 并不是一个 检索增强生成(RAG) 的通用替代品,但在 较小的数据集、低延迟要求和静态知识源 的场景中,它则表现得更为出色。
如果你正在构建依赖大语言模型的应用程序,了解何时使用CAG而非RAG 可以让你的系统更高效、更经济且更具可扩展性。
🔗 了解更多关于大规模语言模型的技术知识: