拿到一个中转站或自建服务的 Key,第一件事往往不是发对话请求,而是先问一句「你这儿到底有哪些模型」。很多人直接调 /v1/models 拿到一坨 JSON 就懵了:字段哪些能信、列表里有但调用 404 是怎么回事。这篇按调用、读字段、核对三步走,把模型列表这个端点讲成能直接照做的动作。
拿到一个中转站或自建服务的 Key,很多人第一反应是直接发对话请求,结果报错也说不清是模型名写错、渠道没通还是额度问题。更稳的顺序是先问一句「你这儿到底有哪些模型」:调一次模型列表端点,把返回的 id 拿全,再拿其中一个去跑对话。这样出问题时能立刻分清是「名字不对」还是「服务不对」。
但列表拿到手也别全信。兼容接口只是个约定俗成的外壳,不同中转站、不同自建网关对字段的填充程度差别很大,有的只保证 id 可用,其余字段是占位。这篇按调用、读字段、核对三步走,把它讲成能照做的动作。
先把这个端点调通
路径的拼法是 Base URL 后面直接接 /models,中间不要再补一次 /v1。最常见的 404 就是路径重复:配置里写的 Base URL 已经带了 /v1,代码里又拼了一遍。调之前先把你实际用的 Base URL 打出来看一眼,确认它停在版本号那一层为止。
curl -s -H "Authorization: Bearer $API_KEY" \
"$BASE_URL/models" | head -c 800curl 通了再换 SDK 的 client.models.list(),两种方式的结果应该一致;不一致说明你的 SDK 在 Base URL 上又做了自己的拼接,去看 SDK 的初始化参数。用同一套 Key 和同一个 Base URL 对比最干净。
| 返回状态 | 大概率原因 | 下一步动作 |
|---|---|---|
| 401 | Key 错、过期或鉴权头格式不对 | 检查是否带 Bearer 前缀、有没有多余空格 |
| 404 | 路径拼错,多为 /v1 重复 | 打印 Base URL 核对,去掉多余段 |
| 200 但列表为空 | 渠道未开通或后台未配置 | 去中转站后台看渠道状态,或换一家验证 |
| 超时或 5xx | 网关或上游不稳 | 换一个时间点重试,仍失败就换站验证 |
状态码只是第一步,别看到 401 就反复改代码。先按换站验证的路子走一遍:同一个 Key 换路径、换服务商、换网络环境各试一次,能快速定位问题出在你这边还是服务那边。具体流程可参考站内的中转站检测入口 /sites。
返回字段哪些能信、哪些只是摆设
拿到 JSON 后,真正要盯的只有 id。这个字符串就是后面填进对话请求 model 参数的原文,原样复制,别自己改大小写、加厂商前缀或去掉后缀。很多「模型不存在」的报错,根源就是手抄时改了写法。
- id
- 唯一必须用的字段,直接填进 model 参数,原样复制不改写
- object
- 多半固定为 list 或 model,用于结构识别,不承载业务信息
- owned_by
- 中转场景下常是占位字符串,不能拿来判断模型归属哪个厂商
- created
- 只是登记时间,不代表模型新旧,更不代表能力强弱
有些实现会额外返回 permission、context_length 之类的扩展字段,看到就参考,缺了也别当故障——兼容接口并不要求这些字段齐全,缺字段不影响正常调用。想看某个模型真实的能力、上下文和版本差异,到站内模型资料库对照,比从列表字段里猜靠谱。
列表里有的不等于能调:做一次可用性核对
列表端点只说明服务愿意把这份清单返回给你,不保证每个模型背后都有可用渠道。所以从列表里挑出你要用的那一个之后,必须单独发一次真实请求验证,最好再分别测一次普通请求和流式请求,因为有的网关只在流式路径上出问题。
- 挑目标模型发最短请求从列表里复制 id,发一条一两句话的对话请求,确认返回 200 且内容完整,不截断。
- 故意发一个不存在的模型名用它反向验证错误处理:返回 404 或 400 说明服务会如实报错;一律吞成 500 的话,后续排障会非常吃力。
- 分开记录两次结果把「拉列表成功」和「对话成功」当成两个独立指标记录,很多问题恰恰出在第二步,混在一起看会误判。
- 定期拉列表做快照隔一段时间拉一次并保存,模型被下架、改名或悄悄换了后端时,能第一时间发现而不是等用户报错。
这套流程有个不适用的情况:如果你只是想快速试探某家中转站能不能用,不必每次都做完整核对,发一条对话请求就行,能回就基本可用。反过来,接入生产或多人共用的项目时,模型列表快照和可用性核对建议固化成定时任务,别靠人记。
顺便说一句,列表里的模型名并不等于定价档位,同一个 id 在不同中转站可能对应不同上游。想比较花钱效率,到站内价格追踪页面 /price-watch 核对当时的数字,别拿列表顺序当参考。
下一步把你手上那家的列表拉一次,按上面三步各验一遍,几分钟就能判断这条线路值不值得继续用。→常见问题
为什么模型列表能拉到,但调用某个模型一直报错?
列表接口通常只读配置表,不一定校验上游通道是否活着。先确认模型 id 拼写和列表完全一致,再发一条最小对话请求看错误码:401/403 是鉴权或权限,404 是模型名或路由不对,429 是限流。都排除后到站内中转站页面对一下该站的检测结论。
不同中转站返回的模型列表格式一样吗?
大体沿用同一套结构,但字段齐全度差别很大。有的只给 id,有的补上下文长度,owned_by 这类字段更是各家随意填。所以只把 id 当稳定字段用,其余当参考信息;需要对比能力或者价格时,去站内模型库和官方 API 价格页看。
该不该把模型列表缓存起来?
建议缓存,但别缓存太久。启动时拉一次存到配置或本地文件,跑起来之后不再频繁请求,避免每次都多一次往返;同时留一个手动刷新入口,模型下线或新增时能立刻更新。对时效敏感的场景,每次会话开始前重拉一次更稳。