本文介绍如何通过 LangCache 兼容模式,将 Tair 语义缓存网关接入您自建的 Agent 系统,实现对话加速。LangCache 兼容模式提供独立的缓存读写 API,适用于需要自行控制缓存逻辑的场景。
模式说明
LangCache 兼容模式与 OpenAI 兼容模式的核心区别:
|
对比项 |
OpenAI 兼容模式 |
LangCache 兼容模式 |
|
工作方式 |
代理 LLM 调用,自动缓存。 |
仅提供缓存 API,不代理 LLM。 |
|
接入方式 |
替换 Base URL 即可。 |
在代码中主动调用缓存 API。 |
|
适用场景 |
使用现成 Agent 框架(如 OpenClaw、Hermes)或标准 OpenAI 协议客户端。 |
自建 Agent 系统,需灵活控制缓存策略。 |
|
控制粒度 |
全自动,开发者无需关注缓存逻辑。 |
开发者完全控制何时读缓存、何时写缓存。 |
选择建议:如果您的 Agent 系统有自己的 LLM 调用链路,且希望精确控制哪些请求走缓存、哪些不走,请选择 LangCache 兼容模式。
前提条件
|
条件 |
说明 |
|
语义缓存实例 |
已完成创建并处于运行中状态。若未创建,请参见语义缓存实例开通说明。 |
|
接入信息 |
已获取服务地址(Base URL)、API Key 和 Cache ID。 |
|
网络访问 |
若从非 VPC 环境访问(如本地开发机),已申请公网访问地址。 |
|
开发环境 |
已具备 Python 开发环境。 |
步骤一:获取接入信息
-
登录 Tair 控制台,在左侧导航栏单击Tair 语义缓存网关实例。
-
在实例列表中,单击目标实例名称,进入实例详情页。
-
在接入信息区域,获取 Base URL 和 API Key。
-
进入插件管理页签,在语义缓存插件区域获取 Cache ID。
信息
用途
格式示例
服务地址(Endpoint/Base URL)
API 请求的目标地址
https://tg-bp1******.redis.rds.aliyuncs.comAPI Key
身份认证
sk-****Cache ID
标识缓存实例,用于 API 路径
r-bp1xxxxxx
Cache ID 需要在实例详情页的插件管理页面中获取,不同于实例 ID。若需公网访问,在网络访问区域单击公网访问右侧的申请按钮;公网地址与内网地址不同,请确认使用与网络环境匹配的地址。
步骤二:理解接入逻辑
LangCache 兼容模式不代理 LLM 调用。您需要在自己的 Agent 代码中实现以下流程:
用户提问
│
▼
搜索缓存(POST /entries/search)
│
├── 命中 → 直接返回缓存中的回答(毫秒级)
│
└── 未命中 → 调用您自己的 LLM 获取回答
│
▼
写入缓存(POST /entries)
│
▼
返回 LLM 回答给用户
核心 API 只有两个(其余 API 接口可参考技术架构与接口说明):
|
API |
用途 |
端点 |
|
搜索缓存 |
查找是否有语义相似的已缓存回答。 |
|
|
插入缓存 |
将新的问答对写入缓存。 |
|
步骤三:接入代码实现
以下以 Python SDK 为例演示完整接入流程。
Python SDK
安装 SDK:
pip install langcache
完整示例:
from langcache import LangCache
from openai import OpenAI # 以 OpenAI SDK 调用 LLM 为例
# ============ 配置信息 ============
LANGCACHE_BASE_URL = "https://tg-xxxxxx.redis.rds.aliyuncs.com"
LANGCACHE_API_KEY = "sk-xxxxxx"
CACHE_ID = "r-bp1xxxxxx"
# 您自己的 LLM 配置(语义缓存未命中时调用)
LLM_API_KEY = "<Your-LLM-API-Key>"
LLM_BASE_URL = "<Your-LLM-Base-URL>"
LLM_MODEL = "<Your-LLM-Model>"
# ============ 初始化客户端 ============
cache_client = LangCache(
server_url=LANGCACHE_BASE_URL,
api_key=LANGCACHE_API_KEY,
cache_id=CACHE_ID,
)
llm_client = OpenAI(
api_key=LLM_API_KEY,
base_url=LLM_BASE_URL,
)
# ============ 核心逻辑 ============
def ask(question: str) -> str:
"""带语义缓存的问答函数"""
# 第一步:搜索缓存
search_result = cache_client.search(prompt=question)
if search_result.data:
# 缓存命中,直接返回
print(f"[缓存命中] 相似度: {search_result.data[0].similarity}")
return search_result.data[0].response
# 第二步:缓存未命中,调用 LLM
print("[缓存未命中] 调用 LLM...")
completion = llm_client.chat.completions.create(
model=LLM_MODEL,
messages=[{"role": "user", "content": question}],
)
answer = completion.choices[0].message.content
# 第三步:将问答对写入缓存
cache_client.set(prompt=question, response=answer)
return answer
# ============ 使用示例 ============
if __name__ == "__main__":
# 首次提问(走 LLM)
print(ask("什么是语义缓存?"))
# 语义相似的提问(走缓存,毫秒级返回)
print(ask("语义缓存是什么意思?"))
其他接入方式
除 Python SDK 外,您还可以通过以下方式接入:
-
JavaScript/Node.js SDK:
npm install @redis-ai/langcache -
HTTPS API 直接调用:适用于任何编程语言。
详细的 API 接口规范、请求参数和响应格式,请参见技术架构与接口说明。
步骤四:验证缓存效果
完成代码接入后,按以下方式验证缓存是否正常工作:
-
发送一个问题(如
什么是 Redis Cluster),观察是否正常返回 LLM 回答。 -
发送一个语义相似但表述不同的问题(如
Redis Cluster 是什么),观察:-
返回内容是否与第一次一致。
-
响应速度是否显著加快(从数十秒缩短至毫秒级)。
-
若第二次请求快速返回且内容一致,说明语义缓存已正常工作。
注意事项
|
注意项 |
说明 |
|
服务端口 |
LangCache 兼容模式为 HTTPS 服务,不是 Redis 端口 6379。 |
|
公网与内网 |
公网地址和内网地址不同,请确认使用与网络环境匹配的地址。API Key 不受影响。 |
|
Cache ID |
在实例详情页的插件管理中获取(以 |
|
搜索策略 |
默认按 |
|
相似度阈值 |
默认 0.85,可在搜索请求中通过 |
相关操作
-
使用 Attributes 实现多租户隔离:在插入和搜索时附加
attributes字段(如{"tenant_id": "xxx"}),不同 attributes 值的缓存数据相互隔离。注意:attributes 字段名需在创建 Cache 时预先声明。 -
设置缓存过期时间(TTL):在插入缓存时通过
ttlMillis参数设置单条过期时间(毫秒),或在控制台配置全局 TTL。 -
删除单条缓存:对过时或错误的缓存,通过
DELETE /v1/caches/{cacheId}/entries/{entryId}单独删除。 -
清空全部缓存:模型升级后旧答案不再适用时,通过
POST /v1/caches/{cacheId}/flush重建缓存(不可逆)。 -
调整相似度阈值:阈值越低命中率越高但可能出现误匹配,阈值越高越精确但命中率下降。
-
查看完整 API 能力:参见技术架构与接口说明。