模型驱动的上下文压缩(Active Context Pruning):由模型决定何时压缩、压缩什么。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:Tyan66666/billion-context-dsh
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本。请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
⚠️ 测试版声明——请勿用于生产环境 本项目(v0.2.1)仍处于开发中的测试版。DeepSeek Harness 本身也处于公开测试版阶段。请勿将两者用于工程化 / 生产环境——预期会有破坏性变更与粗糙之处。
为什么?
当对话变长,模型会耗尽上下文。多数工具直接硬截断——悄悄丢弃早期消息。billion-context-dsh 给模型一个 compress 工具:由 LLM 决定何时、压缩什么,写成高保真摘要,保留关键细节(文件路径、决策、错误信息)的同时回收上下文空间。
与 DSH 内置的自动压缩(用自动生成的摘要替换一段范围)不同,billion-context-dsh:
- 模型驱动 —— 摘要由模型自己书写,没有第二次 LLM 摘要调用(ACP 的成本优势)
- 只建议、不强令 —— 自动策略只 nudge(提醒),是否压缩、何时压缩由模型决定
- 持久且可恢复 —— 压缩范围成为 checkpoint 节点,原文保留在 append-only 会话日志中;
decompress可恢复,search_context可在块内查找 - 基于 seq 引用 —— 不需要消息标签;surface seq 由 nudge 的范围表携带,范围边界自动平衡、容忍
#callId片段
这是 billion-context-pi(Pi 编码代理适配器)在 DeepSeek Harness 上的移植:压缩内核(acp-kernel)原样复用,适配层针对 DSH 的 durable-surface 模型重写——经过验证的映射关系见 docs。
安装
💡 想让 DeepSeek Harness 帮你装? 本仓库本身就运行在 DSH 上:把 docs/INSTALL.md 交给会话里的 agent,它会读取指南、解析 你的 profile、编辑组合配置并验证挂载。前提:① 配置写在
~/.dsh下,需要 你批准一次文件权限;② 装完让它调用acp_status自证。
npm install billion-context-dsh
💡 v0.2.0 起支持
dsh plugin一键安装(bundle)。包已声明dsh.bundlemanifest,DSH 的插件命令会把它装进 profile 并自动应用补丁(等价于下面的组合行):
dsh plugin --profile web add billion-context-dsh
装完重启 dsh(bundle 层在启动时组合)。需要自定义 config(如
modelContextLimit / prompts)时仍建议手写组合行——bundle 补丁
(cordis.patch.yml)只插入无 config 的默认行。
就这样。然后在需要压缩后端的位置加组合配置——两种范围,按需选择:
全局生效(host 平面,所有模式)——推荐。在你的 profile 补丁(如 ~/.dsh/profiles/web/cordis.patch.yml)中追加:
# ACP 作为全局压缩后端:四个模型工具 + `/acp` 命令 + nudge + ACP 提示词段,
# 对所有模式(standard / code / minimal / cordis / 自定义预设)生效。
# 必须同时禁用 host 的 compaction-basic:同一 realm 内两个后端同时
# provide `ctx.compaction` 会冲突。
- id: compaction-basic
disabled: true
- insert:
- id: compaction-acp
name: 'billion-context-dsh'
config:
modelContextLimit: 128000 # 可选;省略时自动探测模型真实窗口(回退 128000)
(可选)自定义提示词文案 —— config.prompts。 所有模型可见的提示词(普通/紧急 nudge 首句、上下文分解、增长行、批量提示、tier 蒸馏行、范围表、ACP system prompt 段、四个工具描述)默认直接复用 acp-kernel 的 renderNudgeText——效率提示、上下文分解、压缩规则、批量提示全部来自 kernel 原文,仅范围表换成 surface-seq 版(kernel 用 mNNNNN 引用,我们架构没有 <acp> 标签)。覆盖任一 nudge 槽位后自动切换到模板渲染。模板支持命名占位符(如 nudge 的 {pct}、{philosophy}、范围表的 {surface}),构造期校验:占位符拼写错误会在引擎启动时抛错(fail-fast),而不是把字面 {pct} 漏进模型上下文:
config:
modelContextLimit: 128000
prompts:
nudge:
normal: '上下文使用率 {pct}%。这是效率提示——请尽早压缩保持上下文精简。' # 中文 nudge 首句
tools:
acpStatus: '报告 ACP 块账本:压缩块数、回收 token、当前上下文压力。' # 自定义工具描述
可配置槽位清单、每槽可用占位符、空串/null 语义见 docs/configurable-prompts-design.md。未配置 prompts 的部署直接使用 kernel 渲染(对齐 kernel/pi,见设计文档 v6)。
单模式生效(agent preset 的 compaction realm)。先在该 realm 内禁用(或删除)原有的 dsh-compaction-basic 行,再插入本引擎——同一 realm 内两个后端不能并存:
# 先禁用 realm 内默认后端(或直接删掉这一行)
- id: compaction-basic
disabled: true
# 再插入本引擎
- id: compaction-acp
name: 'billion-context-dsh'
config:
modelContextLimit: 128000 # 可选;省略时自动探测模型真实窗口(回退 128000)
每个 agent 只留一个上下文管理器。 两个后端同时 provide
ctx.compaction会冲突——同一 realm 内切勿并存。完整安装与验证指南见 docs/INSTALL.md。
工作原理
DSH 的每个模型请求都派生自其 append-only 会话日志(surface)。ACP 语义直接映射到这一模型:
| ACP 概念 | DSH 实现 |
|---|---|
compress 工具遮蔽一段范围 |
持久化 surfaceOp: { op: 'replace' }——模型书写的摘要成为 checkpoint 节点;原文保留在日志中 |
refs(m00001 标签) |
surface seq,由 nudge 的可压缩范围表携带 |
| nudge("效率提示——尽早压缩保持精简") | 由内核的压力决策在 agent/pre-step 注入——效率通知 + 上下文分解 + 压缩规则,语气对齐 kernel/pi;绝非命令 |
decompress |
从日志只读恢复被遮蔽的原文 |
search_context |
对从日志重建的块摘要与原文打分 |
acp_status |
块账本与上下文压力 |
| 块状态 | 内存内核状态 + 日志重建账本(无旁车文件) |
| 分层蒸馏(T2/T3) | 再次压缩某块的摘要节点 = 蒸馏该块(tier 2),蒸馏 tier-2 块得 tier 3;tier 与内核块 id 持久化进日志,重启后内核状态从日志再水合、可继续蒸馏 |
承载性的压缩指引(工具、哲学、摘要规则、tier 蒸馏/浓缩规则)注册为一次性系统提示段;每条 nudge 携带精简版(效率提示 + 哲学 + 上下文分解 + 压缩规则 + 范围表 + 批量提示)。刻意不做自动摘要:自动策略只 nudge 模型(compactIfNeeded 返回 null)。
视频讲解
本项目继承的 ACP 哲学讲解——主动上下文压缩如何在约 20 万 token 内保持会话精简(opencode-acp 与 billion-context-pi)。视频原作者:裘香莲(B 站 UP 主),非本项目制作。
模型工具
| 工具 | 作用 |
|---|---|
compress |
用你书写的紧凑摘要替换 seq 范围(边界自动平衡到 tool-call/result 配对点);对某块的摘要节点再次压缩 = 分层蒸馏(tier 2/3) |
decompress |
恢复已压缩块的原始内容(只读) |
search_context |
按关键词搜索压缩块摘要与原文 |
acp_status |
上下文占用、压缩块、可压缩范围 |
/acp |
从命令栏执行 status / compress / decompress |
上游项目与致谢
本项目是一个移植/派生项目,站在以下上游工作的肩膀上——全部为 MIT 许可。衷心感谢 ranxianglei 和 DeepSeek Harness 团队创建并开源这些项目:
| 上游项目 | 作者 | 角色 |
|---|---|---|
| billion-context-pi | ranxianglei | 本项目移植的 Pi 编码代理适配器;适配器设计、工具语义与本项目默认配置的来源 |
| acp-kernel | ranxianglei | 框架无关的上下文压缩引擎——原样复用(refs、blocks、tiers、nudge 决策、search、status) |
| opencode-acp | ranxianglei | ACP("模型决定何时压缩、压缩什么")设计的源头 |
| DeepSeek Harness | DeepSeek AI | 本项目所扩展的宿主平台(compaction 能力接缝、agent preset、持久化会话日志) |
本项目原样复用 acp-kernel 的压缩内核与 billion-context-pi 的默认行为;DSH 适配层(会话事件投影、持久化表面事务、模型工具、nudge、配置)为本仓库原创。上游版权与许可归其各自作者所有;本项目的许可条款见 LICENSE。
配置
| 键 | 默认值 | 含义 |
|---|---|---|
modelContextLimit |
自动探测(回退 128000) |
用于内核压力决策的上下文窗口;显式配置时优先且跳过探测 |
autoModelContextLimit |
true |
从模型 API 自动探测真实窗口(agent.ctx.llm.resolveModelInfo);探测失败回退默认值,acp_status 展示窗口来源 |
nudgeMinContextLimitPct |
内核默认 0.45 |
Nudge 窗口下界(用量占比)——仅作配置校验,增长路径的触发没有百分比下限——与 billion-context-pi 相同的默认值 |
nudgeMaxContextLimitPct |
engine 默认 0.70(内核/pi 默认 0.75) |
过限线:超过此值则无论增长与否都触发 nudge——刻意低于宿主 compaction-basic 的 80% 自动压缩线,保证强制 nudge 先触发;显式配置优先 |
nudgeEmergencyThresholdPct |
engine 默认 0.85(内核/pi 默认 0.95) |
紧急 nudge(绕过每轮去重)——从 0.95 下调:95% 时模型已无操作空间且会被 80% 自动压缩线遮蔽;显式配置优先 |
coreOverrides |
— | 任何其他 acp-kernel Config 覆盖(billion-context-pi 的 coreOverrides 逃生口) |
autoTools |
true |
在 ctx.tools 注册四个模型工具 |
autoCommand |
true |
在 ctx.commands 注册 /acp 命令 |
autoNudge |
true |
当内核建议时向 agent/pre-step 注入 nudge |
prompts |
— | (可选)自定义提示词文案:nudge / 范围表 / system prompt / 工具描述按槽位覆盖(模板 + 命名占位符,构造期校验;见上文「自定义提示词文案」与 docs/configurable-prompts-design.md) |
开发
npm install
npm run typecheck # 严格 TS
npm test # node --import tsx --test tests/*.test.ts
npm run build # tsup 打包(内联 acp-kernel)+ .d.ts
dist/index.js 自包含,仅外链 @deepseek-ai/* 接缝包(由宿主部署提供)。
架构
src/
├── index.ts # AcpCompactionEngine(CompactionEngine 后端)+ 接线
├── messages.ts # M1: 会话事件 ↔ acp-kernel CoreMessage 投影
├── state.ts # M2: 每会话内核状态
├── region.ts # M5: 持久化区域事务 + 日志重建块账本
├── tools.ts # M3: compress / decompress / search_context / acp_status
├── nudge.ts # M4: 内核压力决策 → 注入的建议式 nudge
├── system-prompt.ts# M4: 一次性 ACP 指引段(让 nudge 保持简短)
├── config.ts # 内核配置组装(阈值 + coreOverrides)
├── window.ts # 自动上下文窗口探测(LLM 运行时探测,回退 128000)
└── commands.ts # M4: /acp 斜杠命令
License
MIT
链接
同类插件
vectorize-io/hindsight#coding-agents★ 19981
Hindsight:会学习的 Agent 长期记忆系统,自动召回/保存、知识页、深度反思与按仓库隔离的记忆银行。
omdsh-dev/dsh-mnemon★ 27
由 Mnemon 驱动的 DeepSeek Harness(DSH)跨 Agent、本地优先的持久记忆插件。它可在支持 Mnemon 的 Agent 之间共享长期记忆,并提供运行时记忆、可检索项目档案、语义召回、知识图谱和 Sidebar UI。
LoserFox/distill★ 19
自动对话蒸馏:后台 subagent 反省 + 技能 create/update。
modusensus/dsh-mneme#dsh-mneme★ 12
跨会话记忆:SQLite + 可人工编辑的 Markdown 镜像,autoDream 后台自动巩固(去重/合并/冲突裁决),6 个记忆工具,完全离线语义检索(本地向量 / 精排 / 聚类)。
Aik358/dsh-auto-memory★ 11
DSH 自动记忆插件:三层记忆自动注入与检索、每轮对话自动沉淀、AI 时段问候与三级抽屉、智能检索、日历视图与设置页,支持继承其他 AI 工具的记忆。
nowledge-co/nowledge-mem-deepseek-harness★ 5
给所有 AI 工具和 Agent 共用的一层记忆:注入 Context Bundle、提示时检索、MCP 工具与回合结束 DSH 线程捕获。
