Back to home@vkxkzsp769-cloud

dsh-context-compressor

压缩dsh web的上下文

Stars
0
Language
TypeScript
Created
Aug 18, 2026
Updated
Aug 18, 2026
GitHub repo

Introduction

📦 dsh-context-compressor

DeepSeek Harness Web UI 自动上下文压缩插件

Token 使用量达到模型最大上下文的 60% 时,自动将老旧对话浓缩为摘要,释放上下文空间,对话永不中断。

TypeScript · ESM · Zero 运行时硬依赖 · 手机 / 电脑通用


✨ 特性

  • 全自动触发:每次 Agent 交互前的 pre-request 钩子自动检查 Token 用量
  • 60% 智能阈值:达到模型最大上下文(默认 128K)的 60% 触发压缩(可配置)
  • 防过早压缩:会话轮次 ≥ 10 才压缩(minConversationTurns 可配)
  • 保守压缩:只压缩「第 3 条起、最早 30%」的老旧非系统对话,保留最近 70% 消息;system 消息永不参与
  • 模型摘要deepseek-chat 生成核心事实摘要,失败自动回退 gpt-4o-mini
  • UI 提示:压缩后插入 📦 上下文已自动压缩,释放了约X% Token空间
  • Token 进度条:插件面板实时显示当前 Session 的 Token 使用进度
  • 绝不中断对话:压缩失败(如 API 超时)只记录日志并提示「自动压缩暂时不可用」,主流程不受影响

🚀 安装

手机 Termux 和电脑都用同一个 GitHub 链接,即装即用、无需构建:

手机(Termux)

dsh plugin --profile web add https://github.com/vkxkzsp769-cloud/dsh-context-compressor.git

电脑(web + tui 可同时装)

# 需先安装 dsh:npm install -g @deepseek-ai/dsh
dsh plugin --profile web add https://github.com/vkxkzsp769-cloud/dsh-context-compressor.git
dsh plugin --profile tui add https://github.com/vkxkzsp769-cloud/dsh-context-compressor.git

说明:

  • 从 GitHub 拉取即装即用,不需要下载文件、不需要构建;
  • web 与 tui 是两个独立环境,要哪个装哪个,可同时装;
  • 重启界面后日志出现 [Compressor] 已激活: 阈值=60% ... 即安装成功。

⚙️ 配置

配置键默认值说明
enabledtrue总开关
thresholdRatio0.6Token 使用率达到该比例触发压缩
minConversationTurns10最小会话轮次,防过早压缩
maxContextTokens128000模型最大上下文(tokens)
compressRatio0.3压缩区域比例(压缩最早 30%,保留最近 70%)
keepSystemMessagestruesystem 消息永不参与压缩
modeldeepseek-chat摘要主模型
fallbackModelgpt-4o-mini主模型失败时的备用模型
apiBaseUrl''OpenAI 兼容端点;留空自动选择(deepseek / gpt)
apiKey''API Key;留空读取 DEEPSEEK_API_KEY / OPENAI_API_KEY
summaryPrompt内置中文 Prompt摘要指令(200 字核心事实)
summaryMaxChars200摘要输出上限(字符)
requestTimeoutMs30000摘要请求超时
minCompressionIntervalMs300000两次压缩最小间隔(冷却)
tokenizertiktokentiktoken(BPE)或 heuristic(len/4 估算)
uiEnabledtrue是否插入 UI 通知与进度条

🔧 工作原理

pre-request 钩子
   │
   ├─ 读取会话历史 + Token 用量
   ├─ 用量 ≥ 60%?  ── 否 → 跳过(每次仍刷新进度条)
   ├─ 轮次 ≥ 10?   ── 否 → 跳过
   ├─ 冷却期内?    ── 是 → 跳过
   ├─ 定位区域:索引 ≥2 的早期非系统消息(最早 30%)
   ├─ 摘要:deepseek-chat(失败回退 gpt-4o-mini)
   ├─ 替换:[start..end] → 1 条 role=system 摘要
   └─ UI:📦 通知 + 刷新 Token 进度条

🧩 目录结构

dsh-context-compressor/
├── package.json          # 插件元数据(含 dsh.bundle / dsh.client 官方声明)
├── manifest.json         # 便携式插件清单
├── cordis.patch.yml      # DSH 层栈注册
├── AGENTS.md             # 60% 自动压缩终端规则(dsh-agent-instructions 加载)
├── src/
│   ├── index.ts          # 生命周期:activate / deactivate + apply
│   ├── config.ts         # 配置类型、默认值、校验
│   ├── compressor.ts     # 核心压缩算法
│   ├── dsh-api.ts        # DSH API 模拟适配层(含 TODO 替换指引)
│   ├── tokens.ts         # Token 计数(tiktoken + 回退)
│   ├── llm.ts            # 摘要适配器(OpenAI 兼容 + 本地模拟)
│   ├── ui.ts             # UI 桥(通知 + Token 进度数据)
│   └── client/           # 浏览器端(进度条面板 + 通知渲染)
├── scripts/smoke.mjs     # 端到端冒烟脚本
└── tests/                # node:test 单元测试

🛠 开发

npm install          # 安装开发依赖(tiktoken 可选)
npm run build        # 编译宿主端 + 客户端
npm test             # 构建 + 单元测试(12 项)
npm run smoke        # 端到端冒烟

依赖极简:宿主端核心零运行时硬依赖;tiktoken 为可选依赖,缺失时自动回退启发式估算。

🤝 适配 DSH 真实 API

核心压缩逻辑只依赖 src/dsh-api.tsDshApi 接口。接入真实 DSH 时按 README 中的「DSH API 替换指南」替换即可,压缩算法无需改动(getSessionHistory → ctx.sessionsgetTokenCount → ctx.tokenMeterreplaceMessages → 会话 surface 区间替换、摘要 → ctx.llm.stream() 等)。

📄 License

MIT