dsh-context-usage-for-agent:让 Agent 读到自己的上下文占用

前言

在 DSH 里跑 Agent 时,上下文窗口会随多轮对话、工具往返和缓存策略不断变化。开发者能看日志,但模型侧通常拿不到「当前已用多少 token、还剩多少、缓存命中率如何」这类读数,长任务里很难在合适时机收窄上下文或触发压缩。社区插件 dsh-context-usage-for-agent(维护者 dixieWithHeart)在宿主会话投影之上,把占用指标暴露给 Agent,并在每轮对话开头可选注入一行摘要;同时在设置里提供开关与模板预览。本文按安装、能力、数据来源与配置说明用法,事实以 GitHub README 为准。

这是什么

dsh-context-usage-for-agent(README 亦称「上下文自知」)归类为模型推理相关 DSH 插件,当前 package 版本为 0.6.0,许可证 MIT,要求 Node >= 20。它解决的是:Agent 与界面侧能一致地看到同一会话的上下文占用,而不是凭猜测控制 prompt 长度。

DSH 生态奉行「一切皆插件」;目录站点 SkillHub 插件页 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系。

核心功能

插件在三处呈现上下文占用,三者相互独立又可组合使用。

context_usage 工具

Agent 可调用 context_usage 工具,查询:

  • 占用百分比
  • 已用 token、上下文窗口大小、剩余 token
  • 缓存命中率

若在配置中设置了已知自动压缩阈值(compactAtRatio),工具还可回报距压缩还剩几个百分点。

每轮一行读数

在本回合首次工具调用之前,宿主可向对话注入一行格式化读数。默认形态类似:

[ctx 17.7%] 177k/1.00M · 缓存 99.4% · 余 823k

可通过总开关或模板控制是否注入、文案长什么样(见下文配置)。

设置页

路径:设置 → 上下文自知。提供注入开关、自定义模板与实时预览。设置页文案随 DSH 界面语言(设置 → 常规 → 语言)在中英文间切换,无需重启;插件清单名称与描述由 locale/zh.json、locale/en.json 提供。

占位符列表中的细字说明目前由宿主提供,且仅有中文;若宿主缺少 locale 服务(精简组合),界面会退回中文并在控制台输出一条 warn。

数据来源与状态

占用数字并非插件自行估算,而是对齐宿主事件与投影:

项 来源
pressureTokens assistant/message 的 usage:未缓存输入 + 缓存读 + 缓存写(不含输出)
contextWindow request/context 的真实值;未到达前用配置兜底
回合号 turn/start

状态走会话投影(ctx.sessionProjections,key 为 contextUsage),不订阅 session/event。冷读或进程重启后,折叠日志即可得到当前值。

安装与启用

在已安装 DSH CLI 的环境中执行官方文档给出的命令:

dsh plugin add dsh-context-usage-for-agent

安装完成后刷新页面。context_usage 工具立即可用;每轮读数默认开启(injectPerTurn 默认为 true)。

插件以后台进程权限随当前 DSH 运行。安装前建议阅读 源码仓库 与 LICENSE,确认符合你的环境与合规要求。

配置

两层配置并存:

  • cordis.patch.yml 中的 config 为启动默认值
  • 设置页写入 ~/.dsh/dsh-context-usage.json,优先级更高
项 默认 说明
enabled true 总开关。关闭后只停止每轮读数,工具仍可用
injectPerTurn true 是否在每轮注入一行
template [ctx {percent}%] {used}/{window} · 缓存 {cache}% · 余 {remaining} 注入文案;留空即不注入
contextWindow 1000000 仅兜底;provider 上报后以真实值为准
compactAtRatio null 已知自动压缩阈值(0–1)时,工具可回报距压缩的百分点

模板占位符

占位符 含义
{percent} 占用百分比,如 17.7
{used} / {usedRaw} 已用 token(带单位 / 原始数字)
{window} / {windowRaw} 窗口大小(带单位 / 原始数字)
{remaining} / {remainingRaw} 剩余 token(带单位 / 原始数字)
{cache} 缓存命中率
{turn} 回合号
{compact} 距压缩百分点(需配置 compactAtRatio)

未知占位符会原样保留,便于发现拼写错误;已知占位符但取不到值时显示 ?。

设置页通过下列 HTTP 路由读写状态(供 UI 使用,无鉴权):

方法 路径 用途
GET/HEAD /api/dsh-context-usage/state 设置与实时占用
POST /api/dsh-context-usage/set 部分更新设置

典型用法

  1. 安装插件并刷新 DSH Web 界面。
  2. 在 Agent 流程中需要判断「是否接近窗口上限」时,调用 context_usage 获取当前百分比与剩余 token。
  3. 若希望模型在每轮开场即看到占用,保持 enabled 与 injectPerTurn 为 true,或到 设置 → 上下文自知 调整模板并查看实时预览。
  4. 若你已知宿主会在某一占用比例触发自动压缩,将 compactAtRatio 设为对应小数,工具与模板中的 {compact} 才有意义。

仓库内可用下列命令做契约与语法检查(维护者文档):

node tools/test-context-usage.mjs   # 61 条契约断言
node --check index.js client.js

浏览器端设置页渲染需刷新页面目视确认,脚本无法自动断言。

适用场景与注意

适合谁: 在 DSH 上开发或调试长链路 Agent、需要根据 token 与缓存命中率做 prompt 收窄、压缩或自我说明的场景;也适合希望在 UI 与模型侧看到一致读数的团队。

注意:

  • 关闭 enabled 不会禁用 context_usage 工具,只会停止每轮注入。
  • contextWindow 配置项仅在 provider 尚未上报真实窗口前起兜底作用。
  • HTTP 状态接口无鉴权,部署在共享或公网环境时需结合整体 DSH 访问控制评估风险。

结尾

dsh-context-usage-for-agent 把会话投影里的上下文占用同时交给工具和可选的每轮读数,并在设置页提供模板化展示,减少 Agent 对窗口状态的盲区。进一步了解与安装:

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

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

Xiaoye