本文介绍 Tair AI Gateway 的内部请求处理流程,以及两种语义缓存模式的完整接口规范、配置参数和错误码。
请求处理流程

Tair 全托管模式
全托管模式处理一次请求的完整链路:
请求接入 — 接收 OpenAI 兼容格式的请求。
Key 提取 — 通过 GJSON PATH 表达式从请求 JSON 中提取缓存 Key(默认提取最后一条 user message)。
精确匹配 — 在 Tair 中查找完全一致的缓存。命中则直接返回(延迟约 1~2 ms)。
Embedding — 精确未命中时,调用 Embedding 模型将文本向量化。
语义检索 — 在 Tair Vector 中执行 KNN 近似搜索。
相似度判定 — 最相似结果达到阈值则返回缓存(延迟约 5~20 ms)。
LLM 回退 — 均未命中,请求透传至百炼平台获取推理结果。
缓存写入 — LLM 结果自动写入 Tair,后续相同/相似请求可复用。
LangCache 兼容模式
LangCache 模式仅提供缓存的增删查能力,不代理 LLM 调用。开发者通过 API 主动管理缓存条目,自行决定何时查询缓存、何时调用 LLM、何时写入缓存。
Tair 全托管模式 API
全托管模式兼容 OpenAI 协议,无需额外学习新 API。将现有代码中的Base URL和API Key指向替换成 AI 网关实例中的服务地址和API Key即可。
Chat Completions API
何时使用:标准多轮对话场景,兼容所有 OpenAI Chat 格式的请求。
POST /compatible-mode/v1/chat/completions示例:
curl -X POST http://<Base URL>/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer <API Key>" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.6-plus",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "什么是语义缓存?"}
]
}'Responses API
何时使用:简单单轮问答,无需维护 messages 数组。
POST /compatible-mode/v1/responses示例:
curl -X POST http://<Base URL>/compatible-mode/v1/responses \
-H "Authorization: Bearer <API Key>" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.6-plus",
"input": "简要介绍下语义缓存的工作原理"
}'百炼 DashScope API
何时使用:已使用百炼 SDK 的应用,不想切换到 OpenAI 格式。
POST /api/v1/services/aigc/text-generation/generation示例:
curl -X POST http://<Base URL>/api/v1/services/aigc/text-generation/generation \
-H "Authorization: Bearer <API Key>" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.6-plus",
"input": {
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "什么是向量检索?"}
]
},
"parameters": {"result_format": "message"}
}'SDK 接入
支持通过以下 SDK 接入,安装方式参见安装SDK:
OpenAI Python SDK / OpenAI Node.js SDK
DashScope Python SDK / DashScope Java SDK
公测期间,model选择仅支持qwen3.6-plus。
核心配置参数
参数 | 类型 | 说明 | 默认值 |
cache_strategy | String | 缓存策略: | exact_and_semantic |
cache_key_from | String | GJSON PATH,从请求 JSON 提取缓存 Key | messages.#.content(最后一条) |
cache_value_from | String | GJSON PATH,从响应 JSON 提取要缓存的内容 | choices.0.message.content |
similarity_threshold | Float | 语义匹配相似度阈值(0~1) | 0.85 |
index_from | Array | GJSON PATH 列表,提取向量索引名。不同索引的缓存数据相互隔离 | - |
cache.ttl | Integer | 精确缓存过期时间(秒),0 = 永不过期 | 0 |
vector.ttl | Integer | 向量索引过期时间(秒),0 = 永不过期 | 0 |
LangCache 兼容模式 API
所有接口基路径为 /v1/caches/{cacheId},其中 cacheId 为绑定的 Tair 实例 ID。
语义搜索
何时使用:查询缓存中是否存在与当前请求语义相似的已有回答。这是 LangCache 模式的核心操作——先搜索,命中则使用缓存,未命中则自行调用 LLM。
POST /v1/caches/{cacheId}/entries/search请求参数
参数 | 类型 | 必填 | 说明 |
prompt | String | 是 | 搜索文本,将被 Embedding 后进行匹配 |
similarityThreshold | Float | 否 | 本次搜索的相似度阈值,覆盖全局配置 |
attributes | Object | 否 | 元数据过滤条件(如按语言、主题过滤) |
searchStrategies | Array | 否 | 搜索策略,如 ["exact", "semantic"] |
响应示例
{
"data": [
{
"id": "5b84acef3ce360988d1b35adbaaaccb1",
"prompt": "Tell me how semantic caching works",
"response": "Semantic caching stores and retrieves data based on meaning rather than exact string matching.",
"attributes": {"language": "en", "topic": "cache"},
"similarity": 0.95,
"searchStrategy": "semantic"
}
]
}如果无命中结果,data 为空数组。
插入缓存
何时使用:调用 LLM 获得回答后,将问答对存入缓存供后续复用。
POST /v1/caches/{cacheId}/entries请求参数
参数 | 类型 | 必填 | 说明 |
prompt | String | 是 | 缓存 Key(原始问题文本) |
response | String | 是 | 缓存 Value(LLM 回答) |
attributes | Object | 否 | 元数据标签,可用于后续搜索过滤 |
ttlMillis | Integer | 否 | 过期时间(毫秒),覆盖全局 TTL 配置 |
响应
{
"entryId": "a1b2c3d4e5f6..."
}删除缓存条目
何时使用:某条缓存内容过时或错误,需要单独移除。
DELETE /v1/caches/{cacheId}/entries/{entryId}成功返回 HTTP 204(无响应体)。
清空缓存
何时使用:需要重建整个缓存(如模型升级后旧答案不再适用)。
POST /v1/caches/{cacheId}/flush成功返回 HTTP 204。
此操作不可逆,将清除该实例下所有缓存数据。
核心配置参数
参数 | 类型 | 说明 | 默认值 |
ttl_millis | Integer | 全局缓存过期时间(毫秒),0 = 永不过期 | 0 |
similarity_threshold | Float | 全局相似度阈值 | 0.85 |
search_strategies | Array | 默认搜索策略,如 ["exact","semantic"](先精确后语义) | ["exact","semantic"] |
SDK 接入
SDK | 语言 | 安装 |
Python |
| |
JavaScript |
|
错误码
状态码 | 说明 | 解决方案 |
400 | Invalid Request,请求参数错误 | 客户端侧修正请求格式 |
403 | Incorrect API key provided,apikey 错误 | 客户端侧修正请求中使用的 |
404 | Not Found,缓存实例或条目不存在 | 客户端侧修正请求 path 或 path 中的 cache id 字段 |
500 | Internal Server Error,服务端内部错误 | 百炼或 Tair 请求失败,可以重试 |
错误响应统一格式:
{
"title": "错误标题",
"status": 400,
"detail": "具体错误描述",
"instance": "/v1/caches/xxx/entries/search",
"type": "/errors/invalid-data"
}