SuperAPI AI 工具集

CAG

CAG(Cache-Augmented Generation,缓存增强生成)是一种简单高效、无需实时检索的生成范式,可作为 RAG(检索增强生成)的替代方案。RAG 虽然在语言模型中引入外部知识,但存在检索延迟、检索错误和系统复杂度过高等问题。CAG 通过将全部相关知识预加载到现代大语言模型(LLM)的扩展上下文窗口中,并缓存其运行时参数,在推理时直接利用预加载的 KV 缓存生成回答,从而绕过实时检索步骤。其优势包括降低延迟、提升可靠性、简化设计,并在部分任务上取得与 RAG 相当或更优的结果。局限在于知识规模受限于上下文窗口长度,且超长上下文可能导致模型性能下降。该项目为开源代码仓库,包含 RAG 与 CAG 的实验脚本、参数说明和数据集说明,论文将在 ACM Web Conference 2025 作为短文发表。

访问官网

工具介绍

CAG(Cache-Augmented Generation,缓存增强生成)是一个提出以缓存替代实时检索的生成范式,旨在作为 RAG(Retrieval-Augmented Generation,检索增强生成)的简单高效替代方案。

用途与背景 RAG 通过整合外部知识源来增强语言模型,但会引入若干挑战:检索延迟(实时检索步骤造成的延迟)、检索错误(选择相关文档时的不准确)以及系统复杂度(架构与维护开销增加)。CAG 通过绕过实时检索来应对这些限制。

主要原理 CAG 利用现代大语言模型(LLM)的扩展上下文窗口,将全部相关资源预加载到模型上下文中,并缓存其运行时参数。在推理期间,预加载的 KV 缓存使模型能够直接生成回答,无需进行检索。

CAG 的优势

  • 降低延迟:消除实时检索,实现更快的推理。
  • 提升可靠性:在保持上下文相关性的同时减少检索错误。
  • 简化设计:提供无需检索的精简替代方案,以更低的复杂度取得相当或更优的结果。

CAG 的局限

  • 知识规模有限:CAG 要求整个知识源能够放入上下文窗口,因此不太适合涉及极大规模数据集的任务。
  • 上下文长度约束:LLM 在非常长的上下文下性能可能下降。

论文与研究进展 相关论文将在 ACM Web Conference 2025 作为短文发表,研究模型性能与上下文长度之间的关系,并给出 CAG 表现优异的场景分析。CAG 的局限正随着上下文窗口更长的 LLM 以及从扩展输入中提取相关信息能力的提升而迅速得到改善。随着这些模型持续演进,CAG 有望处理日益复杂的应用,成为传统 RAG 的实用且可扩展的替代方案。

使用方式与项目文件

  • 通过 curl 脚本下载所需的 squad 和 hotpotqa 数据集。
  • 依照 .env.template 创建 .env 文件并填入所需密钥。
  • rag.py 用于 RAG 实验。
  • kvcache.py 用于 CAG 实验。

kvcache.py 参数用法 --kvcache : "file" --dataset : "hotpotqa-train" 或 "squad-train" --similarity "bertscore" --modelname : "meta-llama/Llama-3.1-8B-Instruct" --maxKnowledge : "",int,选择数据集中多少文档,说明见 Note --maxParagraph : 100 --maxQuestion int,最大问题数量,说明见 Note --randomSeed : "",int,随机种子数 --output : "",str,输出文件路径字符串 --usePrompt,若不使用 CAG 知识缓存加速则添加此参数 kvcache.py 示例(资料中标注“Example -- kvcache.py”,未提供具体命令内容)。

rag.py 参数用法 --index : "openai" 或 "bm25" --topk : int,检索的相似度 topk rag.py 示例(资料中标注“Example -- rag.py”,未提供具体命令内容)。

数据集规模与 Token 数说明 "squad-train" 数据集:

  • k = 3 时,tokens = 21,000
  • k = 4 时,tokens = 32,000
  • k = 7 时,tokens = 50,000 "hotpotqa-train" 数据集:
  • 全部 k = 7405 篇文章,tokens = 10,038,084
  • k = 1 时,tokens = 1,400
  • k = 16 时,tokens = 22,400
  • k = 24 时,tokens = 33,667
  • k = 32 时,tokens = 44,800
  • k = 48 时,tokens = 64,000
  • k = 64 时,tokens = 85,000
  • k = 80 时,tokens = 106,000 使用 "squad-train" 数据集时,1 条知识平均对应 150 个问题;使用 "hotpotqa-train" 数据集时,1 条知识对应 1 个问题。由于 "hotpotqa-train" 数据集中 1 个文档只有 1 个问题,可能无法满足大规模评估,多次评估可能是相对更好的做法。

Docker 构建与运行

  • 构建 Docker 镜像,运行相应命令(资料中未给出具体命令内容)。
  • 运行容器时,GPU 用户运行相应命令(资料中未给出具体命令内容)。
  • 如果在构建时 .env 文件内容为空,会出现类似下方所示的错误,因此务必在构建 Docker 镜像前填充 .env 文件(具体错误示例资料中未给出)。
  • 注意 Dockerfile 中的 CMD 指令默认运行 kvcache.py 脚本。若希望执行 rag.py 等其他脚本,可在 docker run 命令中覆盖(资料中未给出具体命令内容)。

致谢 本工作部分得到台湾国家科学及技术委员会(NSTC)资助(编号 112-2221-E-001-016-MY3)、中央研究院资助(编号 236d-1120205),以及国家实验研究院国家高速网络与计算中心(NCHC)与 NSTC 在“台湾 113 年可信赖生成式 AI 大语言模型推动与素养能力培育(Trustworthy AI Dialog Engine, TAIDE)”项目下的支持。作者感谢 Discover AI 以及众多介绍、分享和讨论本工作的人士,为其更广泛的可见度与影响力作出贡献。