当前位置:首页 > 文章列表 > 科技周边 > 业界新闻 > OpenTelemetry GenAI 语义约定变化后如何整理追踪字段

OpenTelemetry GenAI 语义约定变化后如何整理追踪字段

来源:17golang原创 2026-09-15 00:23:31 0浏览 收藏

如果你最近升级了 OpenTelemetry 语义约定,发现旧的 gen_ai.* 字段出现 deprecated,不要把所有字段机械地改名。更稳妥的做法是先按“调用边界、统计边界、内容事件”重新分层:模型和操作名放在 span/metric 的公共字段里,prompt、回复和工具参数按需作为结构化事件或受控内容记录,提供商差异再放到 provider-specific 扩展中。

官方资料入口:https://opentelemetry.io/;GenAI 语义约定仓库:https://github.com/open-telemetry/semantic-conventions-genai

要点速览
  • 核心语义约定仓库中的 GenAI 条目已经迁移,新的埋点应以独立 GenAI 仓库为准。
  • gen_ai.request.modelgen_ai.provider.namegen_ai.operation.name 和 token 用量适合做检索与聚合。
  • gen_ai.input.messagesgen_ai.output.messages 和工具内容可能含敏感数据,默认不要全量采集。

先分清“字段变化”和“语义归属变化”

这次调整最容易误判的地方,是把“字段还叫 gen_ai.*”理解成“原来的定义仍然有效”。OpenTelemetry 的核心语义约定发布说明已经把原先位于 model/gen-ai/model/openai/model/mcp/ 的 GenAI 属性、指标、事件和 span 标为 deprecated,并迁移到独立仓库。独立仓库当前仍标记为 Development,因此它既是新的事实来源,也是需要隔离变更的边界。

迁移时先在 instrumentation 的适配层写清三件事:使用哪一版语义约定、发送数据的 schema_url 是什么、旧字段只为兼容哪些消费者保留。不要在业务代码里散落“新字段名 + 旧字段名”的双写判断,否则下一次约定变化时很难收口。

OpenTelemetry GenAI 语义约定迁移后的 schema、公共字段、内容事件和提供商扩展四层关系示意图
图1:OpenTelemetry GenAI 语义约定迁移后的四层字段归属示意图(操作示意图)。

把追踪字段按查询目标重新排一遍

一个 LLM 调用至少要区分“谁提供、做什么、请求了什么、实际消耗什么”。下面这张表可以直接作为字段整理清单:

查询目标优先字段使用边界
区分后端提供商gen_ai.provider.name作为 provider discriminator,不能用模型名猜提供商
定位调用类型gen_ai.operation.name统一使用 chatgenerate_content 等约定值
比较模型gen_ai.request.modelgen_ai.response.model分别记录请求配置与实际响应模型
估算消耗gen_ai.token.typegen_ai.usage.input_tokensgen_ai.usage.output_tokens把 input/output 作为可聚合维度,不把完整 prompt 当指标标签
关联会话gen_ai.conversation.id只有确实需要跨调用串联会话时再记录

旧的 gen_ai.system 不应继续承担提供商识别职责;当前资料把它指向 gen_ai.provider.name。同理,gen_ai.usage.prompt_tokensgen_ai.usage.completion_tokens 应分别迁移到 input/output tokens。迁移前后不要只看字段是否有值,还要检查查询面板是否仍按同一维度聚合。

内容字段要从“属性堆积”改成“受控事件”

模型消息、系统指令、工具定义、工具参数和工具结果的体积都可能快速增长,而且可能包含用户输入、个人信息或内部提示词。当前约定要求消息遵循对应 JSON schema;记录在 event 上时应使用结构化形式,记录在 span 上时才考虑后端不支持结构化数据的兼容表示。

工程上可以采用三层开关:

  1. 默认关闭全文内容。生产环境先采集模型、操作、token、结束原因和错误类型,让成本与链路问题可见。
  2. 按采样或租户开启。排障时只对测试租户、短时间窗口或低比例请求记录消息,并先过滤密钥、身份证号、订单正文等字段。
  3. 区分内容事件与调用 span。一个调用中可能出现多次消息或工具结果,事件更适合表达这些独立发生的内容;span 保留调用整体的时间边界。

不要把 prompt、completion 或 tool arguments 放进 metric label,也不要把大段 JSON 复制到每个 span 和 log。这样既会放大存储,也容易形成高基数查询和敏感信息扩散。

用三条样例请求做迁移后的复查

第一条是普通 chat:确认 span 能看到操作名、请求模型、响应模型、结束原因和 input/output token。第二条是带工具调用的 agent:确认工具调用有独立的发生记录,参数与结果能通过调用 ID 对上,但全文内容仍受采集开关控制。第三条是失败请求:确认 span 或对应指标带有低基数的 error.type,同时不把完整异常上下文塞进聚合标签。

复查时再对照 provider-specific 约定:如果请求经过 Azure、Bedrock 或其他兼容接口,不能只根据客户端库名称写 provider。gen_ai.provider.name 应反映 instrumentation 已知的实际提供商,并与对应扩展字段保持一致。最后把这三条样例导出到测试后端,分别验证 trace 关联、token 聚合、错误筛选和内容脱敏。

OpenTelemetry GenAI chat、工具调用和错误调用对应 Trace Metrics Events 的字段复查关系示意图
图2:普通调用、工具调用和错误调用的 GenAI 追踪字段复查关系示意图(结果示意图)。

常见问题

旧字段还能继续发送吗?

可以作为短期兼容策略保留,但新埋点不应继续以旧定义为主。应明确兼容期限,并让新消费者读取独立 GenAI 语义约定。

为什么不把完整 prompt 都放进 span?

因为它可能很大且含敏感信息。优先使用 opt-in、采样、截断和脱敏;只在确有排障价值时记录内容。

schema_url 一定要记录吗?

迁移期间建议记录。它能让下游知道字段来自哪套语义约定,避免同名字段在不同版本间被误解。

模型名能代替 provider.name 吗?

不能。多个服务可能通过同一种 API 代理不同模型,模型名、请求模型和实际提供商是三个不同判断。

整理完成后的标准不是“字段数量更多”,而是公共调用字段可检索、内容数据可控、provider 扩展有边界、schema 版本能追踪。把这些判断集中在 instrumentation adapter 和回归样例里,后续约定继续变化时,业务代码就不必跟着反复改动。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Go time.Ticker.Stop 后为什么不能从通道读到结束信号Go time.Ticker.Stop 后为什么不能从通道读到结束信号
上一篇
Go time.Ticker.Stop 后为什么不能从通道读到结束信号
Go sort.SliceIsSorted 遇到 NaN 时为什么判断异常
下一篇
Go sort.SliceIsSorted 遇到 NaN 时为什么判断异常
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    26次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    130次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    62次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    23次使用
  • OpenCompass大模型评测体系详解:功能、使用指南与应用场景
    OpenCompass
    OpenCompass是上海AI实验室推出的开源大模型评测平台,提供CompassKit、CompassHub和CompassRank三大核心组件,支持LLM及多模态模型的一站式标准化评估与排行榜查询。
    81次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码