dsh-ctx-visualizer:看清每次模型调用收到的完整上下文

前言

在 DeepSeek Harness(DSH)里跑多轮智能体时,真正送进模型的内容往往藏在链路深处:系统提示、用户输入、工具 schema、历史轮次、工具返回与压缩摘要会随每一步递增。仅靠日志或终端输出,很难对齐「这一步相对上一步多了什么、哪一段在膨胀」。下面介绍社区插件 dsh-ctx-visualizer,它在不改动 agent loop 的前提下,把每次调用的上下文以时间线与架构视图呈现出来。

这是什么

dsh-ctx-visualizer 是标记为 dsh-plugin 的社区插件,维护者为 cenbonew,在插件目录中归类为模型推理;当前 GitHub 星标为 1。它面向需要细读智能体循环的开发者:在一次多轮交换里(调用模型 → 解析 tool call → 执行工具 → 回传结果 → 再次调用模型),逐步展示当时发给模型的内容、相对上一步新增的部分,以及上下文增长的方向。

插件不是 DeepSeek Harness 官方包;DeepSeek Harness 仍处于 Developer Preview,所依赖的事件与接口可能不兼容变更,使用前应对照 README 中的兼容版本。

核心功能

安装并在对话顶部切换到 Context Lens 后,界面大致分为三块:

  1. 左侧 · 回合(turns)
    每个回合一张卡片:用户问题、调用次数、工具运行次数、上下文 token、耗时、常用工具等。列区域为固定高度,可滚动查看更早回合。

  2. 顶部 · 横向时间线
    展示当前选中回合内的每一步,例如 Step 1 · model call → runs bash / results fed back → Step 2 …。点击节点可切换当前步骤。

  3. 右侧 · 步骤详情
    - Architecture(默认):根据实际内容动态生成——系统提示按自身标题分段;工具按来源分组(MCP server / built-in);对话历史按「user → model call → tool result」链展示,本步新增消息高亮,压缩摘要单独标出;右侧为本步流程(request → model → 各 tool call 的结果/耗时/体积 → 进入下一次 request)。
    - Request context:默认只显示本步新增消息;未变化的 system 与工具列表自动折叠;提供上下文组成堆叠条(system / user input / tool results / plugin injections / assistant history / tool schemas)及 input/output tokens、cache 命中率。
    - Response、Tool runs、Raw JSON(完整记录及可折叠、可复制子块)。

其他已核实能力:

  • 持久化:实时采集写入 ~/.dsh/ctx-visualizer/captures/,插件重载或 Harness 重启后可恢复。
  • Backfill:启用插件之前的步骤,通过重放 session log 的 context 变更(含 compaction)重建,并标记为 rebuilt。
  • Redaction:存储前对形如 Bearer …、sk-…、tos_…、ghp_…、xoxb-… 的密钥做掩码。
  • 语言:跟随 Harness 区域设置(中/英),工具栏可手动切换并记住选择。

实现上为只读观测:监听 llm/stream、agent/request、tools/execute、tools/result、agent/error 等事件,以及用 sessionQuery.readSession 做 backfill;前端为 conversation.view 插槽插件。捕获失败被 try/catch 包裹,不影响 agent 本身。

安装与启用

插件无 npm 依赖,README 给出的获取方式为克隆仓库:

git clone https://github.com/cenbonew/dsh-ctx-visualizer.git

随后在 DeepSeek Harness 中安装该本地 bundle,任选其一:

  • 对 agent 说明:用 Plugin Manager 安装本地 bundle,路径为 /absolute/path/dsh-ctx-visualizer(需替换为实际绝对路径)。
  • Settings › Plugins(若当前构建支持从本地路径安装 bundle)。

package.json 中的 dsh.bundle.patch 使项目可作为 bundle 安装;dsh.client 声明前端部分,会自动接入 Web GUI。

安装后刷新页面,在任意对话顶部切换到 Context Lens。插件启用之后的模型调用会实时捕获;更早步骤会自动从 session log backfill。

更新方式:git pull,在 Plugin Manager 中关闭再打开该 bundle(或重启 Harness),并刷新页面。

开发与自测(不依赖已安装的 Harness,且不写入 ~/.dsh):

npm test

需要 Node.js ≥ 20(见 package.json 的 engines)。

项目 版本
开发与验证环境 DeepSeek Harness Desktop 0.2.0-rc.2,@deepseek-ai/dsh-* 0.2.2-rc.1(Web GUI)
运行测试 Node.js ≥ 20

配置

尚无独立设置表单。可在 profile 的 cordis.patch.yml 里为 ctx-visualizer 行传入配置,或修改 lib/index.js 顶部的 DEFAULTS:

Key Default 含义
capture true 总开关
persist true 写入磁盘
persistDir ~/.dsh/ctx-visualizer/captures 捕获目录(目录 0700,文件 0600)
backfill true 从 session log 重建更早步骤
backfillIntervalMs 30000 同一会话两次 backfill 的最小间隔
maxStepsPerSession 80 每会话保留的 live 步骤数(rebuilt 不计入)
maxSessions 40 保留的会话数
maxCharsPerText / maxCharsPerToolResult 400000 / 120000 单块文本截断上限
redactSecrets true 存储前脱敏

典型用法

  1. 按上文完成 clone 与本地 bundle 安装,刷新后打开 Context Lens。
  2. 正常与 agent 对话;在左侧选回合,在时间线上点选某一步。
  3. 在 Architecture 查看系统提示分段、工具分组与本步相对历史的增量;在 Request context 看组成条与 token/cache 信息;需要原始数据时展开 Raw JSON 并复制。
  4. 工具栏可切换语言、清除捕获(会删除磁盘文件);勾选 Show aux calls 可在 live 捕获时看到辅助调用(session 标题生成、context compaction 等无法 backfill 的步骤除外)。

Agent 侧还可通过注册的 Inspect Provider CtxVisualizer,用 cordis_inspect_query 查询捕获状态(见 README「How it works」)。

适用场景与注意

适合谁:调试 DSH 智能体上下文膨胀、对比每步新增消息、核对 tool 参数与回传、复盘多轮 tool loop 的开发者与学习场景。

权限与隐私:插件以当前 DSH 进程权限运行;捕获内容为完整模型 上下文,可能含代码、文件片段与工具返回的业务数据,默认仅存本机、不上传。默认脱敏只识别常见密钥前缀,不能覆盖全部敏感信息;模型回复与 reasoning 暂未脱敏。分享截图或复制 JSON 前请自行检查。安装前建议浏览源码与 MIT 许可证(package.json 版本 0.1.0)。

已知限制(摘自 README):辅助调用无法 backfill;附件在请求中会被投影为文本,rebuilt 步骤可能仍显示原始 attachment 块;字符数为估计值,精确 token 以 provider 上报的 usage 为准。

DSH 生态强调「一切皆插件」;SkillHub 插件目录 为独立社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-ctx-visualizer 把「每次模型调用究竟收到什么」做成可浏览的回合时间线与动态架构图,适合在 Harness 里做上下文级调试。插件页:https://www.skillhub.cn/plugins/cenbonew/dsh-ctx-visualizer;源码与完整说明:https://github.com/cenbonew/dsh-ctx-visualizer。异常时先核对 Harness 与 @deepseek-ai/dsh-* 版本,再在仓库 Issues 反馈。

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

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

Xiaoye