上下文缓存

上下文缓存功能通过缓存重复的上下文内容来显著降低 Token 消耗和响应延迟。当您在对话中重复使用相同的系统提示词或历史对话时,缓存机制会自动识别并复用这些内容,从而提升性能并降低成本。

功能特性

  • 自动缓存识别:隐式缓存,智能识别重复的上下文内容,无需手动配置
  • 显著降低成本:缓存命中的 Token 按更低价格计费,大幅节省成本
  • 提升响应速度:减少重复内容的处理时间,加快模型响应
  • 透明化计费:详细显示缓存命中的 Token 数量,响应字段 usage.prompt_tokens_details.cached_tokens
  • 广泛兼容性:支持平台内多种主流文本生成模型

上下文缓存通过对输入的消息内容进行计算并识别出与之前请求中相同或高度相似的内容。当检测到重复内容时,系统会复用之前的计算结果,从而避免重复计算这些内容所需的 Token。

这种机制特别适用于以下场景:

  • 系统提示词复用:在多轮对话中,系统提示词通常保持不变,缓存可以显著降低这部分的 Token 消耗
  • 重复任务:对于一致的指令进行多次处理相似内容的任务,缓存可以提高效率
  • 多轮对话历史:在复杂的对话中,历史消息往往包含大量重复信息,缓存可以有效降低这部分的 Token 使用

工作方式

向支持隐式缓存的模型发送请求时,该功能会自动开启。系统的工作方式如下:

  1. 查找:收到请求后,系统基于前缀匹配原则,检查缓存中是否存在请求中 messages 数组内容的公共前缀。
  2. 判断
    • 若命中缓存,系统直接使用缓存结果进行后续部分的推理。
    • 若未命中,系统按常规处理请求,并将本次提示词的前缀存入缓存,以备后续请求使用。

系统会定期清理长期未使用的缓存数据。上下文缓存命中概率并非 100%,即使请求上下文完全一致,仍可能未命中,具体命中概率由系统判定。

支持的模型

  • Unisound 系列:Unisound U2
  • DeepSeek 系列:DeepSeek-V4-Flash, DeepSeek-V4-Pro
  • Kimi 系列:kimi-k2.5, kimi-k2.6
  • GLM 系列:glm-5.2, glm-5.1, glm-5
  • MiniMax 系列:MiniMax-M2.5
  • Qwen(通义千问)系列:qwen3.7-plus, qwen3.7-max-2026-06-08

调用示例

如果你的项目已经接入 OpenAI SDK 或 Anthropic SDK,把 base_urlmodel 换成下方的值即可直接复用,无需迁移到新 SDK。

OpenAI 兼容
# 首次使用前请先安装 OpenAI SDK:`pip install openai`
from openai import OpenAI

client = OpenAI(
    base_url="https://maas-api.unisound.com/v1",
    api_key="<API_KEY>",
)

# 模拟的代码仓库内容,最小可缓存提示词长度为 1024 Token
long_text_content = "<Your Code Here>" * 400

# 发起请求的函数
def get_completion(user_input):
    messages = [
        {
            "role": "system",
            "content": [
                {
                    "type": "text",
                    "text": long_text_content,
                    # 在此处放置 cache_control 标记,将创建从 messages 数组的开头到当前 content 所在位置的所有内容作为缓存块。
                    "cache_control": {"type": "ephemeral"},
                }
            ],
        },
        # 每次的提问内容不同
        {
            "role": "user",
            "content": user_input,
        },
    ]
    completion = client.chat.completions.create(
        model="qwen3.7-max",
        messages=messages,
    )
    return completion

# 第一次请求
first_completion = get_completion("这段代码的内容是什么")
print(f"第一次请求创建缓存 Token:{first_completion.usage.prompt_tokens_details.cache_creation_input_tokens}")
print(f"第一次请求命中缓存 Token:{first_completion.usage.prompt_tokens_details.cached_tokens}")
print("=" * 20)
# 第二次请求,代码内容一致,只修改了提问问题
second_completion = get_completion("这段代码可以怎么优化")
print(f"第二次请求创建缓存 Token:{second_completion.usage.prompt_tokens_details.cache_creation_input_tokens}")
print(f"第二次请求命中缓存 Token:{second_completion.usage.prompt_tokens_details.cached_tokens}")

返回结果

第一次请求创建缓存 Token:1605
第一次请求命中缓存 Token:0
====================
第二次请求创建缓存 Token:0
第二次请求命中缓存 Token:1605