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

OpenAI 兼容模式
OpenAI 兼容模式处理一次请求的完整链路:
-
请求接入 — 接收 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、何时写入缓存。
OpenAI 兼容模式 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"
}