面向 Sub2API 管理员的 Windows 和 Android 批量连接测试客户端。登录自己的兼容 Sub2API 管理站点后,可以集中查看账号、自动读取模型信息,并对选定账号批量发起真实连接测试。测试完成后,还可以按最新测试结果筛选账号,并在明确确认后批量删除选中的账号。
这是独立的第三方客户端,不是 Sub2API 官方产品。它通过 Sub2API 的管理接口工作;除你在确认对话框中明确同意的账号删除操作外,不会修改你的 Sub2API 服务端数据。
如果你维护的 Sub2API 站点中有多个账号,并且需要频繁确认它们是否还能正常完成连接测试,这个工具适合你。它将网站中逐个点击“测试连接”的操作集中到 Windows 或 Android 界面中,支持按测试结果筛选、选择账号、设置并发数、查看实时进度和取消任务,也能在确认后删除不再需要的账号。
它不适合以下用途:
- 代替 Sub2API 服务端、批量创建账号或修改账号配置;
- 绕过上游平台的使用限制、风控或计费规则;
- 充当账号、密钥或密码管理器;
- 保存或同步测试历史到多个设备。
- 使用你自己的 Sub2API 站点地址、管理员邮箱和密码登录,不内置任何站点、账号或令牌。
- 支持“记住登录”:密码不保存;Windows 将刷新令牌保存到 Credential Manager,Android 将刷新令牌保存到系统 Keystore 支持的安全存储,站点地址和邮箱等普通偏好保存在应用设置中。
- 支持 TOTP 两步验证。
- 登录或刷新账号后,自动在后台读取模型元数据;加载期间显示“正在获取模型…”,不会把尚未完成的查询误显示为 0/N。
- 支持按当前已选账号或筛选结果刷新模型范围;模型旁的 x/y 表示该模型出现在多少个已查询账号的模型列表中。
- 支持测试已选账号或当前筛选结果,测试并发可选 1、3 或 5。
- 实时显示排队、测试中、可用、配额耗尽、超时 / 待复测、失败、取消、耗时和错误摘要。
- 支持按账号最近一次测试结果筛选“可用 / 配额耗尽 / 超时 / 待复测 / 错误”,方便在测试后集中处理账号。
- 支持批量删除已选账号。删除前会列出具体账号并要求一次确认;若选中账号中包含超时结果,会明确提示该结果未能判定账号状态。删除请求会真实发送到你的 Sub2API 站点,账号后续是否可恢复取决于服务端实现。
- 支持取消正在执行的批量任务。
- 对缺失分页信息、缺失模型显示名和新增非终态 SSE 记录做了兼容处理,以降低 Sub2API 非破坏性更新带来的影响。
| 平台 | Release 资产 | 已验证范围 | 说明 |
|---|---|---|---|
| Windows 10/11 x64 | windows-x64-setup.exe |
登录、TOTP、记住登录、账号与模型加载、批量测试、取消和删除确认 | NSIS 当前用户安装包;当前未进行 Windows 代码签名。 |
| Android 9 / API 28 及以上,arm64-v8a | android-arm64-v8a.apk |
API 28:安装、冷启动和登录界面;API 35:登录、TOTP、记住登录、会话恢复、账号与模型加载、批量测试、取消和删除确认 | 已签名的直接安装 APK;批量任务只在应用保持前台时运行。 |
Android 首个发布版本只提供 arm64-v8a APK,不提供 iOS、AAB、后台保活、后台批处理、云同步或自动更新。不同厂商系统和未验证的旧版本 Android 不作绝对兼容承诺。
- Windows:Windows 10 或 Windows 11,x64 架构。
- Android:Android 9 / API 28 或更高版本,64 位 ARM(
arm64-v8a)设备。 - 可访问你自己的 Sub2API 管理站点。
- 首次安装时如系统没有 WebView2 Runtime,安装程序会下载 Microsoft WebView2 引导程序,因此需要网络。
-
打开本项目的 Releases 页面。
-
按设备下载对应安装包,以及同一 Release 中的
SHA256SUMS.txt。v1.2.1 提供:Sub2API-Batch-Tester_1.2.1_windows-x64-setup.exeSub2API-Batch-Tester_1.2.1_android-arm64-v8a.apkLICENSE.txt
-
可选但推荐:校验下载文件的 SHA-256。
Get-FileHash .\Sub2API-Batch-Tester_1.2.1_windows-x64-setup.exe -Algorithm SHA256输出的哈希值应与 SHA256SUMS.txt 中同名文件的值一致。
Android 可在支持 sha256sum 的终端中执行:
sha256sum Sub2API-Batch-Tester_1.2.1_android-arm64-v8a.apk
运行 .exe,按提示完成“当前用户”安装,再从开始菜单启动“Sub2API 批量连接测试”。
安装程序当前未进行代码签名。Windows 可能显示 SmartScreen 提示。请只从本项目的 GitHub Release 下载文件,并在继续前先核对文件名、发布页面和 SHA-256;无法确认来源时不要运行。
在 Android 手机上打开或传输 .apk 后安装。首次通过浏览器、文件管理器或 ADB 安装时,系统可能要求授予该来源“安装未知应用”的权限;这是 Android 对直接安装 APK 的系统提示。Release APK 已使用发布签名,仍应在安装前核对 Release 页面和 SHA-256。
Android 批量测试需要应用保持在前台。切换到后台、锁屏、被系统终止或网络中断时,正在进行的任务可能不会继续完成;重新回到应用后请按实际结果重新测试。
Windows 可在“已安装的应用”中找到 Sub2API Batch Tester 后卸载;Android 可在系统应用设置中卸载。卸载不会替你修改 Sub2API 服务端的数据。
在登录页填写:
- 站点地址:Sub2API 根地址,例如 https://your-sub2api.example。如果复制的是包含 /api/v1 的地址,也可以直接粘贴,软件会自动规范化。生产环境建议使用 HTTPS;http:// 仅适合可信的本地测试环境。
- 管理员邮箱:你自己站点的管理员邮箱。
- 密码:对应管理员密码。
- 记住登录:需要下次自动恢复会话时保持勾选;在公用电脑上建议取消勾选。
如果管理员账号启用了 TOTP,完成密码登录后会出现 6 位动态验证码输入框。
登录成功后,账号表格会先显示。软件随后在后台读取账号可见的模型列表;模型选择器显示“正在获取模型…”时,表示模型元数据仍在加载。
这一步读取的是模型元数据,不会调用连接测试接口。模型加载完成后,默认模型 GPT-5.6 Terra 以及其他可见模型会出现在下拉列表中。
你可以:
- 使用搜索框按账号名称、平台、类型或 ID 筛选;
- 使用“全部测试结果 / 可用 / 配额耗尽 / 超时 / 待复测 / 错误”筛选最近一次测试的结果;
- 勾选少数指定账号,然后点击“测试已选”;
- 不勾选账号,直接点击“测试筛选结果”。
Windows 使用账号表格;Android 使用适合窄屏的账号卡片和“选择当前筛选结果”控件。两端共享同一选择、筛选、模型和批量测试逻辑,不需要横向滚动表格。
建议第一次使用时先选择少量账号,以确认站点、模型和网络环境都符合预期。
默认模型是 GPT-5.6 Terra,模型 ID 为 gpt-5.6-terra。打开模型下拉框时,软件会按当前已选账号或筛选结果刷新该范围的模型信息。
并发数可选 1、3、5:
| 并发数 | 适合的场景 |
|---|---|
| 1 | 排查单个账号,或担心上游限流时。 |
| 3 | 默认值,适合大多数日常检查。 |
| 5 | 速度更快,但会同时向更多账号发起测试请求。 |
连接测试是由 Sub2API 服务端执行的真实请求。请根据你的上游平台规则、限流策略和账号额度谨慎选择测试范围与并发数。
测试开始后,表格会持续更新每个账号的状态和耗时。点击任务区域中的取消按钮,会停止尚未完成的账号测试;已经完成的结果会保留在当前窗口中。
测试完成后,可以用工具栏中的“测试结果”下拉框集中查看不同结果:
- 可用:最近一次测试成功的账号;
- 配额耗尽:最近一次测试返回
usage_limit_reached的账号; - 超时 / 待复测:未获得有效最终测试结论,且客户端已识别请求超时、服务端返回 HTTP 408/504,或可疑传输/流结束发生在接近 90 秒请求上限时的账号。它不表示账号失效。
- 错误:最近一次测试有明确的非超时失败结论,例如模型不支持、认证错误或服务端业务错误。
“全部测试结果”不会隐藏账号;切换到上述任一具体结果时,未测试、排队中、测试中和已取消的账号不会显示。这些筛选只使用当前应用会话中的最新测试结果,关闭软件后结果不会保留。
如需删除账号,先勾选需要删除的行,再点击“删除已选 N”。随后会出现确认对话框,列出待删除账号的名称和 ID。请逐项确认无误后点击确认按钮。
- 删除会真实调用你的 Sub2API 管理接口,不是只从软件表格中隐藏账号。
- 若待删除清单包含“超时 / 待复测”账号,确认对话框会提示这些账号未获得有效测试结论;仍只保留本次一次确认,不会自动删除或增加额外确认步骤。
- 删除后是否可恢复由 Sub2API 服务端实现决定;本软件不保存可用于恢复账号的数据,也不提供恢复入口。
- 删除和连接测试不能同时进行。请等待当前批量测试完成或取消完成后,再发起删除。
- 删除完成后,软件会重新同步账号列表,以反映服务端可能级联处理的关联账号。若部分请求未获成功响应,软件会显示详情;仍在同步后列表中的账号会保持选中,便于你检查后重试。
模型列表中的 x/y 不是成功率:
- x:在成功读取模型元数据的账号中,返回该模型的账号数量;
- y:本次查询的账号总数;
- 未知:因网络、权限或接口错误而无法读取模型列表的账号数量。
因此,x/y 只说明模型元数据的可见性,不表示这些账号一定能成功完成连接测试。最终可用性以实际测试结果为准。
| 状态 | 含义 | 是否最终状态 |
|---|---|---|
| 排队中 | 已加入本次批量任务,尚未开始请求。 | 否 |
| 测试中 | Sub2API 正在对该账号执行连接测试。 | 否 |
| 可用 | 服务端返回测试成功。 | 是 |
| 配额耗尽 | 服务端错误中包含 usage_limit_reached,软件将它从普通失败中单独标出。 | 是 |
| 超时 / 待复测 | 没有获得有效最终测试结论,且已识别为请求超时、HTTP 408/504,或接近 90 秒上限的可疑传输/流结束。不能据此判断账号失效。 | 是 |
| 失败 | 明确的非超时失败,例如模型不支持、认证错误、非超时网络错误或服务端业务错误。 | 是 |
| 已取消 | 用户取消任务后,该账号没有完成测试。 | 是 |
账号表格中的“启用 / 停用”是 Sub2API 账号自身的管理状态,与上表中的测试结果是两回事。
工具栏的“测试结果”筛选只匹配账号的最近一次最终测试结果:
| 筛选项 | 会显示的账号 | 不会显示的账号 |
|---|---|---|
| 全部测试结果 | 所有账号 | 无 |
| 可用 | 状态为“可用”的账号 | 未测试、处理中、配额耗尽、错误、已取消 |
| 配额耗尽 | 状态为“配额耗尽”的账号 | 未测试、处理中、可用、错误、已取消 |
| 超时 / 待复测 | 状态为“超时 / 待复测”的账号 | 未测试、处理中、可用、配额耗尽、错误、已取消 |
| 错误 | 状态为“失败”的账号 | 未测试、处理中、可用、配额耗尽、超时 / 待复测、已取消 |
这里的“错误”不包含“超时 / 待复测”或“已取消”;“超时 / 待复测”表示未得到有效测试结论,“已取消”表示用户主动中止了本次任务。重新测试某个账号后,它会以新的结果参与筛选。
批量删除用于从 Sub2API 当前账号列表中清理你确认不再需要的账号。建议先测试、按结果筛选,再手动勾选要删除的账号。软件不会因为一个账号显示“配额耗尽”或“错误”而自动删除它。
删除的实际语义由你所使用的 Sub2API 服务端决定。当前上游实现使用软删除;删除父账号时,服务端还可能级联处理关联的影子账号。因此,请不要把“删除”理解为本软件在本地隐藏一行数据,也不要假定所有站点都提供相同的恢复方式。
删除流程如下:
- 在表格中勾选一个或多个账号。
- 点击“删除已选 N”。
- 在确认对话框中核对账号名称和 ID。打开对话框后,本次待删除清单会固定,不会因随后切换筛选或选择而改变。
- 点击确认按钮,软件逐个向站点提交删除请求。
- 查看结果:软件会重新同步账号列表;显示服务端确认成功的数量,以及未获成功响应的账号 ID 和错误原因。最终以同步后的账号列表为准。
在请求进行期间,表格选择、刷新、模型加载和测试操作会暂停,以避免操作对象发生变化。确认对话框中的“取消”只会关闭对话框,不会删除任何账号。
软件调用的是当前支持的 Sub2API 管理测试接口:
POST /api/v1/admin/accounts/{account_id}/test
软件不是绕过 Sub2API 直接模拟请求,而是让你的 Sub2API 服务端执行测试,并读取其 SSE 流中的最终结果。
软件的批量测试结果保留在当前应用会话中,不会自动写成 Sub2API 网站上的历史测试记录。回到网站并刷新页面后,不会自动出现本软件中的“可用 / 超时 / 待复测 / 失败 / 配额耗尽”结果;如果需要在网站中再次确认,可以在网站中重新发起测试。
批量删除是另一项独立操作。只有在确认对话框中确认后,软件才会调用以下接口删除选中的账号:
DELETE /api/v1/admin/accounts/{account_id}
删除请求完成后,软件会重新同步 Sub2API 当前账号列表。这样,服务端处理的关联账号(例如随父账号级联处理的影子账号)也能在表格中得到反映。与测试结果不同,删除会直接改变站点数据;刷新网站页面后可以看到服务端返回的当前账号列表。账号后续是否可恢复取决于所使用的 Sub2API 服务端实现。
同一账号在不同时间、不同模型或不同上游网络状态下可能得到不同结果。请在比较网站与软件结果时确认测试模型和时间接近。
本项目不包含遥测、账号云同步或内置第三方站点。应用运行时的业务请求只会发送到你在登录页填写的 Sub2API 站点。
| 数据 | 保存位置 | 说明 |
|---|---|---|
| 管理员密码 | 不保存 | 仅用于本次登录请求。 |
| 刷新令牌 | Windows Credential Manager / Android 系统 Keystore 支持的安全存储 | 仅在启用“记住登录”且服务器返回刷新令牌时保存;不会写入普通设置、日志或前端持久化数据。 |
| 站点地址、邮箱、上次模型、并发设置 | 应用本地设置 | 用于下次填写和恢复偏好。 |
| 测试结果 | 当前应用内存 | 关闭应用后不会作为历史记录同步。 |
| 删除操作记录 | 不保存 | 软件只显示本次操作结果;账号是否被删除以 Sub2API 站点中的实际状态为准。 |
退出登录会删除保存的刷新令牌,但会保留站点地址和邮箱等普通偏好,方便重新登录。Android 端如果安全存储不可用,本次已完成的普通登录仍可继续使用,只会关闭“记住登录”并在界面中说明。
请不要在 GitHub Issue、Pull Request、截图、日志或讨论中提交真实站点地址、邮箱、账号名称、密码、访问令牌、刷新令牌或完整请求响应。
软件当前依赖以下 Sub2API 管理接口:
GET /api/v1/admin/accounts
GET /api/v1/admin/accounts/{account_id}/models
POST /api/v1/admin/accounts/{account_id}/test
DELETE /api/v1/admin/accounts/{account_id}
已覆盖的非破坏性兼容情形包括:新增 JSON 字段、原始响应与常见数据包裹响应、缺少部分分页元数据、缺少模型显示名,以及 SSE 中新增或无关的非终态记录。
如果 Sub2API 移除了上述接口、修改了必须字段的语义,或改变了认证和测试协议,这属于破坏性更新,需要同步更新本项目。软件不承诺兼容所有未来版本。
Android 的最低支持版本是 API 28;发布前会在 API 28 模拟器上验证安装、冷启动和登录界面,并在当前 API 级别模拟器上做完整主流程验证。Android 厂商对后台执行、电池优化和网络切换的策略不同,因此 v1.2.1 明确只保证应用保持前台时的批量任务行为。
确认站点地址可在浏览器中访问、管理员账号具备权限,并检查密码和 TOTP 验证码。地址可以包含 /api/v1,但不应包含无关的登录页面路径。
先确认账号列表是否能正常加载,再检查站点网络、管理员权限和服务端日志。模型元数据请求会针对账号分别执行;部分账号失败时,其他账号仍可返回模型信息。
模型加载期间不会显示 0/N。加载完成后,如果默认模型没有出现在某些账号的模型元数据中,才可能显示较低数量或 0/N。这不等同于连接测试的最终失败结果。
测试是实时的。上游服务、模型可用性、额度、网络和测试模型都可能在两次请求之间变化。请使用同一模型,并在接近的时间重新比较。
这些筛选只显示最近一次测试已经得到对应最终结果的账号。未测试、排队中、测试中和已取消的账号会被隐藏。请选择“全部测试结果”查看所有账号,或重新测试这些账号后再筛选。
这表示软件没有获得可用于判断账号状态的最终测试结论:请求可能在约 90 秒上限超时,服务端可能返回 HTTP 408/504,或接近该上限时连接/流提前结束。它不等同于账号失效,也不会进入“错误”筛选。请在网络、站点和上游状态稳定后重新测试,再决定是否处理该账号。
是否能够恢复取决于你所使用的 Sub2API 服务端。当前上游实现使用软删除,但本软件没有恢复入口,也不会保存恢复所需的数据。请查阅站点的管理功能或服务端文档,并在确认账号名称和 ID 无误后再提交删除。
这表示其中一部分请求已收到成功响应,另一部分被服务端拒绝、超时或因网络等原因未收到成功响应。软件会重新同步当前账号列表;仍在列表中的账号会保持选中。查看错误详情、检查站点权限或网络后,可以重新尝试删除这些账号。
当前安装程序未代码签名。请先确认文件来自本项目 GitHub Release,并使用 SHA256SUMS.txt 校验哈希;无法确认来源时不要继续运行。
确认下载的是 android-arm64-v8a.apk,而不是 Windows .exe;设备需要 Android 9 / API 28 或更高版本和 64 位 ARM 架构。确认 SHA-256 后,在系统提示时允许当前浏览器或文件管理器安装未知应用。若设备已安装来自不同签名证书的同包名应用,先卸载旧应用再安装。
v1.2.1 不申请后台保活或通知权限。批量测试设计为前台任务,切后台、锁屏、系统省电策略或网络中断均可能使未完成测试不能继续;回到前台后请重新确认和测试未完成账号。
目前没有自动更新功能。新版本会发布在 GitHub Releases 页面。
- Windows 10/11 x64
- Node.js 20 LTS、22 LTS 或 24 及更高版本
- Rust stable
- Visual Studio Build Tools(C++ x64 工具链)
- WebView2 Runtime
- Android 开发还需要 JDK 17、Android SDK/NDK、Android API 28 和当前 API 级别的 system image,以及 ADB。完整命令见 Android 开发说明。
npm ci
npm run icons:generate
npm test
npm run check
npm run build
cargo fmt --manifest-path src-tauri/Cargo.toml --check
cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets -- -D warnings
cargo test --manifest-path src-tauri/Cargo.toml
npm run build:installerTauri 的原始构建输出路径(文件名含空格):
src-tauri/target/release/bundle/nsis/Sub2API Batch Tester_1.2.1_x64-setup.exe
Android 调试构建示例:
npm exec tauri -- android build --debug --target x86_64 --apk上传到 GitHub Release 时,发布资产统一命名为 Sub2API-Batch-Tester_1.2.1_windows-x64-setup.exe 和 Sub2API-Batch-Tester_1.2.1_android-arm64-v8a.apk;SHA256SUMS.txt 使用相同名称。
src/ Vue 界面、状态组合函数和前端单元测试
src-tauri/src/ Tauri 命令、会话、本地凭据、Sub2API API 客户端和批量队列
src-tauri/icon-source/ 已确认主图、Android 前景/背景和图标生成清单
src-tauri/gen/android/ Android 原生工程、系统栏与 Keystore 初始化桥接
src-tauri/tests/ Rust 集成测试
docs/ 面向维护者的架构说明
.github/ CI 与 Issue 模板
更多实现边界见 架构说明 和 Android 开发说明。
- 提交代码前请阅读 贡献指南。
- 与安全或隐私有关的问题请阅读 安全说明。
- 版本变更记录见 CHANGELOG.md。
- 本项目采用 MIT License。
本项目是独立的第三方桌面客户端,不是 Sub2API 官方产品,也不表示获得 Sub2API 维护者的认可或背书。
本项目仅通过 HTTP 管理接口与 Wei-Shaw/sub2api 交互,不包含、链接、修改或分发 Sub2API 的源代码或二进制文件。
截至本版本发布时,Sub2API 上游项目采用 GNU Lesser General Public License v3.0(LGPL-3.0)。该许可证适用于 Sub2API 本身;本项目按 MIT License 发布。使用本工具时,也请遵守上游项目和所使用平台的规则。