DeepSeek Harness 插件

loongsuite/dsh-plugin

Star 数 ★ 1 分类 开发与运行时 收录于 2026-08-15

将会话、Agent 循环、LLM 与工具生命周期事件转换为 OpenTelemetry GenAI 调用链与指标,通过标准 OTLP/HTTP 导出到任意兼容后端,正文采集默认关闭。

安装

# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)

dsh plugin --profile web add github:loongsuite/dsh-plugin

装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本。请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。

README

English | 简体中文

@loongsuite/dsh-plugin 是面向 DeepSeek Harnessdsh)的独立开源可观测 插件。它观测 DSH 原生的会话、Agent 循环、LLM 流和工具生命周期,将其转换为 OpenTelemetry GenAI Trace 与 Metric,并通过标准 OTLP/HTTP Protobuf 上报到任意兼容后端。

LoongSuite 是阿里开源的统一可观测采集体系。本仓库是它面向 DSH 的原生集成。插件不依赖也不要求 安装 LoongSuite Pilot,不需要 sidecar、本地 JSONL 采集点或阿里云后端。

当前状态:Beta 版本。可通过 @loongsuite/dsh-plugin@beta 安装 npm Beta 包;DSH 插件市场 条目尚未发布。

数据模型

DSH session/event + llm/stream
                │
                ▼
          生命周期协调器
                │
                ▼
   LoongSuite GenAI OTel 工具库
                │
                ▼
 私有 TracerProvider + MeterProvider
                │  OTLP/HTTP Protobuf
                ▼
   任意 OpenTelemetry 兼容后端

DSH 的每一轮对话生成一条调用链:

ENTRY
└── AGENT
    └── STEP
        ├── LLM
        └── TOOL

每次真实 LLM 调用都会生成独立的 LLM span,因此重试会保留为同一个 STEP 下的多次尝试。工具调用 通过 DSH call ID 与结果关联。错误、中止、不完整的流以及插件卸载都会以错误状态关闭未结束 span,不会 留下悬挂链路。Subagent 会话生成独立 trace,并携带 DSH 父会话和委派层级属性。

插件还会上报标准的 gen_ai.client.operation.durationgen_ai.client.token.usage 指标。它不 上报 OpenTelemetry Log,可与独立的 DSH 日志导出插件同时使用。

GenAI Invocation 构建与语义属性由 @loongsuite/otel-util-genai SDK 提供。

兼容范围

组件 支持范围 已完整验证版本
DeepSeek Harness >=0.1.0-rc.6 <0.2.0 0.1.0-rc.6 的 headless 与 Web profile
Node.js >=22.19.0 macOS 上的 22.1924.1925.9

不支持早于 0.1.0-rc.6 的 DSH RC 版本。Beta 验证以 DSH 当前最新发布版为准,不会仅凭 bundle 能成功组合就宣称具备完整运行时兼容性。

安装与使用

Beta 阶段,在需要观测的每个 DSH profile 中安装 beta tag:

dsh plugin --profile web add @loongsuite/dsh-plugin@beta
dsh plugin --profile headless add @loongsuite/dsh-plugin@beta

本地开发时,把包名换成本仓库的绝对路径:

dsh plugin --profile web add /absolute/path/to/dsh-plugin

设置服务名和 OTLP/HTTP Collector 地址,然后照常启动该 profile:

export OTEL_SERVICE_NAME=dsh-agent
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
export OTEL_EXPORTER_OTLP_HEADERS='authorization=Bearer%20your-token'

dsh --profile web
# 或:dsh --profile headless "总结这个工作区"

共享 endpoint 会自动补成 /v1/traces/v1/metrics。未配置 endpoint 时,导出器使用 OpenTelemetry 标准默认值。

插件配置

大部分部署只需环境变量。也可以修改 $DSH_HOME/profiles/<profile>/cordis.patch.yml(默认位于 ~/.dsh)中的插件配置:

- id: loongsuite-observability
  config:
    endpoint: http://localhost:4318
    serviceName: dsh-agent
    headers:
      authorization: Bearer your-token
    resourceAttributes:
      deployment.environment.name: development
    captureContent: false
    exportMetrics: true

显式插件配置的优先级高于环境变量。

如果不想修改 profile,可在启动 DSH 前通过 GenAI 正文采集模式开启:

export OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=SPAN_ONLY
dsh --profile web
配置项 默认值 含义
enabled true 不卸载 bundle,直接停止采集。
endpoint 未设置 OTLP/HTTP 公共基地址;插件自动追加 signal 路径。
traceEndpoint / metricEndpoint 未设置 完整的单 signal 地址;优先于 endpoint
headers {} 同时添加到两个导出器的请求头。
serviceName OTEL_SERVICE_NAMEdeepseek-harness OpenTelemetry service.name
resourceAttributes {} 额外的字符串类型 Resource 属性。
captureContent 环境变量配置或 false 上报提示词、回复、工具定义、参数和结果正文。
contentMaxChars 128000 每个正文属性序列化后保留的最大字符数。
exportMetrics true 上报 LLM 耗时和 token 指标。
maxExportBatchSize 512 每批最多上报的 span 数。
maxQueueSize 2048 最多排队的 span 数,不能小于 batch size。
traceExportIntervalMs 5000 Trace 批量导出间隔。
metricExportIntervalMs 60000 Metric 导出间隔。
exportTimeoutMs 30000 OTLP 导出超时。
debug false 通过 DSH logger 输出额外的插件生命周期诊断。

支持以下 OpenTelemetry 标准环境变量:

  • OTEL_EXPORTER_OTLP_ENDPOINT
  • OTEL_EXPORTER_OTLP_TRACES_ENDPOINTOTEL_EXPORTER_OTLP_METRICS_ENDPOINT
  • OTEL_EXPORTER_OTLP_HEADERS
  • OTEL_EXPORTER_OTLP_TRACES_HEADERSOTEL_EXPORTER_OTLP_METRICS_HEADERS
  • OTEL_SERVICE_NAME
  • OTEL_RESOURCE_ATTRIBUTES
  • OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT(未显式配置 captureContent 时,SPAN_ONLYSPAN_AND_EVENT 开启 span 正文)

Header 与 Resource 值使用标准的逗号分隔、百分号编码 key=value 格式。

隐私与运行时行为

默认不采集正文:提示词、回复、工具 schema、参数和结果不会进入 span,但结构元数据和 token 用量仍会 上报。启用 captureContent,或将正文采集环境变量设为 SPAN_ONLY / SPAN_AND_EVENT 后,源码、凭据、 个人数据或其他敏感内容可能被发送到已配置后端;启用前应先确认后端的留存和访问控制策略。如果某个 profile 必须忽略进程环境并始终禁止正文采集,请显式配置 captureContent: false

插件持有私有 OpenTelemetry Provider,不会替换 DSH 或其他库的全局 Provider;监听器和 Provider 也会随 DSH 插件生命周期释放和 flush。插件附加到已运行或 HMR 重载的 profile 时,只接管现有会话的 身份,并从下一次原生 turn/start 开始采集,不会重放历史事件或生成重复链路。

开发

需要 Node.js 22.19 或更高版本以及 pnpm。

pnpm install
pnpm run check
pnpm test
pnpm run build
pnpm pack

实现约束与发布检查清单见贡献指南

许可证

Apache-2.0

内容来自项目 README(GitHub)↗

链接

同类插件

查看整个分类 →