dsh-langfuse
dsh-langfuse: Langfuse LLM observability for DeepSeek Harness — one OpenTelemetry trace tree per agent session, with feedback scores and subagent lineage.
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:TtTRz/dsh-langfuse说明文档
阅读完整 README ↗dsh-langfuse
DeepSeek Harness 的 Langfuse LLM 可观测插件——每个 agent 会话一棵 OpenTelemetry trace 树,附反馈打分与子 agent 血缘。
把每个 agent 会话以 OpenTelemetry trace 树上报到 Langfuse:turn → trace、模型 step → generation、工具调用 → tool span,带 GenAI 语义约定属性、token 用量、首 token 时间与错误状态。
✨ 特性
- 🧵 全链路追踪——每轮 turn、每次 generation、每个工具调用都进 Langfuse,含模型/供应商/用量(含缓存与推理 token)/TTFT
- 🚚 Content-Length 传输——报文单次写入并显式带
Content-Length,绝不发 chunked。部分 Langfuse 部署的前置网关会破坏 chunked 的 POST 体(400 Failed to parse OTel JSON Trace),本传输从根上绕开这类问题 - 👍 反馈打分——
/feedback记录变成挂在最近一轮 turn trace 上的 TEXT score - 🔗 子 agent 血缘——子会话的 turn trace 链接到父会话的 trace(同进程)
- 🎚️ 三种上报模式——
FULL(实时)/FEEDBACK_ONLY(用户记录反馈时才上报)/DISABLED(默认,不出网) - 🔒 可选 input——generation input(system prompt / 工具 / prompt)仅在
includeGenerationInput开启时导出 - 🛡️ 配置失败即报错——非法 URL、缺密钥、非法数值在插件加载时即抛出
🚀 快速开始
dsh plugin --profile web add dsh-langfuse
export LANGFUSE_PUBLIC_KEY=pk-lf-...
export LANGFUSE_SECRET_KEY=sk-lf-...
# 可选:自建实例或非 EU region
export LANGFUSE_HOST=https://langfuse.example.com
dsh web # 重启实例,聊一轮即可在 Langfuse 看到 trace
有 key 即 FULL 实时上报;无 key 则 DISABLED。LANGFUSE_TELEMETRY_MODE=FEEDBACK_ONLY 收敛为反馈门控,LANGFUSE_INCLUDE_GENERATION_INPUT=1 导出 generation input。
自带 patch 会禁用 dsh-base 的 session-telemetry-otel 行(seam 每个 context 只接受一个后端)并挂载本包;dsh --profile web --dump-config 可不启动直接查看组合结果。
显式 cordis.yml 行
- id: session-telemetry-langfuse
name: dsh-langfuse
config:
mode: FULL # FULL | FEEDBACK_ONLY | DISABLED(默认)
exporter:
url: https://cloud.langfuse.com/api/public/otel/v1/traces
auth:
publicKey: !!js process.env.LANGFUSE_PUBLIC_KEY
secretKey: !!js process.env.LANGFUSE_SECRET_KEY
processor: {} # 可选;原样透传给 BatchSpanProcessor
includeGenerationInput: false