---
type: link
title: "SkVM - 面向 LLM 技能的编译与运行时系统"
date: 2026-06-27 10:00:00 +0800
tags: [arxiv, paper, skill, agent, compiler, jit, harness, skvm]
linkUrl: https://arxiv.org/html/2604.03088v2
---

## 一句话概括

> **把 Skill 当作"代码"、把 LLM 当作"异构处理器"，借鉴传统编译器（AOT + JIT）设计思想，首次为 LLM Agent 的 Skill 构建了跨模型、跨平台的编译与运行时系统。**

---

## 一、核心问题：Skill 的"可移植性危机"

当前 Agent 把 Skill 当作**原始文本**直接塞给模型，导致同一 Skill 在不同模型/Harness 上表现天差地别。作者分析了 **118,000+** 个 Skill（clawhub.ai + skills.sh），发现：

| 问题 | 数据 |
|------|------|
| 使用 Skill 后性能**下降** | **15%** 的任务 |
| 使用 Skill 后**无变化** | **17%** 的任务 |
| 至少一个模型**无改善** | **87%** 的任务 |
| Token 开销暴增 | 最高 **451%** |

三大失配：
- **P1 模型失配**：Skill 假设模型能区分库 API 与 CLI，小模型直接翻车
- **P2 Harness 失配**：同一模型在不同 Harness（Claude Code / OpenCode / BareAgent）上结果差异巨大
- **P3 环境失配**：缺少依赖包时，Qwen 成功率从 100% 暴跌到 33-67%，且 Token 消耗翻倍

---

## 二、核心类比：编程语言的演进

```mermaid
flowchart LR
    subgraph Stage1["Stage 1: Assembly"]
        A1["汇编代码"]
        B1["Assembler & Linker"]
        C1["操作系统"]
        D1["硬件"]
        A1 --> B1 --> C1 --> D1
    end
    
    subgraph Stage2["Stage 2: High-level Language"]
        A2["C / Java 代码"]
        B2["C Compiler / JVM"]
        C2["操作系统"]
        D2["硬件"]
        A2 --> B2 --> C2 --> D2
    end
    
    subgraph Stage3["Stage 3: Natural Language (Skill)"]
        A3["Skill (自然语言程序)"]
        B3["SkVM<br/>Compiler & Runtime"]
        C3["Agent Harness"]
        D3["LLM (异构处理器)"]
        A3 --> B3 --> C3 --> D3
    end
    
    style Stage3 fill:#e6f3ff,stroke:#0066cc,stroke-width:2px
    style B3 fill:#ffcccc,stroke:#cc0000,stroke-width:2px

    %% 关键改动：使用隐形连线强迫子图横向排列
    Stage1 ~~~ Stage2 ~~~ Stage3
```

**关键洞察**：Skill 是"自然语言程序"，LLM 是"异构处理器"，但**缺少编译器和运行时**来保证跨目标可移植性与执行效率。

---

## 三、SkVM 架构：AOT 编译 + 运行时 JIT

```mermaid
flowchart TB
    subgraph AOT["AOT Compiler (Install Time)"]
        direction TB
        P1["Pass 1: Capability-Based Compilation<br/>• 提取26个原始能力<br/>• 微基准画像 → 差距分析<br/>• 补偿(compensate) / 替换(substitute)"]
        P2["Pass 2: Environment Binding<br/>• 提取隐式依赖<br/>• 生成 env-binding.sh"]
        P3["Pass 3: Concurrency Extraction<br/>• 工作流 → DAG<br/>• DLP / ILP / TLP"]
        P1 --> P2 --> P3
    end
    
    SV["Skill Variants<br/>(按 target 存储)"]
    
    subgraph RT["Runtime (Execution Time)"]
        direction TB
        VS["Variant Selection<br/>(匹配当前 model+harness)"]
        JIT["JIT Optimizer"]
        AR["Adaptive Recompilation<br/>• 监控失败日志<br/>• 系统性缺口 → 重编译"]
        CS["Code Solidification<br/>• 高频模板 → 可执行函数<br/>• 绕过 LLM 推理"]
        RS["Resource-Aware Scheduler<br/>• API/CPU/内存感知"]
        VS --> JIT
        JIT --> AR
        JIT --> CS
        JIT --> RS
    end
    
    AOT --> SV
    SV --> VS
    
    style AOT fill:#e6ffe6,stroke:#006600
    style RT fill:#ffe6e6,stroke:#cc0000
    style SV fill:#fff0e6,stroke:#cc6600
```

---

## 四、三大技术创新详解

### 1. 原始能力（Primitive Capabilities）—— 让"可移植"可量化

从 15,063 个 Skill 中归纳出 **26 个原始能力**（如 `gen.code.shell`, `tool.exec`, `follow.procedure`），每个能力分 **L1/L2/L3** 熟练度。

