同一提示词来自两个租户,怎样证明网关结果缓存不会串答案
两个租户提交同一段文字,结果未必可以共享。假上游按租户返回不同标记时,如果缓存键只有请求体摘要,第二个租户可能拿到前一个的内容。本文验证自建应用结果缓存的键边界,区别于HTTP代理缓存和提供方prompt缓存。
用相同输入与不同身份制造最小反例
附件所有请求的payload都是same question。请求依次是租户a、同租户重复、租户b、租户a权限版本改变、租户a配置版本改变。只按payload摘要缓存,后四次全部命中,合计四次;包含租户、权限版本、配置版本和payload摘要的参考键,只让第二次命中,合计一次。
跨租户安全命中数应为零,同时同租户同版本应有一次命中。只断言跨租户不命中不够,把缓存完全禁用也能满足;需要正例证明合理复用仍存在。这里的响应归属只用假租户标记,不生成模型文本,也没有真实个人数据。
权限与配置变化也属于键空间变化
同一租户权限收窄后,旧结果可能包含新权限不该看到的信息;模型路由、知识库或提示模板更新后,旧结果也可能不再符合当前配置。版本标识应来自可信服务端,不能直接让调用方随意填一个固定版本绕过隔离。缓存项还应带可审计的来源边界,方便失效与排错。
正文、参数、模型和其他会影响结果的输入,需要稳定规范化后再摘要。不能仅删掉看起来无关的字段,导致实际不同请求合并;也不要把原始Key直接放进缓存键或日志。虚拟Key换发但租户与授权边界没变时,是否继续复用由策略决定,凭证字符串本身不一定是最佳租户身份。
命中前仍要完成当前授权
缓存不是绕过鉴权的捷径。即使有同键条目,也应先确认当前请求有权访问对应内容;权限失效事件延迟同样需要考虑。公共共享缓存若确有需求,应建立明确公共域和可共享数据分类,不能默认把所有相同payload都当作公开答案。
RFC 9111定义HTTP缓存语义,本文没有把应用结果键设计冒称为HTTP协议要求;LiteLLM虚拟Key资料提供租户访问控制背景。实际运行的是内存键集合和假归属比较,没有测试真实网关缓存插件或并发击穿。附件的一次安全命中、零跨租户安全命中,可以作为集成测试目标;还需补齐持久缓存、版本传播和缓存失效过程,才能证明部署后的隔离边界。
配套样本与复核入口
下载本篇独立合成输入和实验运行器。上述文件放在同一目录后运行 python run_lab.py C039。完整运行需要全部四十四份输入及相关配置。结果中的method区分离线计算、静态参考检查与回环实测,不能把前两者当成真实网关已通过。
资料核对日期:2026-10-24。官方依据1;官方依据2。
与本站相关基础教程的区别:旧文讲缓存层次与降本;本文只测试自建结果缓存键是否含租户授权与配置版本边界,不测试模型结果质量或prompt缓存命中率。
不想自己搭网关、自己维护渠道?
力达云是托管的 OpenAI / Anthropic 双格式端点,一期提供 DeepSeek,注册送 ¥5 额度。