注意:说明:
注意:本语义规范在 OpenTelemetry GenAI 语义规范的基础上进行扩展,OpenTelemetry GenAI 语义规范仍在修改和完善中,后续维护过程中可能发生调整。
一、如何使用这篇档
不同接入方式对这篇档的使用方式不同,请参见下表。各接入方式的详细说明请参见 选择接入方式。
| 接入方式 | 使用方式 |
| 通过 Onesuite-Pilot 采集器、 SDK 与插件等 AgentObs 方式接入 | 数据会自动按这篇档规范上报。你可以根据此规范查阅字段含义,用于日志检索分析、自定义仪表盘等。 |
| 通过 Langfuse SDK 上报 | Langfuse SDK 保留自身的字段语义,具体字段含义请参见 Langfuse SDK Trace 字段说明。 |
| 自行埋点,或通过 OpenTelemetry SDK 等第三方方式接入 | 请按这篇档的字段名和数据类型上报。字段名或类型不一致时,AgentObs 可能无法正确识别数据内容。 |
二、数据模型
AgentObs Trace 数据写入 AgentObs 应用关联的 Trace 日志主题,每条日志对应一个 Span,由以下三部分组成:
·Trace 顶层字段:所有 Span 共有的链路信息,例如 traceID、spanID、耗时和状态。
·Resource 字段:产生数据的服务和运行环境信息,例如服务名称和主机名。
·Attribute 字段:业务语义字段,具体包含哪些字段由 Span 类型(gen_ai.span.kind)决定。
查阅字段时,请先确认 Span 类型,再参见对应章节:
·所有 Span:公共身份与上下文字段。
·chat:LLM Chat 字段、Token 使用量字段和成本字段。
·agent:Agent 字段。
·tool:Tool 字段。
·step:ReAct Step 字段。
·chain、retriever、rerank:Chain 字段、Retriever 字段和 Rerank 字段。
如需了解产品整体能力,请访问 AgentObs 产品页,或参见 选择接入方式。
在 Trace 日志主题的原始记录中,attribute 和 resource 以 JSON 编码字符串存储,以下示例为 attribute 和 resource 解析后的 Agent Trace 结构。
{ "traceID": "<32 位十六进制 Trace ID>", "spanID": "<16 位十六进制 Span ID>", "parentSpanID": "<父 Span ID>", "name": "chat <model>", "kind": "client", "start": "<Unix 纳秒时间戳>", "end": "<Unix 纳秒时间戳>", "duration": "<纳秒>", "statusCode": "OK", "resource": { "service.name": "codebuddy", "host.name": "<主机名>" }, "attribute": { "gen_ai.span.kind": "chat", "gen_ai.operation.name": "chat", "gen_ai.agent.type": "codebuddy", "gen_ai.session.id": "<会话 ID>", "gen_ai.turn.id": "<轮次 ID>", "gen_ai.request.model": "<请求模型>", "gen_ai.usage.input_tokens": 1000, "gen_ai.usage.output_tokens": 200 }}
三、Span 类型与操作类型
下表列举 gen_ai.span.kind 的所有取值及其对应的 gen_ai.operation.name。其中 chain、retriever、rerank 为可选类型,仅在接入支持编排管道或 RAG 的框架时出现。
| gen_ai.span.kind | gen_ai.operation.name | 说明 |
| entry | enter_application | AI Coding 应用入口。 |
| agent | invoke_agent | Agent 调用。 |
| step | react | ReAct 推理与行动轮次。 |
| chat | chat | 模型对话调用。 |
| tool | execute_tool | 工具调用。 |
| chain | chain | LangChain 或 LangGraph 编排管道节点,OpenTelemetry Span Kind 为 INTERNAL,常见父级为 agent、step、chain。 |
| retriever | retrieval | 文档检索操作,OpenTelemetry Span Kind 为 INTERNAL,常见父级为 step、chain。 |
| rerank | rerank_documents | 文档重排序操作,OpenTelemetry Span Kind 为 INTERNAL,常见父级为 step、chain、retriever。 |
四、Trace 顶层字段
| 字段名 | 类型 | 说明 | 示例 |
| traceID | string | Trace 的唯一标识,用于关联同一请求链路中的多个 Span。 | 17b5f957568ecb90b5b5b58d6bb56cbe |
| spanID | string | 当前 Span 的唯一标识。 | 66dbc3146404b6b2 |
| parentSpanID | string | 当前 Span 的父 Span 标识;根 Span 通常为空。 | 4523b3266604f28c |
| name | string | Span 名称,用于展示当前操作。 | chat <model> |
| kind | string | OpenTelemetry Span 类型。 | client |
| start | string | Span 开始时间,单位为纳秒。 | 1787150761999000000 |
| end | string | Span 结束时间,单位为纳秒。 | 1787150802462000000 |
| duration | string | Span 持续时间,单位为纳秒,通常为 end – start。 | 40463000000 |
| statusCode | string | Span 执行状态。 | OK |
| statusMessage | string | Span 状态的补充说明。 | tool execution failed |
| attribute | JSON string | Span 业务属性集合,解析后为 JSON 对象。 | {"gen_ai.span.kind":"chat"} |
| resource | JSON string | Span 所属服务和运行环境属性集合,解析后为 JSON 对象。 | {"service.name":"codebuddy"} |
| traceState | string | W3C Trace Context 的扩展信息。 | “ |
| links | JSON string | 当前 Span 关联的其他 Trace 或 Span 链接。 | [] |
| logs | JSON string | Span 关联的日志或事件信息。 | [] |
五、Resource 字段
| 字段名 | 类型 | 说明 | 示例 |
| service.name | string | 产生 Trace 数据的应用或 Agent 服务名称。 | codebuddy |
| host.name | string | 产生数据的主机名称。 | VM-138-200-tencentos |
| deployment.environment.name | string | 应用运行环境名称。 | production |
| service.version | string | 产生 Trace 数据的应用或 Agent 版本。 | 1.0.7 |
| service.instance.id | string | 产生 Trace 数据的服务实例标识。 | codebuddy@VM-51:12345 |
| host.ip | string | 产生 Trace 数据的主机 IP 地址。 | 10.0.51.187 |
| process.pid | integer | 产生 Trace 数据的进程 ID。 | 4030910 |
| process.runtime.name | string | 进程运行时名称。 | python |
| process.runtime.version | string | 进程运行时版本。 | 3.11.0 |
| telemetry.sdk.name | string | OpenTelemetry SDK 名称。 | tencentcloud-cls-sdk-langchain |
| telemetry.sdk.language | string | OpenTelemetry SDK 使用的语言。 | python |
| telemetry.sdk.version | string | OpenTelemetry SDK 版本。 | 1.0.5 |
| cloud.provider | string | 云服务提供商。 | tencent_cloud |
| cloud.region | string | 云资源所在地域。 | ap-guangzhou |
| os.type | string | 操作系统类型。 | linux |
| os.version | string | 操作系统版本。 | 5.15.0 |
六、公共身份与上下文字段
| 字段名 | 类型 | 说明 | 示例 |
| gen_ai.span.kind | string | 当前 Span 的业务类型。 | chat |
| gen_ai.operation.name | string | 当前 Span 的具体操作名称。 | chat、execute_tool |
| gen_ai.agent.type | string | 产生数据的 AI Coding Agent 类型。 | codebuddy、workbuddy |
| gen_ai.agent.id | string | 与当前模型或工具调用关联的 Agent 标识。具体生成规则以实际版本为准。 | <agent-id> |
| gen_ai.agent.name | string | Agent 名称。 | main |
| gen_ai.session.id | string | AI Coding 会话的唯一标识,用于关联同一会话中的多个 Span。 | <session-id> |
| gen_ai.turn.id | string | 会话内某一轮用户请求或 Agent 处理轮次的标识。 | <session-id>:t73 |
| gen_ai.step.id | string | ReAct 或 Agent 处理步骤的标识。 | <session-id>:t73:s4 |
| gen_ai.user.id | string | AI Coding 数据所属用户的标识。 | 122855467 |
| gen_ai.user.name | string | AI Coding 数据所属用户的展示名称。 | user-name |
| gen_ai.entry.type | string | AI 应用入口类型。 | CLI |
| gen_ai.system | string | GenAI 系统或模型服务类型。 | anthropic、openai、deepseek |
| gen_ai.agent.scope | string | Agent 的执行范围;子 Agent 取值为 subagent。 | subagent |
| gen_ai.subagent.parent_tool_call.id | string | 触发子 Agent 的父工具调用 ID。 | call_abc123 |
| gen_ai.entry.platform | string | AI 应用入口所在平台。 | terminal、vscode、jetbrains |
| gen_ai.entry.channel_id | string | IDE 实例或接入频道标识。 | channel_01 |
七、LLM Chat 字段
| 字段名 | 类型 | 说明 | 示例 |
| gen_ai.provider.name | string | 模型服务提供商名称。 | anthropic |
| gen_ai.request.model | string | 请求时指定的模型名称。 | claude-opus-5 |
| gen_ai.response.model | string | 实际返回结果所使用的模型名称。 | claude-opus-5 |
| gen_ai.response.finish_reasons | string[] | 模型生成结束原因。 | ["stop"] |
| gen_ai.chat.duration_ms | integer | Chat 操作自身的耗时,单位为毫秒。 | 16010 |
| gen_ai.input.messages | JSON array | 发给模型或 Agent 的输入消息列表。 | [{"role":"user","parts":[…]}] |
| gen_ai.input.messages.hash | string | 输入消息内容的哈希值,用于关联或去重。 | <32 位哈希> |
| gen_ai.input.messages_delta | JSON array | 输入消息的增量变化信息。 | [{"type":"append",…}] |
| gen_ai.output.messages | JSON array | 模型或 Agent 返回的输出消息列表。 | [{"role":"assistant","parts":[…]}] |
| gen_ai.response.id | string | 模型服务返回的响应 ID。 | msg_01HXYZ |
| gen_ai.response.time_to_first_token_ms | integer | 从发起请求到收到首个 Token 的耗时,单位为毫秒。 | 820 |
| gen_ai.request.temperature | number | 控制模型输出随机性的 Temperature 参数。 | 0.7 |
| gen_ai.request.top_p | number | 控制核采样范围的 Top-P 参数。 | 0.9 |
| gen_ai.request.max_tokens | integer | 模型允许生成的最大 Token 数。 | 4096 |
| gen_ai.request.frequency_penalty | number | 频率惩罚参数。 | 0 |
| gen_ai.request.presence_penalty | number | 存在惩罚参数。 | 0 |
| gen_ai.request.stop_sequences | string[] | 用于停止生成的字符串数组。 | ["END"] |
| gen_ai.request.seed | integer | 控制随机生成结果的种子。 | 42 |
八、Token 使用量字段
| 字段名 | 类型 | 说明 | 示例 |
| gen_ai.usage.input_tokens | integer | 模型输入消耗的 Token 数。 | 1000 |
| gen_ai.usage.output_tokens | integer | 模型输出消耗的 Token 数。 | 200 |
| gen_ai.usage.total_tokens | integer | 输入和输出消耗的总 Token 数。 | 1200 |
| gen_ai.usage.cache_read.input_tokens | integer | 从模型提供商缓存中读取的输入 Token 数。 | 500 |
| gen_ai.usage.cache_creation.input_tokens | integer | 写入模型提供商缓存的输入 Token 数。 | 100 |
| gen_ai.usage.cache_miss.input_tokens | integer | 未命中缓存的输入 Token 数。 | 50 |
| gen_ai.usage.reasoning_output_tokens | integer | 推理过程产生的输出 Token 数。 | 0 |
九、成本字段
以下成本字段由采集端根据 Token 用量及适用的模型单价计算。无法确定模型单价或未启用成本计算时,不采集对应字段。
| 字段名 | 类型 | 说明 | 示例 |
| gen_ai.usage.input_cost | number | 输入 Token 成本。 | 0.0025 |
| gen_ai.usage.output_cost | number | 输出 Token 成本。 | 0.012 |
| gen_ai.usage.cache_read.input_cost | number | 缓存命中输入 Token 成本。 | 0.0003 |
| gen_ai.usage.cache_creation.input_cost | number | 缓存写入输入 Token 成本。 | 0.0008 |
| gen_ai.usage.total_cost | number | 本次模型调用的总成本。 | 0.0156 |
十、Agent 字段
| 字段名 | 类型 | 说明 | 示例 |
| gen_ai.agent.message_count | integer | Agent Span 内包含的消息数量。 | 13 |
| gen_ai.agent.tool_call_count | integer | Agent Span 内发起的工具调用次数。 | 10 |
| gen_ai.agent.name | string | Agent 名称。 | main |
| gen_ai.agent.id | string | 与当前模型或工具调用关联的 Agent 标识。 | <agent-id> |
十一、Tool 字段
以下字段主要出现在 gen_ai.span.kind=tool、gen_ai.operation.name=execute_tool 的 Span 中。
| 字段名 | 类型 | 说明 | 示例 |
| gen_ai.tool.call.id | string | 一次工具调用的唯一标识。 | call_<id> |
| gen_ai.tool.name | string | 被调用的工具名称。 | Bash、execute_command |
| gen_ai.tool.type | string | 工具类型。 | function |
| gen_ai.tool.call.arguments | JSON object / string | 工具调用的输入参数。 | {"command":"<masked>"} |
| gen_ai.tool.call.result | JSON object / string | 工具调用的返回结果。 | {"status":"success"} |
| gen_ai.tool.call.duration_ms | integer | 工具调用耗时,单位为毫秒。 | 44 |
| gen_ai.tool.error.type | string | 工具调用失败时的错误类型。 | tool_error |
| error.type | string | 当前 Span 或操作的错误类型。 | tool_error |
| gen_ai.tool.call.exec.id | string | 工具执行 ID,用于区分同一调用的多次执行。 | exec_01HXYZ123456 |
| gen_ai.tool.call.image.count | integer | 图片生成工具产生的图片数量。 | 1 |
| gen_ai.tool.call.image.paths | string[] | 图片生成工具产生的图片路径数组。 | ["/tmp/generated-image.png"] |
| gen_ai.tool.call.image.duration | number | 图片生成耗时,单位为毫秒。 | 1250 |
| gen_ai.tool.error.message | string | 工具调用失败时的错误信息。 | Tool execution failed: command timed out |
| exception.message | string | 当前 Span 对应的异常信息。 | Connection timeout after 30s |
注意:说明:
注意:gen_ai.tool.call.arguments 和 gen_ai.tool.call.result 可能以 JSON 对象或 JSON 字符串形式出现,使用时请兼容两种形式。
十二、ReAct Step 字段
| 字段名 | 类型 | 说明 | 示例 |
| gen_ai.react.round | integer | ReAct 迭代轮次,通常从 1 开始递增。 | 8 |
| gen_ai.react.finish_reason | string | ReAct 或模型调用的结束原因。 | tool_calls、stop |
| gen_ai.step.id | string | 当前推理与行动步骤的唯一标识。 | <session-id>:t73:s4 |
| gen_ai.react.thought | string | 当前 ReAct 轮次的思考文本。 | 用户想查询订单状态,我应先调用订单查询工具。 |
| gen_ai.react.observation | string | 当前 ReAct 轮次的观察结果。 | 订单查询工具返回:订单 12345 状态为已发货。 |
十三、Chain 字段
以下字段主要出现在 gen_ai.span.kind=chain、gen_ai.operation.name=chain 的 Span 中。
| 字段名 | 类型 | 说明 | 示例 |
| gen_ai.chain.name | string | Runnable 或 Chain 名称。 | RunnableSequence |
| gen_ai.chain.input | JSON object / string | 编排节点的输入数据。 | {"question":"今天天气如何?"} |
| gen_ai.chain.output | JSON object / string | 编排节点的输出数据。 | {"answer":"今天晴,25℃。"} |
| gen_ai.chain.metadata | JSON object | 用户自定义的编排元数据。 | {"ls_provider":"openai","ls_model_name":"gpt-4o"} |
十四、Retriever 字段
以下字段主要出现在 gen_ai.span.kind=retriever、gen_ai.operation.name=retrieval 的 Span 中。
| 字段名 | 类型 | 说明 | 示例 |
| gen_ai.retrieval.query_text | string | 文档检索使用的查询文本。 | 如何配置 CLS 日志采集? |
| gen_ai.retrieval.documents.count | integer | 检索返回的文档数量。 | 5 |
| gen_ai.retrieval.documents | JSON array | 检索返回的文档列表,可包含内容、相关性分数和元数据。 | [{"content":"CLS 采集配置…","score":0.92}] |
| gen_ai.retrieval.duration_ms | number | 文档检索耗时,单位为毫秒。 | 128.5 |
十五、Rerank 字段
以下字段主要出现在 gen_ai.span.kind=rerank、gen_ai.operation.name=rerank_documents 的 Span 中。
| 字段名 | 类型 | 说明 | 示例 |
| gen_ai.rerank.query_text | string | 文档重排使用的查询文本。 | 如何配置 CLS 日志采集? |
| gen_ai.rerank.input_documents.count | integer | 参与重排的输入文档数量。 | 20 |
| gen_ai.rerank.output_documents.count | integer | 重排后输出的文档数量。 | 5 |
| gen_ai.request.top_k | integer | 请求返回的前 K 个文档数量。 | 5 |
| gen_ai.rerank.input_documents | JSON array | 参与重排的输入文档列表。 | [{"content":"文档 A","index":0}] |
| gen_ai.rerank.output_documents | JSON array | 重排后的文档列表,可包含相关性分数和原始索引。 | [{"content":"文档 A","score":0.95,"original_index":3}] |
| gen_ai.rerank.duration_ms | number | 文档重排耗时,单位为毫秒。 | 45.2 |
注意:内容采集说明:
注意:Chain 的输入和输出、Retriever 的文档内容以及 Rerank 的输入和输出文档可能包含用户数据,默认不采集。仅在业务确认数据合规并显式开启内容采集后上报。
十六、Agent 扩展与代码上下文字段
| 字段名 | 类型 | 说明 | 示例 |
| agent.codebuddy.cwd | string | CodeBuddy 会话的当前工作目录。 | /workspace/project |
| agent.workbuddy.cwd | string | WorkBuddy 会话的当前工作目录。 | /workspace/project |
| git.domain | string | 当前代码仓库所在 Git 服务域名。 | git.example.com |
| git.repo | string | 当前代码仓库标识。 | team/project |
| git.branch | string | 当前代码分支。 | main |
| observed_time_unix_nano | string | 数据被观测或处理的时间,单位为纳秒。 | 1787197097104000000 |
十七、通用 Agent 扩展字段
| 字段名 | 类型 | 说明 | 示例 |
| agent.file_path | string | 当前操作的文件路径。 | src/main.py |
| agent.action_type | string | 当前执行的操作类型。 | edit_file |
| agent.content | string | 当前操作对应的内容。 | def hello(): print("hi") |
| agent.inline_diff_message | string | 行内代码差异信息。 | 新增 3 行,删除 1 行 |
| agent.request_id | string | Agent 内部请求 ID,可用于关联 Token 或调用记录。 | req-8f3a2c1d |
十八、宿主 Agent 扩展字段
| 字段名 | 类型 | 说明 | 示例 | 适用 Agent |
| agent.codex.transcript_turn_id | string | Codex 会话轮次 ID。 | turn-abc123 | Codex |
| agent.codex.turn_status | string | Codex 轮次状态,例如 completed、aborted。 | completed | Codex |
| agent.codex.cwd | string | Codex 当前工作目录。 | /home/user/project | Codex |
| agent.cursor.cursor_version | string | Cursor 版本。 | 0.42.3 | Cursor |
| agent.qoder.version | string | Qoder CLI 版本。 | 1.2.0 | Qoder CLI |
| agent.qoderwork.version | string | Qoder Work 版本。 | 1.5.2 | Qoder Work |
| agent.qoderwork.cwd | string | Qoder Work 当前工作目录。 | /workspace/demo | Qoder Work |
十九、补充代码上下文字段
| 字段名 | 类型 | 说明 | 示例 |
| git.repo_root | string | Git 仓库的本地根目录。 | /home/user/my-repo |
| workspace.current_root | string | 当前工作区根目录。 | /home/user/my-repo |
20、自定义扩展字段
用户可通过 agent.custom.* 命名空间上报业务自定义属性,例如 agent.custom.project_id、agent.custom.tenant_id 和 agent.custom.biz_scene。自定义字段不得覆盖这篇档定义的标准字段,且不应上报密码、密钥、Token 或个人敏感信息。
21、其他 GenAI 扩展字段
| 字段名 | 类型 | 说明 | 示例 |
| gen_ai.request.id | string | 宿主 Agent 内部的模型请求 ID。 | chatcmpl-9xY2abc |
| gen_ai.skill.name | string | 当前调用的 Skill 名称。 | cls-doc-full |
| gen_ai.system_instructions | string | 系统指令内容或摘要。 | 你是一个专业的编程助手,请遵循… |
| gen_ai.tool.definitions | JSON array | 当前模型调用可使用的工具定义列表。 | [{"name":"read_file","description":"读取文件"}] |
22、Langfuse 兼容字段
通过 Langfuse 接入 Agent Trace 数据时,AgentObs 按以下规则映射标签和元数据字段:
| Langfuse 字段 | Agent Trace Attribute 字段 |
| langfuse.metadata.* | metadata.* |
| tags | trace.tags |
23、兼容性说明
这篇档定义的是 AgentObs Trace 的统一语义。不同 Agent、模型和 Span 类型可能只适用其中一部分字段,具体适用范围请以对应字段章节的说明为准。由于 OpenTelemetry GenAI 语义规范仍在演进,后续字段定义和语义可能随规范版本调整,并在版本说明中同步更新。