```mermaid
flowchart LR
    Skill["Skill Requirements<br/>• gen.code.python L3<br/>• tool.exec L2<br/>• follow.procedure L2"]
    Target["Target Profile<br/>(微基准测试)"]
    Gap["Gap Analysis（差距分析）<br/>need vs has"]
    T1["Compensate（补偿）<br/>L2→L1<br/>+ 绝对路径替换"]
    T2["Substitute（替换）<br/>Python→SQL"]
    
    Skill --> Gap
    Target --> Gap
    Gap --> T1
    Gap --> T2
```

- **补偿（Compensation）**：目标能力级别不足时，通过增加示例、明确约束来"降级" Skill 要求
- **替换（Substitution）**：差距过大时，切换到等价实现路径（如 Python pandas → SQL）

### 2. 代码固化（Code Solidification）—— 绕过 LLM 的"JIT 编译"

75% 的 Skill 包含**结构固定、仅参数变化**的代码片段。SkVM 将其提升为可执行函数：

```mermaid
flowchart LR
    S1["Stage 1: AOT分析<br/>• 提取代码签名<br/>• 生成参数模板"]
    S2["Stage 2: 运行时监控<br/>• 连续匹配签名<br/>• 确认结构稳定"]
    S3["Stage 3: 提升执行<br/>• 模板→可执行函数<br/>• 后续调用绕过LLM"]
    
    S1 --> S2 --> S3
```

**效果**：PDF 提取任务从 **10,469 ms → 206 ms**，加速 **19-50×**；天气查询加速 **5×**（受网络延迟限制）。

### 3. 并发提取（Concurrency Extraction）—— 从自然语言中挖并行性

借鉴编译器经典优化：
- **DLP**（数据级并行）：批量处理多个文件
- **ILP**（指令级并行）：独立工具调用可重叠
- **TLP**（线程级并行）：生成独立子 Agent 并行执行

```mermaid
flowchart TB
    Root[技能工作流DAG构建] --> DLP[数据级并行 DLP<br/>单步骤对多份独立数据执行相同操作]
    Root --> ILP[指令级并行 ILP<br/>多个无依赖工具调用合并为单轮批量执行]
    Root --> TLP[线程级并行 TLP<br/>独立子任务拆分为子Agent并行执行]

    DLP --> D1[实现: 语言原生并行原语<br/>无需Harness特殊支持]
    ILP --> I1[实现: 批量工具调用注解<br/>需Harness支持批量分发]
    TLP --> T1[实现: 子Agent任务块注解<br/>需Harness支持子Agent孵化]
```

---

## 五、评估结果

在 **8 个 LLM**（Claude Opus 4.6, Gemini 3 Flash, Claude 3.5 Haiku, Devstral Small, Qwen3-30B 等）× **3 个 Harness**（Claude Code, OpenCode, BareAgent）上测试：

| 指标 | 结果 |
|------|------|
| 任务完成率提升 | **平均 +15.3%** |
| Token 消耗降低 | **最高 -40%** |
| 并行加速 | **最高 3.2×** |
| 代码固化延迟降低 | **19-50×** |

---

## 六、Skill 生态画像（基于 118,000+ Skill）

```mermaid
pie
    title Skill 分类 (15,063 个高下载量 Skill)
    "工具引用 (Tool-reference)" : 52
    "流程指导 (Procedural)" : 28
    "内容生成 (Generative)" : 20
```

- **76%** 包含显式流程结构（编号步骤、条件分支）
- **75%** 嵌入可固化代码片段
- **长尾分布**：89% 的 Skill 下载量 < 86 次

---

## 七、局限与未来方向

1. **非确定性**：编译过程依赖 LLM，输出可能有波动（已设计回滚机制）
2. **能力覆盖**：26 个能力覆盖 95% Skill，新领域需扩展
3. **编译成本**：AOT 为一次性开销，但对"一次性使用"场景不友好

---

## 八、为什么这篇论文重要？

| 维度 | 价值 |
|------|------|
| **问题定义** | 首次用大规模数据（118K Skills）量化了 Skill 可移植性危机 |
| **理论框架** | 将"Skill = 代码，LLM = 处理器"的类比落地为完整编译器体系 |
| **工程实现** | 从 AOT 三阶段编译到 JIT 代码固化，全链路可运行 |
| **实际收益** | 不仅提升准确率，还显著降本（Token -40%）提速（延迟 -50×） |

> **一句话推荐给同行**：如果你在做 Agent 框架、Skill 市场或 LLM 工具链，这篇论文提出了一个**像 JVM 之于 Java 那样的基础设施愿景**——让 Skill 真正"一次编写，到处运行"。

---

**论文链接**：[arXiv:2604.03088v2](https://arxiv.org/abs/2604.03088)
