缓存

在重复性强的 AI 请求场景,AI网关现已全面升级缓存能力,通过Redis精确缓存与DashVector语义缓存的双引擎协同,实现对大语言模型(LLM)调用的降本增效。本文将为您解析语义化缓存策略和精确缓存策略的功能优势及配置方法。

语义化缓存关键概念说明

为帮助您更好理解语义化缓存机制,以下为关键概念的说明:

向量嵌入

  • 语义缓存的核心在于通过向量技术实现"意图级"匹配。当用户发起新请求时,系统首先会将文本通过文本向量化转化为高维向量,这个过程称为向量嵌入

  • 这些向量能够精准捕捉文本的语义特征,比如"苹果手机"和"iPhone"虽然文字不同,但它们的向量距离会非常接近。这种向量化表示突破了传统精确缓存对文字完全一致的限制,让系统能理解"明天北京天气"与"北京未来24小时气象预报"的语义关联。

向量比较

  • 在向量生成后,系统会通过余弦相似度算法计算新请求与历史缓存的向量夹角。当相似度达到预设阈值(建议0.8~0.9,可按需调整),就会触发缓存响应。

  • 这种机制让系统能智能识别同义表达,例如在电商客服场景中,用户输入"这个快递什么时候到?""预计送达时间是什么时候?"等不同表述,系统都能匹配到同一缓存答案:"根据物流信息,您的包裹将在明天下午3点前送达。"

向量数据库

为了实现高效的向量管理,我们采用DashVector向量数据库。这类数据库通过分层聚类算法(HNSW)实现百万级向量的毫秒级检索,同时具备动态更新能力。相比传统精确缓存,语义缓存不仅支持无限语义变体的匹配,还能通过共享相似语义的存储空间提升资源利用率。

策略对比

对比维度

传统精确缓存

语义化缓存

匹配方式

字符串完全一致。

向量空间距离判定(余弦相似度)。

容错能力

不识别同义/近义表达。

支持同义词、句式变体等模糊匹配。

响应速度

毫秒级(本地Key-Value查询)。

毫秒级(向量数据库近邻搜索)。

典型场景

标准FAQ、固定参数接口调用。

自然语言指令、多轮对话、模糊查询。

成本效益

适合高频重复请求。

适合语义多样性高、意图相近的场景。

功能优势

  • 双模缓存体系:根据业务需求灵活选择两种缓存并动态调整匹配阈值。

    1. 精确缓存:基于RedisKey-Value存储架构,对完全相同的请求实现毫秒级响应。

    2. 语义缓存:通过DashVector向量数据库(阿里云向量检索服务),对语义相近请求进行智能匹配(相似度阈值可调),突破传统字符串匹配局限。

  • 减少重复计算:对于相同的AI请求,直接返回缓存中的响应数据,避免重复调用大语言模型。

  • 性能提升维度:通过快速从缓存中获取结果,显著降低响应时间以及后端服务器的负载压力。通过语义缓存可以实现"意图级"响应,显著提升用户的满意度和体验。

  • 场景覆盖扩展:适配客服系统、知识库查询等标准场景,支持自然语言指令的变体处理(如"明天天气""未来24小时气象预报")。

  • 日志监控:提供缓存命中率指标分析。

操作步骤

  1. AI 网关控制台的实例页面,选择您实例所在的地域。

  2. 进入目标实例页面,选择LLM API。在LLM API列表中,单击目标API,进入目标API详情页面。

  3. 选择策略与插件页签,开启缓存

  4. AI 网关已全面升级缓存能力,支持以下两种缓存方式进行缓存。您需要根据策略对比选择适合的缓存方式。

    语义化缓存

    重要

    携带请求头x-higress-skip-ai-cache: on时,当前请求将不会使用缓存中的内容,而是直接转发给后端服务,同时也不会缓存该请求返回响应的内容。

    image

    选择语义化缓存配置:

    • 缓存键生成策略:选择控制台默认的只取最新提问,或根据需要选择整合历史提问

    • 文本向量化配置

      • AI 服务:选择您创建好的AI 服务。若没有AI 服务,单击创建服务,创建一个新的AI 服务。

      • 模型名称:选择您计划使用的模型名称。

      • 超时时间:设置超时时间,默认5000ms。

    • 向量数据库配置

      • 服务提供者类型:若之前没有开通向量检索服务Dashvector,单击前往控制台,跳转至向量检索服务的服务开通页面进行开通。具体流程为:创建Cluster > 创建API Key > 创建Collection,记录Collection名称用于后续参数设置。

        重要

        创建Collection时距离度量方式选择Cosine,向量维度要与文本向量化模型的维度对应。通用文本向量可以查看到百炼平台文本向量化模型的输出向量维度。

      • 服务地址:输入您的Dashvector服务地址。

      • Collection名称:输入您创建好的Collection的名称。

      • API Key:访问凭证。可以参考API-KEY管理

      • 向量相似度阈值:该值决定系统对查询和缓存内容的匹配的严格程度。取值范围为(0,1),建议您取值为0.8或者0.9,较大的值表示更大的语义相似性。详细信息,请参考向量相似度阈值配置指南

      • 超时时间:设置超时时间,默认3000ms。

    精确缓存

    重要
    • 请前往Redis控制台添加白名单。在Redis控制台中,您需要将网关实例的VPC网段添加至白名单。

    • 携带请求头x-higress-skip-ai-cache: on时,当前请求将不会使用缓存中的内容,而是直接转发给后端服务,同时也不会缓存该请求返回响应的内容。

    image

    选择精确缓存配置:

    • 缓存键生成策略:选择控制台默认的只取最新提问,或根据需要选择整合历史提问

    • Redis缓存配置

      • Redis服务地址:输入您的Redis服务地址。

      • 端口号:输入您的端口号。

      • 访问方式:选择Redis服务访问方式,支持账号+密码登录密码登录免密登录三种方式。

      • 数据库账号:若选择账号+密码登录的访问方式,需要您输入数据库账号。

      • 数据库密码:若选择账号+密码登录或密码登录的访问方式,需要您输入数据库密码。

      • 数据库编号:指定的数据库编号。

      • 缓存时长(秒):缓存时长默认为1800秒,在缓存时长内,如果API接收到相同的AI请求,则会跳过LLM请求,直接返回缓存的响应数据。

