大数跨境

SkVM:优化你的Skills能够跨模型、跨Harness、跨环境稳定运行 |SJTU最新

SkVM:优化你的Skills能够跨模型、跨Harness、跨环境稳定运行 |SJTU最新 AI修猫Prompt
2026-04-26
0
导读:先对模型+Harness做能力建模,再优化Skills

如果您经常用Claude CodeOpenCodeOpenClaw这类Agent框架,大概率会遇到一种不稳定现象:同一个Skills,用Claude能跑,换成Qwen就不行了;在Claude Code里稳定的流程,换到OpenClaw可能输出格式崩掉;在作者环境里正常的脚本,到了自己机器上可能因为缺依赖进入反复报错。

这通常不只是“模型不够聪明”。很多时候,模型具备完成任务的基础能力,但Skill对模型能力、工具接口、路径规则、依赖环境和输出格式做了太多隐含假设。强模型可以靠临场推理绕过去,弱模型或本地模型则容易卡在这些非核心环节上;即便强模型能自救,也会消耗更多token、工具调用和等待时间

SJTU研究者在 《SkVM: Revisiting Language VM for Skills across Heterogenous LLMs and Harnesses》 中把这个问题重新定义为系统问题:Skill是自然语言程序,LLM是异构处理器,Agent Harness是运行环境。 本文会围绕SkVM的核心设计展开,并结合我的本地实测,分析它如何通过AOT编译、环境绑定、并发提取、JIT重编译和代码固化,把原本依赖模型临场发挥的Skill,改造成更可移植、更稳定、更高效的执行组件。

项目地址https://github.com/SJTU-IPADS/SkVM

Skills目前面临的核心痛点

在论文中,Skills是一种可分发、自包含的知识包,它的作用是增强智能体在特定类型任务上的能力。与修改模型权重的微调(Fine-tuning)不同,技能完全在提示词层面运行,非常轻量级且易于组合。

研究者对两大主流分发平台(clawhub.ai和skills.sh)上的超过118,000个技能进行了大规模生态分析,并对其中下载量超过100次的15,063个技能进行了详细分类:

  • 工具参考类(占52%): 教导模型如何操作特定的工具、API或命令行界面。它们本质上是加载到代理上下文中的使用文档。

  • 过程指导类(占28%): 规定了执行任务的分步工作流和推理策略。例如,强制执行包含“复现、追踪、修复、验证”四个阶段的调试流程。

  • 内容生成类(占20%): 要求模型生成特定格式的内容、代码或文档,其质量高度依赖模型本身的生成能力。

两大技能平台的下载分布都高度长尾,说明技能生态规模已经很大,但真正被频繁使用的头部技能只占少数。

统计数据显示,高达76%的技能包含明确的过程结构(编号步骤、条件分支等),并且75%的技能嵌入了代码片段(如Shell命令或API调用模式)。

技能执行的三大“不匹配”挑战

尽管技能生态庞大,但目前的智能体系统对技能的支持非常粗暴:直接将技能作为原始文本传递给模型。研究者通过实验指出,这种静态文本与动态底层环境之间的差异,导致了三种严重的“不匹配”现象:

