排错
上线前检查
上线前逐项核对地址、密钥、模型和超时。
先建立最小基线
上线检查的目标不是“配置看起来正确”,而是证明同一套生产配置能完成一次可追踪的最小请求。本地或预发布演练使用专用、可撤销、有限额的测试 Key,并准备一个从该 Key 实时列表取得的模型,以及不会包含用户数据的短输入。生产 Key 只允许通过密钥管理器在受控部署环境中执行最终检查,绝不能复制到个人终端。
下面所有 <API_KEY> 和 <MODEL> 都必须替换。不要把真实值写进文档、脚本仓库或前端构建变量。
最短安全路径
新接入时,不要一开始就启用流式输出、工具、图片或生产流量。先在本地或预发布环境中使用专用测试 Key,逐项证明这条路径:
- 部署环境能够调用
GET /v1/models。 - 从返回中复制的一个精确模型 ID,能完成一次短的
/v1/responses请求。 - 操作人员能够找到对应的用量记录和脱敏后的请求证据。
本页是新手基线的生产版本。若要在本地执行一套可直接复制的首次请求,请从 cURL 开始;若该请求失败,请先按常见错误排查,不要同时修改多项设置。演练通过后,再由密钥管理器注入生产 Key,在受控部署环境中重复最终的模型列表和最小请求检查;不要把生产 Key 移到演练环境。
1. 地址与网络
- Base URL 使用
https://suoxie.codes/v1,客户端最终请求中只出现一次/v1。 - 使用 HTTPS,不关闭证书校验,不在生产使用 cURL 的
-k。 - 生产主机能够解析域名并访问 443 端口,系统时间准确,CA 证书处于受支持状态。
- 如果使用企业代理,确认它不会删除 Authorization、
Content-Type、Location或Retry-After。 - 为连接、读取和整个请求分别设置合理的截止时间;超时不能无限大。
先从部署环境运行:
curl --fail-with-body --show-error --connect-timeout 10 --max-time 30 \
https://suoxie.codes/v1/models \
-H "Authorization: Bearer <API_KEY>"通过条件: DNS、TLS 和认证均成功,返回 HTTP 200,而不是只在开发电脑上成功。
2. Key、账户与分组
- Key 已启用、未过期且属于目标环境;测试、预览和生产分别使用独立 Key。
- 余额、订阅或 Key 配额足以覆盖正常峰值和有限重试。
- Key 绑定的分组允许目标模型及所需能力,例如 Responses、Messages 或图片。
- Key 只保存在部署平台的密钥管理中,不进入 Git、镜像、前端代码、日志或报错页面。
- 已定义轮换和紧急撤销步骤,并能在不停止所有服务的情况下更换单把 Key。
3. 模型与协议
- 使用生产 Key 调用
GET /v1/models。 - 从当前
data[].id复制完整模型 ID,不使用截图中的旧名称。 - 确认客户端协议与端点匹配:Responses、Anthropic Messages 或 Chat Completions。
- 对文本、流式、工具、图片等每一种实际使用的能力分别做最小验证。
- 确认客户端没有自动添加额外
/v1、模型前缀或供应商默认域名。
模型出现在列表中是必要条件,但不等于所有高级能力都已验证。
4. 最小请求与成功判定
curl --fail-with-body --show-error --max-time 90 \
https://suoxie.codes/v1/responses \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{"model":"<MODEL>","input":"Reply with OK","store":false}'同时满足以下条件才算通过:
- HTTP 状态为 200,响应可以被 JSON 解析。
- 响应
status和输出内容符合接口约定,而不是空白错误页或代理 HTML。 - 控制台
/usage能找到相同时间、Key、模型和端点的记录。 - 日志中没有完整 Authorization 头、完整 Key 或业务输入。
如果 GET /v1/models 已成功但本请求失败,网络和 Key 已经得到验证。请保持相同的 Key 与模型,检查端点、JSON 请求体和能力权限,不要立刻轮换凭据。
5. 超时、重试与并发
- 只对可恢复错误做有限重试,例如连接中断、429 和部分 5xx;400、401、403 不应原样重试。
- 429 优先遵守
Retry-After,否则使用带随机抖动和上限的退避。 - 设置最大尝试次数和总截止时间,防止 SDK、网关和业务层叠加重试形成请求风暴。
- 对可能产生费用或副作用的请求,超时后先查用量/任务状态;不要假定“没收到响应就是没执行”。
- 从小并发逐步压测,记录成功率、P95 延迟、429、5xx 和费用,再决定生产并发。
长耗时图片优先使用异步图像任务。异步轮询遵守 Retry-After,持久化 task_id,并在 completed 或 failed 后停止。
6. 解析、兼容与降级
- 客户端按字段和
type解析响应,不依赖数组永远只有一个元素或字段顺序固定。 - 能接受不认识的附加字段;对必需字段缺失给出可诊断错误。
- 流式客户端能处理增量事件、正常结束、网络中断和部分输出。
- 上游不可用时有清晰用户提示、队列或业务降级,而不是无限等待。
- 将模型可用性变化视为运行时条件,上线前重新查询并准备受控切换方案。
7. 可观测性与安全
至少记录时间、内部请求关联 ID、端点、模型、状态码、延迟、尝试次数和脱敏后的错误类型。不要记录完整 Key、完整提示、图片原件或完整模型输出,除非业务已取得授权并设置保留期限。
上线前确认:
- 告警能覆盖认证失败突增、429、5xx、延迟、费用和余额异常。
- 日志、指标和用量页使用相同的时区说明,能够关联同一次请求。
- 支持人员知道如何撤销 Key、缩小影响范围和收集脱敏材料。
- 关键配置有回滚版本,发布失败时不需要临时在服务器上手改。
发布前打勾
- [ ] 生产主机的
/v1/models请求返回 200。 - [ ] 模型 ID 来自生产 Key 的实时返回。
- [ ] 每种实际使用的端点都完成了最小请求。
- [ ] 用量和费用与小样本预期一致。
- [ ] 超时、重试、并发和异步轮询都有明确上限。
- [ ] 401、403、429、5xx 和网络中断已在预发布环境演练。
- [ ] 日志与错误页面不泄露凭据或用户内容。
- [ ] 监控、告警、轮换、撤销和回滚负责人明确。
下一步
任何一项未通过都先停止放量,按常见错误修复后重新执行清单。仍无法定位时,使用联系支持中的模板提交脱敏报告。
清单通过不代表配置永久有效:Key、分组、模型、客户端协议、网络路径或发布配置变化后,都应再次完成模型列表和最小请求检查。
