本文介绍AI 缓存。
简介
LLM 结果缓存插件,默认配置方式可以直接用于OpenAI协议的结果缓存,同时支持流式和非流式响应的缓存。
配置说明
Name | Type | Requirement | Default | Description |
cacheKeyFrom.requestBody | string | optional | "messages.@reverse.0.content" | 从请求 Body 中基于 GJSON PATH 语法提取字符串。 |
cacheValueFrom.responseBody | string | optional | "choices.0.message.content" | 从响应 Body 中基于 GJSON PATH 语法提取字符串。 |
cacheStreamValueFrom.responseBody | string | optional | "choices.0.delta.content" | 从流式响应 Body 中基于 GJSON PATH 语法提取字符串。 |
cacheKeyPrefix | string | optional | "higress-ai-cache:" | Redis缓存Key的前缀。 |
cacheTTL | integer | optional | 0 | 缓存的过期时间,单位是秒,默认值为0,即永不过期。 |
redis.serviceName | string | requried | - | Redis 服务名称,带服务类型的完整 FQDN 名称,例如 my-redis.dns、redis.my-ns.svc.cluster.local。 |
redis.servicePort | integer | optional | 6379 | Redis 服务端口。 |
redis.timeout | integer | optional | 1000 | 请求Redis 的超时时间,单位为毫秒。 |
redis.username | string | optional | - | 登录 Redis 的用户名。 |
redis.password | string | optional | - | 登录 Redis 的密码。 |
returnResponseTemplate | string | optional |
| 返回 HTTP 响应的模板,用 %s 标记需要被 cache value 替换的部分。 |
returnStreamResponseTemplate | string | optional |
| 返回流式 HTTP 响应的模板,用 %s 标记需要被 cache value 替换的部分。 |
配置示例
redis:
serviceName: my-redis.dns
timeout: 2000
进阶用法
当前默认的缓存 key 是基于 GJSON PATH 的表达式:
messages.@reverse.0.content
提取,含义是把 messages 数组反转后取第一项的 content。GJSON PATH 支持条件判断语法,例如希望取最后一个 role 为 user 的 content 作为 key,可以写成:
messages.@reverse.#(role=="user").content
。如果希望将所有 role 为 user 的 content 拼成一个数组作为 key,可以写成:
messages.@reverse.#(role=="user")#.content
。还可以支持管道语法,例如希望取到数第二个 role 为 user 的 content 作为 key,可以写成:
messages.@reverse.#(role=="user")#.content|1
。更多用法可以参考官方文档,可以使用GJSON Playground进行语法测试。