AI PLAY玩法更新持续收录
← 回到更新流

2026-09-11 · 原文发布日

用OpenRouter时小心不同供应商行为不一致

Simon Willison转引提醒:OpenRouter虽号称自动选性价比最高的后端并处理故障转移,但同一模型端点背后不同供应商的推理软件、优化和参数设置不同,响应行为可能不一致——有的视觉模型供应商不支持图像输入,reasoning effort参数的处理也有差异。应对办法是用provider.only选项锁定供应商,并可调用/endpoints接口查看某模型实际可用的供应商列表再决定路由策略。

原文要点

Simon Willison转引Mohamed Moustafa的提醒:OpenRouter的卖点是自动故障转移并为每个请求挑选性价比最高的后端,但同一模型端点背后不同供应商运行不同的推理软件、优化和参数设置,响应行为可能不一致;部分视觉模型供应商不支持图像输入,reasoning effort参数的处理方式也因供应商而异。可用provider.only选项锁定路由到的供应商,并用/endpoints方法查询某模型ID实际可用的供应商列表。

这次做成什么

做出一个可复用的OpenRouter供应商体检小流程:先查某模型的供应商清单,再用同一组测试请求逐供应商对比行为,最后用provider.only锁定行为符合预期的供应商,避免生产请求被随机路由到行为不一致的后端。

准备什么

  • 一个OpenRouter账号及有效API密钥(测试用,勿用生产高额度密钥)
  • 能发HTTP请求的环境,如curl或Python 3加requests库
  • 事先准备好的固定测试输入:一段文本题和一张测试图片URL或Base64

具体怎么做

  1. 查询模型实际供应商列表

    向OpenRouter的/endpoints接口发起GET请求,路径形如https://openrouter.ai/api/v1/models/{模型ID}/endpoints,请求头带Authorization: Bearer 你的密钥。返回结果中包含该模型当前可用的供应商名单,把供应商slug逐条记录到一个本地表格里,作为后续逐个测试的清单。

  2. 用固定输入做行为对比

    对清单里每个供应商,用同一条chat completions请求各发一次:正文在provider字段中写{"only":["供应商slug"]},messages固定为同一段文本题(例如让模型数一段话里某个字出现几次),并固定temperature等参数。逐条记录回复内容、是否报错、延迟感受,填入对比表。

  3. 专项测试视觉与reasoning行为

    如果模型号称支持图像,给每个供应商发同一条带image_url的多模态请求,记录哪些供应商返回不支持图像的错误或退化回答。如果模型支持reasoning effort参数,分别用low和high各发一次同一道逻辑题,观察不同供应商对该参数的实际生效程度是否一致。

  4. 锁定供应商并写进配置

    综合对比结果,选出文本、视觉、reasoning行为都符合预期的一到两个供应商,在应用的请求构造层固定写入provider: {"only":["选定slug"]}。同时把该配置抽成环境变量或配置文件项,便于日后供应商行为变化时快速切换。

可直接复制的材料

供应商对比记录表(CSV模板)

本站独立编写的记录模板,供应商slug需替换为/endpoints接口实际返回值。

供应商slug,文本题回答,是否支持图像,reasoning_low回复,reasoning_high回复,结论
example-provider-a,回答正确且简洁,是,简要推理,详细推理,通过
example-provider-b,回答正确但冗长,否(报不支持图像错误),无明显差异,无明显差异,不通过

锁定供应商的请求体示例

本站编写的示意请求体,模型ID与供应商slug均需按/endpoints返回结果替换后再使用。

{
  "model": "你实际使用的模型ID",
  "provider": {"only": ["example-provider-a"]},
  "messages": [
    {"role": "user", "content": "‘春眠不觉晓,处处闻啼鸟’这句诗里‘处’字出现了几次?只回答数字。"}
  ],
  "temperature": 0
}

输入与输出示例

本站虚构演示,两个供应商名与回复均为示意,未实际调用OpenRouter。

输入

测试题:‘春眠不觉晓,处处闻啼鸟’这句诗里‘处’字出现了几次?只回答数字。对两个虚构供应商alpha-cast和beta-serve各发一次。

对应输出

对比表记录:alpha-cast回复“2”,支持图像,reasoning_high下推理明显更长,结论“通过,设为主用”;beta-serve回复“2”,带图像请求返回“该端点不支持图像输入”,结论“不通过,仅文本备用”。应用配置写入provider.only=["alpha-cast"]。

做完检查这些

  • /endpoints接口返回了供应商清单,且清单中的slug与后续provider.only所用slug完全一致
  • 同一固定文本题在不同供应商下的回答差异已被逐条记录,而非凭印象判断
  • 最终应用配置中provider.only指向的是实际测试通过的供应商,而非默认自动路由
  • 如果用了图像或reasoning测试,对应结论已写入对比表并有错误信息或回复原文佐证

容易卡住的地方

  • 不锁定供应商时OpenRouter可能每次路由到不同后端,问题表现为偶发不一致,单次测试正常不代表稳定
  • 某供应商对视觉模型可能完全不接受图像输入,多模态功能上线前必须逐供应商验证
  • reasoning effort参数在不同供应商的处理可能不同,不能只测一个供应商就推广结论
  • 供应商列表是动态变化的,旧的锁定值可能失效,建议定期重新查询/endpoints核对

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
So you want to use OpenRouter?
原作者
Simon Willison
原始发布日期
2026-09-11
来源
https://simonwillison.net/2026/Sep/11/so-you-want-to-use-openrouter/