向量相似度阈值配置指南

核心概念

向量相似度阈值是控制语义缓存匹配灵敏度的关键参数,决定系统匹配查询与缓存内容的严格程度。

  • 取值范围:介于0.0(完全不相似)到1.0(完全相似)之间。

  • 建议范围0.8 ~ 0.9(根据业务需求调整),不建议低于0.8。

  • 阈值越低(如0.75):即使用户表述方式不同,只要语义相近就会返回缓存结果。

  • 阈值越高(如0.99):仅当用户使用几乎完全相同的表述才返回缓存结果。

为什么建议不低于0.8?

当阈值低于0.8时,系统可能将不相关的查询误判为匹配。这会引发 "假阳性" 问题(系统错误地返回不相关结果),影响用户体验或业务准确性。

效果对比示例

示例配置

相似度

查询示例

特征说明

  • 百炼文本向量化模型text-embedding-v4 (1024维)

  • 缓存键生成策略:只取最新提问

  • 向量相似度阈值0.85

1.0

“我的快递什么时候到?”

以此条目作为比较基准。

0.89

“我的快递预计送达时间是什么时候?”

匹配“我的快递什么时候到?”,命中。

0.86

“我的快递今天能不能送到?”

匹配“我的快递什么时候到?”,命中。

0.83

“我的快递今天能送到哪里?”

不能命中。

调优建议

  1. 基准测试:您可以从默认值0.8开始,逐步降低或升高阈值观察缓存命中情况变化。

  2. 场景适配

    • 对时效性敏感的查询(如实时物流跟踪):建议相似度阈值高些。

    • 对标准化回答要求高的场景(如常见问题应答):建议相似度阈值低些。

  3. 性能平衡:降低阈值,将增加LLM调用次数。

典型问题

Q:如何判断最优阈值?

A:通过A/B测试对比:

  • 计算缓存命中率 vs LLM调用成本。

  • 收集用户对重复内容的投诉率(如"为什么我的新问题返回了旧答案?")。

  • 监控关键查询的响应时间波动(如"实时查询" vs "历史查询")。

建议定期(如每月)根据最新业务数据重新评估阈值设置,特别是在高峰期,可适当降低阈值以应对激增的查询量。

缓存命中率

重要

请确保在查询之前已经开通了日志服务,只能查到开通日志服务之后的缓存命中率信息。

缓存命中率查询条件(目前支持的查询粒度为网关级别),以下是查询示例代码:

cluster_id:{your-gatewayId} and inner-ai-cache-{your-gatewayId} | SELECT 
SUM(CASE WHEN content LIKE '%cache hit for key%' OR content LIKE '%key accepted%' THEN 1 ELSE 0 END) AS hit_count,
SUM(CASE WHEN content LIKE '%cache miss for key%' OR content LIKE '%score not meet the threshold%' THEN 1 ELSE 0 END) AS miss_count,
SUM(CASE WHEN content LIKE '%cache hit for key%' OR content LIKE '%key accepted%' THEN 1 ELSE 0 END) * 100.0 / 
NULLIF(SUM(CASE WHEN content LIKE '%cache hit for key%' OR content LIKE '%key accepted%' OR content LIKE '%cache miss for key%' 
           OR content LIKE '%score not meet the threshold%' THEN 1 ELSE 0 END), 0) AS hit_rate
  • {your-gatewayId}替换为您的网关实例ID,注意前一处替换需要保留gw-前缀,后一处替换不用保留。从缓存开关按钮处进入插件日志查询日志系统查询框内会自带cluster_id限制,此时只需将后续的查询语句粘贴到其后即可。image

  • 缓存命中率查询效果。

    image.png

效果展示

  • 开启精确缓存时,只匹配完全相同的查询:image

  • 开启语义化缓存时,语义相似的查询也可以匹配,语义相似度低于阈值则不匹配:

    image

    image