OpenRouter 免费模型推荐:与其看榜单,不如按任务自己挑
数据截至 2026-08,价格与限额以各官网为准。本文只讲计费与接入机制,不列具体价格数字。
找「OpenRouter 免费模型推荐」的人,多半想要一张可以照抄的清单。但 OpenRouter 官方文档在讲免费模型时自己加了一条警告:免费模型的可用性变化频繁,当前清单要去模型页看。它在正文里只举了几个模型家族,后面跟一句「以及其他社区贡献的免费模型」——官方都不给定版清单,第三方文章里那张表凭什么不过期。更实际的做法是用官方给的三样东西自己筛:模型清单接口的过滤参数(output_modalities、supported_parameters、sort)把候选集拉出来,模型对象里的 supported_parameters、architecture、context_length 三个字段判断它能不能干你这活,再用 openrouter/free 或 :free 后缀决定是让平台随机挑还是自己钉死一个。这套流程半年后还能用,一张清单不能。
榜单能告诉你的,比你以为的少
OpenRouter 的模型对象里确实有 benchmarks 字段,但它的边界写得很清楚:这个字段只在被第三方评测过的模型上出现,没有评测数据的模型整个字段都不会出现。目前收录的是 Design Arena 的排名,每条记录包含 arena(竞技场类型,如 models、builders、agents)、category(竞技场内的分类,如 website、gamedev)、elo(对战 ELO 分)、win_rate(胜率)、rank(该竞技场加分类内的名次,1 为最高 ELO)。
关键在官方紧跟着的那句说明:这些排名是在 OpenRouter 上架的模型之间计算的,不是完整的外部榜单。也就是说你看到的名次是一个子集内的相对位置,而且一个模型没出现在榜上,只意味着它没有对应的评测数据,不代表它排在后面。拿这个字段当「哪个免费模型最好」的答案,前提就已经不成立了。
清单接口的 sort 参数同理。它的取值里有 most-popular 和它的同义值 top-weekly,官方对这两个值的定义是过去一周处理 token 数最多。这是流行度,不是质量,更不是「适合你的任务」。同一组取值里还有 pricing-low-to-high、pricing-high-to-low、context-high-to-low、throughput-high-to-low、latency-low-to-high、newest(以上枚举以官方文档为准)。官方还补了一句实现细节:某个排序维度上没有数据的模型会排在最后,不传 sort 则保持默认顺序。
第一步:把免费候选集拉出来
免费模型的入口官方给了两个,都是模型页带过滤参数的链接——FAQ 里用的是最高价格过滤参数 max_price(过滤值取零),Free Models Router 文档里用的是 pricing=free。想在程序里做,就走 GET /api/v1/models,它支持这几个查询参数:
output_modalities:按输出能力过滤,接受逗号分隔的列表,取值有text(默认,只返回产出文本的模型)、image、audio、embeddings,以及all(跳过模态过滤,返回全部)。同名参数在/v1/models/count上也有,这样计数和列表结果才对得上。supported_parameters:按模型支持的 API 参数过滤,官方举的例子就是筛出支持工具调用的模型。sort:上一节那组取值,可以和过滤参数组合使用。
返回体里 data 是模型数组,另有 total_count 和 links.next。分页是可选的:offset 和 limit 两个都不传时返回完整列表且 links.next 为 null;一旦分页,links.next 会给出可直接使用的下一页 URL,末页为 null。
判断一项是不是免费,看 pricing 对象——官方的说明是值为 "0" 表示该项免费。这个对象里分了 prompt、completion、request、image、web_search、internal_reasoning、input_cache_read、input_cache_write 等多个计费项,所以「免费」不是一个布尔值,而是要看你实际会触发哪几项。
第二步:用三个字段对齐你的任务
拉到候选集之后,真正决定成败的是模型对象里这三块。
supported_parameters 数组告诉你哪些 OpenAI 兼容参数在这个模型上有效。官方列出的取值包括 tools(函数调用)、tool_choice(工具选择控制)、max_tokens、temperature、top_p、reasoning(内部推理模式)、include_reasoning、structured_outputs(JSON schema 强制)、response_format、stop、frequency_penalty、presence_penalty、seed(确定性输出),以官方文档当前版本为准。如果你的活是「抽结构化字段」,那 structured_outputs 在不在数组里,比它在任何榜单上排第几都重要。
architecture 对象给的是模态和分词信息:input_modalities(支持的输入类型,官方示例是 file、image、text)、output_modalities、tokenizer(分词方式)、instruct_type(指令格式,不适用时为 null)。要处理图片就在这里看,别从模型名字猜。
context_length 与 top_provider.max_completion_tokens,这两个数经常被误读。官方明确写了:输入和输出共享模型的上下文窗口,所以 max_completion_tokens 是 max_tokens 的天花板,不是保证能拿到的输出长度;一次请求实际能输出多少,取决于输入占完之后还剩多少上下文。top_provider 里还有 context_length(该供应商自己的上下文上限)和 is_moderated(是否施加内容审核)。
顺带一个容易吃亏的点:官方专门提醒不同模型的分词方式不同,有的把文本切成多字符的块(GPT、Claude、Llama 这类),有的按字符分(PaLM),所以同样的输入输出,在不同模型上的 token 数会不一样,计费按所用模型的分词器来。跨模型比成本时别拿字符数换算,读响应里的 usage 字段拿真实 token 数。
不想自己挑:openrouter/free 的取舍
把 model 设成 openrouter/free 就能用免费模型路由器,它会从当前可用的免费模型里随机选一个。官方给的流程是五步:分析请求需要哪些能力(比如图像理解、工具调用、结构化输出)→ 过滤出支持这些能力的免费模型 → 从过滤后的池子里随机选一个 → 转发请求 → 在响应里回传所用模型。响应体的 model 字段会写出实际是谁应答的,示例里就是一个带免费后缀的模型 ID。
官方自己列的限制有四条:免费模型的速率限制可能低于付费模型;免费模型的可用性会变,某些可能临时不可用;高峰期延迟可能更高;你无法控制具体选中哪个模型——需要指定就用 :free 后缀。
「随机」这一条的实际后果值得多想一步:同一个 prompt 连发两次,应答的可能不是同一个模型。做效果对比、跑评测、或者需要复现某个结果时,随机路由是不合适的;拿它做原型验证、学习、低频调用则正合适,这也是官方给的适用场景(学习实验、原型、低量应用、教学)。
要钉死一个::free 后缀怎么用
:free 变体的用法是把后缀追加到任意模型 ID 后面,官方示例的写法就是在模型 slug 末尾加 :free。官方对它的说明只有一句:免费变体让你无成本访问模型,但可能有与付费版不同的速率限制或可用性。注意这里同样是「可能」,不是「一定」。
还有一个前提别漏:不是每个模型都有免费 endpoint。官方在介绍模型 slug 后缀时的措辞是「加 :free 用于存在免费 endpoint 的模型」。想确认某个具体模型有没有,可以走单模型查询 GET /api/v1/model/{author}/{slug},它会自动解析别名(旧写法会重定向到规范 slug 并返回其数据),也支持在 slug 后追加 :free 这类变体后缀;模型不存在且不是别名时返回 404。这比在网页上翻列表快,也比照抄别人文章里的 slug 可靠——过期清单最典型的翻车方式,就是抄来的 slug 现在已经没有 endpoint 可路由了。
从供应商侧看,免费与否是 endpoint 级的标记:is_free: true 会把该 endpoint 标为免费 endpoint(对应 :free 后缀),随它一起发来的任何定价都会被忽略,免费 endpoint 恒为零成本;is_free: false 则明确标为付费。同一个模型 id 可以同时上架免费和付费两个版本。这解释了一个常见困惑:为什么有的模型能加 :free、有的不能——取决于服务商有没有登记那条免费 endpoint。官方的措辞是「用于存在免费端点的模型」,至于请求一个没有免费端点的 slug 会怎样,官方文档未作说明。
免费模型选型里最容易漏掉的三个变量
一是数据政策。 账户设置里可以选择是否允许路由到「可能用你的数据做训练」的供应商(依各供应商自身政策),而且付费模型和免费模型是两个分开的设置项。想更细就按请求控制:官方支持限制单次请求只用符合特定数据政策的供应商,这一项也有账户级设置。至于 OpenRouter 自身,官方说明是默认不存储你的 prompt 和响应,除非你主动开启两项之一——私有输入输出日志(默认关闭,用于调试和对比),或者允许 OpenRouter 使用你的输入输出来改进产品(默认关闭,作为交换会给一档用量折扣,具体比例见官方隐私设置页)。但请求的元数据(prompt 与 completion 的 token 数、延迟等)是始终记录的,用于报表和模型排名。
二是账户余额。 官方原文说的是:账户额度为负时,你可能会看到报错,而且这种失败会波及免费模型;把余额补到零以上就能重新使用这些模型。也就是说「我只用免费模型,所以余额跟我无关」是错的。
三是免费层的限流分档。 官方文档说明免费模型变体(ID 以免费后缀结尾)适用两档限制:每分钟请求数和每天请求数,并且按累计购买额度分档——累计购买达到一定量后,每日请求上限会提高。具体数值以官方限额页为准。除此之外还有一层 Cloudflare 的 DDoS 防护,会拦截显著超出合理用量的请求。免费限额的具体规则可以接着看OpenRouter 免费模型限制有哪些和OpenRouter 免费额度是怎么给的。
免费模型不等于零账单
有一条容易被忽略:官方在网页搜索插件文档里专门提醒,启用网页搜索会产生额外费用,即使用的是免费模型。同时要注意 :online 变体已被官方标为废弃,推荐改用 openrouter:web_search 服务端工具,由模型自己决定何时搜、搜几次。
还有 fallback 的计费口径。用 models 参数按优先级传一组模型 ID,主模型出错时会自动试下一个,官方明确默认任何错误都可能触发 fallback,包括上下文长度校验错误、被审核拦截、限流和宕机。计费按最终实际使用的那个模型算,响应体的 model 属性会告诉你是谁。这意味着一条「免费模型打头、付费模型兜底」的 fallback 链是会产生费用的——兜底真的被触发时。另外,走 Anthropic Messages 接口的 fallbacks 参数每个条目只接受 model 字段,写 max_tokens、thinking 这类逐次覆盖会被 400 拒绝,且 fallbacks 和 models 不能同时传,同时传也是 400。
把「挑」变成一件可以复检的事
免费模型不是选一次就完的。三个官方给的复检手段:模型清单接口带 use_rss=true 参数可以订阅 RSS,新模型上架时能收到;sort=newest 按加入时间排;模型对象里的 expiration_date 字段是该模型 endpoint 的废弃日期,未废弃时为 null——把这个字段纳入监控,就能在你的 slug 失效之前收到信号。
最后一个坑说在前面:真正让人翻车的从来不是「挑错了模型」,而是把某一天的清单硬编码进代码,之后再没回来看过。写死一个免费 slug、不做 fallback、不监控 expiration_date,某天上游一下架,你的服务就直接开始报错了。要看付费模型一起怎么选,接着读OpenRouter 模型推荐怎么看。
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。