热力图展示了“模型身份”和“Harness选择”都会显著影响任务得分,同一技能并不会天然具备跨模型、跨脚手架的一致性。

  • 挑战一:模型不匹配(Model Mismatch)

    • 现象: 技能编写时往往默认模型具备完美遵循指令的能力,但现实中不同模型的能力差异巨大。

    • 数据支撑: 在八款不同规模的模型中,直接启用原始技能甚至会导致15% 的任务性能下降。对于高达87% 的任务,至少有一款模型在使用技能后没有任何性能提升。

    • 案例分析: 一个生成PPT的技能要求使用 PptxGenJS(一个JavaScript库)。强大的Claude Opus 4.6能够完美执行并获得满分;但较弱的devstral-small模型却误将该库当成命令行工具,导致不断执行错误的命令。

  • 挑战二:脚手架不匹配(Harness Mismatch)

    • 现象: 智能体本身并不直接与外部世界交互,而是运行在“代理脚手架(Agent Harness)”之中。不同的脚手架(如OpenCode, OpenClaw, BareAgent)提供的工具集和系统提示词截然不同。

    • 案例分析: 在处理一个排班任务时,Gemini 3 Flash模型在最简脚手架BareAgent上能获得100分。但在OpenCode脚手架上得分为0,原因是OpenCode在上下文中注入了极长的工具文档,过长的上下文导致该模型输出了格式错误的JSON。

  • 挑战三:宿主环境不匹配(Environment Mismatch)

    • 现象: 技能通常依赖特定的系统包或配置,而用户的真实机器可能缺乏这些依赖。

    • 影响: 当缺乏依赖时,较弱的模型(如Qwen系列)成功率会暴跌至33-67%,并因为盲目重试而浪费2-4倍的输出Token。即便是强大的Claude Opus模型,虽然能自行诊断并安装缺失的包,也会因为这一诊断过程多消耗56-69% 的Token。

当关键依赖被移除时,弱模型的成功率明显下降,同时输出Token显著增加;强模型虽然更容易自救,但也要付出额外诊断与安装成本。

SkVM系统的核心设计理念

面对上述痛点,研究者回顾了计算范式的演进历史,提出了一个核心观点:在Agent时代,Skills就是“代码”,而不同的LLM就是“异构的处理器”。

论文将Skills放在编程抽象演进链条的最新位置,强调自然语言技能已经像“代码”一样承载复杂任务逻辑,但仍缺少面向异构模型和Harness的编译器与运行时。

基于这一理念,研究者构建了SkVM(Skills Virtual Machine)。它没有使用传统系统的简单文本透传方式,而是结合了经典计算机科学中的三种编译技术:

  • 解释执行(Interpreted execution)

  • 提前编译(AOT, Ahead-of-Time compilation)

  • 即时优化(JIT, Just-in-Time optimization)

SkVM的整体架构分为两大阶段:在技能安装时,AOT编译器会分析技能并生成优化的变体;在任务执行时,运行时系统会应用JIT优化以确保高效和稳定。

AOT编译器在安装阶段完成能力适配、环境绑定和并发提取;运行时则负责变体选择、JIT优化和资源感知调度。

AOT提前编译阶段的三个步骤

当用户首次安装某个技能时,SkVM会针对特定的“目标(即指定的模型、脚手架和宿主环境)”对原始自然语言进行三轮编译处理。

步骤一:基于能力的编译(解决模型与脚手架不匹配)

由于目标环境的组合千变万化,编译器无法为每种情况硬编码优化逻辑。研究者引入了“原始能力(Primitive Capabilities)”这一抽象概念作为统一的度量标尺。

编译器先抽取技能需求,再对目标模型和Harness做画像,最后根据能力差距选择补偿或替换策略。

  • 提取原始能力: 研究者从海量技能库中提炼出了跨越四个类别的26种原始能力,并为每种能力定义了多个熟练度级别。例如,gen.code.shell(生成Shell代码)能力中,L1代表基础命令,L2代表管道和重定向,L3代表复杂的sed/awk脚本。

  • 目标画像分析: 编译器在离线阶段使用微基准测试(Microbenchmarks),测量目标模型在这些能力上的实际水平。

  • 实施技能转换: 编译器比对“技能的需求”和“模型的水平”。如果模型能力略有不足,编译器会采用**补偿(Compensation)策略,在技能中注入示例或强化约束;如果能力鸿沟过大,则采用替换(Substitution)**策略,寻找另一条等效的实现路径。

SkVM用原始能力和熟练度等级描述技能需求,例如Shell代码生成、算术推理、工具执行和流程遵循都可以被拆解成可测量的层级。

步骤二:环境绑定(解决宿主环境不匹配)

