You need to enable JavaScript to run this app.
导航
Session 缓存
最近更新时间:2024.12.18 10:36:46首次发布时间:2024.12.18 10:36:46

Session 缓存(Session Cache,会话级别的缓存),是针对模型性能和成本的优化。它将Session中的上下文(Context)进行缓存(Caching),在多轮对话等场景中,可以减少计算和存储重复内容的开销。您开通 Session 缓存后,在多轮对话场景下模型的服务可以达到更低的时延,同时对于缓存中的内容使用也会给予您一定的折扣,进一步降低您使用模型推理服务的成本。

因为用到了缓存来存储您的上下文信息,您开通上下文缓存后,并使用了该功能后,会产生一定的存储费用。

应用场景

您可以在以下场景中使用 Session 缓存。

场景

场景说明

描述

客服聊天
用户在网站上与聊天机器人互动以解决问题。

对话会持续多个回合,聊天机器人收集信息并提供解决方案。

会话缓存存储对话历史记录,使机器人可以快速访问之前的消息并保持上下文,而无需重复处理整个对话。这提高了响应速度,并提供更无缝的客户体验。

互动式故事
用户玩一个基于文本的互动游戏,他们的选择会影响故事走向。

每个玩家的选择都会导致故事出现不同的分支,游戏需要记住过去的选择。

会话缓存存储玩家的进度和选择,使游戏可以快速重建叙事状态并提供相关选项,而无需在每次互动时重新计算整个故事线。

个性化辅导应用
学生使用人工智能辅导应用程序学习新科目。

辅导课程包括多个问题、答案和解释。

会话缓存存储学生的学习进度,包括之前的问题和回答。这使得辅导老师可以个性化学习体验,并根据学生的节奏和理解程度进行调整,而无需在每个步骤重新评估整个学习历史。

虚拟写作助手
用户使用人工智能写作助手来帮助起草电子邮件、文章或其他基于文本的内容。

用户提供反馈和修改意见给AI,通过多次迭代改进文本。

会话缓存保留写作过程的历史记录,使AI可以快速理解用户的风格偏好并结合反馈,而无需每次互动都从头重新处理整个文本。这加快了写作过程,并有助于保持语气和风格的一致性。

工作原理

基本流程

Session 缓存保存Context(上下文,通常指历史的对话记录),同时在后续的对话中复用这部分信息。简要的工作流程如下图所示:

  1. 创建一个会话级上下文缓存,唯一的Context ID 作为键(Key),方舟缓存会话上下文信息至关联的值(Value)。
  2. 方舟收到新请求时,会根据请求的Context ID匹配缓存中的上下文信息(历史对话)。
  3. 方舟只需计算和存储新输入的信息,再结合缓存中的上下文信息,交由模型推理。
  4. 模型输出回复信息,并将回复信息添加到Session缓存中,供下次请求时使用。

触发缓存上限

随着对话轮数增加,内容会达到 Session 缓存的上限。按照处理方式的不同,可以分为2种模式。

last_history_tokens模式

触发则滚动信息窗口,遵循先进先出的策略。触发缓存上限时,先删除最早的缓存对话记录(初始消息不会删除,即在创建session 缓存时写入缓存的信息不会删除),再存入新的对话信息。这个模式下,滚动数据不会产生额外的计算成本。

rolling_tokens模式

定量删除并重新计算,使用固定上下文长度 A 来限制Session 缓存上限,固定上下文长度 B 来控制删除上下文的长度。当达到 Session 缓存上限时,即 达到 A 长度时,会进行下面2个动作:

  1. 清除Session 缓存 B长度的陈旧消息(初始消息不会删除,即在创建session 缓存时的信息不会删除),为后续新的消息腾挪存储空间。
  2. 重新计算缓存中历史信息,以确保模型回复具有一致且连贯的理解。

触发 Session 缓存上限引起重新计算的轮次,会将保留的历史信息和新消息一样进行计算和存储。表现为此轮命中 Session 缓存的 token 比例降低为0,该轮未命中 token 会明显变高,后续又会趋于正常。

触发过期时间

