AI 调用可观测架构:从散乱日志到 OpenTelemetry GenAI 字段统一
AI 能力从一个聊天入口扩展到客服、搜索、报表、批处理和内部助手以后,最先暴露的问题往往不是“模型不会答”,而是线上看不清:哪条业务用了哪个模型、输入输出 token 各是多少、首字延迟为什么变高、失败是供应商返回还是网关拦截。要把 AI 调用做成可运维能力,第一步就是把观测字段统一起来。
- 规模背景:AI 调用从单点接入变成平台依赖
- 原架构瓶颈:日志能查,但没法横向比较
- 新架构:用 GenAI 语义字段统一采集层
- 关键取舍:内容隐私、token 精度和采样比例
- 上线结果:用四类指标判断架构是否有效
- 后续改进:把观测数据反推路由和预算策略
- 总结
规模背景:AI 调用从单点接入变成平台依赖
很多团队最早接入大模型时,代码结构很简单:某个业务服务直接调用某个模型 SDK,失败就打日志,费用靠账单平台月底复查。这在低频试验阶段没有明显问题,但一旦进入多业务、多模型、多供应商阶段,调用链会变得很散。
典型变化有三类:
- 入口变多:Web 问答、后台助手、离线生成任务、知识库摘要都开始调用模型。
- 模型变多:同一个场景可能按成本、延迟、上下文长度选择不同模型。
- 结果变复杂:一次请求不只返回文本,还可能包含工具调用、检索片段、流式片段和安全拦截状态。
这时如果每个业务自己写日志字段,排查会很痛:一个服务叫 model,另一个叫 llm_model;一个记录 prompt_tokens,另一个只记录总 token;流式响应只看总耗时,看不到首个片段延迟。
原架构瓶颈:日志能查,但没法横向比较
散乱日志最大的问题不是完全没有数据,而是数据不能放在一起比较。比如客服助手说今天很慢,搜索摘要说费用突然升高,批处理说失败率上来了,如果字段不统一,平台侧只能临时写脚本拼数据。

原架构常见瓶颈可以整理成一张表:
| 问题 | 散乱写法 | 平台需要的能力 |
|---|---|---|
| 模型字段不统一 | model、engine、llm 混用 | 能按请求模型和响应模型聚合 |
| token 不可比较 | 只记录总数或只记录供应商原始字段 | 输入、输出、缓存命中分别看 |
| 流式延迟看不见 | 只记录总耗时 | 能区分首个片段延迟和完整耗时 |
| 错误分类太粗 | 统一写成 failed | 能区分超时、限流、网关拒绝和上游错误 |
| 隐私边界不清 | 把完整输入输出写进日志 | 默认脱敏,按需抽样保留摘要 |
这就是为什么 AI 观测不适合只靠业务日志自然生长。日志仍然有价值,但平台层需要一套稳定字段,让不同业务、不同模型、不同供应商的调用能进入同一张看板。
新架构:用 GenAI 语义字段统一采集层
OpenTelemetry 的 GenAI 语义约定把生成式 AI 调用拆成 spans、metrics、events 等信号,并定义了一批 gen_ai.* 字段。工程落地时可以先从最小字段集开始,不必一口气记录所有可选内容。
一个可落地的架构是:业务服务不直接把原始日志散落到各处,而是通过 AI 网关或统一 SDK 生成 span 和指标,再交给 OTel Collector,最后进入日志、指标、链路和告警系统。
type AITraceAttrs struct {
Operation string
Provider string
RequestModel string
Stream bool
InputTokens int
OutputTokens int
ErrorType string
}
func fillGenAIAttrs(span SpanLike, a AITraceAttrs) {
span.Set("gen_ai.operation.name", a.Operation)
span.Set("gen_ai.provider.name", a.Provider)
span.Set("gen_ai.request.model", a.RequestModel)
span.Set("gen_ai.request.stream", a.Stream)
if a.InputTokens > 0 {
span.Set("gen_ai.usage.input_tokens", a.InputTokens)
}
if a.OutputTokens > 0 {
span.Set("gen_ai.usage.output_tokens", a.OutputTokens)
}
if a.ErrorType != "" {
span.Set("error.type", a.ErrorType)
}
}
这里的关键不是代码多高级,而是字段稳定。先把 operation、provider、request.model、input_tokens、output_tokens、error.type 这几类字段统一,平台就能做三件事:按模型看延迟,按业务看 token,按错误类型看可靠性。

