dsh-funnel:在模型上下文之前策展工具输出

前言

在 DeepSeek Harness(DSH)工作流中,工具执行结果会被附加到对话历史中,并在模型发出的每一个后续请求里被重新发送。长输出(例如 npm test 或大型代码库读取)会伴随整个会话,不仅占满上下文窗口,还会把关键的错误信息埋没在大量冗余日志之下。现有的层级(捕获、执行、压缩时间)无法直接解决模型“看到什么”的问题,也无法在每轮对话开始前就进行过滤。

是什么

dsh-funnel 是一个工作流插件,由 YuanyuanMa03 开发,采用 MIT 许可证。它的核心作用是在数据进入模型上下文之前进行策展:保留关键行(如错误、警告、头部和尾部),将剩余部分转储到磁盘并附带指针。这能让模型视图显著缩小,同时保证原始数据在磁盘层面无损,供模型在需要时按需读取。

核心功能

  • 工具输出策展:覆盖 bash、文件读取、网络抓取、搜索等所有返回文本的工具。
  • 保留关键行:自动保留错误行、警告行,以及输出内容的头部和尾部。
  • 磁盘转储:将完整的原始输出写入 .dsh-funnel/ 目录,并通过日志中的指针引用。
  • 性能提升:模型可见的内容被大幅压缩。实测中,2001 行的输出被压缩至约 370 字符,模型视图缩小约 24 倍。
  • 零配置:默认行为已覆盖常见场景,小结果会以字节相同的方式直接通过,无需调整。
  • 无损与一致性:磁盘层面完全保留原始数据,模型可见内容与日志记录完全一致。

安装与配置

安装插件需要执行以下命令:

dsh plugin add github:YuanyuanMa03/dsh-funnel

插件安装后,需要在配置文件中对行为进行微调。所有配置项均为可选,位于插件配置块中:

- id: dsh-funnel
  name: 'dsh-funnel'
  config:
    maxChars: 4000        # 长度在此以下的原始结果会以字节相同的方式直接通过
    keepHead: 15          # 保留输出开头的行数
    keepTail: 25          # 保留输出末尾的行数(通常包含错误信息)
    keepPatterns:         # 通过正则匹配需要保留的关键行
      - error
      - warn
      - fail
      - fatal
      - exception
      - assert
      - denied
      - panic
    maxLineChars: 1000    # 对单行过长的内容(如 minified JSON)进行截断
    spill: true           # 是否将完整原始内容写入磁盘
    tools:                # 针对特定工具的覆盖配置
      web_fetch: { maxChars: 2000 }

工作原理

dsh-funnel 挂载在 tools/execute 扩展点上。它拦截工具执行的返回值,替换其中的长字符串字段(如 stdout、文件内容、网页抓取结果),只将策展后的内容投影到模型可见的 value 字段中。同时,它将完整的原始数据写入磁盘。错误结果从不被策展,因为它们通常短小且对上下文至关重要。

注意事项

  • 运行环境:插件需要 Node.js 环境版本 >= 20。
  • 工具范围:仅覆盖返回文本类型的工具。
  • 错误处理:错误结果不会被策展或截断,始终保持原样。
  • 安全性:插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。

总结

dsh-funnel 通过在数据进入模型上下文前进行预处理,解决了长输出带来的上下文膨胀和注意力分散问题。它以极低的配置成本,实现了显著的 Token 节省和性能提升,同时保留了数据的完整性和可审计性。更多细节可参考 SkillHub 目录 或 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