用途:当需要变更 NeMo Relay 的事件字段、导出器行为、订阅者配置,或维护 ATIF 与 OpenTelemetry(full、gen_ai、openinference)投影的绑定一致性时使用此技能。不适用于仅做插桩示例的场景。
需保持同步的面:核心事件模型与发出字段(crates/core/src/observability/atif.rs、otel.rs、openinference.rs);暴露配置或生命周期的 FFI 与绑定原生封装(Python、Go、Node.js 的配置对象及订阅者/导出器方法);可观测性配置版本 3(单个 opentelemetry 段包含类型化端点,OpenInference 无独立公开面);docs/about-nemo-relay/concepts/subscribers.mdx 与 docs/configure-plugins/observability/ 下的文档。
设计检查要点:判断改动属于事件模型、导出器配置还是生命周期;各绑定是否暴露相同逻辑开关与语义;每个 OpenTelemetry 端点是否要求类型且目标非空;header_env 是否在激活时解析并拒绝缺失、空白或重复头;分层 ATOF sink、ATIF 存储与 OpenTelemetry 端点列表是否按高优先级在前拼接;OpenTelemetry 与 OpenInference 依赖是否为无条件而非 Cargo feature 门控;gen_ai 是否避免 nemo_relay.*、将脱敏后的 LLM 指令与消息投影到标准内容属性,并为无 GenAI 语义的作用域发出最小 span 以保留父子关系;enable_full_payloads 是否保留完整脱敏请求输入与注解同时保持凭据移除与脱敏器生效;Relay 是否在类型化 OpenTelemetry 端点间一致派生合规 trace/span ID 并保留生命周期父子关系;mark 事件、start/end 事件与孤儿情况是否仍正确处理;脱敏工具结果注解是否在 category_profile.tool_result_annotation、ATIF observation-result extra.tool_result_annotation 及 full/openinference 中单一 nemo_relay.tool.result.annotation 属性下保持不透明,而 gen_ai 省略它;示例与文档是否按各导出器文档化的 flush/deregister 顺序在关闭前执行;span 或轨迹字段是否仍源自预期事件数据。
验证:事件字段变更时运行受影响的 Rust crate 测试及 just test-rust;仅运行配置、生命周期、事件或导出器契约发生变化的绑定套件;公开工作流、文档化可观测性契约或输出变化时更新并验证文档或示例。
参考:docs/about-nemo-relay/concepts/subscribers.mdx、docs/configure-plugins/observability/about.mdx、docs/configure-plugins/observability/opentelemetry.mdx 及上述三个 Rust 源文件。