前言¶
DeepSeek Harness (DSH) 在运行过程中会持久化记录 session log。现有的可观测性工具(如 Jaeger、Grafana Tempo)已经具备了绘制追踪图的能力,但它们无法直接读取 DSH 的日志格式。dsh-otel 插件填补了这一空白,它作为中间件,将 session log 翻译为标准的 OpenTelemetry Spans,使 DSH 的会话数据能够接入现有的追踪系统。
插件介绍¶
dsh-otel 是一个 DeepSeek Harness 插件,它将 session log 导出为 OpenTelemetry spans。它会为每一个 turn、step 和 tool call 创建一个 span,并将它们链接成一个 trace。该插件专注于单向的数据转换:从日志中读取并输出 spans,不涉及运行时观测、缓冲或采样。
核心功能¶
- 将 session log 导出为 OpenTelemetry spans
- 支持 OTLP/HTTP collector 和 stdout 导出
- 无 OpenTelemetry SDK 运行时依赖
- 自动生成 trace id 和 span id
- 提供 dsh-otel CLI export 工具
安装与启用¶
通过 DSH 的 CLI 安装插件:
dsh plugin --profile web add github:jwilson411/dsh-otel
安装后,需要在 cordis.patch.yml 中手动配置开启。插件默认为关闭状态,必须设置 exporter 参数。
典型用法¶
在 cordis.patch.yml 中配置导出器,例如使用 OTLP/HTTP 方式:
- id: otel
config:
exporter: otlp-http
endpoint: http://127.0.0.1:4318/v1/traces
sessionLog: ~/.dsh/sessions/current.jsonl
sessionId: sess-1
配置完成后,可以使用 CLI 工具直接导出 spans:
dsh-otel export --log ~/.dsh/sessions/current.l > spans.json
适用场景与注意¶
- 默认关闭:插件默认关闭,需手动配置开启。当未配置导出器时,插件仍会计数,但不会产生任何跨进程的数据传输。
- 内容精简:插件不包含提示词、评估或评分功能。Span 仅包含名称、ID、时间、Token 计数以及必要的元数据。
- 运行时无关:它不观察运行时,不缓冲或采样,也不修改 session log。
- 环境要求:需要 Node.js >= 22.14.0。
结语¶
dsh-otel 是一个轻量级的连接器,它不试图替代 Jaeger 或 Tempo,而是让 DSH 的日志能直接被这些工具消费。对于需要在现有可观测性栈中接入 DeepSeek Harness 调试的开发者,这是一个务实的解决方案。