为了确保执行的稳定性,编译器必须在任务开始前处理好依赖关系。

  • 提取依赖清单: 编译器分析技能,提取外部库、CLI工具和系统服务的依赖清单。

  • 深度探测与修复: 编译器在用户的宿主环境中运行轻量级检查。如果发现缺失,它会进行深度探测,并生成一个具有幂等性(Idempotent)的“环境绑定脚本”。

  • 提前执行: 这个脚本会在技能真正执行前运行,确保所有依赖就绪。这使得模型在后续执行时能够全神贯注于核心逻辑,避免将算力浪费在环境报错上。

步骤三:并发提取(寻找隐藏的并行执行机会)

尽管76%的技能包含过程式工作流,但这些通常是用顺序的自然语言编写的。实际上,许多步骤并不存在前后依赖关系。

SkVM会把自然语言中的顺序步骤分解成工作流DAG,并识别步骤之间或步骤内部可并行执行的部分,再映射到DLP、ILP或TLP。

  • 构建有向无环图(DAG): 编译器通过LLM辅助分析,将技能分解为离散的步骤,明确每个步骤的输入和输出,从而构建出工作流DAG。

  • 映射三种并行机制:

    • 数据级并行(DLP): 当单一操作需要应用于多个独立数据(如处理15个不同的CSV文件)时,编译器会重写指令,利用Shell并行或Python多进程并发执行。

    • 指令级并行(ILP): 当多个无关的步骤都需要调用工具时,编译器会将它们打包,在一次LLM推理轮次中发起批量工具调用。

    • 线程级并行(TLP): 当工作流可以拆分为多个需要独立多轮推理的子任务时,编译器会将其重写,指示运行时为每个子任务生成独立的子代理(Sub-agent)并行工作。

运行时系统与JIT即时优化

有些问题在静态的AOT编译阶段是无法预见的,比如运行时的接口限流,或者随着执行次数增加才显现出来的重复代码模式。因此,SkVM的运行时阶段引入了类似现代虚拟机的动态优化机制。

机制一:自适应重编译(Adaptive Recompilation)

运行时系统会记录使用该技能执行的每一项任务的结果。

  • 收集失败日志: 当技能执行失败或在智能体循环中发生重试时,系统会记录结构化的失败日志和模型的自我恢复轨迹。

  • 触发重编译: 如果同一个技能在多次调用中出现相似的失败,系统会判断这是一个系统性的能力缺陷。随后,系统将这些失败日志反馈给编译器。

  • 持续进化: 编译器接收到反馈后,会对技能应用更有针对性的补偿转换。如果新版本的表现变差,系统会自动回滚到上一个性能最好的版本。

论文将无技能、原始技能、AOT编译技能以及三轮JIT优化放在一起比较,展示了AOT和后续JIT轮次如何逐步提升任务表现。

机制二:代码固化(Code Solidification)

研究发现,高达75%的技能包含结构固定的代码模板,每次调用只是输入参数不同。如果每次都让模型重新推理生成这些代码,会造成极大的资源浪费。代码固化通过三个阶段解决此问题:

  • 第一阶段(离线候选生成): AOT编译器识别出具备固化潜力的代码段,提取出关键字、代码签名(预期的输出结构匹配模式)、带参数槽的模板以及参数大纲。

  • 第二阶段(在线监控验证): 任务开始执行后,系统会监控前几次LLM的调用。系统首先检查关键字,然后将LLM生成的代码与事先提取的“代码签名”进行比对。只有当代码结构在连续多次调用中保持一致时,系统才会信任该模型,并进入下一阶段。

  • 第三阶段(绕过LLM直接执行): 模板会被实例化为一个真实的可调用函数(如独立的Shell脚本或Python函数)。在后续的调用中,系统将完全绕过LLM的推理过程,直接从上下文中提取参数,调用该函数并返回结果。如果生成的代码意外报错,系统配备了安全回退机制,会重新让LLM接管生成工作,以确保任务能够正确完成。

AOT阶段先生成候选模板和代码签名,运行时再通过多次调用验证其稳定性,满足条件后把重复生成的代码提升为可直接执行的函数。

机制三:资源感知的并行调度

