跳到正文

迁移指南从 OpenRouter

从 OpenRouter 迁移,如果你愿意,仍可保留 OpenRouter

OpenRouter 用一个账号和一个密钥提供来自众多厂商的模型,从其积分中扣费,也可以选择使用你自己的提供商密钥。INFRO 正好相反:每个请求都在你持有的提供商账号上运行。两者并不互斥,因为 OpenRouter 本身就是 INFRO 可连接的提供商之一。本页展示两种迁移方式:把 OpenRouter 作为你直连账号之外的一个上游,或者只使用直连账号。

Stripe 已同意收购(2026-08-19 宣布);截至 2026-10-19 尚无完成公告

INFRO 账号可自助开通。 模型目录、文档和 API 契约已公开,网关已部署,v1 之后的所有功能都标注为“后续”。 套餐与试用

现状

所有权

Stripe 于 2026-08-19 宣布已同意收购 OpenRouter。OpenRouter 自己的文章称,名称、产品和路线图保持不变,集成也不会改变。我们在 2026-10-19 查阅两家公司的页面时,双方都尚未发布完成公告。

由谁的账号处理请求

默认使用 OpenRouter 自己的提供商账号,从预付积分中扣费。使用 BYOK 时,会优先尝试你的提供商密钥;OpenRouter 的文档称,除非按密钥关闭,否则失败时可能回退到其共享容量。

迁移的部分

基础 URL 和密钥;models 改为 fallbacks;provider 路由改为路由规则或 routing.providers;user、session_id 和 trace 改为 metadata 或 INFRO 请求头。HTTP-Referer 和 X-OpenRouter-Title 删除。

OpenRouter 解决的是访问问题:一个账号,众多厂商。如果你面对的正是这个问题,它就是合适的产品,而你仍然可以在它前面放上 INFRO。

  • 你不想在每家厂商都开账号。INFRO 只在你持有的账号上运行,因此你调用的每个模型背后都需要一个提供商账号(OpenRouter 的账号可以是其中之一)。
  • 你按请求在众多开放权重模型的托管方之间按价格、吞吐量或延迟进行选择(provider.sort、max_price)。INFRO 没有按请求的价格或延迟排序;由路由规则设置顺序。
  • 你依赖 openrouter/auto,或承载系统提示词和参数的预设。INFRO 最接近的是带提示词分类器的路由规则,它挑选的是目标,而不是提示词。
  • 你现在就需要欧盟区域内路由。INFRO 的数据驻留在路线图上,目前不提供。

需要的修改,每项一行。未在此列出的内容都保持不变。

 OpenRouterINFRO
基础 URLhttps://openrouter.ai/api/v1https://api.infro.io/v1
密钥一个 OpenRouter 密钥;可选择以 BYOK 方式添加你的提供商密钥。一个 INFRO 网关密钥。你的提供商账号(以及你的 OpenRouter 密钥,如果保留的话)是控制台中的连接。
模型 IDvendor/model, ~vendor/...-latest, openrouter/auto, @preset/name.来自 INFRO 目录的 vendor/model,或路由规则名称。GET /v1/models 列出你的连接提供的模型。部分厂商前缀与 OpenRouter 不同(INFRO 用 xai/,OpenRouter 用 x-ai/)。
请求体字段models, provider { order, only, ignore, sort, max_price }, user, session_id, trace.fallbacks(最多 5 个)、routing.providers { allow, deny }、metadata { user_id, session_id, tags };追踪 ID 使用 X-INFRO-Trace-Id。

之前 · OpenRouter

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://openrouter.ai/api/v1",
  apiKey: process.env.OPENROUTER_API_KEY,
  defaultHeaders: { "X-OpenRouter-Title": "Example App" },
});

await client.chat.completions.create({
  model: "anthropic/claude-sonnet-5.5",
  messages: [{ role: "user", content: "Hello" }],
  user: "user_123",
  // @ts-expect-error OpenRouter extensions
  models: ["anthropic/claude-sonnet-5.5", "openai/gpt-5.6-terra"],
  provider: { order: ["anthropic", "google-vertex"] },
});

之后 · INFRO

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.infro.io/v1",
  apiKey: process.env.INFRO_API_KEY,
});

await client.chat.completions.create({
  model: "anthropic/claude-sonnet-5.5",
  messages: [{ role: "user", content: "Hello" }],
  // @ts-expect-error INFRO extensions
  fallbacks: ["openai/gpt-5.6-terra"],
  routing: { providers: { allow: ["anthropic", "google-vertex"] } },
  metadata: { user_id: "user_123" },
});

顺序保存在路由规则中

routing.providers 缩小你的哪些提供商可以处理请求;它不设置顺序。如需固定顺序,请创建一条路由规则(例如 chat-default),把目标按顺序排列,并将其作为 model 发送。

把 OpenRouter 保留在 INFRO 后面

在控制台中把你的 OpenRouter 密钥作为一个提供商接入。之后请求就可以从你的直连账号故障转移到 OpenRouter,在 routing.providers 的 allow 或 deny 中加入 openrouter,即可按请求包含或排除它。

