内容提要
大语言模型重复调用会重复计费,可通过缓存避免:先对请求、上下文、模型设置等做哈希精确匹配,未命中再用向量相似度语义检索,命中后回填精确缓存。需按场景设阈值和过期时间,实时数据、个性化及创意任务不宜缓存。实测可省约六成调用成本。
延伸解读
缓存键必须包含上下文与权限
文章强调,缓存键不能只基于查询文本,还需纳入提示中的上下文与文档、模型及其设置、检索源的版本以及调用者的访问范围。否则,相同问题在不同文档或不同权限用户间可能错误共享缓存,导致答案泄露或错误。实现时需将这些因素一并哈希,确保缓存条目与请求的完整语义和权限边界匹配。
语义缓存阈值需按场景调优
对于语义缓存,文章建议余弦相似度阈值从0.90到0.95起步,但需根据嵌入模型和数据调整。代码类查询通常需要更严格的阈值(约0.95以上),而对话类查询可放宽至0.85到0.90。同时要注意不同向量库返回的是相似度还是距离,避免阈值比较对象错误。阈值过松会增加错误匹配风险,必须用真实查询验证。
TTL应基于可接受的陈旧度设定
缓存过期时间不应按数据类型一刀切,而应取决于用例能容忍多少陈旧。例如,市场数据答案可能只可接受一两分钟,而内部HR政策答案可复用数周。实时数据如体育比分在比赛期间不应缓存,但已验证的最终比分可长期缓存并支持更正失效。文章建议先以影子模式运行,记录缓存命中情况,并用验证过的参考答案评估缓存答案质量。
避免缓存污染与不适用场景
写入缓存前必须验证响应,避免错误、空负载或格式错误的内容污染缓存。同时,文章明确列出不应缓存的场景:包含个人或账户特定数据的请求,以防泄露;创意任务,因为每次需要不同答案;以及真正实时的数据,如股价和实时库存,即使一分钟前的答案也可能过时。预热缓存时,应从历史常见查询开始,并确保答案经过验证。
Q&A
LLM响应缓存和原生的提示缓存有什么区别?
原生提示缓存是提供商复用缓存的提示计算,对符合条件的缓存读取按折扣价收费,但输出生成仍然计费;而响应缓存是在自己的基础设施中,当已有答案时直接跳过模型调用,从而完全避免该次调用的费用。
如何实现LLM的精确匹配缓存?
将模型请求体规范化,用SHA-256等加密哈希生成键,然后在Redis等内存存储中查找。如果命中且答案仍有效,就直接返回,无需调用模型。
语义缓存中余弦相似度阈值应该设多少?
常见的起始范围是0.90到0.95,但这不是默认值,需要根据你的嵌入模型和数据来调整,并用真实查询测试。代码类查询通常需要更严格的阈值(约0.95以上),对话类查询可以容忍更宽松的阈值(0.85到0.90)。
哪些情况下不应该使用LLM响应缓存?
不应缓存包含个人或账户特定数据的请求,以避免泄露;不应缓存创意任务,因为每次希望得到不同答案;也不应缓存真正实时的数据,如股票价格和实时库存,因为即使一分钟前的答案也可能过时。
混合缓存策略如何运作?
先检查精确匹配存储,未命中则进行语义搜索。语义搜索找到足够接近的匹配后,将结果以新查询的哈希提升回精确匹配存储,这样下次相同或相似查询就能直接命中精确缓存。
LLM响应缓存能节省多少成本?
以每月100万次调用、每次0.006美元为例,无缓存约6000美元。混合缓存命中率约60%时,可避免60万次模型调用,加上嵌入和向量存储成本约150美元,月支出降至约2550美元,节省57.5%。但需先测量实际命中率再预测节省。