语义缓存正在改变我们优化依赖大型语言模型 (LLM) 的系统的方式。通过使用向量嵌入,它能够为相似查询提供更快、更具成本效益的响应。但要做好这一点,开发人员需要解决三个主要挑战
与传统缓存类似,语义缓存作为内存层,提供预计算的响应,避免重复耗时的计算。但与基于精确键匹配检索数据的传统缓存不同,语义缓存基于相似性检索匹配项。它使用向量嵌入来表示查询,当两个查询向量之间的距离低于设定的阈值时,就会发生缓存命中。这使得系统能够为相似的查询提供预计算的响应,即使它们不完全相同。
为什么这很重要?调用 LLM 通常是 RAG/Agentic 系统中最昂贵、最慢且重复的部分(Gill 等人,2024)。语义缓存通过以下方式提供帮助:
语义缓存适用于许多用例,但也可能导致假阳性和假阴性。
在传统缓存中,键要么存在,要么不存在,结果是二元的。使用语义缓存时,对于语义相似但需要不同答案的查询,可能会返回缓存的响应。这使得设置正确的距离阈值和使用有效的嵌入模型来确保准确性至关重要。
为了评估用于语义缓存的嵌入模型,我们首先使用了这个数据集,该数据集结构为标注了是否重复的问题对。例如
问题 1 | 问题 2 | 是否重复 |
香蕉是什么颜色的? | 香蕉是什么颜色的? | 1 |
澳大利亚的首都是什么? | 澳大利亚最大的城市是哪个? | 0 |
使用此数据集,我们使用五种模型为每对问题生成了嵌入
我们使用混淆矩阵评估结果,以跟踪在不同距离阈值下的真阳性、假阳性、真阴性和假阴性。从这些矩阵中,我们得出了关键指标,包括精确率、召回率和 F1 分数,以评估模型性能。然后,我们记录了每种模型的平均延迟,并测量了嵌入维度作为内存使用量的代理。最后,我们整理了指标,可视化了结果,并确定了最适合语义缓存应用的性能最佳模型。
在我们研究中,sentence-transformers 的 all-mpnet-base-v2 嵌入模型是综合优化精确率、召回率、内存、延迟和 F1 分数用于语义缓存方面的总体获胜者。
我们的小型研究表明,许多嵌入模型在开箱即用时能很好地捕捉两个查询确实重复时的积极情况。但当需要判断两个查询相似但不完全重复时,它们可能会遇到困难。表现最好的模型在消极情况(不重复)下具有更广的分布。
查看下面的图表,您可以看到在某个阈值以下,真正重复的问题与相似但不完全重复的问题之间存在显著的重叠。理想情况下,这些图将完全分离,绿色或蓝色之间没有重叠。那样,您就可以设置一个距离阈值,在它们之间划一条线。
我们的研究表明,选择正确的嵌入模型对于优化语义缓存在精确率和效率方面的表现是多么重要。
虽然 all-mpnet-base-v2 等模型表现良好,但在区分真正重复的查询和语义相似但不重复的查询方面仍有改进空间。未来,我们旨在探索更先进的技术,例如训练自定义嵌入模型、整合查询重写流程以及训练可缓存预路由的分类器。这些步骤将有助于使语义缓存系统在实际使用中更加准确和可扩展。