回退触发条件

fallbacks 会在 model 的所有连接都失败后再尝试。响应开始流式传输之后出现的提供商错误会被返回,而不会重新路由。

OpenRouter 的对象与 INFRO 的对照,依据 2026年10月19日 阅读的 OpenRouter 公开文档,并已按网关实际实现的内容核对。 有两行显示 INFRO 没有对应项。

OpenRouter它在那里的作用在 INFRO 中
OpenRouter 密钥和积分不同一个密钥调用所有模型,从预付积分中扣费。一个网关密钥,作用于你连接的提供商账号;每家提供商直接向你收费。INFRO 收取订阅费,对模型支出加价 0%。
BYOK不同优先尝试你的提供商密钥;除非按密钥关闭,否则会回退到共享容量。唯一的模式。网关背后没有共享容量:如果所有连接都失败,请求就会失败。
`models` 回退形式相同出错时依次尝试的模型优先级列表。fallbacks,最多 5 个模型 ID,在 model 的所有连接都失败后尝试。
`provider` 的 order、only、ignore不同按请求选择、排序和排除上游提供商。按请求使用 routing.providers 的 allow 或 deny;顺序在路由规则上设置,并带有按故障类型的规则(429、5xx、超时)。
`provider.sort`、`max_price`、吞吐量和延迟偏好无对应按价格、吞吐量或延迟为每个请求选择托管方。无。INFRO 不按价格或延迟在托管方之间选择;由路由规则的顺序或权重决定。
自动路由器不同openrouter/auto 为每个提示词挑选模型。路由规则可以借助你自己连接上的决策模型对每个提示词分类,并把每一类发送到各自的目标。
预设不同命名的服务端配置:模型、路由、系统提示词、参数。路由规则承载模型和目标。系统提示词和参数保留在你的代码中。
响应缓存形式相同通过 X-OpenRouter-Cache 请求头按密钥启用的精确匹配缓存。需主动开启的 chat completions 精确匹配缓存,带命名空间和 TTL。
护栏(预算、允许列表)形式相同按工作区、成员或密钥设置的支出上限,以及模型或提供商允许列表。组织、项目、成员、密钥和终端客户级别的预算,在调用之前以 402 拒绝;按组织、项目和密钥设置的允许和阻止列表。
Broadcast不同导出到 Langfuse、Datadog、OTel 采集器、S3 或 webhook 的追踪数据。发送到你的 OpenTelemetry 采集器的 span、请求导出和请求日志。没有针对特定厂商的内置目标。
每请求成本不同按 OpenRouter 标价计算的每次生成成本。每个响应都附带对你提供商账单的估算(usage.cost、usage.price_source):有你录入的协商价时按协商价,否则按厂商公开价,两者都未知时为 unpriced 而不是零。
欧盟区域内路由、ZDR 端点无对应一个欧盟基础 URL,以及一个筛选零数据保留端点的过滤器。不提供。区域固定在路线图上;提供商处的数据保留由你与其签订的合同约束。

这是我们对 OpenRouter 已发布文档的理解,而非试用或基准测试。如果我们理解有误,告诉我们,我们会修正那一行。

INFRO 不做的事

  • 让你访问你没有账号的厂商,除非通过一个指向你所持有的聚合平台账号(包括 OpenRouter)的连接。
  • 按价格、吞吐量或延迟为每个请求选择托管方。
  • 在服务端存储系统提示词和参数(预设)。
  • 将流量固定在欧盟;数据驻留在路线图上。
  • 在 OpenAI、Azure OpenAI、Mistral 或 OpenAI 兼容端点之外的提供商上提供嵌入。

哪些无法迁移过来

  • 你的 OpenRouter 活动历史和生成日志。没有导入工具。
  • 积分。它们留在你的 OpenRouter 账号上,只有在你保留 OpenRouter 作为连接时才会被消耗。
  • 预设、工作区和护栏。将它们重建为路由规则、项目、预算和允许列表。

问题

我可以保留 OpenRouter 并加上 INFRO 吗?
可以。OpenRouter 是 INFRO 中的一种提供商类型:接入你的 OpenRouter 密钥后,它就会与你的直连账号一起处理请求,并在它们之间故障转移。
INFRO 出售积分或转售模型访问权吗?
不。INFRO 在你持有的提供商账号上运行每个请求,你的提供商直接向你收费,INFRO 收取订阅费,对模型支出加价 0%。
用什么替代 `models` 和 `provider` 字段?
fallbacks 替代 models;routing.providers 的 allow 和 deny 替代 provider.only 和 provider.ignore;命名的路由规则设置顺序。按价格和延迟排序没有对应功能。

和我们一起迁移,或自行迁移

迁移计划会在一次通话中把你的 OpenRouter 设置映射为 INFRO 的连接、路由规则和预算,并和你一起迁移第一个服务。你的提供商继续直接向你收费;INFRO 是一项订阅,对模型支出零加价。

来源

本页关于 OpenRouter 的每一项陈述都来自以下来源之一,阅读于 2026年10月19日。没有任何内容是从试用、基准测试或交谈中推断的。