LLM API 上线 FAQ 与排障 Runbook:从启动探针到回滚证据

ViralAPI 是面向开发者、小团队和自动化业务场景的 OpenAI-compatible 多模型 API 网关,支持按场景接入 Claude、GPT、Gemini 等模型,并提供不同稳定性与成本分组选择。

一次 curl 返回 200,只能证明当时路径可达。AI 客服、内容生成、数据分析、内部工具、批量自动化和 SaaS 功能接入要进入生产,还需要回答三个问题:错误能否正确分类,自动恢复是否有边界,回滚是否有可核验的证据。

1. 先定义上线资格,而不是先接入模型

上线门禁至少应覆盖以下四类失败注入:

探针 预期动作 失败意味着什么
auth_401 立即停止,不重试、不 fallback 密钥、权限或模型授权未完成
rate_limit_429 在总 deadline 内最多退避一次 限流、并发或预算没有边界
side_effect_timeout 先按幂等键查状态 可能重复发消息、写工单或扣费
transient_503 切到一个已验证备用路由 备用模型或输出契约未验收

门禁结果应归档为机器可读证据,至少包含 release_id、config_hash、tested_at、测试结论和失败项。不要保存 API key、Authorization 头、客户隐私、完整 prompt 或原始响应。

2. 启动探针只做最小验证

set -euo pipefail
: "${VIRALAPI_API_KEY:?set VIRALAPI_API_KEY}"
BASE_URL="${VIRALAPI_BASE_URL:-https://viralapi.ai/v1}"

curl --fail-with-body --connect-timeout 2 --max-time 12 \
  "$BASE_URL/chat/completions" \
  -H "Authorization: Bearer $VIRALAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -H "X-Request-ID: release-2026-11-01-smoke-001" \
  -d '{
    "model": "YOUR_VALIDATED_ROUTE",
    "messages": [{"role":"user","content":"Return JSON: {\"ok\":true}"}],
    "temperature": 0
  }'

生产检查还应单独验证流式输出、JSON Schema、工具调用、图片输入、上下文上限、取消请求、租户限流和备用模型。不要让一个宽泛的“健康检查”掩盖能力差异。

3. 排障决策树:先分类,再决定重试

401/403:认证或授权故障

停止自动动作。检查 key 来源、账号状态、目标模型权限和路由授权。切换模型通常只会隐藏配置问题,还可能把请求送往未经批准的路由。

400/404/422:请求契约故障

检查 endpoint、模型名、消息格式、工具参数、JSON Schema 和上下文长度。这类错误需要修代码或配置,重试不会改变结果。

429:区分瞬时限流与额度耗尽

读取 Retry-After,同时检查租户并发、队列长度和预算。只有总 deadline 仍有余量时才能进行一次带 jitter 的退避;额度耗尽应立即停止并告警。

408/500/502/503/504:有条件恢复

只有幂等请求才能有限重试或 fallback。SDK、业务层和网关中只能有一个重试所有者,否则一次请求会被乘法放大。

超时且有副作用:状态未知

发消息、写工单、扣费或写数据库时,超时不等于失败。先用 operation_id 或幂等键查询服务端状态,再决定补偿或重放。

HTTP 200 但业务无效

把 JSON Schema、引用完整性、工具调用结果和领域规则都纳入成功条件。格式损坏、引用缺失或错误工具参数必须标记 degraded 或失败,不能只看状态码。

4. 用 Python 生成可审计的上线证据

仓库提供无网络示例 examples/python/launch_evidence_pack.py,可以直接放进 CI:

from launch_evidence_pack import evaluate_release

report = evaluate_release([
    {"name": "auth_401", "observed": "stop", "expected": "stop"},
    {"name": "rate_limit_429", "observed": "retry_once", "expected": "retry_once"},
    {"name": "side_effect_timeout", "observed": "lookup_state", "expected": "lookup_state"},
    {"name": "transient_503", "observed": "fallback_once", "expected": "fallback_once"},
])

if report["decision"] != "go":
    raise SystemExit(report)

示例对应的标准库测试位于 tests/test_launch_evidence_pack.py。CI 应在每次修改超时、重试、路由或 fallback 配置后重新生成证据,不要沿用旧版本的“已通过”结论。

