前言¶
在 DeepSeek Harness(DSH)里跑 Session 时,模型实际收到的是一整段渲染后的 prompt:系统提示、工具 schema、历史消息等,都占同一块上下文窗口。日志里往往只有对话摘要,看不到各块各占多少 token、顺序如何、截断发生在哪一段。调试上下文膨胀、工具定义过长或 compaction 效果时,缺少直观视图会多猜很多步。
dsh-context-explorer 是社区维护的客户端插件,在 Harness Web UI 右侧边栏增加「上下文 / Context」标签页,用 token 方格网格和分区列表展示 Session 提交给模型的内容构成。下面介绍它的定位、面板能力、安装方式,以及使用时应接受的限制。
这是什么¶
dsh-context-explorer(npm 包名 dsh-context-explorer,当前版本 0.1.1)由 LionNatsu 维护,MIT 许可,与 DeepSeek 无隶属或背书关系。插件分 Host 与浏览器两半:index.js 把 Session 折叠成视图,client.js 渲染标签页、网格与列表。
一句话定位:在 DSH Web UI 中可视化「最后一次请求视角下」的上下文窗口——系统 prompt、工具块、每条消息各占多少、整窗如何被填满。
核心功能¶
安装并加载 profile 后,右侧面板会出现 上下文 / Context Explorer 标签(多语言名见 locale/*.json)。
标题行¶
显示 已用 {used} / {total}:used 为提供商对上一次请求报告的 prompt 大小;在尚未有报告前,用面板自身统计的总数。total 为上下文窗口长度;Host 尚未提供窗口大小时显示 —。悬停可看各数字含义。
组成芯片(Composition chips)¶
按内容类型列出当前视图中存在的种类,按 token 从多到少排序。每项含 8×8 色块、类型名、token 数及占面板总量的比例;同时作为网格图例。点击某芯片可只列出该类型分区,再点一次取消筛选。
Token 方格网格¶
整张上下文窗口(含未使用部分)被切成等份,每格代表窗口中的一段。已占用格按该段内占比最大的内容类型着色;若第二类型在同一格内至少占 35%,则对角混色。超出实际上下文长度的区域以「空闲」深色平铺。每格 7 设备像素、间隔 1 像素,不同缩放下一格物理大小一致。悬停显示类型名;点击打开该格主要归属的分区详情。
分区列表¶
每一行对应模型看到顺序中的一个 region:色块、一行摘要、必要时 已截断 / clipped 标记,以及 token 数与占比。提供商直接统计的数字原样显示;插件用 Harness 同款启发式估算的数字带 ≈。摘要用于在未展开前说明「这段是什么」——例如仅含工具调用的轮次会按调用名概括,JSON 结果按 leading 字段,其余取首行 prose。点击行展开的是模型实际收到的那一段 fragment(含 role 标记等),不是摘要;截断说明在展开正文中由 detail.clippedNote 承担。可在「模型顺序」与「按大小排序」之间切换。
无可用视图或视图中无 region 时,面板会明确提示,而不是空白壳。折叠失败时在标题上方打印错误;渲染错误会替换整个标签内容。
数字从哪来¶
标题行的已用量优先用提供商对最后一次请求的计数。各 region 在提供商有分项计数时用该数,否则用与 DSH 上下文计量相同的固定启发式(约每 4 个 UTF-16 码元 1 token,另加 content block 与 message 的固定开销),并标 ≈。估算反映构成而非账单精度,随文本语言会有漂移。
安装与启用¶
在目标 profile 下执行(dsh plugin 会把参数转给该 profile 的 pnpm,--profile 指定 profile 名):
dsh plugin --profile <name> add dsh-context-explorer
也可在 Web UI 的 Plugins 页:Add plugin,输入包名、GitHub 地址或本地目录路径完成同样安装。
包声明 dsh.bundle.patch → ./cordis.patch.yml,profile 下次加载时会应用 Host 侧一行配置。运行时代码为仓库内 JavaScript,无构建步骤、无 install script,因此通过 github: 安装时不需要 build 权限。要求 Node ^22.19.0 或 >=24.0.0。README 写明在 @deepseek-ai/dsh 0.2.0-rc.2 上验证;插件未声明版本门控,若上游扩展点变更,可能表现为面板缺失或为空而非安装拒绝。
Host 半侧变更通常需重启 DSH 进程;浏览器半侧由客户端模块系统加载,会自行热更新。修改 Host 侧 index.js、serve.js、estimate.js 后,默认 HMR 不监视源码目录时,需重启、在 profile patch 中为 hmr 配置 root,或换路径重装才能生效。
典型用法¶
1、按上文命令把插件装进常用 profile,启动或重载 Harness,打开 Web UI。
2、选中要观察的 Session,在右侧边栏打开 上下文 / Context 标签。
3、发起或等待一次模型调用,使面板能获得提供商报告的 prompt 大小;查看标题行 已用 / 总量 与网格中各色块占比。
4、用组成芯片筛选某一类内容(如工具 envelope、系统 prompt),在列表中点开行,核对展开 fragment 是否与预期一致;注意带 已截断 的行只保留 fragment 开头(单条 message fragment 上限 4000 UTF-16 码元)。
5、在列表排序方式间切换,快速找出占用最大的 region。
以上流程均来自 README 对面板交互的描述,无需额外配置文件。
适用场景与注意¶
适合谁: 在 DSH 里开发或调试 Agent、需要核对系统 prompt 与工具 schema 是否挤占过多上下文、或要理解 compaction / 多轮消息后窗口如何被填满的开发者。
权限与安全: 插件以当前 DSH 进程权限运行;安装前应阅读 GitHub 仓库 源码与 MIT 许可证,并知悉 THIRD_PARTY_NOTICES.md 中自 DeepSeek 项目复用的 estimate.js、serve.js。
已知限制(使用前应接受):
- 展示的正文是对官方 serving 实现的重建(
serve.js转写),不是从 API 抓取的原始请求体;Session 日志不存 request body。 - 面板按 region 分片展示,不是一条连续 prompt;系统 prompt(最早一次 hoist)、
## Tools块等各成一片;长 message 会被截断并标记 clipped。 - 无自动化浏览器视觉测试,布局依赖人工查看。
社区插件目录见 SkillHub 条目;该站点为社区生态索引,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-context-explorer 把「Session 发给模型的上下文」从黑盒变成可读的网格与分区列表,便于在 Web UI 内做 token 构成分析与截断排查。需要安装命令、限制说明与架构细节时,以仓库 README 为准。
- 目录页:https://www.skillhub.cn/plugins/LionNatsu/dsh-context-explorer
- GitHub:https://github.com/LionNatsu/dsh-context-explorer