news 2026/7/30 12:53:05

Chatbox 1.22.1 获取不到模型?先验 /models,再对齐精确 model ID

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Chatbox 1.22.1 获取不到模型?先验 /models,再对齐精确 model ID

在 Chatbox 里添加自定义 OpenAI 兼容服务后,最容易混在一起的其实是三个不同问题:点击Fetch后列表为空、手动新增模型后出现model_not_found、点击Check后又报图像或工具调用错误。它们不是同一层故障,也不应该靠反复换 Key 解决。

本文按 Chatbox 官方v1.22.1的当前源码说明真实调用链,并用一个只监听127.0.0.1的 Python 夹具复现成功和失败分支。先给结论:Fetch成功不只要求 HTTP 200,响应还必须有顶层data数组;真正用于请求的值是data[].id,不是你看到的友好名称。

先准备这组最小配置

进入 Chatbox 设置,添加自定义提供商并选择OpenAI API Compatible。当前界面会显示API HostAPI PathModel,模型区域有NewResetFetch,配置满足条件后还可以使用Check

如果服务使用标准/v1前缀,先把职责拆开:

字段示例值作用
API Hosthttps://your-gateway.example/v1模型列表和聊天请求的共同基址
API Path/chat/completions对话资源路径
API Key当前服务要求的 Key只保存在客户端,不进入文章或截图
Model ID/modelsdata[].id复制真正发送给服务端的模型值

先不要急着点Check。用下面的命令确认模型列表契约:

BASE_URL='https://your-gateway.example/v1'curl-sS-i"$BASE_URL/models"\-H"Authorization: Bearer$OPENAI_API_KEY"

合格的最小响应应同时满足三项:状态码是 200、正文是 JSON、顶层存在非空data数组。例如:

{"object":"list","data":[{"id":"provider-model-exact-id","object":"model"}]}

这里真正要复制的是provider-model-exact-id。不要把网站商品名、控制台展示名、自己起的中文别名或另一个客户端的模型名当成服务器 ID。

为什么 HTTP 200 仍然可能拉不到模型

Chatboxv1.22.1的模型拉取实现会请求:

<normalized API Host>/models

拿到 JSON 后,它直接检查顶层data。没有data就抛出错误;存在data时,每一项的id被映射为 Chatbox 的modelId。因此下面这个响应虽然是 200,仍不满足当前契约:

{"object":"list","models":[{"name":"provider-model-exact-id"}]}

这类情况常见于“接口看起来像 OpenAI,但模型列表字段并不兼容”的服务。此时不要把问题归因成网络失败。你需要查服务方文档,确认它是否提供 OpenAI 风格的/models;如果模型列表被禁用,只能使用 Chatbox 的New手动添加精确 ID。

FetchNewCheck分别做什么

Fetch:读取服务器模型目录

它适合确认当前 Base URL、认证和模型列表数据契约是否同时成立。列表拉取失败时,先保存完整状态码和脱敏响应体,再判断是 401、404、200 但结构不兼容,还是网络错误。

New:手动保存一个模型 ID

New能绕过“服务没有开放/models”这一限制,但它不证明模型存在。手动输入后,Chatbox 只是把这个值加入当前提供商的模型列表。下一次真实请求仍会把该modelId发给服务端,所以大小写、连字符、日期后缀和区域后缀都必须逐字一致。

Check:执行能力测试,不是一次 ping

当前v1.22.1的检查流程先发送基础文本请求;基础请求成功后,还会继续尝试一张 1x1 图片和一次工具调用。也就是说,一次Check最多可能产生三次模型请求。

如果你的服务按请求计费、模型不支持图像或工具调用,后两项失败不等于基础文本模型不可用。为了把问题收窄,建议先用一个最小非流式文本请求确认精确 ID,再决定是否运行完整Check

用最小聊天请求验证精确 ID

把模型 ID 从/models响应中复制出来:

MODEL_ID='provider-model-exact-id'curl-sS-i"$BASE_URL/chat/completions"\-H'Content-Type: application/json'\-H"Authorization: Bearer$OPENAI_API_KEY"\-d"{\"model\":\"$MODEL_ID\",\"messages\": [{\"role\":\"user\",\"content\":\"reply with OK\"}],\"stream\": false }"

成功信号是 HTTP 200,并且响应中能读到choices[0].message.content。如果同一个请求把model换成友好名称后出现model_not_found,就已经把故障定位到模型值,而不是 Base URL、Key 或 Chatbox UI。

本地实测:200、结构错误、别名错误和精确 ID

本次夹具只承认两个模型 ID,并故意准备四条分支:

GET /v1/models -> 200 + data[].id GET /malformed/v1/models -> 200 + models[].name,无 data POST /v1/chat/completions + 别名 -> 404 model_not_found POST /v1/chat/completions + 精确ID -> 200 CHATBOX_MODEL_OK

执行命令:

python3 06-evidence/probe_chatbox_model_fetch.py

脱敏结果:

CHATBOX_VERSION=1.22.1 GOOD_MODELS_HTTP=200 GOOD_MODEL_IDS=fixture-chat-v2,fixture-reasoning-v1 MALFORMED_MODELS_HTTP=200 MALFORMED_HAS_DATA=NO WRONG_MODEL_HTTP=404 WRONG_MODEL_ERROR=model_not_found EXACT_MODEL_HTTP=200 EXACT_MODEL_TEXT=CHATBOX_MODEL_OK ONLINE_PROVIDER_REQUEST=NO FULL_CHATBOX_RUNTIME=NO

