通过存储可重用的计算输出,避免对重复或相似请求进行冗余处理,缓存机制可以显著减少检索增强生成 (RAG) 系统中的延迟。核心思想是缓存中间结果(例如,嵌入、检索到的文档,甚至最终生成的响应),以便未来的查询可以跳过诸如嵌入生成或数据库查找之类的昂贵步骤。对于具有重复查询或稳定数据源的应用程序,这种方法尤其有效,因为缓存的数据在一段时间内仍然有效。
在 RAG 系统中,通常缓存三种类型的数据。首先,可以缓存查询或文档的**嵌入**,以绕过重复生成它们的计算成本。例如,如果用户问“什么是量子计算?”,系统可以缓存此查询的嵌入,并在再次提出相同问题时重复使用它。其次,可以存储来自外部数据库或知识库的**检索结果**。如果频繁查询(例如,“最新的 Python 版本”)始终检索相同的文档,则缓存这些结果可以避免冗余搜索。第三,对于相同的查询,可以缓存**生成的响应**本身,尽管这仅在答案不经常更改时才可行(例如,事实性问题)。例如,医学 RAG 系统可能会缓存对常见症状相关查询的答案。
在实施缓存时,开发人员必须平衡速度提升和数据新鲜度。当查询具有高度语义重叠时,嵌入缓存效果良好,但可能需要诸如近似最近邻搜索之类的技术来匹配相似但不完全相同的查询。如果基础数据发生更改,检索到的文档缓存需要失效策略——例如,以新闻为中心的 RAG 系统可能会每小时刷新其缓存。预先计算静态文档集合(例如,历史研究论文)的嵌入是另一种优化方法。但是,过度缓存动态数据(例如,股票价格)可能会导致结果过时。通常使用诸如 Redis 或内存字典之类的工具,缓存键从查询哈希或嵌入聚类派生。测试缓存命中率并调整驱逐策略(例如,LRU)对于保持效率至关重要。