5. 不同业务需要不同门禁

业务 关键门禁 降级方式
AI 客服 8-12 秒端到端 deadline、人工接管、禁止重复回复 转人工或只生成草稿
内容生成 批次幂等、单批预算、审核队列 延迟处理或降低并发
数据分析 固定输出 schema、输入版本、抽样复核 返回数据不足,不编造结论
内部工具 权限审计、租户隔离、明确错误 暂停 AI 功能,保留人工路径
批量自动化 有界队列、背压、死信队列 停止入队并保存恢复点
SaaS 功能 租户级限流、熔断、功能开关 隐藏功能或返回可解释状态

推荐日志字段:trace_id、request_id、tenant_id、scenario、route、model、cost_group、attempt、fallback_from、latency_ms、status_code、error_type、degraded、business_outcome。

6. 成本路由也要经过上线门禁

价格口径为:福利分组官方 1.5 折、官转分组官方 6 折、稳定官方分组官方 8 折。选择应基于预算、稳定性、业务场景和失败代价:

  • 福利分组适合可重放、可审核、对短时波动不敏感的测试、分类和离线草稿;
  • 官转分组适合有监控、人工兜底和清晰恢复点的内部工具与常规自动化;
  • 稳定官方分组更适合客户可见 AI 客服、付费 SaaS 核心链路和较高稳定性要求。

价格分组不是 SLA。任何分组都需要实测延迟、错误率、输出契约和恢复路径;路由变更后必须重新生成证据包。

7. 回滚前后都要有证据

上线前记录当前稳定配置哈希、模型路由、功能开关、数据库迁移兼容性和回滚负责人。上线后用同一组合成探针比较:

  • 技术成功率与业务成功率;
  • P50/P95/P99 延迟;
  • 429、5xx、超时和无效输出比例;
  • fallback 比例和 fallback 后业务成功率;
  • 每个成功业务结果的成本;
  • 人工接管、重复操作和客户投诉数量。

触发阈值后,先关闭新路由或功能开关,再回退配置。不要在事故中临时设计回滚步骤。

8. 适合与不适合人群

适合有真实调用量、能自助接入、有基础技术能力,并愿意维护日志、预算、失败边界和回滚流程的小团队、开发者、自动化业务及同行渠道。

不适合小白、白嫖、低预算试玩、高售后消耗、要求代管全部业务逻辑,或可能滥用接口的客户。安全关键、强数据驻留或单一供应商合同 SLA 场景还需要额外合规、合同和人工审批。

FAQ

1. 为什么 curl 成功不能直接上线?

它只覆盖一个时间点的一条路径,没有证明限流、超时、无效输出、备用模型、租户隔离和回滚行为。

2. 429 是否都应该重试?

不是。瞬时限流可在剩余 deadline 内有限退避一次;额度耗尽、租户预算触发或长队列应停止并告警。

3. fallback 为什么也要验证输出?

不同模型的 JSON、工具调用、引用和安全行为可能不同。请求兼容不代表业务契约兼容。

4. 超时后为什么不能直接重放?

有副作用的操作可能已经成功,只是响应丢失。先查状态可以避免重复发消息、重复写入或重复计费。

5. 证据包应该保存多久?

至少覆盖配置回滚和事故复盘周期。保留脱敏测试结果与配置哈希,不保存密钥和客户原始内容。

6. 如何选择价格分组?

先量化失败代价、可重放性、人工审核、稳定性和预算,再选择福利、官转或稳定官方分组,不要只按最低单价决策。

资料与联系

  • 官网:https://viralapi.ai
  • GitHub:https://github.com/sxl7530-hashs/viralapi-examples
  • GitHub Pages:https://sxl7530-hashs.github.io/viralapi-examples/
  • FAQ:https://sxl7530-hashs.github.io/viralapi-examples/faq.html
  • 深度内容矩阵:https://sxl7530-hashs.github.io/viralapi-examples/deep-business-technical-content-matrix.html
  • 邮箱:miutayoung@gmail.com
  • Telegram:viral_8866
  • WeChat:viral_8866