AI API 路由可观测性

AI API 多模型路由日志怎么补 trace_id,才能查到实际命中的接口?

· 修改日期 2026-08-09 · 永沃云枢

只记录模型名和 HTTP 状态,无法解释一次请求到底走了哪个 provider。把路由证据补到日志里,排错和成本复盘都会快很多。

搜索意图:开发者在 https://ai.jn83.com 接入多个 AI 模型接口,或通过 CCSwitch 配置统一调用入口时,发现同一个模型名有多个 profile,失败时却不知道请求实际命中了哪一条路由。有人会搜索“GPT 中转日志怎么查”,更规范的做法是建立 AI API 接入的 trace_id 和 provider 级调用记录。

真实问题:请求成功了,却查不到它走了谁

多模型系统常见一个误区:业务日志只写 model=gpt、status=success,网关日志只写 path=/chat,账单日志又用另一套流水号。平时看起来没有问题,一旦出现延迟、输出差异、费用异常或备用路由触发,就很难把三段记录拼起来。

我更倾向于把一次开发者 AI 调用看成一条有父子关系的链路。用户请求生成一个 trace_id,网关、路由器、模型 provider 和业务写回各自记录同一个 trace_id;如果发生重试,就新建 attempt_id 并保留 parent_trace_id。这样“请求失败”和“某次尝试失败”不会混为一谈。

适用场景

这套日志设计适合多租户 AI API 接入、主备模型切换、CCSwitch 配置管理、Codex 接入后的工具调用,以及 AI 自动化办公中的批量任务。它尤其适合需要解释成本、延迟和输出差异的团队。记录路由证据并不等于保存完整提示词,敏感内容仍然应该脱敏或只保存摘要。

操作步骤:从入口到账单建立同一条线

  1. 在业务入口生成 trace_id,同时记录 tenant、project、environment、task_type 和 prompt_version。不要用用户手机号或完整提示词代替追踪 ID。
  2. 在路由层记录 route_profileproviderbase_url_namerequested_modelselected_model。如果路由发生降级,要写出原因和目标 profile。
  3. 在模型调用层记录 attempt_id、开始时间、首字时间、结束时间、输入输出 token、finish_reason 和错误类别。Key 只记录脱敏后的标识,不保存密钥原文。
  4. 在业务层记录 parser_status、write_status、callback_status 和 billing_ref。一次 200 只能证明某个调用返回,不代表整条任务完成。
  5. 用三条样本做回归:主路由成功、备用路由成功、所有路由失败。分别核对 trace_id 是否贯穿,并确认重试只增加 attempt_id,不会生成无法关联的新请求。

如果采用日志平台,查询条件优先使用 trace_id,再按 attempt_id 排序。没有集中日志时,也可以先把网关、应用和账单的脱敏 CSV 按 trace_id 合并。开发者 AI 调用的标签方法可参考 项目与环境归因,通用观测字段可对照 AI API 使用观测

常见问题 / 避坑

第一,不要把 requested_model 当成 selected_model。前者是用户要求,后者才是实际命中。第二,不要用一次重试覆盖原记录,否则看不到路由切换和真实延迟。第三,不要为了排错把完整提示词、文件内容和 API Key 写入普通日志。第四,provider 名称要稳定,不能今天叫 default、明天叫 backup,最后又按人理解。

还有一个容易忽略的点:CCSwitch 配置可能在本地、网关和应用里各有一份。日志里必须记录配置版本或 profile_revision,否则只知道“调用了 CCSwitch”,却不知道当时使用的是哪版模型调用管理规则。需要查看基础入口时,可继续阅读 AI API 接入专题CCSwitch 配置专题Codex 接入专题

检查清单

验收标准

随机抽一条调用记录,三分钟内应该能回答:谁发起、命中了哪个 provider、使用哪一版 profile、尝试了几次、消耗多少、在哪一层失败。若只能看到一个 200 或一个模型名,说明日志仍然不足。对于 AI 自动化办公和 Codex 接入任务,还要确认业务结果和模型返回可以分别追踪。

复盘时保留什么

每次更换路由策略、调整模型别名或修改 CCSwitch 配置时,保留一组脱敏样本和一份字段说明。复盘不必保存所有原文,重点是把 trace_id、路由选择、错误分类和费用结果串起来。这样模型调用管理从“感觉变慢了”变成可核对的事实,也方便后来的人判断问题来自网关、AI 模型接口还是业务层。

字段命名要保持稳定

日志字段不需要一次设计得很复杂,但名称必须固定。比如入口一直使用 trace_id,单次尝试一直使用 attempt_id,实际命中方一直使用 provider 和 selected_model。字段含义稳定后,查询、告警和费用报表才不会因为不同服务的叫法变化而失去可比性。调整字段时要保留旧字段一段时间,并用同一组脱敏样本验证新旧记录能否对应。

告警与检索要分开

告警只需要告诉值班人哪一层异常,检索才负责还原完整链路。可以按 provider、profile、错误类别和延迟分布设置聚合视图,再用 trace_id 回到单次请求。不要把每条原始响应都推成告警,也不要只保留聚合数字而删除样本。前者会让团队忽略真正问题,后者会让复盘没有证据。

发布前抽样

上线前抽三条记录做人工复核:一条主路由成功、一条备用路由成功、一条失败。确认每条都有 trace_id、attempt_id、provider、selected_model 和费用引用,且敏感内容已脱敏。抽样结果比只看总成功率更能说明路由日志是否真的可用。

更多 AI API 接入、AI 模型接口和模型调用管理实践,可继续阅读永沃云枢在 https://ai.jn83.com 的专题内容。