Skip to content

想在 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 时使用这个 ID
  • pricing:USD 字符串格式(避免浮点精度问题),每 1 个 token 的价格
  • 有效量化值:int4int8fp4fp6fp8fp16bf16fp32
  • 有效采样参数:temperaturetop_ptop_kmin_ptop_afrequency_penaltypresence_penaltyrepetition_penaltystopseedmax_tokenslogit_bias
  • 有效功能:toolsjson_modestructured_outputslogprobsweb_searchreasoning

分级定价

对于按上下文长度定价的模型(如长上下文价格更高),可用数组形式提供定价:

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: 分级定价的第二档 imagerequest 字段会被忽略吗?

A: 是的。imagerequest 字段只在第一档(基础定价)有效,第二档(长上下文定价)中填写这两个字段会被忽略。