Session 缓存未被使用时会开始计时,达到TTL(Time To Live),会被删除;如果中途被使用,那么此缓存 TTL 会被重置,并继续保留。

举例:您设置了Session 缓存的TTL 为2小时,Context,其中A 2个小时没被命中,B 中途1小时时刻命中。当前,A会被从缓存中删除,B TTL还有1小时。

注意

没有触发清除的 Session 缓存,均会占用缓存,从而产生存储费用。您可以根据自己业务合理设置TTL,保证请求的内容能享受命中 Session缓存,带来的低时延和低费用;又避免 Session 缓存删除前的长期空闲时间。

计费说明

计费单价请参见:模型服务计费

与未使用Session 缓存相比,模型服务费用会产生在:

  • 输入(元/千token):新的请求中您无需重新发送历史对话,输入 token 仅代表添加到正在进行的对话中的新文本。

    在rolling_tokens模式下触发重新计算时,会将保存的历史对话重新计算和缓存,与新输入内容一样计费。

  • 缓存命中(元/千token):缓存中使用的内容。方舟自动处理历史记录,并输入给模型,这部分内容即命中缓存内容,他们也会产生费用,但是优化了计算和读入缓存的开销,计费费率会显著低于新输入内容。
  • 存储(元/千token/小时):历史对话存储在 Session 缓存中,会产生存储费用。计算方式根据每个自然小时使用缓存的最大量乘以单价进行累加。
    举例说明(单价为虚拟单价,仅做举例使用):单价为0.000017元/千token/小时,第1小时Session缓存最大的缓存用量10k token,第2小时Session缓存最大的缓存用量15k token,那么存储费用为:
    0.000017*10+0.000017*15 = 0.000425 元

    注意

    • 在 Session 缓存创建即产生,直到该 Session 缓存被删除(一直未被使用,达 TTL 被删除),停止计费。
    • 存储费用在每个自然小时如8:00,9:00等整点出账,不足1小时按照1小时计算。
  • 输出(元/千token):模型根据输入信息生成的内容。计费方式与未使用Session 缓存的调用法师一致。

支持的模型

当前支持 Session 缓存的模型如下。

last_history_tokens模式

支持last_history_tokens模式的模型

模型名称

版本

上下文长度

Max Tokens
最大输出长度

TPM
每分钟Tokens处理数

RPM
每分钟处理请求数

模型说明

Doubao-pro-32k

character-241215

32k

4k

120w

15k

模型能力强大,回复质量高

rolling_tokens模式

支持rolling_tokens模式的模型

模型名称

版本

上下文长度

Max Tokens
最大输出长度

TPM
每分钟Tokens处理数

RPM
每分钟处理请求数

模型说明

Doubao-pro-32k

241215

32k

4k

120w

15k

模型能力强大,回复质量高

前提条件

快速开始

1.创建 Session 缓存

使用 Session 缓存前,您需要调用ContextCreate-创建上下文缓存接口创建缓存,并写入初始信息。后续只要在ContextChatCompletions-上下文缓存对话接口中引入此缓存,即可让方舟为您管理历史对话以及享受缓存命中带来的性能加速和费用折扣。

curl --location 'https://ark.cn-beijing.volces.com/api/v3/context/create' \
--header 'Authorization: Bearer <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{ 
    "model":"<YOUR_ENDPOINT_ID>", 
    "messages":[ 
        {"role":"system","content":"你是李雷,你只会说“我是李雷”"}
     ], 
     "ttl":3600, 
     "mode": "session"
}'

其中:

  • <YOUR_API_KEY>替换为您的API Key。
  • <YOUR_ENDPOINT_ID>替换为您的推理接入点ID。
  • "ttl":3600代表 Session 缓存 TTL,当前为 3600 秒。
  • "mode": "session"代表使用的 Session 缓存模式。

模型回复预览

{
    "id": "<YOUR_CONTEXT_ID>",
    "model": "<YOUR_ENDPOINT_ID>",
    "ttl": "3600",
    "mode": "session",
    "truncation_strategy": {
            "type": "last_history_token",
            "last_history_token": 4096
            },
    "usage": {
        "prompt_tokens": 18,
        "completion_tokens": 0,
        "total_tokens": 18,
        "prompt_tokens_details": {
            "cached_tokens": 0
        }
    }
}

