GPT-5.5 能承接更复杂的生产任务,但企业上线后更关心的是:出问题时能不能查清楚。
- 谁调用了模型?
- 用了哪些上下文和工具?
- 输出了什么结果?
- 为什么失败、变慢或变贵?
- 这次调用能不能审计和复盘?
如果日志里只有一行“调用成功”,基本等于没记录。
一、请求日志:先把调用链路讲清楚
每次模型调用至少记录这些字段:
| 字段 | 说明 |
|---|---|
| request_id | 贯穿前端、后端、模型网关和数据库 |
| user_id / tenant_id | 用户、租户或业务方标识 |
| app_module | 发起调用的业务模块 |
| model | 具体模型版本或别名 |
| status / error_type | 成功、失败、限流、超时、拒答等 |
| latency_ms | 总耗时,流式场景可拆首 token 耗时 |
| token_usage | input、cached input、output、reasoning token |
| retry / fallback | 是否重试,是否切换备用模型 |
两个细节不能省。
第一,模型名不能只写“GPT”,要记录到具体版本或别名,比如 gpt-5.5、claude-opus-4-7、gemini-3.1-pro-preview,否则模型升级后很难对齐历史问题。
第二,业务请求 ID 要贯穿全链路。用户说“刚才那个回答错了”,你应该能从一次点击定位到对应模型调用,而不是靠时间猜。
二、内容日志:不要默认全量存原文
很多团队第一反应是把 prompt 和模型输出全存下来。测试环境可以,生产环境要谨慎。
OpenTelemetry 的 GenAI 语义规范提醒过,模型输入、系统指令和输出内容往往体积大,也可能含敏感信息。更稳的做法是分级记录:
- 低风险场景:保存摘要、哈希、引用位置。
- 中风险场景:保存脱敏后的输入输出,并保留文档 ID。
- 高风险场景:原文进入受控存储,日志系统只记录引用地址、访问权限和保留周期。
不要把用户隐私、内部合同、客户资料和普通运行日志混在一个索引里,后面整改会很痛。
三、多供应商接入时,先统一日志字段
企业同时接 GPT-5.5、Claude、Gemini 或其他模型后,日志字段很容易乱。不同供应商的错误码、token 字段、流式事件、重试语义都不一样。
可以在业务系统和模型供应商之间加一层统一网关。有人自己做内部网关,也有人把 147AI 这类中转入口放进调用链路,用同一套字段记录模型、接口、耗时、错误、用量和成本。
但中转层不能替代审计设计。哪些内容能落日志、哪些字段必须脱敏、哪些调用需要审批,仍然要按企业自己的合规要求定。
四、审计日志:记录谁让模型做了什么
运行日志给工程师排障,审计日志给安全、法务、合规和管理流程使用,二者不要混成一份。
建议重点记录这些事件:
- 谁创建或修改了系统提示词
- 谁新增了工具权限
- 谁上传或删除了知识库文档
- 谁发起了高权限模型调用
- 谁导出了模型调用记录
- 谁调整了模型路由和预算上限
如果系统支持工具调用,还要记录工具名、参数摘要、执行结果、失败原因和审批信息。数据库查询、文件检索、代码执行、工单创建,都应该进入审计链路。
很多事故不是用户问错了,而是系统提示词、知识库权限、工具授权或路由策略被改坏了。
五、告警:别只盯接口 500
大模型系统的告警要比普通接口更细。
| 类型 | 重点指标 |
|---|---|
| 可用性 | 错误率、超时、429 限流、重试次数、备用模型调用比例 |
| 性能 | 平均延迟、首 token 延迟、P95/P99 延迟 |
| 成本 | 单小时 token 消耗、长上下文比例、缓存命中率、业务方调用量突增 |
| 质量 | JSON 解析失败率、拒答比例、低置信度回答、人工复核不通过率 |
这些指标未必第一天都能做完,但至少要先埋点;没有埋点,就没有讨论质量问题的依据。
六、脱敏和保留周期要写进制度
大模型日志里常见敏感字段包括手机号、邮箱、身份证号、地址、合同金额、客户名称、内部项目代号、API key、数据库连接串、员工信息。
建议在入日志前脱敏,不要等日志入库后再补救。
保留周期也要分层:
- 运行指标可以保留更久。
- 原始内容保留时间要更短。
- 审计日志按合规要求保留。
- 普通调试日志到期删除。
- 高敏内容必须有访问审批和导出记录。
这类规则要写进工程规范,不能靠某个开发同学的记忆。
七、最小可落地方案
团队刚开始做,可以按这个顺序落地:
- 统一请求 ID 和模型调用日志。
- 记录 token、延迟、错误和重试。
- 做敏感字段脱敏。
- 补齐审计事件。
- 接入质量评测和成本告警。
不要第一天就追求“大模型观测平台”。先保证出问题时能回答五个问题:
谁调用的?调用了哪个模型?用了哪些上下文?为什么失败或变慢?这次调用花了多少钱?
能回答这五个问题,生产环境才算有了底。