建议从下面这组最小清单开始:
gen_ai.operation.name:区分聊天、补全、向量、检索等操作。gen_ai.provider.name:区分供应商或内部模型平台。gen_ai.request.model:记录请求时指定的模型。gen_ai.response.model:记录实际响应模型,方便发现路由变化。gen_ai.usage.input_tokens:记录输入 token。gen_ai.usage.output_tokens:记录输出 token。gen_ai.response.time_to_first_chunk:流式响应首个片段延迟。error.type:低基数字段,用来聚合错误类型。
关键取舍:内容隐私、token 精度和采样比例
AI 调用观测最容易踩坑的地方,是把“看得见”误解成“什么都记录”。OpenTelemetry 的 GenAI 约定里,输入消息、输出消息、系统指令等内容字段通常属于可选或需要特别谨慎处理的部分,因为它们可能包含个人信息、内部资料、订单内容或业务密钥。
实际落地可以按三层处理:
1. 默认只记录结构化指标
模型名、供应商、token、耗时、错误类型、是否流式,这些字段足够支撑大多数平台看板。默认不要记录完整 prompt 和完整回复。
2. 对内容做摘要和脱敏
如果某些排查必须看输入输出,可以只记录摘要、哈希、长度、模板名、模板版本和风险标签。比如记录 prompt_name=refund_helper、prompt_version=v3,比记录完整用户对话更稳。
3. 高风险场景单独采样
客服、医疗、金融、内部代码助手这类场景,内容采样要有明确开关、保留期和访问权限。采样不是为了“多存点以后可能有用”,而是为了能复盘特定问题。
token 精度也要做取舍。有的供应商直接返回计费口径,有的返回模型消耗口径,有的还有缓存读写 token。平台最重要的是统一口径:报表里展示哪一种,就在接入层明确转换规则,并在字段说明里写清楚。
上线结果:用四类指标判断架构是否有效
统一字段上线后,先不要急着做复杂智能路由。第一阶段只看四类指标,判断观测架构是否真的生效:
| 指标 | 看什么 | 异常信号 | 处理动作 |
|---|---|---|---|
| 延迟 | p50、p95、首个片段延迟 | 首字慢但总耗时正常 | 检查流式、网关缓冲、上游排队 |
| 成本 | 输入输出 token、缓存 token | 某业务输入 token 突增 | 检查 prompt 拼接和上下文压缩 |
| 可靠性 | 错误类型、限流、超时 | 单供应商错误集中上升 | 触发降级或切换备用模型 |
| 质量旁路 | 人工确认、用户重试、拒答比例 | 重试率高但模型错误少 | 检查检索结果和业务提示模板 |
如果统一字段做对了,问题定位会从“去每个业务服务翻日志”变成“先在平台看哪类模型、哪类业务、哪类错误异常”。这对规模化团队尤其重要,因为 AI 调用已经不再是某个单点功能,而是多个业务共享的基础能力。
后续改进:把观测数据反推路由和预算策略
观测架构稳定后,下一步可以把数据反推到治理策略里:
- 模型路由:低风险短文本走低成本模型,高风险长上下文走更强模型。
- 预算保护:按业务、租户、用户、任务类型设置 token 上限。
- 降级策略:当某个供应商 p95 延迟或错误率异常时,切换备用路径。
- 提示模板治理:按
prompt.name和prompt.version看成本与失败率。 - 隐私审计:定期检查是否有人把完整输入输出写进高保留期日志。
这也是规模化架构深挖的核心:AI 网关、OTel Collector、指标库和告警系统不是为了“看起来专业”,而是为了让路由、成本、可靠性和隐私策略都能有数据支撑。
总结
AI 调用的可观测性建设,不应该停留在“每次请求打一行日志”。当业务入口、模型供应商、调用模式和计费口径都变多时,团队需要的是统一字段、统一采集、统一看板和明确的隐私边界。
落地建议按三步走:第一,把 AI 调用收口到统一 SDK 或 AI 网关;第二,按 OpenTelemetry GenAI 语义字段记录模型、供应商、token、耗时和错误类型;第三,在上线后用延迟、成本、可靠性和隐私四类指标复查。这样一来,AI 能力从“能调用”走向“能运维”,后续做模型路由、预算保护和质量治理才有稳固基础。
Go http.ResponseController 有什么用?Flush、写超时和 FullDuplex 这样理解
- 上一篇
- Go http.ResponseController 有什么用?Flush、写超时和 FullDuplex 这样理解
- 下一篇
- diagrams.net 导出高清 PNG:透明背景、缩放比例和回导核对流程
-
- 科技周边 · 人工智能 | 3天前 | 人工智能 · 前端流式输出 · AI聊天 · Fetch Stream · 前端 AI聊天 流式输出 ReadableStream TextDecoder Fetch Stream
- AI 聊天流式输出前端配方:用 Fetch Stream 实现逐字渲染和中断控制
- 448浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ljg-skills
- ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
- 3217次使用
-
- MELO音乐
- MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
- 2964次使用
-
- UniScribe
- UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
- 2919次使用
-
- 剧云
- 剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
- 3127次使用
-
- 万象有声
- 万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
- 3080次使用
-
- AI 知识库分块实战:按标题层级切文档,减少回答跑偏
- 2026-06-13 101浏览
-
- OPPO手表与理想汽车合作,开启智能穿戴与车载科技的完美融合
- 2023-07-29 117浏览
-
- Java8新特性之方法引用
- 2023-02-16 119浏览
-
- 专访乐凯撒CTO黄道泳:看一盒披萨背后的技术之路
- 2023-02-16 122浏览
-
- 轻松云上揽胜中华,靠的就是这份聪明的“地图”!
- 2023-02-17 130浏览

