不是暴力裁剪Prompt!SkillZip用契约结构实现Agent技能无评测压缩

SkillZip: Evaluation-Free Skill Compression for Self-Evolving Agents by Discovering Reusable Structure

论文原文 ↗ 论文发布 解读发布 解读:AI前沿分享

不是暴力裁剪Prompt!SkillZip用契约结构实现Agent技能无评测压缩 论文图示

在让大模型自主进化的探索中,“自我演化智能体”(Self-evolving Agents)正逐渐成为主流范式。这类智能体通过与环境持续交互,将每一次工具调用的失败教训、每一次输出格式的修复经验,以及偶发成功的操作路径,源源不断地写回自身的提示词或“技能库”(Skill)中。这种机制看似赋予了智能体持续进化的终身学习能力,但在工程落地时,很快就会撞上一堵无形的高墙:技能文本像一本只增不减的备忘录,随着演化轮数增加迅速膨胀,而其中真正有增量价值的程序性规则却早在前几轮就已经饱和。

ArXiv URL:https://arxiv.org/abs/2608.11079v1

这种文本增长与知识增长之间的严重脱节,不仅导致每次调用智能体时的上下文 Prefill 成本急剧攀升,更致命的是,冗长且充斥着重复声明、散落异常的文档,极易掩盖模型真正需要执行的核心约束。阿里巴巴、浙江大学与杜克大学的研究团队在最新论文中指出了这一痛点的本质:通用的 Prompt 压缩方法将技能视为扁平的自然语言片段,按相关性或困惑度暴力裁剪,往往会误删关键的边界条件;而此前基于评估反馈的压缩方案,又需要进行昂贵的环境 Rollout 采样,极易让技能过拟合于压缩时的测试集,悄悄丢失未被测试用例激活的长尾规则。

针对这一困境,研究团队提出了 SkillZip。该方法完全摒弃了对下游评测任务、环境轨迹和奖励反馈的依赖,将技能视作一种结构严密的“类型化操作契约”(Typed Contract)。通过引入“一次解释,多处引用”(Explain once, reference many)的最小描述长度(MDL)优化目标,SkillZip 能在严格保证所有接口条件、控制流边界、工具参数和输出约束 100% 覆盖的前提下,将冗余的重复表述与公用工作流提炼为紧凑的结构化说明。它不仅提供了单次确定性优化的 One-Shot 模式,还设计了伴随智能体自我演化实时增量压缩的 Zip-on-Write 机制,为长周期演化智能体的维护提供了一条无需评估、安全可控的技术路线。

技能膨胀的症结:从扁平文本到类型化契约

在探讨 SkillZip 的解法之前,必须厘清自我演化技能与普通静态 Prompt 之间的本质区别。常规的人工编写提示词可能混杂大量背景交代、少样本示例或宽泛的解释性文字,对于这类内容,直接删除或移至检索库通常不会破坏核心逻辑。但经历过多轮自我演化的技能完全不同:智能体向其中追加的每一句话,几乎都对应着历史上某次昂贵的执行失败或成功修补。哪怕是一句看似微不足道的警告,也承载着规避特定严重故障的硬性约束。

然而,当前的智能体更新往往采取朴素的“文本追加”策略。当某个工具报错时,系统在文末追加一条警告;当特定分支的格式出错时,又在分支内部插入一个新示例。久而久之,“切勿覆盖源文件”这一不变约束,可能会同时出现在技能导言、三个互斥的执行分支以及两个补充示例中;而一段标准的“校验-修复-验证”操作序列,也会在不同场景下被反复复制粘贴。长尾的边界异常规则不断堆叠,使得原本清晰的流程变得支离破碎。

通用的上下文压缩算法(如依赖注意力分数、语义困惑度或特定 Query 相似度筛选 Token)之所以在此失效,是因为技能文档的语义绝非均匀分布在序列中。技能的名字与描述决定了它何时被路由唤起;时间副词和条件守卫(Guards)严格定义了动作序列的时序依赖;工具说明约束了系统 API 的参数合法性;输出 Schema 则定义了任务何时算作完成。如果因为某个长尾异常在压缩采样的 Query 中未被激活,就将其判定为“低重要度”并剔除,智能体在未来遭遇极端输入时便会再度崩溃。即使是像 SkillReducer 这样引入任务生成与验证回路的进阶压缩方法,其本质仍然受制于有限测试样本的选择偏差:被测试集覆盖的路径被反复修复,而未被采样的合法分支依然面临丢失的风险。

SkillZip 打破了这种“压缩依赖评测”的惯性思维。作者指出,一个技能本质上是一份紧凑的运行契约,而非一篇自由散文。这份契约在数学上可以被严谨地解构为一个六元组:

\[C(S) = \langle I, G, T, C, O, E \rangle\]

其中 $I$ 代表接口(Interface),包含技能名称、目的、正向触发条件与排除场景;$G$ 代表工作流图(Workflow),囊括了动作节点、前驱后继、分支选择、循环与回退逻辑;$T$ 是工具调用协议(Tool Protocol),严密规定了工具名、必要参数签名、前置条件与错误处理;$C$ 是带有作用域的作用域规则集合(Scoped Rules),区分了强制执行、绝对禁止或建议执行,并附带生效条件;$O$ 为输出契约(Output Contract),规定返回数据类型、必填字段及校验规则;最后 $E$ 则是支撑性依据(Evidence),即与具体契约要素强绑定的样例与模板。

一旦将非结构化的 Markdown 文本投射至这一契约空间,压缩的边界就变得清晰且具有形式化保障。例如,只有当两个操作关于同一个工具的参数签名完全相容时,它们的说明才允许合并;只有当某条禁止规则在所有的分支中都被强制执行时,它才能被“提升”(Lifting)至父级全局作用域;而一个输入输出示例若仅仅是为了阐明 JSON 字段,只要输出契约中已经形式化地定义了这些字段,该示例就可以安全剥离,反之若示例独占了某个未明说的字段要求,则必须先将其显式转化为规则,方可精简。

最小描述长度:一次解释,多处引用的形式化重构

在明确了契约对象之后,SkillZip 放弃了试探性的启发式改写,转而将压缩问题形式化为最小描述长度(Minimum Description Length, MDL)框架下的组合优化问题。其核心哲学极为直观:寻找能够忠实解释原始技能的最短结构表示。

在工程代码重构中,程序员遇到三处重复的代码片段时,标准的做法是将其抽象为一个独立函数,并在原处保留三处调用。SkillZip 对技能的处理遵循完全相同的直觉:定义一个可复用的契约元素库 $\mathcal{K}$,以及一个用于存放独特、偶发或高不确定性内容的残差集合 $\mathcal{R}$。整个压缩过程的目标,就是在所有候选表示空间 $\mathcal{H}(S)$ 中,最小化紧凑契约库本身的 token 长度与残差在给定契约库下的 token 长度之和:

\[\min_{(\mathcal{K}, \mathcal{R}) \in \mathcal{H}(S)} \left[ \mathcal{L}(\mathcal{K}) + \mathcal{L}(\mathcal{R} \mid \mathcal{K}) \right] \quad \text{s.t.} \quad \forall a \in \mathcal{A}_{\text{req}}(S), \, a \preceq (\mathcal{K}, \mathcal{R})\]

这里的约束条件是 SkillZip 区别于传统压缩算法的关键所在:硬性覆盖约束(Hard Coverage Constraint)。式中 $\mathcal{A}_{\text{req}}(S)$ 包含了从原始技能中提取出的全部接口条件、工作流拓扑边、工具调用参数、强制规则与输出字段。符号 $a \preceq (\mathcal{K}, \mathcal{R})$ 意味着每一个被提取出来的规范性单元,都必须在压缩后的结构或残差中找到确凿的覆盖凭据。覆盖可以是直接保留,也可以是合法的结构覆盖——比如分支中的冗余规则被提升至公共祖先作用域,或者一段动作流被封装进共享子过程。

这一硬约束直接推导出了一个关键理论结论:长尾规则保全定理(Rare-rule Preservation)。一个在真实任务中极少被触发的异常规则,其能否在压缩后留存,完全取决于它是否被解析为契约中的独立规范单元,而与它在任何离线测试分布中的激活频率彻底脱钩。对于解析器无法以极高置信度归类的歧义文本,系统会直接将其打上“锁定残差”(Locked Residual)的标签逐字保留,坚决不参与破坏性合并,从而将语义失真的风险死死限制在解析边界之内。

在具体的执行层面,这一目标函数统一协调了四种常见的去冗决策,使其不再割裂:

双模架构落地:One-Shot 静态重构与 Zip-on-Write 动态演化

为了兼顾存量技能的高效精简与智能体运行时的持续维护,SkillZip 在架构上设计了两种操作模式:面对既有 Checkpoint 的 One-Shot 模式,以及伴随自我演化无缝嵌入的 Zip-on-Write 模式。

在 One-Shot 模式中,SkillZip 采取了一种极具工程巧思的设计:将“语义理解”与“压缩优化”彻底解耦。整个流程包含清晰的五步流水线:

首先,系统通过一个确定性的扫描器对 Markdown 文档进行预解析。扫描器利用文档的原生排版结构,如元数据头、标题层级、嵌套列表、代码块与表格,自动建立起初始的作用域树,并赋予每个文本块稳定的全局标识符(Block ID)。这使得后续所有的压缩与抽取操作,都能精准回溯到原始文本的具象位置。

其次,系统调用一次具备 Schema 严格约束的语言模型,仅负责信息抽取。该模型接收打上编号的文本块,输出前述六元组契约,且每一个抽取的单元必须严格标注来源 Block ID。宿主程序在底层执行严格校验,一旦发现幻觉引用的 ID、极性反转或未知的工具名,立即拒绝并转入残差。这一步彻底规避了让大模型直接“自由缩写”所带来的漏改、胡编问题。

随后,候选提议生成阶段采用强结构阻断机制。系统绝不对全量元素进行盲目交叉对比,而是在类型严格兼容的桶内检索候选。例如,规则之间只在模态(必须/严禁)与谓词家族兼容时比对,工具只在函数签名相容时比对。完全一致的直接通过哈希去重,高度相似的则利用轻量级嵌入向量初筛,并交由一个冻结的小型关系判断模块判定等价、蕴含或冲突。

第四步,纯数学驱动的确定性求解器介入。基于提取出的候选集合,优化器在作用域树上通过动态规划自底向上求解最优放置位置,并在工作流候选集上执行带权非重叠装箱(Weighted Packing)。每一项选择都以 Token 缩减量为权重,反复校验覆盖约束,完全不需要任何模型推理。

最后,系统利用固定模版将优化后的契约渲染回排版优雅的标准 Markdown 技能文档,并附带一个确定性的结构审计回环:系统重新轻量解析渲染后的技能,若发现由于模版遗漏了某个提取出的守卫或工具参数,会立刻从原始文本中提取最短覆盖片段回填锁定。


原始演化技能 (Markdown)

       │

       ▼

[阶段1: 确定性扫描] ──> 构建作用域树、提取编号文本块 (Block IDs)

       │

       ▼

[阶段2: 结构化抽取] ──> 单次调用模型抽取 C(S)=⟨I,G,T,C,O,E⟩,锁定歧义残差

       │

       ▼

[阶段3: 类型约束候选] ──> 仅在类型/作用域兼容单元间生成复用提议

       │

       ▼

[阶段4: 确定性求解] ──> 动态规划提升作用域 + 加权装箱,硬约束验算

       │

       ▼

[阶段5: 模板化渲染] ──> 生成干净技能文本 + 结构反向审计回填

然而,在生产级的自主智能体场景中,技能是高频迭代的。如果每次自我演化产生一个补丁,都要将全局历史文本重新送入模型抽取并求解,其计算开销将完全抵消压缩带来的收益。为此,SkillZip 提出了 Zip-on-Write(写入即压缩)机制。

在 Zip-on-Write 模式下,智能体外部维护一个紧凑的侧车文件(skillzip.json),其中记录了当前紧凑契约的拓扑图、作用域索引以及历史候选缓存,而暴露给底层大模型执行上下文的,永远只有紧凑渲染出的 SKILL.MD。当智能体在一轮运行后总结出一个新的技能补丁 $\Delta_t$ 时,该补丁在进入契约库之前会被冻结,智能体自身的演化器决定“学到了什么知识”,而 SkillZip 独立决定“如何紧凑地表达该知识”。

针对补丁中抽取的每一条新单元,系统将其限制在受影响的局部类型-作用域邻域内,进行四种操作的代价评估:

这种基于局部的增量决策,使得单次补丁处理的复杂度由全历史长度降至局部邻域的常数级比较。为了避免因长期局部贪心而错过跨越多个补丁才能暴露出的宏观重用机会,侧车系统会持续维护轻量级 $n$-gram 与规则族计数器。只有当预估的可挽回收益突破设定阈值,或补丁累积达到指定步长时,系统才会基于当前的紧凑契约图发起一次全局重新打包(Repack)。这使得智能体在长达几十轮的持续演化中,推理上下文始终稳定保持在极度精简的状态,彻底斩断了“越演化越臃肿、越臃肿越迟钝”的恶性循环。

评测见真章:去伪存真的工程启示

针对该框架的实际效能,论文在设计实验时聚焦于验证核心命题:自我演化带来的文本暴增到底包含了多少结构泡沫,而 SkillZip 能否在不跑任何评测任务的前提下,实现真正无损且泛化能力更强的压缩。

纵向追踪实验证实了一个普遍现象:在智能体演化的前几轮,随着核心工作流的建立,技能长度与契约所包含的规范内容呈现同步增长;但通常在 4 到 6 轮交互之后,真实新增的契约规则开始急剧饱和,而文本 Token 计数却由于大量重复警告、分叉描述的复制粘贴呈现线性甚至指数级上扬。SkillZip 的介入成功拉平了这条畸形曲线,在文本量下降 40% 至 60% 的同时,契约核心覆盖率保持在 100%。

更具启发性的是 SkillZip 与基于任务反馈的动态压缩基准(如 SkillReducer)的横向对比。依赖环境 Rollout 的基线方法不仅单次压缩耗时漫长、API 成本极其昂贵,更展现出了明显的“评估集过拟合”倾向——在用于指导压缩的训练任务上表现良好,但一旦将压缩后的技能迁移到具有长尾边缘条件的新测试集上,任务成功率便出现显著下滑。原因正是前文指出的:基于采样的验证回路无法在有限步数内穷尽所有分支,那些看似无人问津的防御性规则被当成无用赘述修剪掉了。反观 SkillZip,凭借形式化的硬覆盖约束与歧义残差锁定,在下游未见任务(Unseen Tasks)上的泛化成功率全面压制了任务驱动的基准,同时将压缩过程的模型调用开销降低了一个数量级以上。

从更广阔的视角来看,SkillZip 为 Agent 架构体系中的知识沉淀机制带来了一次关键修正。过去很长一段时间,学术界与工业界习惯于将大模型应用视作一个纯粹的端到端黑盒,倾向于用自然语言 Prompt 承载一切逻辑,又寄希望于通过大模型自反思或暴力上下文剪枝来解决可扩展性问题。SkillZip 的成功证明:智能体的长期记忆与技能库,绝不能被简单看作无结构的自然语言流,它更接近于一份具有严谨控制流与调用规约的软件工程代码库。

将“演化(产生新知识)”与“重构(精简知识表述)”在机制上清晰剥离,并在重构层引入编译原理与程序分析中成熟的控制流图、作用域与描述长度概念,既保留了大语言模型在理解与生成非结构化知识上的泛化优势,又守住了底层确定性系统对安全性、幂等性与资源开销的硬性底线。对于正在构建需要 7×24 小时自主运行、持续接纳新业务规则的生产级智能体开发者而言,这种 evaluation-free 的契约重构思路,无疑提供了一种兼具极高运行效率与可解释性的破局解法。