本文档介绍 Chatless 如何判断 AI 提供商服务是否可用,以及推荐的检查策略。
核心目标:判断 API 服务是否正常运行(服务可达),而非验证 API 密钥是否有效。
为什么需要健康检查?
- 仅测网络连通性不够:简单的 ping 或 TCP 连接测试无法确认 API 服务本身是否正常工作
- 避免计费:使用真实密钥发起测试请求会消耗 API 额度或触发计费,不适合作为频繁的健康检查手段
- 快速诊断:在用户配置提供商后,快速反馈服务状态,提升体验
推荐策略:使用错误密钥的最小请求
这是一种安全、高效的检查方法,步骤如下:
- 构造一个最小的 API 请求(如
GET /v1/models
或POST /v1/chat/completions
带最小输入) - 在请求头中使用明确的错误密钥(如
Authorization: Bearer sk-invalid
) - 根据响应判断服务状态:
- 4xx + 认证错误信息:说明服务正常,只是密钥无效(符合预期)✓
- 超时 / 连接失败 / 5xx:说明服务不可用或不稳定 ✗
这种方法既能验证服务可用性,又不会消耗 API 额度,且能覆盖 DNS、TLS、路由、网关等整个链路的问题。
示例:OpenAI 兼容接口
以下命令展示如何手动测试 OpenAI API 的可用性:
curl -sS -X GET \
-H "Authorization: Bearer sk-invalid" \
-H "Content-Type: application/json" \
https://api.openai.com/v1/models
预期结果:收到 401
或 403
响应,提示认证失败。这说明服务正常,只是密钥无效。
异常情况:如果长时间无响应或返回 5xx
错误,则说明服务不可用或不稳定。
提示:将 api.openai.com
替换为您使用的提供商或自托管网关的 Base URL 即可。
实现建议
- 短超时 + 有限重试:使用较短的超时时间(如 5-10 秒),避免阻塞用户界面
- 控制检查频率:设置冷却时间(如 1-5 分钟),避免触发服务商的速率限制
- 状态记录与展示:记录最近一次检查的状态与时间戳,在设置界面向用户展示"服务健康度"
- 高级配置:在设置中暴露"检查端点""超时/重试次数"等参数,供高级用户自定义
与真实调用的区别
健康检查 | 真实调用 |
---|---|
使用错误密钥 | 使用用户配置的真实密钥 |
仅判断服务是否可用 | 执行实际的 AI 对话或任务 |
不消耗 API 额度 | 会消耗 API 额度并可能计费 |
周期性或手动触发 | 由用户输入触发 |