本文介绍如何通过 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 请求的目标地址
http://tk-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 LangCacheClient
from openai import OpenAI # 以 OpenAI SDK 调用 LLM 为例
# ============ 配置信息 ============
LANGCACHE_BASE_URL = "http://tk-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 = LangCacheClient(
base_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/langcacheHTTP API 直接调用:适用于任何编程语言。
详细的 API 接口规范、请求参数和响应格式,请参见技术架构与接口说明。
步骤四:验证缓存效果
完成代码接入后,按以下方式验证缓存是否正常工作:
发送一个问题(如
什么是 Redis Cluster),观察是否正常返回 LLM 回答。发送一个语义相似但表述不同的问题(如
Redis Cluster 是什么),观察:返回内容是否与第一次一致。
响应速度是否显著加快(从数十秒缩短至毫秒级)。
若第二次请求快速返回且内容一致,说明语义缓存已正常工作。
注意事项
注意项 | 说明 |
服务端口 | LangCache 兼容模式为 HTTP 服务(默认端口 80),不是 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 能力:参见技术架构与接口说明。