返回的创建的Session缓存的基本信息,其中<YOUR_CONTEXT_ID>是创建的 Session 缓存的ID,格式类似ctx-****,需要记录并在后面请求模型推理服务时使用。

2.使用 Session 缓存 进行对话

我们使用接口ContextChatCompletions-上下文缓存对话,来进行使用 Session 缓存的对话。

curl --location 'https://ark.cn-beijing.volces.com/api/v3/context/chat/completions' \
--header 'Authorization: Bearer <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
    "context_id": "<YOUR_CONTEXT_ID>",
    "model": "<YOUR_ENDPOINT_ID>",
    "messages":[
        {
            "role":"user",
            "content": "你好"
        }
    ]
}'

其中

  • <YOUR_API_KEY>替换为您的API Key。
  • <YOUR_CONTEXT_ID>替换为之前创建的 Session缓存 ID。
  • <YOUR_ENDPOINT_ID>替换为您的推理接入点ID。

模型回复预览

{
  "id": "****",
  "object": "chat.completion",
  "created": 167765****,
  "model": "<YOUR_ENDPOINT_ID>",
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "我是李雷。",
    },
    "logprobs": null,
    "finish_reason": "stop"
  }],
 "usage": {
    "prompt_tokens": 28,
    "completion_tokens": 5,
    "total_tokens": 33,
    "prompt_tokens_details": {
      "cached_tokens": 18
  }
}

使用限制
  • 上下文缓存API为有状态API,不支持并发调用。
  • 不支持 Partial 模式(又称Prefill Response),即messages数组中的最后一条消息role可以是usersystem,而不能为assistant

典型使用

控制 Session 缓存上限

仅last_history_token模式支持。

您可以自行控制缓存上限。根据需要选择适合的缓存上限,可以保障命中的 token 比例高,同时又有一个合适的存储成本,达到一个合适性价比。

curl --location 'https://ark.cn-beijing.volces.com/api/v3/context/create' \
--header 'Authorization: Bearer <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{ 
    "model":"<YOUR_ENDPOINT_ID>", 
    "messages":[ 
        {"role":"system","content":"你是李雷,你只会说“我是李雷”"}
     ], 
     "ttl":3600, 
     "mode": "session"
     {
     "truncation_strategy":{
         "type": "last_history_tokens",
         "last_history_tokens": 4096
    }
}'

其中:

  • <YOUR_API_KEY>替换为您的API Key。
  • <YOUR_ENDPOINT_ID>替换为您的推理接入点ID。
  • "ttl":3600代表 Session 缓存 TTL,当前为 3600 秒。
  • "mode": "session"代表使用的 Session 缓存模式。
  • "type":"last_history_tokens"代表使用了last_history_tokens模式
  • "last_history_tokens": 4096 代表缓存最大长度为为 4096 个token,您根据自己的业务情况调整值大小。

手动管理 Session 缓存

使用了支持rolling_tokens模式的模型,可以通过下面方法创建Session缓存,并可以根据需要来启用自动管理和手动管理Session缓存。

curl --location 'https://ark.cn-beijing.volces.com/api/v3/context/create' \
--header 'Authorization: Bearer <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{ 
    "model":"<YOUR_ENDPOINT_ID>", 
    "messages":[ 
        {"role":"system","content":"你是李雷,你只会说“我是李雷”"}
     ], 
     "ttl":3600, 
     "mode": "session",
     "truncation_strategy":{ 
         "type":"rolling_tokens", 
         "rolling_tokens": false 
         }
}'

设置truncation_strategy.typerolling_tokens,即可创建 Session 缓存。

  • 当您希望自行控制触发 Session 缓存上限时的处理,可以将truncation_strategy.rolling_tokens设置为false,在历史消息长度超过上下文长度时模型会停止输出,并在返回信息中返回finish_reasonlength,您获取此信息后可以根据您按需进行后续处理。

当您希望自动控制触发 Session 缓存上限时的处理,可以将truncation_strategy.rolling_tokens设置为true,这是会按照默认的方式进行处理,处理方式请参见rolling_tokens模式

相关文档