缓存
缓存
Alephant AI Gateway 可以复用符合条件的模型响应,让重复请求避免不必要的上游调用。这可以降低稳定、可重复工作负载的延迟和 provider 成本。
缓存控制项是可选的 Gateway 请求头。Gateway 在处理请求时使用这些请求头,不会把它们发送给上游模型 provider。应用仍需自行判断响应是否适合安全复用。
缓存模式
Alephant 使用“缓存”描述多种不同机制。它们的行为和生命周期并不相同。
何时使用缓存
适合缓存的请求通常具有稳定输入,并且响应可以在多次请求之间保持有效:
- 基于低频变更内容的知识问答
- 重复的分类、提取或摘要
- 使用可重复变量的固定 prompt 模板
- 对低延迟有要求的读密集型工作负载
以下情况应谨慎使用缓存:
- 答案必须反映实时数据
- 请求包含敏感信息或用户特有信息
- 请求可能调用工具或产生外部副作用
- 授权或业务状态可能在两次请求之间发生变化
- 应用依赖刻意生成的随机输出
Gateway 无法判断每一种业务特有的复用边界。当响应必须基于当前请求重新生成时,请关闭缓存读取和写入。
配置响应缓存
核心缓存请求头
读取与保存行为
当应用需要可预期的行为时,请显式设置读取和保存控制项。
Workspace 和 Gateway 配置可能影响缓存可用性。当应用依赖特定读写行为时,不应依赖未公开的默认值。
语义缓存请求头
语义缓存属于高级控制项。仅当 workspace 已配置语义缓存和 embedding 服务时使用。
请把 embedding 凭据视为 secret,不要提交到源码仓库,也不要写入应用日志。
示例
以下请求显式启用缓存读取和写入,并把缓存响应的最长有效时间设置为一小时:
再次发送相同的稳定输入,然后比较缓存响应元数据和 Logs 中的请求。max-age=3600 是本示例显式设置的值,并不表示 Gateway 存在某个隐含的默认生命周期。
请求生命周期
启用缓存的请求遵循以下逻辑流程:
- 验证 Virtual Key,并解析 workspace、model 和请求上下文。
- 根据适用的请求内容和缓存控制项派生缓存身份。
- 如果允许读取,则尝试精确匹配查找或已配置的语义查找。
- 查找成功时返回可复用响应和缓存元数据。
- 未命中时,把请求发送给选定的上游 provider。
- 如果允许保存且响应符合条件,则将其写入响应缓存。
- 继续在已配置的 Logs、Analytics 和成本归因链路中记录请求。
以上是逻辑阶段,不代表对内部线程顺序、Redis 操作或强一致性的承诺。
验证缓存命中
启用缓存的响应可能包含:
验证方法:
- 启用缓存读取和写入,对同一稳定请求发送两次。
- 比较
alephant-cache、缓存延迟和 Alephant 请求标识符。 - 打开 Logs,检查缓存状态、provider、token、成本和请求上下文。
- 如果第二次请求仍未命中,比较 model、messages、参数、seed、TTL 和缓存控制项。
alephant-cache 报告的具体值可能取决于已部署的 Gateway 版本。请检查实际响应,不要依赖未公开的枚举。
故障排查
内部缓存与状态
Gateway 还会保存短期或可复用的运行状态。这些机制支持请求处理,但不同于模型响应缓存。
这些状态不共享统一的 TTL 或失效规则。未命中可能触发数据库查找或重新初始化,不一定表示故障。并发、限流、锁和幂等状态都不代表可复用的模型响应。其 key、value 和生命周期属于部署实现,而不是公开 API 合同。
缓存、日志与计费
Logs 和计费链路还会维护其他缓存与聚合数据,用于模型价格、自定义价格、workspace 或 department 消费、Virtual Key 消费、token 和请求计数、Agent 成本、用量限制决策、鉴权以及通用查询结果。
排查成本时,应区分以下事件:
- Provider 原生 cached token 事件通过 provider 用量和价格体现。
- Gateway 响应缓存命中会在再次生成上游响应之前复用已有响应。
- 内部价格缓存命中只会加速成本计算。
- 限流与消费聚合服务于执行和报告,不是响应缓存。
缓存命中仍应具有可观测元数据。请以实际 Logs 和 Analytics 记录为准,判断请求的 provider token、Gateway 费用、缓存节省和归因成本。
安全与运维建议
- 不要缓存授权决策、一次性结果,或不得跨请求复用的敏感响应。
- 不要把 secret、个人数据或受监管标识符放入 cache seed 或自定义可观测 metadata。
- 应用必须使用已公开的 Gateway 请求头和响应头,不应依赖内部 Redis key。
- Private deployment 应把 Redis 或 Valkey 作为受保护的基础设施:限制网络访问、要求身份验证、在支持时加密传输,并避免在日志中暴露运行值。
- 修改缓存配置后,应先使用非敏感测试请求验证行为,再扩大启用范围。