Sozdai LogoDocs
开始/Advanced

提示词缓存 & 会话亲和

对支持提示词缓存的模型,将大篇幅的静态上下文(如系统提示词、知识库、历史消息)进行缓存,可缩短响应延迟并削减高达 90% 的输入成本。网关独创的「会话亲和」机制确保了缓存的高命中率。

#1. 工作原理

传统的 API 网关会对每次请求的完整输入重新计费。而启用提示词缓存的模型在遇到相同请求前缀时,会读取上游服务商缓存好的数据,只对缓存读取(Read)按极低单价计费。
- 缓存写入 (Cache Write): 第一次请求(或缓存过期后)将整段上下文传给模型,触发上游建立缓存,此阶段按缓存写入价格收费(通常等于或略高于普通输入价)。
- 缓存读取 (Cache Read): 后续相同前缀的请求,会自动读取该缓存,收费大降(低至普通输入的 1/10 价格)。

#2. 会话亲和 (Session Affinity)

由于 API 网关通常会绑定多个服务通道与多组不同的 API key 进行负载均衡,若每次请求都被随机分发到不同通道,缓存将永远无法命中。
为了解决这个问题,Sozdai 引入了 **会话亲和 (Session Affinity) 路由**:
系统提取您发送的第一条消息的哈希值作为亲和 Key(Affinity Key)。只要模型名和首条消息相同,网关将**锁定并持续路由到完全相同的上游渠道与 Key**,确保缓存始终在同一上游账号和通道中保持温热,极大提升缓存命中率。

#3. 触发与声明方式

您可以通过以下两种方式让网关识别并启用缓存路由:

  1. 显式请求头: 在请求中携带 `x-corry-cache: true` 请求头。
  2. 标准 Anthropic Caching Block 声明: 像平时调用 Anthropic 接口一样,在消息内容块中塞入 { "type": "ephemeral" } 标记。

json
{
  "model": "claude-3-5-sonnet",
  "messages": [
    {
      "role": "system",
      "content": [
        {
          "type": "text",
          "text": "...(very long developer guidelines or database schemas)...",
          "cache_control": { "type": "ephemeral" }
        }
      ]
    },
    { "role": "user", "content": "Query statistics for May." }
  ]
}

#4. 响应与命中反馈

当成功命中了缓存,返回的 JSON 响应中会包含 `usage` 统计细节,如 `cached_tokens`:

json
{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "model": "claude-3-5-sonnet",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Here is the summary of the database schema..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 5120,
    "completion_tokens": 150,
    "total_tokens": 5270,
    "prompt_tokens_details": {
      "cached_tokens": 4096
    }
  }
}