跳转至

隐私和 trace context

继续上游 WebSocket 追踪

经过身份验证的 Gateway WebSocket 客户端可以在每个请求帧上附加一个 W3C traceparent:

{
  "type": "req",
  "id": "eval-item-42",
  "method": "agent",
  "params": {},
  "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01"
}

Gateway 会创建一个子请求上下文,保留上游 trace ID 和采样标志。在请求内创建的 Agent、harness、model-call、provider、tool-execution 和 exec 等 span 都会保留在该 trace 上,包括在其父运行已经结束后才记录的 span。这样,本地实验运行器就可以为每个数据集项创建一条 Langfuse/OpenTelemetry trace,并将相应的 OpenClaw 执行关联起来。

Trace 上下文的作用域是请求级(request-scoped),而非连接级(connection-scoped)。在长时间存活的 WebSocket 上,应针对每个 RPC 独立生成或注入合适的 traceparent。即使并发请求的工作交错发生,它们之间也保持隔离。

该字段仅在现有的 Gateway 身份验证握手之后才会被接受,并且不会影响身份验证或方法授权。初始 connect 帧上的 traceparent 会被忽略。在 128 字符字段限制内,缺失或语法格式错误的值会静默回退到新的请求 trace;更长的值会使请求帧无效。Gateway WebSocket 协议不接受 tracestate 和 baggage。

隐私与内容捕获

原始模型/工具内容默认不导出。Span 携带受限标识符(channel、provider、model、错误类别、仅哈希的请求 ID、工具来源、工具所有者、技能名称/来源),并且绝不包含提示文本、响应文本、工具输入、工具输出、技能文件路径或会话密钥。看起来像作用域化 agent 会话密钥的值(例如以 agent: 开头)在低基数属性上会被替换为 unknown。OTLP 日志记录默认保留 severity、logger、代码位置、受信任的 trace 上下文和已脱敏的属性;原始日志消息正文仅在 diagnostics.otel.captureContent 为 true 时才导出。Talk 指标仅导出有界的事件元数据(mode、transport、provider、事件类型)——不导出转录文本、音频负载、会话 ID、turn ID、调用 ID、房间 ID 或交接令牌。

当 diagnostics-otel 追踪处于活动状态时,出站模型请求可能会包含一个来自实际 exporter 拥有的 model-call span 的 W3C traceparent 头。诊断 trace ID 和 span ID 仅用于将事件关联到该 span;它们不会被用作出站 OTel 身份。如果 exporter 无法解析出真实的 span 上下文,OpenClaw 会省略该头部,而不是指定一个未导出的父级。调用方提供的现有 traceparent 头会被移除或替换,因此插件或自定义 provider 选项无法伪造跨服务的 trace 祖先关系。

只有当你的 collector 和保留策略已获准用于处理提示、响应、工具和工具定义文本时,才将 diagnostics.otel.captureContent 设置为 true。这会启用有界、脱敏的输入消息、输出消息、工具输入、工具输出、工具定义和 OTLP 日志正文。系统提示仍被排除在外。Provider 内部的 thinking 和 redacted_thinking 负载也被排除:兼容性属性仅保留一个脱敏的结构标记,而 GenAI 消息属性会省略这些部分。

已完成的助手评论使用相同的设置。关闭内容捕获后,评论事件仅包含计时、顺序、harness 和文本长度元数据。开启后,每个事件可通过现有的脱敏输出消息属性包含最多 16,384 个字符的可见评论内容。评论文本永远不会进入普通诊断日志或公共诊断事件。

对于内置 agent 运行时的工具执行,会捕获 toolInputs/toolOutputs 内容(在已完成/错误的 span 上对应 openclaw.content.tool_input 和 gen_ai.tool.call.arguments;在已完成的 span 上对应 openclaw.content.tool_output 和 gen_ai.tool.call.result)。openclaw.content.* 名称仍然是稳定的 OpenClaw 属性名;gen_ai.tool.call.* 副本与它们镜像对应,供 semconv 原生的查看器使用。外部 harness 工具调用(Codex、Claude CLI)会发出 tool.execution.* span,且不携带内容负载。捕获的内容通过一个受信任的、仅监听者(listener-only)通道传输,并且绝不会被放到公共诊断事件总线上。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw