TT432
dsh-skillzip
No description
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 14, 2026
- Updated
- Aug 14, 2026
Introduction
dsh-skillzip
SkillZip(arXiv:2608.11079)——免评估技能压缩(Evaluation-Free Skill Compression for Self-Evolving Agents by Discovering Reusable Structure)的 dsh 插件。
自进化智能体把成功流程与失败修复不断追加进技能文档,技能会以远超"新程序性知识"的速度膨胀:同一规则在多处重复、同一动作序列被复制、异常层层累积。SkillZip 把技能当作类型化契约(接口 / 工作流 / 工具协议 / 作用域规则 / 输出契约 / 证据),用"最短忠实解释"(typed MDL)原则合并共享结构、提升规则作用域、复用重复工作流、编码守卫异常——不读取任务、轨迹、奖励或验证器,并保证每个被提取的规范性需求都被覆盖(稀有规则不被删除)。
论文要点与本实现对照
| 论文 | 本实现 |
|---|---|
| 契约 C(S)=⟨I,G,T,C,O,E⟩(Eq.1) | lib/core/extract.js 确定性提取 + lib/llm/extract.js LLM 增强 |
| 最小描述长度目标(Eq.4)与长度模型(Eq.12) | lib/core/optimize.js + lib/core/length.js |
| 等价单元聚类 / 作用域提升 DP(Eq.7/8) | clusterEquivalentRules / liftRuleScopes |
| 工作流复用 + 加权集合打包(Eq.9) | lib/core/workflow.js(Re-Pair 式挖掘 + 贪心 + pairwise exchange) |
| 公共规则 + 显式异常(Eq.10) | encodeExceptions |
| 硬覆盖约束(Def. III.1, Prop. IV.1) | assertAllCovered + 每步后覆盖断言 |
| One-shot 压缩(Algorithm 1) | lib/core/pipeline.js(scan→extract→optimize→render→audit) |
| Zip-on-Write(Algorithm 2, ABSORB/REFINE/EXTEND/REFACTOR) | lib/core/online.js + WAL 事务日志 + repack 策略 |
| 结构审计与保守恢复(Appendix B.F) | lib/core/audit.js(独立解析 + 最短 span 恢复 + locked) |
| frozen relation checker(Appendix B.C) | lib/core/relations.js 确定性 + lib/llm/relations.js LLM 裁决 |
| sidecar schema(Appendix C.A) | lib/core/contract.js + validateContract |
提供的工具
| 工具 | 说明 |
|---|---|
skillzip_compress | One-shot 压缩:输入 SKILL.md 全文 → 压缩后技能 + 统计 + 候选日志 + 契约 |
skillzip_update | Zip-on-Write:输入现有 skillzip.json + 补丁 → 更新后契约/技能/操作日志(WAL) |
skillzip_audit | 独立结构审计:对比契约与渲染文本,缺失元素恢复并锁定 |
skillzip_inspect | 检视 sidecar:单元统计、采纳/拒绝的抽象候选、事务日志 |
LLM 能力(结构化提取、语义关系裁决)默认启用,失败自动回退到确定性实现;可用 useLlm: false 关闭。
目录结构
lib/
index.js # 插件入口(inject: tools, llm)
core/
scanner.js # Markdown 扫描:front matter/标题/嵌套列表/代码块/表格 → 稳定 id 块 + 作用域树
extract.js # 确定性契约提取(interface/workflow/rules/tool/output/evidence/residual)
contract.js # 契约数据结构 + 校验 + 覆盖率断言 + 作用域工具
relations.js # 类型化关系判定(等价/蕴含/冲突/无关)+ 缓存 + 候选生成
workflow.js # 工作流序列收集 + 重复片段挖掘 + 加权集合打包
optimize.js # 最小代价覆盖:聚类/提升/异常/工作流复用/输出字段去重
render.js # 确定性模板渲染(Name→Description→When to use→Rules→Workflow→Output)
audit.js # 独立结构审计 + 最短 span 保守恢复(locked)
online.js # Zip-on-Write:四种操作 + WAL + repack 触发
pipeline.js # One-shot 编排(含 LLM 增强与回退)
length.js # 长度模型 Eq.(12) 与候选日志
tokens.js # token 估算(英文≈4字符/token,CJK≈1)
llm/
prompts.js # extract/patch/audit/relation 提示词(论文 Appendix C.B-D)
extract.js # schema 约束的 LLM 契约提取 + JSON 容错解析
relations.js # LLM 语义关系裁决(高相似但置信不足的单元对)
tools/
compress.js # skillzip_compress
update.js # skillzip_update
audit.js # skillzip_audit
inspect.js # skillzip_inspect
test/
run-tests.mjs # 测试运行器(node test/run-tests.mjs)
fixtures/livemath-skill.md # 论文附录 C.E 的 LiveMath 未压缩技能
安装与启用
# 1) 安装依赖(peerDeps 需同时在 devDependencies 镜像)
cd <path/to/skillzip-plugin>
npm install
# 2) 安装到 web profile(转发 pnpm 到 profile;报 ERR_PNPM_ADDING_TO_ROOT 时加 -w)
dsh plugin --profile web add -w <path/to/skillzip-plugin>
# 3) 挂载 patch(~\.dsh\profiles\web\cordis.patch.yml 追加)
# - insert:
# - id: dsh-skillzip
# name: 'dsh-skillzip'
改 patch 会热重载;新安装的 npm 依赖需要重启 web 服务。
测试
node test/run-tests.mjs
覆盖:扫描器稳定 id、契约提取、MDL 优化(重复规则/输出字段合并)、渲染确定性、结构审计、Zip-on-Write 四种操作与 repack、幂等性(Zip(Zip(S))≈Zip(S))。
与论文示例的对照(附录 C.E)
test/fixtures/livemath-skill.md 即论文附录 C.E 的未压缩 LiveMath 技能。确定性模式压缩 870→752 tokens(13.6%);论文 936→638(32%)需 LLM 语义裁决合并措辞不同但语义等价的近义约束(本插件 useLlm: true 时自动启用)。
验证
- 覆盖断言:每个源单元(触发/工作流边/工具需求/规则/输出字段)必须被压缩表示覆盖,否则优化器标记失败并保守保留原文。
- 结构审计:独立解析压缩文本(不看原技能),diff 触发极性/guard/modality/工作流可达性/工具参数/输出字段;缺失元素恢复最短源 span 并
locked。 - 幂等:
Zip(Zip(S)) = Zip(S)在稳定解析下成立(测试覆盖)。