缓存对大型语言模型 API 请求的响应

APPLIES TO:所有API Management层

使用 llm-semantic-cache-lookup 策略根据提示与以前的请求的向量邻近度以及指定的分数阈值,对配置的外部缓存对大型语言模型 (LLM) API 请求的响应执行缓存查找。 响应缓存可以降低后端 LLM API 需要满足的带宽和处理能力要求,并可以减小 API 使用者能够察觉到的延迟。

注释

  • 此策略必须有相应的大型语言 API 请求的缓存响应策略。
  • 由于语义缓存基于相似性(不完全匹配)返回响应,因此它可以显示当前请求不正确、过时或不安全的响应。 请仔细评估此功能,了解工作负荷并包括安全措施。

注释

按照策略声明中提供的顺序设置策略的元素和子元素。 详细了解 如何设置或编辑API Management策略

支持的模型

将策略与添加到Azure API Management的 LLM API 配合使用,这些 API 可通过 Azure AI 模型推理 API 或使用通过第三方推理提供程序提供的 OpenAI 兼容模型。

政策声明

<llm-semantic-cache-lookup
    score-threshold="score threshold to return cached response"
    embeddings-backend-id ="backend entity ID for embeddings API"
    embeddings-backend-auth ="system-assigned"             
    ignore-system-messages="true | false"      
    max-message-count="count" >
    <vary-by>"expression to partition caching"</vary-by>
</llm-semantic-cache-lookup>

特性

Attribute Description 必选 违约
score-threshold 分数阈值定义传入提示必须与缓存的提示匹配以返回其存储的响应的方式。 该值范围为 0.0 到 1.0。 较低的值要求匹配的语义相似性更高。 是的 不适用
embeddings-backend-id 后端 嵌入 API 调用的 ID。 是的 不适用
embeddings-backend-auth 用于嵌入 API 后端的身份验证。 是的。 必须设置为 system-assigned 不适用
ignore-system-messages 布尔值。 设置为 true (建议),在评估缓存相似性之前,从聊天完成提示中删除系统消息。
max-message-count 如果指定,则为剩余的对话消息数,在此消息数之后将跳过缓存。 不适用

Elements

姓名 Description 必选
vary-by 在运行时确定的自定义表达式,其值用于缓存分区。 如果添加了多个 vary-by 元素,则连接值以创建唯一组合。

用法

  • 策略节:入站
  • 策略范围:全局、产品、API、操作
  • 网关: 经典、v2、消耗、自承载

使用注意事项

  • 此策略只能在策略部分中使用一次。
  • 微调基于应用程序的值 score-threshold ,以确保使用正确的敏感度来确定何时返回查询的缓存响应。 从低值(如 0.05)开始,调整以优化缓存命中与未命中的比率。
  • 评分阈值超过 0.2 可能会导致缓存不匹配。 考虑对敏感用例使用较低的值。
  • 通过指定具有特定用户或用户组标识符的 vary-by,控制跨用户access来缓存条目。
  • 嵌入模型应有足够的容量和足够的上下文大小来容纳提示量和提示。
  • 建议在任何缓存查找后立即配置 速率限制 策略(或 按键速率限制 策略)。 这有助于防止后端服务在缓存不可用时过载。

例子

相应的 llm-semantic-cache-store 策略的示例

以下示例演示如何将 llm-semantic-cache-lookup 策略与策略一起使用 llm-semantic-cache-store ,以语义方式检索具有相似性分数阈值为 0.05 的类似缓存响应。 缓存值按调用方订阅 ID 进行分区。

注释

在缓存查找后添加 速率限制 策略(或 按密钥限制速率限制 策略),以帮助限制调用次数,并防止缓存不可用时后端服务过载。

<policies>
    <inbound>
        <base />
        <llm-semantic-cache-lookup
            score-threshold="0.05"
            embeddings-backend-id ="llm-backend"
            embeddings-backend-auth ="system-assigned" >
            <vary-by>@(context.Subscription.Id)</vary-by>
        </llm-semantic-cache-lookup>
        <rate-limit calls="10" renewal-period="60" />
    </inbound>
    <outbound>
        <llm-semantic-cache-store duration="60" />
        <base />
    </outbound>
</policies>

若要详细了解如何使用策略,请参阅: