客服里常有意思相同、说法不同的问题,“发票怎么开”和“在哪里申请电子发票”可能需要同一份答案。普通缓存通常要求请求完全一致,换几个字就会重新调用模型,语义缓存把问题转成向量,再找过去含义接近的请求,命中后直接复用已有回答。
我看了 GPTCache 的论文、快速入门和配置说明。一次语义缓存查询至少涉及几项选择,包括用什么嵌入模型、把数据存在哪里、怎样判断相似度,以及旧内容何时淘汰。项目支持精确匹配、向量距离和模型判断等不同评估方式,也允许设置多级缓存。
省下调用以前先定义可复用范围
ACL 论文记录的实验里,缓存命中后曾获得两到十倍的响应速度提升。这个数字来自特定实现与测试,换成别的模型、向量库和网络条件会不同。可以确认的机制很简单。命中时少了一次大模型生成,调用费用与等待时间都有机会下降。
风险也来自同一个动作。系统一旦把两个含义不同的问题判成相似,就会快速返回一份不合适的旧答案。一次未命中只是多调用模型,一次错误命中会把过期价格、错误政策或别人的权限结果交给用户。
缓存键需要带上会改变答案的条件。租户、用户权限、语言、模型版本、系统提示词版本和知识库版本都可能影响结果。公司制度每天变化时,还要设置有效期或在内容更新后主动失效。创意写作、个性化建议和需要实时数据的问句,通常也不适合直接复用完整回答。
多轮对话还要考虑前文。用户只发一句“那北京呢”,单看最后一句几乎没有意义。GPTCache 的配置文档允许预处理函数拼接或压缩上下文,这也提醒开发者,相似度比较使用了哪些对话内容,必须和答案实际依赖的内容一致。
命中率不能单独当成绩
上线前可以收集一批已脱敏的重复问句,由人工标出哪些回答确实能够共用。逐档调整相似度门槛,记录正确命中、错误命中和未命中。门槛放宽会提高命中率,也更容易把邻近话题混在一起。
还要保留一次缓存命中的证据。日志至少应记下原问题标识、命中的缓存项、相似度、内容版本和返回时间,不必保存完整的敏感对话。发现错误以后,团队才知道该删哪条缓存,还是该收紧规则。
先从一类固定问答开始,别一上来缓存所有模型输出。范围越窄,团队越容易确认哪些条件会改变答案,也更容易给内容设置有效期。
语义缓存最适合答案稳定、重复很多的窄场景,例如产品说明和固定办事流程。先守住错误命中率,再谈节省了多少调用。缓存返回得再快,内容错了仍要花更多时间纠正。