SkillZip:通过发现可复用结构实现自进化智能体的免评估技能压缩 SkillZip: Evaluation-Free Skill Compression for Self-Evolving Agents by Discovering Reusable Structure
把技能视为类型化契约,用最短忠实解释实现免评估、保稀有的技能压缩
前置知识
自进化智能体与技能文件
自进化智能体把执行经验转化为可复用的自然语言技能文档(如 SKILL.md):工具调用失败就追加警告、输出格式违规就补示例、成功流程记录为工作流。技能在每次任务调用时整体注入上下文,包含名称与描述(决定何时选用)、工作流(决定如何执行)、工具与输出契约(约束调用合法性)以及例外规则。SkillOpt 等演化器通过执行反馈迭代产生有界编辑,使技能逐轮增长。
本文的压缩对象正是这种演化出的技能文本,其追加式增长模式和「重复表示」型冗余是全部动机与方法设计的出发点,不熟悉这一设定就无法理解为何压缩目标不是内容过滤。
最小描述长度(MDL)
MDL 原则选择能最短地联合描述「模型+数据」的假设:一段共享结构只有在「定义一次+引用多次」比逐处重复更省时才值得引入,直觉等同于把三份重复代码重构为一个函数加三次调用。本文把它实例化为 $\mathcal{L}(x)=|\mathrm{Render}(x)|_{\mathrm{tok}}+\gamma_{\mathrm{def}}(x)+\gamma_{\mathrm{ref}}(x)+\gamma_{\mathrm{scope}}(x)$,对定义、引用和作用域标注分别计价。
SkillZip 的目标函数就是 MDL:只有理解它,才能明白为什么有的语义相似却不合并、有的相距很远的片段反而被抽象成共享过程。
类型化契约与覆盖约束
把技能解析为六元组 $C(S)=\langle I,G,T,C,O,E\rangle$,即接口、工作流、工具协议、带作用域与守卫的规则、输出契约和支撑证据;每个单元记录类型、作用域、守卫、模态、规范化内容和来源跨度。覆盖约束要求每条提取出的必需单元都被压缩表示覆盖(直接覆盖、结构覆盖或逐字残差锁定),覆盖是类型敏感的:工具名不覆盖其必需参数。
这是稀有规则保持保证(Cor. IV.2)的来源,也是本文与「按 token 相关性删除」类方法的根本分界,是读懂定理和安全性论证的前提。
评估引导压缩与自适应数据分析
SkillReducer 等先前方法采用「生成任务→执行 rollout→按分数验证修复」的压缩回路。在有限评估样本上反复调优候选会引入自适应数据分析的选择效应:可能反复修补被采样到的分支,却丢掉从未被采样的守卫或输出约束;同时每次压缩需 40–80 次任务 rollout,环境交互成为端到端成本的大头。
理解这一局限才能体会本文「免评估」设计的动机:完全不接触任务、奖励和验证器,从机制上切断对压缩期任务集的依赖与过拟合。
研究动机
自进化智能体以「追加式笔记本」方式维护技能:工具调用失败就追加一条警告,输出格式违规就补一个示例,罕见分支成功就记录完整流程。每次编辑局部合理,但长期积累后问题显现——纵向研究(Fig. 1、Fig. 4)显示,用 SkillOpt 在 BFCL-V4 Web Search、LiveMathematicianBench、SpreadsheetBench 三个基准上演化到第 5 轮时,技能长度分别膨胀到初始的约 5.6 倍、3.1 倍和 6.7 倍,平均约 5.2 倍;而代表「真正新需求」的唯一契约内容早在前几轮就趋于饱和,其后写入的几乎全是重复出现的规则、彼此重叠的工作流和越收越窄的例外。由于技能在每次任务调用时都要注入上下文,这些冗余文本既增加 prefill 成本,也会淹没真正控制执行的关键指令,形成文本增长与程序性知识增长的系统性错配。
本文的目标是本文要回答一个比以往工作更严格的问题:能否只利用技能文本中已经存在的结构完成压缩,而不观察任何下游任务、执行轨迹、奖励或行为验证器?具体目标有三:其一,压缩结果必须大幅短于原技能,且对压缩时未见过的任务保持可复用性;其二,提供不依赖长度模型行为的硬保证——每一条被解析出的触发条件、工作流节点与边、工具参数要求、作用域规则和输出字段都必须被压缩后的表示覆盖,使稀有规则不会因「压缩期任务采样未激活它」而被删除;其三,方法需同时支持一次性压缩已有技能检查点(one-shot)和嵌入自进化回路的持续压缩(Zip-on-Write),后者在不回放任务、不重解析全部历史的前提下吸收每一个新补丁。
与已有工作不同的是,现有两条路线都与该目标错位。通用提示压缩(LLMLingua、LongLLMLingua、LLMLingua-2 等)按 token 对当前查询或答案的重要性打分,隐含两个假设——意义均匀分布在词上、任务分布已知——而技能的未来任务未知,其意义也不均匀:名称与描述决定技能何时被选中,时序短语决定动作顺序,工具参数决定调用合法性,一条只激活一次的罕见守卫或输出字段可能比整段背景论证更重要。SkillReducer 等技能压缩方法虽引入了结构意识和渐进披露,但其「生成任务→验证→修复」回路使压缩结果与压缩期评估集耦合,存在自适应数据分析的选择效应。SkillZip 的独特切入是把多轮演化出的技能视为类型化契约而非普通段落,把压缩形式化为带硬覆盖约束的最短忠实解释(MDL)问题,用结构冗余而非语义重要性决定取舍。
核心方法
直觉先于技术:像代码重构一样「解释一次、引用多处」——三个重复片段换成一个函数加三次调用,只对真实差异单独付费。技术上分三步。第一步表示:把技能解析为类型化契约 $C(S)=\langle I,G,T,C,O,E\rangle$,依次是接口(名称、目的、触发/排除)、工作流(动作、顺序、分支、循环、回退、终止条件)、工具协议(名称、必需参数、前置条件、错误处理)、带作用域和守卫的规则集、输出契约(字段、校验、完成条件)和支撑证据。第二步优化:在候选表示集上求最短忠实解释 $(K^*,R^*)=\arg\min_{(K,R)\in\mathcal{H}(S)}[\mathcal{L}(K)+\mathcal{L}(R\mid K)]$,硬约束每条必需单元 $a\in A_{\mathrm{req}}(S)$ 都被覆盖($a\preceq(K,R)$);长度模型 $\mathcal{L}(x)=|\mathrm{Render}(x)|_{\mathrm{tok}}+\gamma_{\mathrm{def}}+\gamma_{\mathrm{ref}}+\gamma_{\mathrm{scope}}$ 对命名抽象的定义、引用和作用域标注分别计价,防止引入得不偿失的微小抽象。第三步落地:one-shot 模式用一次结构化抽取调用加确定性优化;Zip-on-Write 模式在每个演化补丁到达时做局部更新,并周期性全局重打包。
核心创新是「免评估的结构压缩」这一形式化,与两类已有方法的本质区别都很清晰。对比提示压缩:这里不存在按查询相关性打分的 token,只有类型化结构冗余——每个分支都重复的规则可上提到最近公共父作用域(且要求所有相关路径都需要它,冲突保留为显式例外);重复动作序列折叠为共享过程,仅当 $\mathcal{L}(\mathrm{def}(q))+r\,\mathcal{L}(\mathrm{call}(q))<r\,\mathcal{L}(q)$ 成立;守卫变体写成公共规则加守卫化差异。对比 SkillReducer:其反馈回路用生成任务的分数选择候选,而 SkillZip 施加硬覆盖约束——每条提取出的规范单元要么被契约覆盖、要么逐字进入锁定残差,由此得到稀有规则保持保证(Cor. IV.2):一条唯一需求是否被保留,与它在任何压缩期任务分布中的激活频率无关。此外模型只被调用做 schema 约束的契约抽取和关系判定(greedy、temperature 0),所有共享/上提/折叠的取舍由确定性优化器完成,绝不因任务分数接受任何操作,从机制上切断了评估集过拟合。
方法步骤详情
以 one-shot 模式(Algorithm 1)为例分五步。第 1 步确定性扫描:解析 SKILL.MD 的 front matter、标题、嵌套列表、代码块与表格,输出带稳定来源 ID 的块和初步作用域树,编号列表与时序标记提供高置信工作流提示。第 2 步一次契约抽取:schema 约束的 LLM 把编号块映射为类型化单元 $a=(\tau,\sigma,g,m,p,P)$(类型、作用域、守卫、模态、内容、来源跨度),提示词明确要求「只抽取、不压缩」;无法高置信解释的跨度进入锁定残差,逐字保留且禁止删除。第 3 步类型兼容复用提议:先按(类型、模态、工具/输出命名空间、作用域族)硬性屏蔽不兼容比较,精确匹配走哈希,近似重复由嵌入索引检索后经冻结交叉编码器判定等价/蕴含/冲突/无关,冲突只生成例外候选而不合并。第 4 步最小成本覆盖:候选按 $\mathrm{save}(h)=\mathcal{L}(\text{独立形式})-\mathcal{L}(\text{使用 }h)$ 打分并丢弃非正者,等价单元用并查集聚类、规则放置用作用域树动态规划、工作流复用解不重叠加权集合装箱(贪心+成对交换),每次选择后校验全部源单元仍被覆盖。第 5 步模板渲染与审计:固定模板渲染为普通技能文本,可选的独立审计重解析压缩结果并与契约做 diff,缺失元素回填最短源跨度并加锁。Zip-on-Write 则把补丁解析后只在类型-作用域邻域内与 $O(dk)$ 个候选比较,执行 ABSORB/REFINE/EXTEND/REFACTOR 中目标函数增量最小者,经预写日志+原子提交落盘,并按可回收节省、契约增量或补丁数触发全局重打包。
技术新颖性
技术新颖性体现在四个层面。表示层:首次把演化出的技能显式形式化为带类型、作用域、守卫、模态的契约,使「哪些压缩是安全的」从语义判断变成可判定检查——例如同一工具的两句话若要求不同参数即不可合并,一条只出现在单个受守卫分支的禁令不得上提。目标层:把 MDL 从普通序列压缩(SEQUITUR、Re-Pair)改造成类型化程序知识上的最短忠实解释,Eq. (7)-(10) 的成本测试回答的不是「两条子句是否语义相似」,而是「支付定义、引用、作用域与例外编码之后,共享表示是否真的更短」,因此它既能拒绝看似合理的合并,也能接受在文档中相距很远但动作模式相同的抽象。保证层:硬覆盖给出按构造成立的稀有规则保持,失败模式被设计为「压不干净」而非「悄悄删错」,并通过来源引用、解析置信度和独立审计把边界显式化。系统层:Zip-on-Write 借助局部更新等价性(Prop. A.2)把每次维护限制在补丁的类型-作用域邻域内,实现无任务回放、无全量重解析的持续压缩,这在自进化智能体的技能维护文献中是一个新的工作点。
实验结果
RQ1(Fig. 4):SkillOpt 演化 5 轮后,技能在 BFCL-V4、LiveMath、SpreadsheetBench 上分别达初始的 5.6×、3.1×、6.7×(平均 5.2×),长度随轮次单调增长。RQ2(Table I):SkillZip 在三个骨干上的压缩率为 27.1%、29.7%、36.9%(平均 31.2%),远超 SkillReducer 的 10.5%、3.6%、13.4%(平均 9.2%);宏平均任务分 0.577,不仅高于 SkillReducer 的 0.544,还略超未压缩演化技能的 0.570,9 个设置中 5 个持平或更好,例如 Kimi-K2.6 上 LiveMath 得分 0.457 对演化技能的 0.433。RQ3(Table II):平均压缩耗时 286 秒,相对加速 3.5 倍;SkillZip 只需 4–8 次压缩器调用、0 次任务回放,而 SkillReducer 虽只 3 次调用却额外消耗 40–80 次验证 rollout,证明端到端成本由环境交互主导。RQ4(Fig. 5):跨模型迁移时 LiveMath 总保留率 0.97 对 SkillReducer 的 0.91,优势集中在非对角(源-目标异模型)单元;BFCL-V4 上两者相当。RQ5(Fig. 6):16 轮 LiveMath 自演化中不压缩的技能长到 2.5×–3.7×,第 1 轮开启 Zip-on-Write 将终点压至约 1.6×–1.9×(相对削减 38%–50%),第 8 轮才开启只能部分挽回(Kimi-k2.6 上 2.6× 对 1.9×);@1 配置最终准确率 0.409/0.488/0.441,均不低于不压缩的 0.395/0.476/0.438。附录 E 实例中,936 token 的技能被压到 638 token(32% 节省)且输出契约逐条保留。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| 演化技能压缩整体(RQ2,9 设置宏平均) | 任务宏平均分 / 平均压缩率 | SkillZip 0.577,平均压缩率 31.2% | 未压缩演化技能 0.570(0%);SkillReducer 0.544(平均 9.2%) | 压缩率约为 SkillReducer 的 3.4 倍,宏平均分较演化技能 +0.007、较 SkillReducer +0.033 |
| LiveMathematicianBench(Qwen3.6-Plus) | 任务得分 | 0.435(压缩率 29.7%) | 演化技能 0.392;SkillReducer 0.385 | 较演化技能 +0.043、较 SkillReducer +0.050,同时长度减少约 30% |
| SpreadsheetBench(Kimi-K2.6) | 任务得分 | 0.513(压缩率 36.9%) | 演化技能 0.506;SkillReducer 0.497 | +0.007 / +0.016,同时压缩率高出约 23 个百分点 |
| 压缩成本(RQ3,三基准平均) | 平均耗时 / 压缩器调用次数 / 任务 rollout 数 | 286 s;4–8 次;0 次 | SkillReducer:1331/1082/587 s;3 次调用;40–80 次 rollout | 端到端时间加速 3.5×,并完全免除任务回放与验证集依赖 |
| 跨模型迁移(RQ4,LiveMath,3×3 源-目标矩阵) | 性能保留率 | 0.97 | SkillReducer 0.91 | +0.06,优势主要来自源-目标异模型的非对角单元 |
| 持续压缩(RQ5,16 轮 LiveMath 自演化,三骨干) | 最终技能长度倍数 / 最终 held-out 准确率 | Zip-on-Write@1:终点约 1.6×–1.9×;准确率 0.409/0.488/0.441 | 不压缩:2.5×–3.7×,准确率 0.395/0.476/0.438;第 8 轮才开启在 Kimi-k2.6 上终点为 2.6× | 长度相对削减 38%–50%,准确率持平或略高,且早开启优于晚开启 |
局限与改进
作者明确承认的边界:覆盖保证是相对于解析器产出的契约而言的,既不证明任意自然语言被完美解读,也不证明压缩前后两个文本在所有语言模型上诱导完全相同的行为;为此用来源引用、解析置信度、锁定残差和独立结构审计把边界显式化,预期的保守失败模式是欠压缩而非误删。我的补充观察:其一,若 schema 约束抽取在极性或作用域上出错(例如把「必须」读成「禁止」),错误会在契约层被合法化,审计因两端一致而无法发现;其二,31.2% 的平均压缩率意味着约三分之二文本仍被保留,对混有大量背景与示例的普通社区技能,SkillReducer 式内容过滤可能更有效,两者其实正交但文中未测组合;其三,实验中演化技能全部由 SkillOpt 生成,对 Memento-Skills 等其他演化器只有增长分析(Fig. 4)而无端到端压缩对比;其四,冻结交叉编码器的关系判定对隐式等价可能漏检(导致欠压缩),重打包阈值 $\theta_{\mathrm{repack}}$、增长量 $\rho$、补丁数 $B$ 需要按技能流调参;其五,各基准任务分绝对值较低(如 LiveMath 0.39–0.49),「略超演化技能」的结论对运行方差较敏感,文中未报告显著性检验或多次运行方差。
独立分析的弱点
独立分析的弱点与对应改进方向:(1) 单点解析依赖——契约抽取由单一模型(Qwen3.7-max)完成,解析质量决定一切,可引入多解析器交叉验证,或在解析器间不一致时自动扩大锁定残差范围;(2) 极性翻转不可审计——审计只对比渲染后文本与所选契约,若抽取阶段就把模态弄反,系统会一致地错,改进方向是用来源跨度对每条规则做一次 NLI 式极性复核;(3) 长度模型与部署 tokenizer 脱节——$\lambda$ 系数取模板定界符的实际 token 数,但渲染后文本在不同分词器下的成本不同,可接入目标模型 tokenizer 重估节省;(4) ABSORB 误判风险——若「补丁无新契约内容」判断错误,新知识会被静默丢弃,可对 absorb 决策加保守阈值或触发一次轻量的源文本对照检查;(5) 结构假设局限——扫描器假定 Markdown 结构,对自由格式、无标题层级的技能文本,块与作用域推断可能失效,需要自由格式回退解析器;(6) 缺少与软压缩路线(SKIM、TokMem、Skill-to-LoRA)在端到端 token 成本和跨骨干兼容性上的定量比较,论文主张的可移植性优势目前只有间接证据(RQ4)。
未来方向
作者在文中直接提出或暗示的方向包括:对结构审计机制和幂等性 $\mathrm{Zip}(\mathrm{Zip}(S))=\mathrm{Zip}(S)$ 的实证检验(附录 D 表示将通过双重压缩实验验证);把重打包触发策略($\theta_{\mathrm{repack}}$、增长量 $\rho$、补丁数 $B$)从固定启发式升级为自适应或可学习的策略。基于其成果可自然延伸的工作:把 SkillZip 的结构去重与 SkillReducer 的内容过滤/按需披露组合成两阶段流水线,分别处理知识密集型冗余和主题性冗余,这可能对普通社区技能同样有效;在技能库层面做跨技能共享过程挖掘,让多个技能共用同一契约库;把硬覆盖约束的思想迁移到对话记忆、agent 状态等经验产物的压缩;研究解析错误率的敏感性分析与审计-恢复循环的收敛保证;利用其事务日志机制研究多智能体并发演化共享技能时的一致性;以及量化压缩率-性能帕累托前沿随骨干能力层级(Qwen3.7-Max / 3.6-Plus / Kimi K2.6)的移动规律。
复现评估
复现条件较好。代码开源(github.com/yutou520131/SkillZip),附录 B 给出可直译为代码的完整规格:仓库模块划分(scanner/extract/relations/workflow/optimize/render/audit/online)、CLI 命令(compress/update/audit/inspect)、sidecar JSON schema、抽取/补丁/审计三个 system prompt、缓存键设计、预写日志与原子提交协议,以及 default/efficient 两套配置;长度模型系数取模板定界符实际 token 数而非拟合值,工作流装箱附带精确整数规划用于测量近似比。算力方面方法本身很轻:一次性压缩仅需 4–8 次 API 调用、207–332 秒,温度 0 的贪婪解码保证确定性;重的是完整实验矩阵——3 个骨干(Qwen3.7-Max、Qwen3.6-Plus、Kimi K2.6)×3 基准×5 种技能条件,外加 SkillOpt 多轮演化(需演化集与测试集分离)和 SkillReducer 复现所需的每压缩 40–80 次 rollout。总体难度中等:单独验证压缩器很容易,完整复现五组实验需要多模型 API 配额和 SkillOpt/Memento-Skills 基础设施。
论文图表
以 CodeX Agent 为对象,在多个基准上展示自演化轮次(0–12)中技能长度的变化:代表「真正新需求」的唯一契约内容很快趋于饱和,而技能总量持续上升,说明后期增长几乎全是重复规则和被复用工作流的反复陈述。
这是全文动机的实证起点:直观呈现文本增长与程序性知识增长的系统性错配,直接引出「压缩重复结构而非过滤内容」的核心命题。
3 个骨干模型 × 5 种技能条件(No Skill / Human Skill / Evolved Skill / SkillReducer / SkillZip)× 3 个基准的任务得分与压缩率:SkillZip 压缩 27.1%–36.9%(平均 31.2%)的同时宏平均分 0.577,高于 SkillReducer 的 0.544,也略超未压缩演化技能的 0.570。
核心结果表,直接支撑「免评估压缩不损保真」与「结构整合优于内容过滤」两个主要结论,也提供了所有逐模型逐基准数字。
两方法在三个数据集上的压缩开销对比:平均时间(SkillZip 207/332/318 s 对 SkillReducer 1331/1082/587 s)、压缩器调用次数(4–8 对 3)与任务 rollout 数(0 对 40–80),并注明 rollout 可命中热缓存故时间为乐观下界。
量化免评估设计的效率优势(平均 3.5× 加速、零任务回放),说明环境交互而非压缩调用次数才是评估引导压缩的成本大头。