AOT阶段提取了大量的并发机会,但系统能否承受这些并发取决于实时的硬件状态。

  • 动态监控: SkVM会实时监控API的响应延迟、HTTP 429(限流)信号,以及机器的CPU和内存使用率。

  • 动态干预: 当资源压力超过阈值时,调度器会限制启动新的子代理,或者选择性地挂起(暂停)某些正在运行的子代理。这种机制有效地缓解了争用,确保了系统整体的执行效率。

实验评估与数据分析

为了验证SkVM的实际效能,研究者在包含代码生成、数据分析、文档创建和系统管理的多个综合基准测试上进行了全面评估。

测试环境配置

  • 参与评估的模型: 涵盖三个能力梯队共八款模型。顶级模型包括Claude Opus 4.6DeepSeek-v3.2;中端模型包括Gemini 3 Flash、Qwen3.5-397B、Qwen3.5-122B和Claude 3.5 Haiku;小型模型包括Qwen3-30B和Devstral-small。

  • Agent脚手架: 选取了三种特性不同的脚手架,包括最简框架BareAgent、全功能代码代理OpenCode以及通用复杂任务代理OpenClaw

核心实验数据解读

研究者通过对比“原始技能”、“Anthropic官方优化器(Skill-Creator)”以及“SkVM优化技能”的表现,得出了以下关键结论:

  • 任务完成率的全面提升

    • 在所有模型和Harness的组合中,经过SkVM优化的技能平均提升了15.3%的任务完成率。
    • 较弱的模型从编译优化中获益最多。例如,在BareAgent上,SkVM使得Qwen3-30B的表现比基线优化器高出25%。这说明中小型模型实际上具备完成任务的基础逻辑能力,只是在处理复杂非逻辑维度(如格式控制、依赖管理)时容易出错,而SkVM很好地填补了这一短板。
    • 针对跨脚手架的差异问题,原本同一模型在不同脚手架上表现差距可达13分,SkVM成功将这一差距缩小至最多5分。单元格数值表示SkVM优化后的任务完成率,颜色表示相对原始技能的提升或下降,可以看到弱模型和复杂Harness场景中的收益尤其明显。论文将No Skill、Original、Skill-Creator和SkVM-Optimized四种方案进行平均得分对比,SkVM优化技能在所有模型和Harness组合上都取得最高分。

  • 极高的Token与成本节省

    • 对于大语言模型而言,不断地“试错-反馈-重试”循环会导致巨大的Token开销。SkVM实现了性能与成本的双赢。
    • 由于JIT编译让模型彻底避开了引发反复报错的执行路径,消除了冗余交互。在DeepSeek-v3.2搭配BareAgent的测试组合中,观察到了接近40% 的Token消耗降低。图多数模型-Harness组合落在右上象限,说明SkVM通常能够同时带来更高任务质量和更低Token消耗。

  • 并发与固化带来的执行加速

    • 并行加速效果: 通过DLP、ILP和TLP三种并行策略,SkVM实现了最高3.2倍的端到端耗时缩短。其中,线程级并行(TLP)由于并行粒度最粗,带来的优化效果最为显著。

    • 代码固化提速: 针对PDF文本提取等任务,JIT优化直接绕过了LLM的生成过程,将执行时间从10-15秒锐减至206-568毫秒,实现了惊人的19倍到50倍的速度提升。DLP、ILP和TLP分别适配不同粒度的并发机会,其中TLP在可拆分为多子任务的场景中带来最明显的端到端加速。蓝色表示LLM推理延迟,绿色表示固化后直接执行的延迟;天气案例没有被提升,说明SkVM的提升门槛会阻止不稳定模板被错误固化。

  • 环境绑定的修复能力

    • 在故意缺失依赖的对比实验中,较弱的模型(如qwen3.5-122b)面对原始技能几乎全部执行失败。而SkVM的环境绑定脚本在执行前完成了配置,使得这些模型的表现完全恢复到了完整环境下的正常得分水平,并消除了因盲目排错产生的大量Token浪费。Env-bound配置让缺失依赖场景恢复到接近完整环境的水平,尤其能避免弱模型在环境诊断上反复失败。

  • 编译开销分析

    • 需要说明的是,AOT编译过程确实需要调用LLM进行分析,从而产生一定的预处理成本。但在实际测试中,为Devstral Small构建完整的原始能力画像仅需7.3分钟(花费0.033美元),而Qwen3-30B需要31.1分钟(花费0.079美元)。
    • 由于这一成本是针对每种组合的“一次性开销”,且编译后的技能成果可以被多次复用甚至在多用户间共享,因此在实际应用中,这种预处理成本会被高度摊销。能力画像的时间和费用按能力类别拆解后可以看到,完整Profiling虽有成本,但属于一次性预处理开销,后续可被多技能和多次执行复用。

实测部分

在了解到这项研究后,我很快在本地开发环境中进行了一次实践。整个过程存在一定的工程繁琐度,但最终得到的结果具备参考价值。

如何安装部署?

研究者提供了两种便捷的安装方式:

  • 脚本直装(推荐macOS / Linux用户): 在终端执行 curl -fsSL https://skillvm.ai/install.sh | sh 即可完成核心组件部署。

  • 通过NPM安装: 在任意支持Node >= 18的平台上执行 npm i -g @ipads-skvm/skvm(安装后会自动拉取对应平台的二进制文件)。

安装完成后,可以通过执行 skvm --help 进行自检,确认环境就绪。

我的实践配置

我选择了一个小参数模型Qwen3.5-9B作为具体的执行模型,搭配OpenClaw作为Agent Harness。同时,将DeepSeek最新的V4-flash非思考版作为后端的编译器/优化器模型。例外说一下,执行模型这里,本地或者模型厂商API二者都可以。

Skills方面我挑选了官方库中的invoice-organizer(票据整理)Skill。它的核心目标是将混乱的各类发票和收据进行自动读取、提取关键信息(如供应商、日期、金额),并按照统一的标准重命名、分类存入对应文件夹,最终生成一份完整的CSV汇总表。

为了贴近真实业务场景,我让GPT在公开数据集找了一组混合的真实样本,包含手拍的实体小票、扫描版发票、电子收据截图以及部分重复票据。这种数据极度考验系统底层的光学字符识别(OCR)能力、多步骤文件操作能力以及逻辑统筹能力。

第一步:Profiling

这一步的作用是对你的Agent组合,也就是选择的模型(Qwen3.5-9B)和HerNess(Openclaw)组合在一起的能力,进行画像建模

SkVM优化的前提,是确切知道当前模型和脚手架的真实水平。在执行任务前,我启动了针对 Qwen3.5-9B + OpenClaw 的能力画像分析(Profile)。

  • 深度的能力摸底: 从截图中可以看到,系统正在逐一测试26项原始能力(例如 gen.code.python 的L1到L3级别),并记录具体的通过状态与耗时。

  • 耗时和容错机制: 在OpenClaw这种复杂的Harness上,包含网页浏览(tool.web)的测试项非常耗时,我最终花了1个多小时才跑完,且容易中断。SkVM提供了极具实操价值的部分缓存(Partial Cache)机制。遇到中断无需重头开始,系统会自动从断点处续跑。

第二步:AOT编译

在没有任何优化的Baseline阶段,原始技能对模型能力提出了过高的假设(默认其具备极强的OCR视觉提取和文件统筹能力)。

  • 优化前(Baseline)的混乱: 如截图所示,未经优化的系统在耗时近4分钟后触发了超时(Timeout)。所有发票都被粗暴地扔进了 Misc(杂项)文件夹,文件名全是无效的 Unknown Vendor

  • 编译器模型的兼容性处理: 在进入AOT编译以后,我发现 deepseek-v4-pro 在当前路由下存在工具调用格式(tool_choice)的兼容性报错。目前的解决方法是需要将其降级替换为 deepseek-chat对应deepseek-v4-flash非思考模式,成功生成了 Pass 1 阶段的优化后Skill文件。

  • 优化后(AOT P1)的改善: 使用编译后的技能重新运行任务,结果截然不同。正如截图所示,模型成功建立起了符合逻辑的目录结构,将文件准确分类到了 SoftwareOffice 和 Services 目录下,并采用了标准的日期与供应商命名格式。