这个实测证明的是 Chatbox 当前源码所需的数据形状,以及精确 ID 与友好名称在本地夹具中的差异。它没有启动完整 Chatbox,也没有访问真实模型服务,因此不能据此推断线上价格、延迟、稳定性或模型能力。

按信号判断下一步

观察结果优先检查不要先做
/models返回 401/403Key、权限、请求头反复改模型名
/models返回 404API Host、版本前缀、服务是否提供模型目录直接点完整Check
/models返回 200,但没有data响应契约或服务方文档把 200 写成“模型拉取成功”
data[].id可见,但 Chatbox 列表为空当前版本、保存回显、客户端日志自己猜一个友好名称
精确 ID 的文本请求 200再决定是否做视觉和工具测试把后续能力失败归因成 Key 失效
友好名称报model_not_found逐字对比data[].id删除版本/区域后缀

保存后的复核清单

  1. 重新打开自定义提供商,确认 API Host 和 API Path 回显正确。
  2. 在模型列表中确认保存的是服务器精确 ID;昵称只用于显示。
  3. 先跑一个最小文本请求,记录状态码和可读正文。
  4. 需要能力测试时再点Check,并区分基础、图像、工具三项结果。
  5. 截图和日志只保留状态码、路径、模型 ID 和错误类型,不保留 Authorization 值。
  6. 如果服务没有/models,在记录中明确写“手动添加”,不要写成“自动拉取成功”。

适用边界

本文依据 Chatbox 官方v1.22.1和对应提交7450ab2d。后续版本可能调整按钮、测试顺序或数据适配;不同 OpenAI 兼容服务也可能隐藏模型列表、使用其他路径或返回不同错误码。最终以你当前版本的设置回显、服务方公开文档和实际脱敏请求为准。

不要把真实 Key 写进命令历史、文章、截图或录屏。示例中的域名和模型名都是占位符,本地夹具使用固定的fixture-only请求头且只监听回环地址。

总结

Chatbox 获取不到模型时,先把问题拆成“模型目录”“模型 ID”“能力检查”三层。Fetch要求/models返回顶层data,真正请求值来自data[].idNew只是手动保存,不代表服务端支持;Check在基础成功后还可能继续发送图像和工具调用请求。

最稳的顺序是:先验/models的状态码和结构,再复制精确 ID,最后只用一个最小文本请求确认 200。把这三步跑通后,再处理图像、工具调用或流式能力,定位会清楚得多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/30 12:52:13

游戏收入确认是什么意思?定义、流程、岗位职责与常见误区

游戏收入确认是什么意思&#xff1f;简单来说&#xff0c;就是游戏企业把玩家充值或购买流水确认为会计收入的整个过程&#xff0c;需要确定在哪个时间点、以何种金额将流水记录为收入&#xff0c;并区分已消耗和未消耗部分。这个规则适用于包含虚拟道具、订阅、广告分成等多种…

作者头像 李华
网站建设 2026/7/30 12:50:36

three.js 编辑器与 React 项目集成

three.js 编辑器与 React 项目集成 本文围绕 three.js 编辑器&#xff08;一款基于 Three.js 的 AI 驱动可视化低代码编辑器&#xff09;展开。- &#x1f310; 在线预览&#xff1a;https://z2586300277.github.io/threejs-editor/- &#x1f4e6; GitHub 开源仓库&#xff1a…

作者头像 李华
网站建设 2026/7/30 12:49:36

AI工具如何助力低查重教材编写与内容创作

1. 教材编写者的新利器&#xff1a;AI工具如何重塑内容创作流程 教材编写一直是教育工作者和内容创作者的痛点——既要保证知识体系的严谨完整&#xff0c;又要避免内容同质化。传统编写方式往往需要查阅大量资料&#xff0c;反复修改调整&#xff0c;耗时耗力。而现在&#xf…

作者头像 李华
网站建设 2026/7/30 12:45:39

CuteTranslation:Linux上终极屏幕取词翻译工具完整使用指南

CuteTranslation&#xff1a;Linux上终极屏幕取词翻译工具完整使用指南 【免费下载链接】CuteTranslation Linux屏幕取词翻译软件 项目地址: https://gitcode.com/gh_mirrors/cu/CuteTranslation 还在为Linux系统上阅读英文文档而烦恼吗&#xff1f;&#x1f62b; 想要一…

作者头像 李华
网站建设 2026/7/30 12:43:47

泉盛UV-K5/K6终极指南:解锁专业频谱分析和卫星通信功能

泉盛UV-K5/K6终极指南&#xff1a;解锁专业频谱分析和卫星通信功能 【免费下载链接】uv-k5-firmware-custom 全功能泉盛UV-K5/K6固件 Quansheng UV-K5/K6 Firmware 项目地址: https://gitcode.com/gh_mirrors/uvk5f/uv-k5-firmware-custom 还在使用对讲机的基本功能吗&a…

作者头像 李华
网站建设 2026/7/30 12:41:58

解析.NET集合枚举修改异常及解决方案

1. 异常现象解析&#xff1a;当集合在枚举过程中被修改时会发生什么 这个异常是.NET开发中最常见的运行时错误之一&#xff0c;通常出现在使用foreach循环遍历集合时&#xff0c;代码同时尝试修改该集合内容。想象你正在图书馆按书架顺序清点图书&#xff0c;突然有人从你正在清…

作者头像 李华