CLI Proxy API 批量检测提供商是否可用
CLI Proxy API 提供商自动检测工具
用户使用说明
一、工具简介
这是一个用于 CLI Proxy API Management Center 的油猴脚本。
它可以读取你选择的 YAML 配置文件,依次检测其中的 OpenAI 兼容提供商,并根据检测结果自动同步管理中心里的开关状态:
- 检测成功:自动开启提供商;
- 检测失败:自动关闭提供商;
- 检测异常:不修改开关,保留原状态,等待人工复查。
脚本还支持:
- 指定从第几个提供商开始检测;
- 保存并获取上次检测断点;
- 按成功、失败、异常筛选日志;
- 导出检测日志;
- 手动停止检测;
- 拖动和折叠脚本面板。
二、开始前的准备
1. 安装油猴扩展
Chrome 浏览器需要安装以下任意一种用户脚本扩展:
- Tampermonkey
- Violentmonkey
安装完成后,将本脚本添加到扩展中并启用。
2. 准备 YAML 配置文件
脚本会读取 YAML 文件中的:
openai-compatibility:
配置示例:
openai-compatibility:
- name: provider-1
base-url: https://api.example.com/v1
api-key-entries:
- api-key: sk-your-api-key
models:
- name: model-name
disabled: true
每个提供商至少应包含:
| 配置项 | 用途 |
|---|---|
name |
提供商名称,用于和管理中心列表匹配 |
base-url |
提供商 API 地址 |
api-key-entries |
一个或多个 API Key |
models |
可用于测试的模型 |
disabled |
当前配置中的停用状态 |
脚本主要检测 openai-compatibility 下的提供商,其他类型的配置不会参与检测。
3. 确保名称一致
YAML 中的:
name: provider-1
必须能够匹配管理中心“AI 提供商”列表里的名称。
如果名称不一致,脚本虽然能完成网络检测,但无法找到对应的页面项目,也就无法自动开启或关闭。
4. 注意 API Key 安全
YAML 文件中包含完整 API Key,请注意:
- 不要把 YAML 文件发送给无关人员;
- 不要将文件上传到不可信网站;
- 不要在公开聊天、论坛或截图中暴露密钥;
- 使用完成后妥善保存配置文件;
- 如果密钥已经泄露,请立即撤销并重新生成。
YAML 文件由浏览器脚本在本地读取。脚本不会把完整密钥写入日志或保存到浏览器存储中。
检测请求会将相应密钥发送至 YAML 中配置的 base-url。
三、推荐的使用流程
第一步:打开 AI 提供商页面
进入 CLI Proxy API Management Center,然后打开:
AI 提供商
请确认浏览器地址末尾类似:
#/ai-providers
检测必须在该页面进行,脚本才能找到并修改对应提供商的开关。
检测请求本身不依赖列表页面,但自动开启和关闭功能依赖页面中的提供商列表。
第二步:点击“选择 YAML”
在脚本面板中点击选择文件按钮,然后选择你的提供商 YAML 配置文件。
脚本解析成功后,会显示:
- 文件名;
- 识别到的提供商数量;
- 建议的开始位置。
如果提示未找到提供商,请检查 YAML 中是否存在:
openai-compatibility:
第三步:设置开始位置
“从第几项开始”决定本次检测从 YAML 提供商列表中的哪一项开始。
例如:
从第 1 项开始
表示检测全部提供商。
如果填写:
69
则跳过前 68 项,从第 69 项开始。
序号以 YAML 中 openai-compatibility 的实际排列顺序为准,并且从 1 开始计算。
第四步:开始检测
点击:
开始检测
开始前会弹出确认框,提醒你确保已经打开“AI 提供商”列表。
- 点击确定:正式开始;
- 点击取消:不检测,也不会修改任何开关。
第五步:等待检测完成
检测期间,脚本会逐个处理提供商:
- 读取提供商地址、密钥和模型;
- 检测 API 是否可用;
- 判断检测结果;
- 找到页面中的同名提供商;
- 根据结果开启、关闭或保持原状态;
- 保存当前进度;
- 继续检测下一项。
检测过程中可以切换到其他浏览器标签页,但不建议执行以下操作:
- 不要切换管理中心内部页面;
- 不要刷新页面;
- 不要关闭当前标签页;
- 不要关闭油猴扩展;
- 不要让电脑进入休眠;
- 不要重复点击“开始检测”。
后台标签页可能被浏览器限速,检测速度可能变慢,这是正常现象。
四、检测结果说明
脚本会将每个提供商归为三种结果。
1. 成功
表示至少有一个 API Key 已确认可用。
脚本会尝试将该提供商设置为:
开启
可能的日志示例:
[成功] #12 provider-1
至少一个 API Key 检测可用
操作:已开启
如果提供商原本已经开启,脚本不会重复切换。
2. 失败
表示脚本已经得到明确结果,并且所有 API Key 都确认不可用。
常见情况包括:
401 Unauthorized:API Key 无效;403 Forbidden:密钥或账号被明确拒绝;- 所有密钥均返回明确的认证失败;
- 接口明确表明配置不可用。
脚本会尝试将该提供商设置为:
关闭
可能的日志示例:
[失败] #13 provider-2
全部 API Key 均明确无效
操作:已关闭
3. 异常
“异常”表示检测没有得到足够明确的结果,脚本暂时无法判断提供商是否可用。
常见情况包括:
- 请求超时;
- 网络连接失败;
429 Too Many Requests;502 Bad Gateway;503 Service Unavailable;- TLS 或证书错误;
- 返回内容格式异常;
- 余额不足;
- 提供商暂时无法访问。
异常可能只是临时网络波动,并不代表 API Key 已失效。因此脚本会:
保持原状态
不会自动开启或关闭。
可能的日志示例:
[异常] #14 provider-3
请求超时,暂时无法判断是否可用
操作:保持原状态
建议稍后单独重新检测异常项目。
五、多个 API Key 的判断规则
一个提供商可以配置多个 API Key。
脚本按以下规则汇总结果:
| Key 检测情况 | 提供商最终结果 | 开关操作 |
|---|---|---|
| 至少一个成功 | 成功 | 开启 |
| 全部明确失败 | 失败 | 关闭 |
| 没有成功,但存在超时、429、5xx 等 | 异常 | 保持原状态 |
| 部分失败、部分异常 | 异常 | 保持原状态 |
| 部分成功、部分失败 | 成功 | 开启 |
| 部分成功、部分异常 | 成功 | 开启 |
例如,一个提供商有三个 Key:
Key 1:401
Key 2:超时
Key 3:403
最终结果是“异常”,因为虽然两个 Key 明确失败,但还有一个 Key 因超时无法判断。
如果结果是:
Key 1:401
Key 2:403
Key 3:401
则最终结果为“失败”,脚本会关闭该提供商。
六、断点与指定位置
1. 什么是断点
脚本每完成一个提供商,都会保存“下一项应该从哪里开始”。
例如,已经完成第 68 项,则保存的断点为:
69
断点只保存:
- YAML 文件的识别信息;
- 下一项序号;
- 更新时间。
不会保存 YAML 内容或 API Key。
2. “获取上次断点”有什么作用
点击:
获取上次断点
脚本会读取同一 YAML 文件上次保存的位置,并填入“从第几项开始”。
例如,上次在第 68 项后停止:
从第 69 项开始
需要注意:
“获取上次断点”只负责填写序号,不会立即开始检测。
获取断点后,还需要点击:
开始检测
3. 手动指定开始位置
也可以直接在开始位置中输入数字。
例如:
69
然后点击“开始检测”,即可从 YAML 第 69 个提供商开始。
如果希望重新检测全部提供商,请输入:
1
4. 为什么找不到上次断点
以下情况可能导致脚本无法识别断点:
- 选择了不同的 YAML 文件;
- YAML 文件名发生变化;
- 文件内容修改后大小或修改时间发生变化;
- 清除了浏览器网站数据;
- 更换脚本版本后存储键发生变化;
- 使用了不同域名访问管理中心,例如在
localhost和127.0.0.1之间切换; - 上一次在页面刷新前还没有完成任何一项。
此时可以根据上一份日志,手动输入开始序号。
七、日志筛选
日志区域包含以下筛选按钮:
全部 (69)
成功 (6)
失败 (53)
异常 (10)
括号内数字表示当前日志数量。
全部
显示所有检测结果。
按钮说明:
显示本次检测中的全部成功、失败和异常结果
成功
只显示已确认可用的提供商。
按钮说明:
至少一个 API Key 已确认可用,提供商将被开启
失败
只显示所有 API Key 都明确不可用的提供商。
按钮说明:
所有 API Key 均明确失败,提供商将被关闭
异常
只显示暂时无法确定状态的提供商。
按钮说明:
检测遇到超时、429、5xx 或网络错误等情况,保持原开关状态
筛选只影响日志显示,不会改变检测结果、进度或页面开关。
八、导出日志
点击日志区域右侧的:
导出
可以将检测日志导出为 CSV 文件。
导出文件一般包含:
- YAML 序号;
- 提供商名称;
- 检测结果;
- 执行操作;
- 详细信息;
- 检测时间。
导出范围
导出功能会按照当前筛选条件导出:
| 当前筛选 | 导出内容 |
|---|---|
| 全部 | 导出全部检测结果 |
| 成功 | 只导出成功项 |
| 失败 | 只导出失败项 |
| 异常 | 只导出异常项 |
例如,要导出需要人工复查的项目:
- 点击“异常”;
- 点击“导出”;
- 得到只包含异常项目的 CSV 文件。
CSV 可以使用以下软件打开:
- Microsoft Excel;
- Apple Numbers;
- WPS 表格;
- LibreOffice Calc;
- 文本编辑器。
如果 Excel 打开后中文乱码,请在导入时选择:
UTF-8
没有日志时
如果当前筛选条件下没有日志,导出按钮不会生成空文件,并会给出提示。
九、清空日志
点击:
清空
会清除面板中当前已显示和记录的检测日志,并将筛选数量归零。
清空日志不会:
- 删除 YAML 文件;
- 删除 YAML 内的配置;
- 删除已保存断点;
- 修改提供商开关;
- 停止正在进行的检测,除非脚本另有提示。
如果仍在检测中,后续完成的项目会继续产生新日志。
十、停止检测
检测过程中可以点击:
停止
脚本会弹出确认框。
- 点击确定:请求停止;
- 点击取消:继续检测。
停止通常不会强行中断当前已经发出的 HTTP 请求,而是在当前项目处理完成或请求结束后,不再进入下一项。
因此点击停止后,可能需要等待数秒才会真正显示:
已停止
停止时会保留断点。下次可以:
- 重新选择同一个 YAML;
- 点击“获取上次断点”;
- 确认开始位置;
- 点击“开始检测”。
十一、面板拖动与折叠
拖动
按住面板顶部标题栏,可以将面板拖动到其他位置。
面板位置会保存在当前浏览器中,下次打开页面时自动恢复。
折叠
点击标题栏右侧的折叠按钮:
−
可以收起面板内容,只保留标题栏。
折叠后按钮会变为:
+
点击即可重新展开。
拖动和折叠不会影响正在进行的检测。
十二、常见问题
1. 必须打开“AI 提供商”页面吗?
如果只做网络检测,不需要。
但是本工具还需要自动开启或关闭页面里的提供商,所以使用完整功能时,必须打开:
AI 提供商
地址末尾通常是:
#/ai-providers
检测期间不要切换到日志、配置、授权文件等其他管理页面。
2. 能切换到其他浏览器标签页吗?
可以。
当前管理中心标签页可以在后台运行,但浏览器可能对后台页面限速,因此检测会变慢。
不要关闭、刷新当前标签页,也不要让电脑休眠。
3. 为什么检测成功,却没有开启?
可能原因:
- 当前不在 AI 提供商页面;
- YAML 名称和页面名称不一致;
- 页面列表尚未加载完成;
- 页面被刷新或切换路由;
- 开关保存请求失败;
- 同时启用了多个旧版脚本;
- React 页面重绘导致开关同步超时。
建议:
- 确认只启用一个脚本版本;
- 打开 AI 提供商页面;
- 确认 YAML 的
name与页面名称一致; - 从该项目序号重新检测。
4. 为什么大量项目显示异常?
常见原因:
- 网络不稳定;
- API 服务暂时不可用;
- 请求过快导致 429;
- 提供商限制了 IP;
- API 地址不正确;
- TLS 证书有问题;
- 本地代理或浏览器网络被拦截;
- 服务商不支持标准
/models接口; - 模型接口需要特殊请求头。
异常项目不会自动关闭,可以稍后重新检测。
5. 为什么 429 被归为异常,而不是失败?
429 Too Many Requests 表示请求过于频繁或暂时被限流,不能证明 API Key 已经失效。
为了避免误关正常提供商,脚本会将其归为异常并保持开关状态。
6. 为什么 502、503 被归为异常?
这些一般是上游服务临时故障,不代表密钥永久失效。
稍后重新检测可能恢复正常,因此不会直接关闭。
7. 为什么余额不足也是异常?
余额不足并不一定表示 API Key 无效,充值后可能恢复。
默认情况下,脚本将 402 Payment Required 归为异常,避免自动关闭。如果脚本配置被修改为“余额不足算失败”,其行为可能不同。
8. 为什么序号是 111,但页面条目数量不同?
序号基于 YAML 文件中:
openai-compatibility
数组的顺序,不一定等于页面当前显示的行数。
页面可能受到以下因素影响:
- 搜索条件;
- 筛选条件;
- 配置未同步;
- 名称重复;
- 某些 YAML 项未显示;
- 页面数据尚未刷新。
9. 搜索框中有内容会影响同步吗?
有可能。
如果搜索后页面隐藏或卸载了部分提供商行,脚本可能找不到对应项目。
开始前建议:
- 清空页面搜索框;
- 取消排序或筛选限制;
- 确保完整列表已经加载;
- 再开始检测。
10. 脚本显示“已停止”,但我没有点击停止
可能原因:
- 误触停止按钮;
- 同时运行多个脚本版本;
- 重复点击开始按钮;
- 页面刷新或路由变化;
- 油猴扩展重载脚本;
- 浏览器回收了后台页面;
- 电脑进入休眠。
建议停用所有旧版本,只保留最新脚本,并使用断点继续。
11. /models 成功是否一定代表模型能正常聊天?
不一定。
默认配置通常是 /models 成功就判定密钥可用,这样速度快、消耗低。
如果启用了严格聊天测试,脚本还会向 /chat/completions 发送最小请求。这种方式更准确,但可能:
- 产生少量 token 费用;
- 遇到模型自身限流;
- 增加检测时间;
- 被某些不兼容接口拒绝。
12. 检测会产生费用吗?
默认只请求 /models 时,通常不会产生模型调用费用。
如果回退到或强制使用 /chat/completions,可能产生少量费用,具体取决于服务商计费规则。
十三、结果处理建议
检测完成后建议按以下顺序处理:
1. 查看失败项目
点击:
失败
检查被关闭的项目,必要时导出 CSV。
失败项目通常需要:
- 更换 API Key;
- 检查账号权限;
- 检查服务地址;
- 确认账号是否被封禁;
- 删除已永久失效的配置。
2. 查看异常项目
点击:
异常
异常项目建议稍后重新检测,不要直接批量删除。
可按以下方式处理:
- 等待几分钟后重试;
- 降低请求频率;
- 检查网络;
- 检查服务商公告;
- 检查余额;
- 手动请求接口确认。
3. 导出结果
建议每次检测完成后导出“全部”结果,作为本次检测记录。
如需人工复查,再单独导出“异常”。
十四、推荐操作习惯
为了降低误判和误操作风险,建议:
- 检测前备份 YAML;
- 确保只启用一个脚本版本;
- 清空提供商页面的搜索条件;
- 始终在 AI 提供商页面开始检测;
- 首次运行从第 1 项开始;
- 检测中不要刷新或切换管理中心页面;
- 异常项目不要立即删除;
- 检测完成后导出日志;
- 定期撤销已泄露或长期不用的 API Key;
- 修改 YAML 后重新从第 1 项检测,避免旧断点与新顺序不一致。
十五、快速操作清单
如果你已经熟悉工具,可以按照下面的简化流程操作:
- 打开 AI 提供商页面;
- 清空页面搜索和筛选;
- 在脚本面板选择 YAML;
- 首次检测输入
1; - 中断后点击“获取上次断点”;
- 点击“开始检测”;
- 确认提示框;
- 等待检测完成;
- 查看成功、失败和异常日志;
- 导出 CSV;
- 对异常项目稍后复查。
最重要的三点
检测前打开 AI 提供商页面。
失败会关闭;异常不会修改开关。
中断后先获取断点,再点击开始检测。