第三步:JIT动态优化

在AOT取得初步成效后,我进一步尝试了JIT(即时优化),试图通过真实任务的反馈让技能完成自我进化。不幸的是最终我失败了,但我的经历,值得对SkVM感兴趣的你参考一下。

  • 真实的测试环境要求: 运行JIT并非简单重复原任务。由于采用真实任务源(task-source=real),必须为系统提供包含明确评估标准(eval)的训练和测试数据集。一开始系统成功解析并装载了这些验证任务。

  • 基础设施阻塞(infra-blocked): 实验最终并未产出新的优化方案。原因在于,当前任务极其依赖长链路的工具调用,运行时间过长导致训练轮次触发了底层环境的超时机制,超时上限目前大概是硬编码的。

  • 机制的严谨性: 面对超时造成的污染数据,SkVM的优化器没有选择盲目修改提示词,而是将状态标记为 infra-blocked 并主动放弃优化(Abstain)。

    小结最终没有得到经SkVM完整优化的技能最终没有得到经SkVM完整优化的技能,与我选用的执行模型有着直接关系。Qwen3.5-9B毕竟是一个参数量较小的模型,自身能力相对较弱。在面对高度依赖视觉提取和复杂统筹的任务时,它经常陷入反复试错的循环,进而拖垮整体运行时间。由于我个人的本地算力有限,这次测试仅仅是一次轻量级的边界探索。如果您的硬件条件允许,将执行主模型更换为参数更大、能力更强悍的模型,或者干脆直接用模型厂商API(例如直接使用DeepSeek-V4作为主模型与Harness搭配),那么底层的视觉理解和推理速度将得到根本保障,执行效率会大幅提升,您所得到的JIT优化结果也必将截然不同。我的这段受挫经历仅供您作为工程排错的参考。

    值得一提,在研究团队官网的Agent Harness能力图谱排行榜中,DeepSeekV3.2+Openclaw的组合排名竟然位居第2,而前不久才更新过的Qwen3.6-plus+Openclaw只排在第13位。

    结论

    SkVM给出的答案更接近传统软件工程:既然Skill已经包含流程、依赖、工具调用、代码模板和执行约束,那它就不应该只靠模型临场理解。它需要被分析、编译、适配、测试、回滚和优化。

    这套思路对强模型和弱模型的价值不同。强模型通常能靠自身能力绕过一些环境错误和执行偏差,但代价是更多token、更多工具调用和更长耗时。弱模型、本地模型和开源模型更依赖系统层补偿:路径要更明确,依赖要提前处理,输出格式要被约束,复杂流程要拆成它能稳定执行的步骤。

    我的本地实测也印证了这一点。SkVM能明显改善Skill的结构化执行效果,但它不能凭空补齐小模型缺失的底层能力,也不能完全消除长链路工具调用带来的超时和工程摩擦。它更像是一层执行基础设施:把原本散落在提示词、模型推理和人工排错里的隐含经验,沉淀成可复用的编译产物和运行时策略。

    所以,SkVM的意义并不在于“让提示词写得更好”,而在于把Agent Skill推进到一个更严肃的工程阶段:Skill不再只是Markdown文件,而是可以被编译、调度、优化和复用的系统组件。

    未来已来,有缘一起同行!

    <本文完结>

    1. 转载请与本喵联系,私自抓取转载将被起诉
    🎉让我们一起创造更多美好! 🎉

    如果您觉得这篇文章对您有帮助
    感谢您为我【点赞】【在看】

    <您为我点赞在看,只有我能看到>

    👉微信号:xiumaoprompt

    添加请注明来意!

    【声明】内容源于网络
    0
    0
    AI修猫Prompt
    专注于生成式AI领域。
    内容 522
    粉丝 0
    AI修猫Prompt 专注于生成式AI领域。
    总阅读294
    粉丝0
    内容522