Appearance
想在 OpenRouter 上售卖推理服务的 provider 需满足五项要求:①List Models Endpoint(返回模型列表,含 pricing、modalities、supported_features 等字段,支持分级定价和废弃日期)→ ②自动充值或开票(让 OpenRouter 自动付款)→ ③可用率监控(95%+ 正常、80-94% 降级、<80% 只做 fallback;429/403 另行追踪)→ ④性能指标(TTFT 和吞吐量公开展示)→ ⑤Auto Exacto(tool-calling 流量按基准测试准确率、吞吐量、tool 成功率三个维度排名,使用 median+MAD 方法;非 tool 请求不受影响)。
如果你想成为 OpenRouter 的模型 provider,请先填写 合作申请表。
1. List Models Endpoint
实现一个返回所有可用模型的 endpoint:
json
{
"data": [
{
"id": "anthropic/claude-sonnet-4",
"hugging_face_id": "",
"name": "Anthropic: Claude Sonnet 4",
"created": 1690502400,
"input_modalities": ["text", "image", "file"],
"output_modalities": ["text", "image", "file"],
"quantization": "fp8",
"context_length": 1000000,
"max_output_length": 128000,
"pricing": {
"prompt": "0.000008",
"completion": "0.000024",
"image": "0",
"request": "0",
"input_cache_read": "0"
},
"supported_sampling_parameters": ["temperature", "stop"],
"supported_features": ["tools", "json_mode", "structured_outputs", "web_search", "reasoning"],
"description": "...",
"deprecation_date": "2025-06-01",
"openrouter": { "slug": "anthropic/claude-sonnet-4" },
"datacenters": [{ "country_code": "US" }]
}
]
}字段说明:
id:模型唯一标识,OpenRouter 调用你的 API 时使用这个 IDpricing:USD 字符串格式(避免浮点精度问题),每 1 个 token 的价格- 有效量化值:
int4、int8、fp4、fp6、fp8、fp16、bf16、fp32 - 有效采样参数:
temperature、top_p、top_k、min_p、top_a、frequency_penalty、presence_penalty、repetition_penalty、stop、seed、max_tokens、logit_bias - 有效功能:
tools、json_mode、structured_outputs、logprobs、web_search、reasoning
分级定价
对于按上下文长度定价的模型(如长上下文价格更高),可用数组形式提供定价:
json
{
"pricing": [
{
"prompt": "0.000002",
"completion": "0.000012",
"image": "0.01",
"request": "0",
"input_cache_read": "0.000001"
},
{
"prompt": "0.000004",
"completion": "0.000018",
"input_cache_read": "0.000002",
"min_context": 200000
}
]
}数组第一项为基础定价(输入 token 数 < min_context 时适用),第二项为长上下文定价(≥ min_context 时适用)。目前最多支持 2 个定价档。
废弃日期
计划下线的模型请添加 deprecation_date 字段(ISO 8601 格式 YYYY-MM-DD):
json
{
"id": "anthropic/claude-2.1",
"deprecation_date": "2025-06-01"
}OpenRouter 会自动显示废弃警告,过期模型可能从 marketplace 中隐藏。
2. 自动充值或开票
OpenRouter 需要能自动为推理付费,请提供自动充值或开票能力。
3. 可用率监控与流量路由
可用率计算: 成功请求数 ÷ 总请求数(排除用户错误)
影响可用率的错误: 401、402、404、所有 5xx、mid-stream 错误、带 error finish reason 的成功请求
不影响可用率的错误: 400(用户输入错误)、413(payload 过大)、429(单独追踪)、403 地域限制(单独追踪)
流量路由阈值:
| 可用率 | 状态 | 说明 |
|---|---|---|
| 最少 100 条请求 | — | 不足 100 条不计算可用率 |
| 95%+ | 正常 | 正常路由 |
| 80–94% | 降级 | 优先级降低 |
| <80% | 离线 | 只作为 fallback |
4. 性能指标
OpenRouter 在每个模型页面公开展示所有 provider 的 TTFT(首 token 延迟)和吞吐量(tokens/s)。
吞吐量 = 输出 token 数 ÷ 生成时间(包含 fetch latency、TTFT 和 streaming 时间)。
提升指标的建议:
- 负载大时尽早返回 429,不要排队等待
- token 生成后立即 stream 输出
- 对于耗时推理(如推理模型),通过 SSE comment 保持连接,避免 fetch timeout 触发 fallback
5. Auto Exacto:Tool-Calling 流量路由
Auto Exacto 对所有包含 tools 的请求自动运行,根据 provider 的 tool-calling 质量调整路由顺序。非 tool 请求不受影响。
排名依据
三类信号(均来自真实流量和评测):
- 吞吐量:从实际路由请求中实时测量的 tokens/s
- Tool 调用成功率:endpoint 完成 tool 调用的可靠性
- 基准测试数据:OpenRouter 对 provider endpoint 运行的内部评测
降级阈值(median + MAD 方法)
使用中位数 + 绝对中位差,而非简单平均值,避免极端值干扰:
| 指标 | 降级条件 | 原因 |
|---|---|---|
| 基准准确率 | 低于中位数 1 个标准差 | 分数聚集,小差距有意义 |
| 吞吐量 | 低于中位数 1.5 个标准差 | 自然波动需更宽容差 |
| Tool 成功率 | 低于中位数 2 个标准差 | 成功率接近 100%,需宽阈值 |
前提条件: 同一模型至少有 4 家 provider 才会计算统计阈值。数据不足时不触发降级。
provider 分三级: Good(足量数据且无信号低于阈值)→ Insufficient data(数据不足)→ Deprioritized(至少一个信号低于阈值)。
如何提升排名
- 确保 tool call 响应格式正确且稳定
- 优化吞吐量,尽快 stream 输出
- 负载大时尽早返回 429,保持指标健康
常见问题
Q: 如果我的 endpoint 频繁返回 429,会影响 Auto Exacto 排名吗?
A: 频繁的 429 会减少可用于评测的成功请求数,使 OpenRouter 难以收集足够的基准数据,导致 endpoint 长期处于"Insufficient data"级别(排在 Good 之后)。建议在容量允许的范围内,优先返回 429 而非排队降速,同时尽量提升整体可用容量。
Q: 基准测试数据从哪里查看?
A: 目前正在开发 provider dashboard,后续会开放。届时你可以查看你的 endpoint 在各个模型上的基准分数,也可以用相同的测试集在自己的环境中运行验证。
Q: 分级定价的第二档 image 和 request 字段会被忽略吗?
A: 是的。image 和 request 字段只在第一档(基础定价)有效,第二档(长上下文定价)中填写这两个字段会被忽略。