可用性检查(健康检查)

本文档介绍 Chatless 如何判断 AI 提供商服务是否可用,以及推荐的检查策略。

核心目标:判断 API 服务是否正常运行(服务可达),而非验证 API 密钥是否有效。

为什么需要健康检查?

  • 仅测网络连通性不够:简单的 ping 或 TCP 连接测试无法确认 API 服务本身是否正常工作
  • 避免计费:使用真实密钥发起测试请求会消耗 API 额度或触发计费,不适合作为频繁的健康检查手段
  • 快速诊断:在用户配置提供商后,快速反馈服务状态,提升体验

推荐策略:使用错误密钥的最小请求

这是一种安全、高效的检查方法,步骤如下:

  1. 构造一个最小的 API 请求(如 GET /v1/modelsPOST /v1/chat/completions 带最小输入)
  2. 在请求头中使用明确的错误密钥(如 Authorization: Bearer sk-invalid
  3. 根据响应判断服务状态:
    • 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

预期结果:收到 401403 响应,提示认证失败。这说明服务正常,只是密钥无效。

异常情况:如果长时间无响应或返回 5xx 错误,则说明服务不可用或不稳定。

提示:将 api.openai.com 替换为您使用的提供商或自托管网关的 Base URL 即可。

实现建议

  • 短超时 + 有限重试:使用较短的超时时间(如 5-10 秒),避免阻塞用户界面
  • 控制检查频率:设置冷却时间(如 1-5 分钟),避免触发服务商的速率限制
  • 状态记录与展示:记录最近一次检查的状态与时间戳,在设置界面向用户展示"服务健康度"
  • 高级配置:在设置中暴露"检查端点""超时/重试次数"等参数,供高级用户自定义

与真实调用的区别

健康检查真实调用
使用错误密钥使用用户配置的真实密钥
仅判断服务是否可用执行实际的 AI 对话或任务
不消耗 API 额度会消耗 API 额度并可能计费
周期性或手动触发由用户输入触发