Router API 参考
Semantic Router 提供了一个基于 gRPC 的 API,可与 Envoy 的外部处理 (ExtProc) 协议无缝集成。本文档涵盖了 API endpoint、请求/响应格式和集成模式。
API 概览
Semantic Router 作为一个 ExtProc 服务器运行,通过 Envoy 代理处理 HTTP 请求。它不直接公开 REST endpoint,而是处理通过 Envoy 路由的 OpenAI 兼容的 API 请求。
注意:除了 ExtProc 路径外,该项目还在 8080 端口启动了一个轻量级的 HTTP Classification API,用于健康/信息和分类工具。OpenAI 兼容的
/v1/models端点由该 HTTP API (8080) 提供,并可以通过路由规则在 Envoy (8801) 上有选择地公开。
端口和端点映射
-
8801 (HTTP, Envoy 公共入口)
- 典型的客户端入口,用于 OpenAI 兼容的请求,如
POST /v1/chat/completions。 - 如果添加了 Envoy 路由,可以将
GET /v1/models代理到 Router 8080;否则 8801 的/v1/models可能会返回 "no healthy upstream"。
- 典型的客户端入口,用于 OpenAI 兼容的请求,如
-
8080 (HTTP, Classification API)
GET /v1/models→ OpenAI 兼容的模型列表(包含合成的MoM)GET /health→ Classification API 健康状况GET /info/models→ 已加载的分类器模型 + 系统信息GET /info/classifier→ 分类器配置详情POST /api/v1/classify/intent|pii|security|batch→ 直接分类工具
-
50051 (gRPC, ExtProc)
- Envoy 外部处理 (ExtProc),用于
/v1/chat/completions的路径内分类/路由。 - 不是 HTTP 端口;无法直接通过 curl 访问。
- Envoy 外部处理 (ExtProc),用于
-
9190 (HTTP, Prometheus 指标)
GET /metrics→ Prometheus 抓取端点(全局进程指标)。
请求流程
OpenAI API 兼容性
路由处理标准的 OpenAI API 请求:
模型端点 (Models Endpoint)
列出可用模型,并包含一个合成的 "MoM" (Mixture of Models) 模型,该模型使用 Router 的 intent classification 来为每个请求选择最佳的基础模型。
- 端点:
GET /v1/models - 响应:
{
"object": "list",
"data": [
{ "id": "MoM", "object": "model", "created": 1726890000, "owned_by": "semantic-router" },
{ "id": "gpt-4o-mini", "object": "model", "created": 1726890000, "owned_by": "upstream-endpoint" },
{ "id": "llama-3.1-8b-instruct", "object": "model", "created": 1726890000, "owned_by": "upstream-endpoint" }
]
}
注意:
- 具体的模型列表来源于您在
config.yaml中配置的 vLLM 端点(见vllm_endpoints[].models)。 - 特殊的
MoM(Mixture of Models) 模型始终存在,并指示 Router 自动分类并路由到最佳后端模型。为了向后兼容,模型名称auto也被接受为别名。
聊天补全端点 (Chat Completions Endpoint)
端点: POST /v1/chat/completions
请求格式
{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "x^2 的导数是多少?"
}
],
"max_tokens": 150,
"temperature": 0.7,
"tools": [
{
"type": "function",
"function": {
"name": "calculator",
"description": "执行数学计算"
}
}
]
}
响应格式
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1677858242,
"model": "gpt-3.5-turbo",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "x^2 的导数是 2x。"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 8,
"total_tokens": 20
},
"routing_metadata": {
"selected_model": "mathematics",
"confidence": 0.96,
"processing_time_ms": 15,
"cache_hit": false,
"security_checks": {
"pii_detected": false,
"jailbreak_detected": false
}
}
}
路由 Header
路由在请求和响应中都会添加元数据 Header:
请求 Header(由路由添加)
| Header | 描述 | 示例 |
|---|---|---|
x-vsr-destination-endpoint | 选定的后端端点 | endpoint1 |
x-selected-model | 确定的模型类别 | mathematics |
x-routing-confidence | 分类置信度 | 0.956 |
x-request-id | 唯一请求标识符 | req-abc123 |
x-cache-status | 缓存命中/未命中状态 | miss |
响应 Header(由路由添加)
| Header | 描述 | 示例 |
|---|---|---|
x-processing-time | 总处理时间 (ms) | 45 |
x-classification-time | 分类时间 (ms) | 12 |
x-security-checks | 安全检查结果 | pii:false,jailbreak:false |
x-tools-selected | 选定的工具数量 | 2 |
健康检查 API
Router 提供用于监控的健康检查 endpoint:
Router 健康状况
端点: GET http://localhost:8080/health
{
"status": "healthy",
"version": "1.0.0",
"uptime": 3600,
"models": {
"category_classifier": "loaded",
"pii_detector": "loaded",
"jailbreak_guard": "loaded"
},
"cache": {
"status": "healthy",
"entries": 1247,
"hit_rate": 0.73
},
"endpoints": {
"endpoint1": "healthy",
"endpoint2": "healthy",
"endpoint3": "degraded"
}
}
指标 API (Metrics API)
提供兼容 Prometheus 的指标:
端点: GET http://localhost:9190/metrics
关键指标
# 请求指标
semantic_router_requests_total{endpoint="endpoint1",category="mathematics",status="success"} 1247
semantic_router_request_duration_seconds{endpoint="endpoint1"} 0.045
# 分类指标
semantic_router_classification_accuracy{category="mathematics"} 0.94
semantic_router_classification_duration_seconds 0.012
# 缓存指标
semantic_router_cache_hit_ratio 0.73
semantic_router_cache_size 1247
# 安全指标
semantic_router_pii_detections_total{action="block"} 23
semantic_router_jailbreak_attempts_total{action="block"} 5
# 错误指标
llm_request_errors_total{model="gpt-4",reason="timeout"} 12
llm_request_errors_total{model="claude-3",reason="upstream_5xx"} 3
llm_request_errors_total{model="phi4",reason="upstream_4xx"} 5
llm_request_errors_total{model="phi4",reason="pii_policy_denied"} 8
推理模式指标 (Reasoning Mode Metrics)
Router 公开了专用的 Prometheus 计数器,以监控跨模型家族的 reasoning mode 决策和 template 使用情况。这些指标由 Router 发送,可以由您的 Prometheus 服务器抓取。
-
llm_reasoning_decisions_total{category, model, enabled, effort}- 描述:按类别和所选模型记录的推理决策计数,包括是否启用推理以及应用的努力等级 (effort level)。
- 标签:
- category: 路由期间确定的类别名称
- model: 请求最终选择的模型
- enabled: 根据决策结果为 "true" 或 "false"
- effort: 启用时的努力等级(例如 low|medium|high)
-
llm_reasoning_template_usage_total{family, param}- 描述:特定模型家族模板参数应用于请求的次数统计。
- 标签:
- family: 规范化的模型家族(例如 qwen3, deepseek, gpt-oss, gpt)
- param: 应用的模板参数名称(例如 enable_thinking, thinking, reasoning_effort)
-
llm_reasoning_effort_usage_total{family, effort}- 描述:为给定模型家族设置推理努力等级的次数统计。
- 标签:
- family: 规范化的模型家族
- effort: 努力等级(例如 low|medium|high)
PromQL 示例:
# 按类别和模型划分的推理决策(最近 5 分钟)
sum by (category, model, enabled, effort) (
rate(llm_reasoning_decisions_total[5m])
)
# 按模型家族和参数划分的模板使用情况(最近 5 分钟)
sum by (family, param) (
rate(llm_reasoning_template_usage_total[5m])
)
# 按模型家族划分的努力等级分布(最近 5 分钟)
sum by (family, effort) (
rate(llm_reasoning_effort_usage_total[5m])
)