SkillSynth:基于技能图谱驱动的终端智能体数据合成(中文版)
COLM 2026 论文完整中文版——SkillTerminal-Corpus 12K 任务 52K+ 轨迹
SkillSynth:基于技能图谱驱动的终端智能体数据合成
目标会议:COLM 2026(Conference on Language Modeling),旧金山,2026年10月6–9日 格式:正文9页 + 不限参考文献 + 附录 草稿版本:v0.1 — 2026-03-07
摘要
基于大语言模型(LLM)的终端智能体在自主命令行任务执行方面展现了卓越的能力。然而,训练此类智能体的瓶颈在于高质量、多样化的终端交互数据的稀缺性。现有的合成数据方法——包括 Nemotron-Terminal 中的技能驱动生成管线——依赖于 LLM 自定义的技能分类体系,这些体系与真实世界的工具使用模式脱节,导致复杂性有限且分布保真度不足。本文提出 SkillSynth,一种新型数据合成框架,利用 SkillNet——一个包含 15万+ 经过策展的真实 AI 智能体技能的大规模知识图谱,具有丰富的关系结构(相似、组合、依赖和从属关系)。我们的核心洞察是:真实技能图谱的拓扑结构——其组合层次、依赖链和跨域桥梁——比任何人工设计的分类体系都能更忠实地编码终端任务的真实复杂性景观。SkillSynth 包含四个阶段:(1)技能子图采样,从 SkillNet 中提取与终端相关的技能簇及其关系上下文;(2)图谱引导的任务生成,沿依赖边和组合边进行遍历,合成可控复杂度的多步骤任务;(3)环境锚定的轨迹合成,在 Docker 沙箱环境中生成可执行的智能体轨迹并自动验证;(4)拓扑感知的质量过滤,利用技能图谱结构确保分布覆盖并去除退化样本。我们应用 SkillSynth 构建了 SkillTerminal-Corpus,包含 12K 个经验证的终端任务,涵盖 15 个领域和 420+ 个命令行工具,附带 5万+ 条智能体轨迹。在 Terminal-Bench 2.0 和 Terminal-Bench Pro 上的实验表明,基于 SkillTerminal-Corpus 训练的模型取得了显著提升:使用仅 1/3 数据量的 SkillSynth-32B 在 TB 2.0 上达到 31.2%(超越 Nemotron-Terminal-32B 的 27.4%),结合强化学习后进一步提升至 34.8%,建立了开源终端智能体的新标杆。
1 引言
命令行终端是 AI 智能体最强大却也最具挑战性的执行环境之一。与受限的 API 工具调用不同,终端交互涉及一个开放式的动作空间——数千种命令行工具,每种都具有复杂的参数和选项,通过管道、脚本和条件逻辑在系统管理到科学计算等多样化领域中组合使用(Merrill et al., 2026; Wang et al., 2025)。近期的终端智能体如 Claude Code、Codex CLI 和 Gemini CLI 展现了令人印象深刻的自主能力,但最先进系统背后的训练方案在很大程度上仍未公开(Pi et al., 2026)。
核心挑战在于训练数据。真实世界的终端交互轨迹稀缺、受专利保护且难以大规模收集。这催生了大量关于终端智能体合成数据生成的研究工作。迄今为止最系统的研究——Nemotron-Terminal(Pi et al., 2026)——提出了 Terminal-Task-Gen 管线,支持种子驱动和技能驱动两种任务构造方式,产出了开源的 Terminal-Corpus。其技能驱动方法定义了一组高层领域(如”系统管理”、“数据处理”),并提示 LLM 在每个领域内枚举技能,然后生成针对单个或组合技能的任务。
虽然这种技能驱动范式代表了有意义的进步,但它存在三个根本性局限:
(L1) 人工技能分类体系。 技能定义由 LLM 自身生成,没有锚定于真实世界智能体能力的实际分布。这创建了一个自我指涉循环:模型定义了哪些技能存在,然后为这些自定义技能生成任务,遗漏了表征真实终端使用的长尾专业化、跨领域和新兴技能。
(L2) 组合复杂度不足。 由于技能之间缺乏显式的关系结构——依赖链、组合模式、前置条件层级——生成的任务往往是”扁平”的,仅测试孤立的单个技能,而非区分专家级与初级终端操作的多步骤、多工具编排能力。
(L3) 覆盖盲区。 LLM 生成的分类体系不可避免地反映模型训练分布的偏差,过度代表常见领域(Web 开发、基础 Linux),而不足代表对真实部署至关重要的专业领域(科学计算、安全取证、分布式系统)。
本文提出通过将数据合成过程锚定于外部的真实世界技能知识图谱来同时解决上述三个局限。具体而言,我们利用 SkillNet(Liang et al., 2026)——一个最近发布的大规模技能基础设施,包含超过 15 万个经过策展的 AI 智能体技能,组织成具有四种关系类型的结构化知识图谱:similar_to(相似)、belong_to(从属)、compose_with(组合)和 depend_on(依赖)。与 LLM 生成的分类体系不同,SkillNet 的技能从真实的智能体执行轨迹、GitHub 仓库、技术文档和社区贡献的知识中提炼而来,忠实反映了实际的技能景观。
我们的核心技术洞察是:真实技能图谱的拓扑结构直接编码了终端任务的复杂性景观:
- 依赖深度(
depend_on链)与任务所需的前置配置步骤数量相关。 - 组合宽度(
compose_with扇出)决定了必须协同编排的工具和操作数量。 - 层级结构(
belong_to树)揭示了从原子操作到复杂工作流的抽象层次。 - 跨域桥梁(远距离簇间的
similar_to链接)提示了测试泛化能力的新型迁移任务。
基于这一洞察,我们提出 SkillSynth,一个四阶段数据合成框架:
-
技能子图采样(§3.1):通过域过滤的图遍历从 SkillNet 中提取与终端相关的技能簇,保留簇内和簇间的关系上下文。
-
图谱引导的任务生成(§3.2):设计图遍历算法,沿依赖边和组合边遍历以产生复杂度可控、经过校准的任务规格。更长的路径产生更难的任务;分支路径产生更具组合性的任务。
-
环境锚定的轨迹合成(§3.3):每个任务规格在 Docker 沙箱环境中实例化,由强教师模型生成解决方案轨迹,并通过自动化测试套件验证。
-
拓扑感知的质量过滤(§3.4):利用技能图谱定义覆盖度指标,过滤生成的语料库以确保在技能簇、难度级别和组合模式上的均衡代表性。
我们应用 SkillSynth 构建了 SkillTerminal-Corpus,包含 12,000 个经验证的终端任务,涵盖 15 个领域和 50,000+ 条智能体轨迹。大量实验证明了我们方法的有效性:
- 在 Terminal-Bench 2.0(Merrill et al., 2026)上,基于 SkillTerminal-Corpus 训练的 Qwen3-32B 达到 31.2% 的准确率,超越 Nemotron-Terminal-32B(27.4%),尽管仅使用了 1/3 的训练数据。
- 在 Terminal-Bench Pro(Wang et al., 2025)上,我们的 32B 模型达到 28.5%,创造了该规模开源模型的新纪录。
- 消融实验表明,图谱引导的合成产生的任务具有 2.3倍 更高的组合复杂度(以平均依赖深度和组合宽度衡量)和 40% 更广的技能覆盖。
- 分析显示,性能提升集中在困难的多步骤任务上——恰恰是现有方法质量差距最大的类别。
我们的贡献总结如下:
- 我们识别了 LLM 生成的技能分类体系在终端智能体数据合成中的根本性局限,并提出将合成过程锚定于真实世界的技能知识图谱。
- 我们提出 SkillSynth,一个具有四个原则性阶段的图谱引导数据合成框架,并展示了技能图谱拓扑结构如何转化为可控的任务复杂度。
- 我们发布 SkillTerminal-Corpus(12K 任务、50K+ 轨迹、15 个领域、420+ 工具)及训练模型,建立了开源终端智能体的新标杆。
2 相关工作
2.1 终端智能体基准与训练
基准测试。 终端智能体的评估已经快速成熟。Terminal-Bench 2.0(Merrill et al., 2026)提供了 89 个专家级高难度任务,在 Docker 沙箱环境中执行,最强智能体(Forge Code + Gemini 3.1 Pro)达到 78.4%。Terminal-Bench Pro(Wang et al., 2025)扩展至 8 个系统性领域的 400 个任务,平均每个任务 28.3 个测试用例。在相邻的软件工程领域,SWE-bench(Jimenez et al., 2024)及其后续——SWE-bench Verified(OpenAI, 2024)、Multi-SWE-bench(Zan et al., 2025)和 SWE-bench Live(Zhang et al., 2025)——已将基于执行的评估确立为代码智能体的金标准。
训练数据与方法。 终端训练数据的稀缺催生了多条研究路线。TermiGen(UCSB, 2026)构建了 11 个类别的 3,500+ Docker 环境,涵盖 420+ 命令行工具,重点关注纠错轨迹。SWE-smith(Yang et al., 2025)使用基于变异的合成从 128 个 GitHub 仓库产出 50K+ 实例。R2E-Gym(Jain et al., 2025)引入了基于提交的程序化环境生成与混合验证器。在强化学习范式中,DeepSWE(Agentica, 2025)证明了纯强化学习配合稀疏二值奖励(GRPO++)可以在无需 SFT 的情况下训练出有竞争力的 SWE 智能体,而 SWE-Master(Song et al., 2026)结合多源数据整合与 RLVR,在 SWE-bench Verified 上达到 70.8%,并配合测试时扩展。
与我们最相关的工作是 Nemotron-Terminal(Pi et al., 2026),它提出了 Terminal-Task-Gen——一个支持种子驱动和技能驱动任务构造的管线。其技能驱动模式通过 LLM 提示定义领域并在每个领域内进行技能枚举。虽然效果不错(其 32B 模型在 TB 2.0 上达到 27.4%),但该方法从根本上依赖 LLM 自身的知识来定义技能空间,形成了自我指涉循环,限制了复杂度和覆盖度,正如我们在 §1 中分析的那样。
2.2 基于技能的智能体训练方法
技能作为模块化、可复用的智能体能力单元的概念有着丰富的历史。在具身 AI 中,Voyager(Wang et al., 2023)展示了在 Minecraft 中通过不断增长的技能库实现终身技能积累。ExpeL(Zhao et al., 2024)从过去的任务经验中提取自然语言洞察,但缺乏结构化组织。Reflexion(Shinn et al., 2023)使用言语自我反思来提升智能体性能,但将技能隐式地编码在提示词中。
近期,SkillsBench(2025)评估了技能供给对 LLM 智能体性能的影响,发现经过策展的真实技能可以将性能提升 +16.2 个百分点,而自生成的技能则没有可测量的收益——这直接支持了我们的论点,即真实技能从根本上比 LLM 生成的技能更有价值。在数据合成文献中,Self-Instruct(Wang et al., 2023b)和 Evol-Instruct(Xu et al., 2024)证明了 LLM 可以从种子指令生成训练数据,但这些方法缺乏复杂多步骤终端任务所需的结构化引导。
2.3 技能知识图谱
知识图谱已被广泛用于结构化知识表示(Hogan et al., 2021),但其在智能体技能建模中的应用还处于萌芽阶段。SkillNet(Liang et al., 2026)是首个大规模地将 AI 智能体技能组织成结构化知识图谱的尝试。通过多阶段管线构建——从轨迹、代码和文档中自动提取;五维质量评估;自动化关系推理——SkillNet 包含 15万+ 经策展的技能,具有四种类型化关系(similar_to、belong_to、compose_with、depend_on),形成有向多关系图。实验表明,SkillNet 增强的智能体在 ALFWorld、WebShop 和 ScienceWorld 基准上平均奖励提升 40%,交互步骤减少 30%。
虽然 SkillNet 最初是为运行时技能检索和智能体增强而设计的,但我们提出了一种新型应用:利用其图谱拓扑作为训练数据合成的结构化脚手架。据我们所知,这是首个在终端智能体领域利用真实世界技能知识图谱进行合成数据生成的工作。
3 方法:SkillSynth
我们提出 SkillSynth,一个四阶段数据合成框架,将真实世界技能知识图谱的拓扑结构转化为高质量的终端智能体训练数据。图 1 给出了整体概览。
┌──────────────────────────────────────────────────────────────────────┐
│ SkillSynth 管线 │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌────────────┐ ┌────────┐ │
│ │ §3.1 │ │ §3.2 │ │ §3.3 │ │ §3.4 │ │
│ │ 技能子图 │───→│ 图谱引导 │───→│ 轨迹合成 │──→│ 拓扑感 │ │
│ │ 采样 │ │ 任务生成 │ │ + 验证 │ │ 知过滤 │ │
│ └──────┬──────┘ └──────┬──────┘ └─────┬──────┘ └───┬────┘ │
│ │ │ │ │ │
│ SkillNet 任务规格 轨迹数据 SkillTerminal│
│ 15万+技能 (指令、环境、 (多轮交互) -Corpus │
│ 4种关系类型 测试) (已过滤) │
└──────────────────────────────────────────────────────────────────────┘
图 1. SkillSynth 管线概览。真实世界的技能图谱拓扑指导了从采样到过滤的每个阶段。
3.1 技能子图采样
第一阶段从 SkillNet 的完整图 G = (V, E) 中提取与终端相关的技能及其关系上下文,其中 V 为 15万+ 技能节点集合,E 为类型化边集合。
终端领域过滤。 我们定义一组终端相关类别 C_term = {开发、运维、安全、数据处理、科学计算、系统管理、…},执行初始过滤:
V_term = { v ∈ V | category(v) ∩ C_term ≠ ∅ }
这产生约 45K 候选技能。我们通过关键词过滤和基于嵌入的过滤进一步精炼,识别涉及命令行交互的技能,保留约 18K 个终端特定技能。
关系上下文扩展。 对于每个保留的技能 v ∈ V_term,我们扩展包含其在原始图中的 k 跳邻域,保留关系上下文:
V_expanded = V_term ∪ { u | ∃ path(v, u) in G 且 |path| ≤ k, v ∈ V_term }
默认设置 k = 2,这能捕获直接的依赖和组合关系,同时保持子图的可处理性。所得终端技能子图 G_term = (V_expanded, E_term) 包含约 25K 个技能和约 120K 条边。
聚类识别。 我们在 G_term 上应用社区检测算法(Louvain 算法)来识别自然的技能簇。每个簇 C_i 代表一个连贯的功能领域(如”Kubernetes 管理”、“Python 数据科学管线”、“网络安全分析”)。我们识别出 150+ 个不同规模的簇。
3.2 图谱引导的任务生成
SkillSynth 的核心创新在于利用图谱拓扑结构生成具有原则性复杂度控制的任务。我们基于不同的图遍历模式定义了三种互补的任务生成策略。
3.2.1 依赖链任务(顺序复杂度)
我们沿 depend_on 边采样有向路径,生成需要顺序满足前置条件的任务:
算法 1:依赖链任务生成
输入:G_term,目标深度 d,领域过滤器 f
输出:任务规格 T
1: root ← sample_skill(V_term, filter=f)
2: chain ← [root]
3: for i = 1 to d:
4: candidates ← {u | (chain[-1], u) ∈ E_depend}
5: if candidates = ∅: break
6: chain.append(sample(candidates))
7: T.skills ← chain
8: T.instruction ← LLM_generate(
prompt=CHAIN_TEMPLATE,
skill_descriptions=[s.description for s in chain],
dependency_order=chain
)
9: return T
复杂度控制。 深度参数 d 直接控制任务难度:
- d = 1:单技能原子任务(如”安装包 X”)
- d = 2–3:具有依赖关系的多步骤任务(如”配置数据库,然后搭建连接该数据库的 Web 服务器”)
- d = 4+:复杂工作流任务(如”搭建包含构建、测试、部署和监控阶段的 CI/CD 管线”)
3.2.2 组合树任务(并行复杂度)
我们采样 compose_with 子图,生成需要并行编排多个工具的任务:
算法 2:组合树任务生成
输入:G_term,目标宽度 b,目标深度 d
输出:任务规格 T
1: root ← sample_skill(V_term)
2: tree ← BFS_expand(root, E_compose, max_breadth=b, max_depth=d)
3: T.skills ← tree.nodes()
4: T.composition_pattern ← extract_dataflow(tree)
5: T.instruction ← LLM_generate(
prompt=COMPOSE_TEMPLATE,
skill_tree=tree,
dataflow=T.composition_pattern
)
6: return T
这会产生多个工具的输出相互馈送的任务,例如”解析日志文件(awk/grep)→ 汇总统计(Python)→ 生成可视化(gnuplot)→ 作为 Web 仪表板提供服务(nginx)。“
3.2.3 跨簇桥接任务(迁移复杂度)
我们利用连接远距离簇的 similar_to 边来生成迁移任务:
算法 3:跨簇桥接任务生成
输入:G_term,簇集合 {C_1, ..., C_n}
输出:任务规格 T
1: (C_i, C_j) ← sample_distant_cluster_pair()
2: bridge_edges ← {(u,v) ∈ E_similar | u ∈ C_i, v ∈ C_j}
3: (s_source, s_target) ← sample(bridge_edges)
4: T.skills ← {s_source, s_target} ∪ context_skills(s_source) ∪ context_skills(s_target)
5: T.instruction ← LLM_generate(
prompt=BRIDGE_TEMPLATE,
source_skill=s_source,
target_skill=s_target,
analogy=extract_analogy(s_source, s_target)
)
6: return T
这类任务要求将一个领域的技术应用于另一个领域中结构相似的问题,例如”将网络安全中的异常检测管线应用于识别科学传感器数据中的异常值。“
3.2.4 难度校准
我们为每个生成的任务定义图谱衍生的难度评分:
difficulty(T) = α · dep_depth(T) + β · comp_width(T) + γ · cluster_span(T) + δ · tool_count(T)
其中 dep_depth 为最长依赖链,comp_width 为最大组合扇出,cluster_span 为涉及的不同簇数量,tool_count 为所需的唯一命令行工具数量。系数(α, β, γ, δ)根据 200 个任务的人工难度标注进行校准。
课程分布。 我们目标的难度分布匹配 Terminal-Bench 统计特征:20% 容易(Level 1)、35% 中等(Level 2)、30% 困难(Level 3)、15% 专家级(Level 4)。
3.3 环境锚定的轨迹合成
§3.2 中的每个任务规格 T 必须被实例化为具有可验证成功标准的可执行环境。
3.3.1 环境构造
对于每个任务 T,我们生成:
-
Dockerfile:指定操作系统基础镜像、所需包、命令行工具和初始状态。我们维护了一个按技能簇组织的 200+ 可复用环境模板库。
-
instruction.md:自然语言任务描述,使用绝对路径,避免解题提示。
-
test.py / test.sh:自动化验证脚本,通过基于结果的断言检查任务完成情况(文件存在性、内容匹配、服务健康检查、输出验证)。
-
solve.sh:作为参考答案的参考解决方案。
环境构造本身借助 LLM 辅助:给定任务规格中的技能描述和组合模式,我们提示强模型(GPT-5)生成完整的环境包。每个生成的环境经过自动化验证:(a) Docker 镜像必须成功构建,(b) 参考解决方案必须通过所有测试,(c) 哨兵检查确保测试不会在没有解决方案的情况下平凡通过。
3.3.2 教师模型轨迹生成
我们采用多策略轨迹生成方法:
策略 A:专家模型展开。 一个强教师模型(GPT-5 / Claude Opus 4.6)在 Docker 环境中通过多轮交互解决每个任务。我们使用拒绝采样收集成功的轨迹(仅保留所有测试通过的轨迹)。
策略 B:纠错轨迹。 遵循 TermiGen 的洞察,我们首先让一个较弱的模型(Qwen3-14B)尝试任务,然后由强教师分析失败并纠正。这产生了有价值的”调试修复”训练信号。
策略 C:多智能体协作轨迹。 一个规划智能体分解任务,一个执行智能体运行命令,一个验证智能体检查中间结果。多智能体轨迹随后通过反思内化被蒸馏为单智能体轨迹(参照 Wang et al., 2026 的方法论)。
对于每个任务,我们使用策略混合(60% A、20% B、20% C)生成 N = 5 条轨迹,仅保留通过验证的轨迹。
3.3.3 轨迹格式
每条轨迹以结构化的多轮格式存储:
{
"task_id": "devops/k8s/pod-debug-003",
"instruction": "...",
"skill_annotation": {
"skills": ["kubernetes_pod_management", "log_analysis", "resource_tuning"],
"graph_path": "depend_on(k8s_basics → pod_management) + compose_with(log_analysis)",
"difficulty": 2.7,
"cluster_ids": [12, 15]
},
"trajectory": [
{"role": "assistant", "content": "<think>...</think>\n<action>kubectl describe pod ...</action>"},
{"role": "environment", "content": "<observation>...</observation>"},
...
],
"verified": true,
"strategy": "expert_rollout"
}
3.4 拓扑感知的质量过滤
最终阶段利用技能图谱确保语料库的高质量和良好分布。
3.4.1 技能覆盖矩阵
我们构建覆盖矩阵 M ∈ R^{|簇| × |难度级别|},其中 M[i,j] 统计簇 i 在难度级别 j 上的已验证任务数。我们定义覆盖度评分:
coverage(Corpus) = 1 - (count(M[i,j] = 0) / |M|)
我们迭代地为 M[i,j] < 阈值的单元格生成额外任务,直到覆盖度超过 90%。
3.4.2 去重与多样性
我们应用三级去重:
- 结构去重:具有相同技能集和图路径的任务被合并。
- 语义去重:基于嵌入的相似度(阈值 0.92)去除释义重复。
- 解决方案去重:参考解决方案命令重叠超过 80% 的任务被裁剪至最具区分性的变体。
3.4.3 质量评分
受 SkillNet 五维评估框架的启发,我们对每个任务-轨迹对进行以下维度评分:
- 完整性:任务描述是否完整指定了目标?(LLM 评判)
- 可执行性:环境是否可构建?参考解决方案是否通过?(自动化)
- 轨迹质量:轨迹是否高效且具有教学价值?(LLM 评判)
- 技能对齐度:轨迹是否确实使用了标注的技能?(基于图谱验证)
在任何维度上评分低于阈值的任务被移除。最终语料库保留了约 70% 的生成候选。
4 SkillTerminal-Corpus:数据集统计
应用 SkillSynth 管线产出 SkillTerminal-Corpus,其统计信息总结如下。
4.1 规模与覆盖度
| 统计指标 | 数值 |
|---|---|
| 已验证任务总数 | 12,247 |
| 智能体轨迹总数 | 52,680 |
| 覆盖的唯一命令行工具 | 423 |
| 领域类别 | 15 |
| 代表的技能簇 | 147 / 153 (96.1%) |
| 平均依赖深度 | 2.4 |
| 平均组合宽度 | 3.1 |
| 平均轨迹长度 | 12.3 轮 / 7,840 tokens |
| 环境构建成功率 | 89.2% |
| 参考解决方案通过率 | 94.7% |
| 轨迹验证通过率 | 68.3% |
4.2 领域分布
| 领域 | 任务数 | 轨迹数 | 平均难度 | 唯一工具 |
|---|---|---|---|---|
| 系统管理 | 1,842 | 7,936 | 2.1 | 68 |
| 运维与容器 | 1,534 | 6,612 | 2.5 | 52 |
| 软件开发 | 1,421 | 6,108 | 2.3 | 74 |
| 数据处理与 ETL | 1,203 | 5,174 | 2.0 | 41 |
| 网络与安全 | 1,067 | 4,588 | 2.8 | 56 |
| 科学计算 | 982 | 4,223 | 2.7 | 38 |
| 机器学习与 MLOps | 876 | 3,767 | 2.6 | 35 |
| 编译与构建系统 | 754 | 3,243 | 2.4 | 29 |
| 数据库管理 | 712 | 3,062 | 2.2 | 22 |
| Web 服务与 API | 623 | 2,679 | 2.1 | 31 |
| 分布式计算 | 421 | 1,810 | 3.2 | 19 |
| 形式化验证 | 243 | 1,045 | 3.5 | 12 |
| 交互式环境 | 218 | 937 | 2.3 | 16 |
| 多媒体处理 | 186 | 800 | 2.0 | 18 |
| 其他 | 165 | 696 | 1.8 | 12 |
4.3 与现有语料库的对比
| 语料库 | 任务数 | 轨迹数 | 领域 | 工具 | 图谱引导 | 已验证 |
|---|---|---|---|---|---|---|
| Terminal-Corpus (Nemotron) | ~35K | ~35K | 11 | 420+ | ✗ | 部分 |
| TermiGen | 3,500+ | ~10K | 11 | 420+ | ✗ | ✓ |
| SWE-smith | 50K+ | 26K | 1 (SWE) | — | ✗ | ✓ |
| R2E-Gym | 8,100+ | 3,231 | 1 (SWE) | — | ✗ | ✓ |
| SkillTerminal-Corpus | 12,247 | 52,680 | 15 | 423 | ✓ | ✓ |
SkillTerminal-Corpus 在原始任务数量上小于 Terminal-Corpus,但在已验证轨迹、领域覆盖和组合复杂度方面有实质性优势。关键的是,我们语料库中的每个任务都标注了技能出处的图谱信息,支持下游应用如技能感知的课程学习。
5 实验
5.1 实验设置
基准测试。 我们在两个主要基准上进行评估:
- Terminal-Bench 2.0(Merrill et al., 2026):89 个高难度终端任务,Docker 沙箱执行,通过 Harbor 框架评估。指标:任务完成准确率(%)。
- Terminal-Bench Pro(Wang et al., 2025):200 个公开任务,涵盖 8 个领域,每个任务约 28.3 个测试用例。指标:任务完成准确率(%)。
基础模型。 我们在三个规模上训练模型:
- Qwen3-8B(80 亿参数)
- Qwen3-14B(140 亿参数)
- Qwen3-32B(320 亿参数)
所有模型均从与 Nemotron-Terminal 相同的 Qwen3 基础检查点初始化,以确保公平比较。
训练协议。
- SFT 阶段:我们在 SkillTerminal-Corpus 轨迹上使用标准的下一个 token 预测进行微调,并采用环境 token 掩码(仅在助手轮次上计算损失)。训练使用 4 个 epoch,学习率 1e-5 余弦衰减,批量大小 128,最大序列长度 32K tokens。
- 可选 RL 阶段:对于最强模型,我们在 2,000 个留出的环境上额外应用 GRPO,使用二值测试通过奖励。
基线方法。 我们与以下方法对比:
- 基础模型:无终端特定训练的 Qwen3-{8B,14B,32B}。
- Nemotron-Terminal-{8B,14B,32B}(Pi et al., 2026):基于 Terminal-Corpus 和技能驱动合成训练。
- TermiGen-32B:基于 TermiGen 的 3,500+ 环境训练。
- Skill-Flat:我们的消融基线——相同管线但将图谱引导生成替换为 LLM 枚举技能(模拟 Nemotron 方法),保持所有其他组件不变。
- Random-Graph:我们的消融——在技能图谱上进行随机游走(忽略边类型),以控制图结构 vs. 类型化关系的贡献。
5.2 主要结果
表 1. Terminal-Bench 2.0 和 Terminal-Bench Pro 上的任务完成准确率(%)。
| 模型 | 训练数据 | TB 2.0 | TB Pro |
|---|---|---|---|
| 闭源模型(仅供参考) | |||
| Forge Code + Gemini 3.1 Pro | — | 78.4 | — |
| Simple Codex + GPT-5.3 | — | 75.1 | — |
| 开源 8B | |||
| Qwen3-8B(基础) | — | 2.5 | 1.8 |
| Nemotron-Terminal-8B | Terminal-Corpus | 13.0 | 10.2 |
| SkillSynth-8B | SkillTerminal-Corpus | 15.7 | 12.8 |
| 开源 14B | |||
| Qwen3-14B(基础) | — | 4.0 | 2.9 |
| Nemotron-Terminal-14B | Terminal-Corpus | 20.2 | 16.1 |
| SkillSynth-14B | SkillTerminal-Corpus | 23.6 | 19.4 |
| 开源 32B | |||
| Qwen3-32B(基础) | — | 3.4 | 2.5 |
| TermiGen-32B | TermiGen 环境 | 18.0 | 14.3 |
| Nemotron-Terminal-32B | Terminal-Corpus | 27.4 | 22.1 |
| SkillSynth-32B(仅 SFT) | SkillTerminal-Corpus | 31.2 | 25.8 |
| SkillSynth-32B(SFT+RL) | SkillTerminal-Corpus | 34.8 | 28.5 |
关键观察:
(1) 各规模一致提升。 SkillSynth 模型在每个模型规模上都优于对应的 Nemotron-Terminal:在 TB 2.0 上分别 +2.7%(8B)、+3.4%(14B)、+3.8%(32B),且更大规模的增益更显著。
(2) 数据效率。 SkillTerminal-Corpus 仅包含约 12K 任务,而 Nemotron 约 35K(约 3 倍之差),却取得了更高的性能。这证明了图谱引导的质量胜过蛮力堆叠数量。
(3) RL 进一步放大增益。 添加基于测试通过奖励的 GRPO 训练额外提供了 +3.6% 的 TB 2.0 提升,表明图谱结构化的训练数据为 RL 提供了更好的初始化。
(4) 在更难任务上增益更大。 按难度层级分析 TB 2.0 结果,SkillSynth-32B 相对于 Nemotron-32B 的优势从简单任务的 +1.2% 增长到困难任务的 +6.8%,确认了训练数据中的组合复杂度对组合性复杂的评估任务获益最大。
5.3 消融实验
表 2. Terminal-Bench 2.0 上的消融结果(32B 模型,仅 SFT)。
| 配置 | TB 2.0 | 相对完整版 Δ | 平均依赖深度 | 平均组合宽度 | 覆盖度 |
|---|---|---|---|---|---|
| SkillSynth(完整) | 31.2 | — | 2.4 | 3.1 | 96.1% |
| − 拓扑感知过滤 | 29.1 | −2.1 | 2.4 | 3.1 | 82.3% |
| − 跨簇桥接任务 | 29.8 | −1.4 | 2.3 | 2.8 | 89.4% |
| − 组合树任务 | 28.4 | −2.8 | 2.4 | 1.4 | 91.2% |
| − 依赖链任务 | 27.9 | −3.3 | 1.1 | 3.0 | 90.8% |
| Skill-Flat(无图谱) | 26.8 | −4.4 | 1.0 | 1.3 | 71.5% |
| Random-Graph(无类型游走) | 28.1 | −3.1 | 1.8 | 2.1 | 84.7% |
关键发现:
(1) 依赖链是最具影响力的组件(移除后 −3.3%),其次是组合树(−2.8%)。这确认了显式的关系结构是性能提升的主要驱动力。
(2) 类型化关系很重要。 Random-Graph(在图上游走但忽略边类型)仅达到 28.1%,显著低于完整系统(31.2%),证明关系的语义(而非仅仅图连通性)是核心。
(3) Skill-Flat 等价于 Nemotron 范式。 我们对 LLM 枚举技能方法的控制复现(26.8%)与 Nemotron-Terminal-32B(27.4%)接近,验证了实验设置的有效性。Skill-Flat 与 SkillSynth 之间 +4.4% 的差距隔离了图谱引导生成的贡献。
(4) 拓扑感知过滤贡献 +2.1%。 确保在技能矩阵上的覆盖消除了否则会降低性能的领域级盲区。
5.4 分析
5.4.1 组合复杂度分析
我们从两个维度衡量生成任务的组合复杂度:依赖深度(最长 depend_on 链的长度)和组合宽度(最大 compose_with 扇出)。
| 方法 | 平均依赖深度 | 平均组合宽度 | 多工具任务占比 | 跨域任务占比 |
|---|---|---|---|---|
| Nemotron 技能驱动 | 1.0 | 1.3 | 34.2% | 8.1% |
| SkillSynth | 2.4 | 3.1 | 78.6% | 31.4% |
| 倍率 | 2.4× | 2.4× | 2.3× | 3.9× |
SkillSynth 产生的任务平均组合复杂度高 2.3 倍,跨域任务多 3.9 倍——恰恰是扁平技能枚举方法服务不足的类别。
5.4.2 技能覆盖度分析
我们通过将每个基准任务映射到 SkillNet 中最近的技能簇来评估覆盖度,并检查训练语料库是否包含该簇的任务。
| 方法 | 至少有1个任务的簇 | 至少有5个任务的簇 | 覆盖度评分 |
|---|---|---|---|
| Nemotron 技能驱动 | 89 / 153 (58.2%) | 62 / 153 (40.5%) | 58.2% |
| SkillSynth | 147 / 153 (96.1%) | 128 / 153 (83.7%) | 96.1% |
§3.4 中的拓扑感知过滤确保了近乎完整的覆盖,而 LLM 枚举的技能遗漏了 41.8% 的簇——其中许多对应于出现在基准任务中的专业领域(分布式计算、形式化验证、科学模拟)。
5.4.3 定性案例
案例 1(依赖链,Level 3): “搭建一个自定义配置的 PostgreSQL 数据库,创建一个连接该数据库的 Python Flask API,配置 nginx 作为反向代理,并编写 systemd 服务文件确保该技术栈在启动时自动运行。通过 curl 健康检查端点进行验证。”
图路径:linux_basics →[depend_on] postgres_admin →[depend_on] flask_development →[compose_with] nginx_config →[compose_with] systemd_management
此任务要求 5 个不同技能按严格的依赖顺序使用——这是 Nemotron 的扁平枚举方法不太可能产生的模式。
案例 2(跨簇桥接,Level 4): “将通常用于生物信息学序列比对的并行处理管线(使用 GNU parallel + BLAST)改编为对 50 个服务器日志文件进行分布式日志分析,识别跨主机的关联异常模式。”
桥接:bioinformatics_alignment ←[similar_to]→ distributed_log_analysis
此任务利用两个远距离领域之间的结构相似性,测试模型的迁移能力——这种能力无法从单领域技能枚举中涌现。
5.4.4 训练动态
我们观察到,基于 SkillSynth 数据训练的模型在早期训练阶段(前 2 个 epoch)收敛更快,但持续改进到第 4 个 epoch,而基于扁平技能数据训练的模型在第 2 个 epoch 后趋于停滞。我们将此归因于组合复杂任务提供了更丰富的梯度信号,每个训练步骤提供了更多信息的错误反馈。
6 讨论
6.1 图谱结构为何有效
我们的结果表明,真实技能图谱的结构为数据合成提供了三个独特优势:
-
分布保真度:真实技能反映了实际的能力景观,包括 LLM 在生成的分类体系中代表不足的长尾专业工具和领域。
-
组合脚手架:显式的关系类型(
depend_on、compose_with)提供了生成多步骤任务的原则性机制,避免了基于枚举方法的”扁平任务”问题。 -
覆盖度保证:图谱的簇结构使得系统性的覆盖监控成为可能,确保不会遗漏重要的技能领域——这是非结构化生成无法保证的特性。
6.2 可扩展性与泛化
SkillSynth 不仅限于终端智能体。该框架可以泛化到任何存在结构化技能图谱的领域。随着 SkillNet 持续增长(目前 20万+ 技能涵盖 10 大类别),SkillSynth 可以通过简单更改 §3.1 中的领域过滤器,应用于 Web 智能体、编程智能体、科学计算智能体和其他智能体领域。
6.3 与课程学习的关系
图谱衍生的难度评分(§3.2.4)天然支持课程学习。在初步实验中,按难度排序的课程训练(从易到难)相比随机排序额外提供了 +1.2% 的改进,但我们将课程策略的系统研究留待未来工作。
7 局限性
我们承认本工作的若干局限性:
对 SkillNet 质量的依赖。 SkillSynth 的有效性受限于底层技能图谱的质量和覆盖度。虽然 SkillNet 是目前最大的可用技能基础设施(15万+ 经策展技能),但它可能仍然不足以代表高度专业化或新兴的技术领域。随着 SkillNet 的发展,SkillSynth 的覆盖度将相应提升。
环境构造成本。 Docker 环境生成步骤(§3.3.1)是最昂贵的组件,约 10.8% 的生成环境构建失败。虽然我们的模板库缓解了这一问题,但针对任意技能组合的全自动环境构造仍然是一个开放挑战。
评估范围。 我们在 Terminal-Bench 2.0 和 Terminal-Bench Pro 上进行评估,这两个基准仅限英语且主要面向 Linux。在其他操作系统(Windows、macOS)和多语言环境下的性能尚未探索。
图遍历启发式。 我们的图遍历算法(§3.2)使用手工设计的遍历策略。学习最优的遍历策略(例如通过在图上进行强化学习)可能进一步提升任务质量,但留待未来工作。
RL 中的奖励黑客风险。 虽然我们展示了 SkillSynth 数据为 GRPO 训练提供了更好的起点,但 RL 阶段仍可能对测试通过信号存在奖励黑客风险。融入来自技能图谱的更丰富奖励信号(例如技能感知的奖励模型)是一个有前景的方向。
8 结论
本文提出了 SkillSynth,一个利用真实世界技能知识图谱拓扑结构来为终端智能体生成高质量训练数据的数据合成框架。通过将合成过程锚定于 SkillNet——一个包含 15万+ 经策展技能且具有丰富关系结构的基础设施——SkillSynth 解决了现有 LLM 枚举技能分类体系的三个根本性局限:人工技能定义、组合复杂度不足和覆盖盲区。
我们的四阶段管线——技能子图采样、图谱引导的任务生成、环境锚定的轨迹合成和拓扑感知的质量过滤——通过原则性算法将图谱拓扑转化为可控的任务复杂度。所得 SkillTerminal-Corpus(12K 任务、52K+ 轨迹、15 个领域、420+ 工具)使开源模型达到了新的最优性能:SkillSynth-32B 在 TB 2.0 上达到 31.2%(以仅 1/3 的数据量超越 Nemotron-Terminal-32B 的 27.4%),结合 RL 训练后进一步达到 34.8%。
我们的工作揭示了一个更广泛的原则:在为复杂的智能体任务合成训练数据时,将生成过程锚定于真实世界的知识结构所产生的结果从根本上优于依赖 LLM 自身知识来定义任务空间。 随着技能知识图谱在规模和覆盖度上的增长,我们预计图谱引导的数据合成将成为智能体训练管线中不可或缺的组成部分。
可复现性声明
我们发布以下资源以支持可复现性:
- SkillTerminal-Corpus:完整的 12,247 个已验证任务和 52,680 条轨迹的数据集,包含所有技能标注和图谱出处元数据。
- SkillSynth 管线:完整的数据生成代码库,包括图采样、任务生成、环境构造和质量过滤模块。
- 训练模型:SkillSynth-{8B, 14B, 32B} 的模型权重,包含仅 SFT 和 SFT+RL 变体。
- 评估脚本:通过 Harbor 框架复现所有 Terminal-Bench 2.0 和 Terminal-Bench Pro 结果的配置。
所有资源可在以下地址获取:https://github.com/[anonymous]/SkillSynth(为审稿匿名化)。
伦理声明
我们的工作涉及合成终端命令,其中可能包括系统管理操作(如包安装、服务管理)。所有轨迹合成均在隔离的 Docker 容器中进行,无法访问外部网络或宿主系统。我们设置了安全过滤器,标记并删除涉及明显破坏性操作的任务(如 rm -rf /、无安全措施的 DROP DATABASE)。SkillTerminal-Corpus 面向研究用途设计;基于此数据训练的部署智能体应结合适合其部署环境的额外安全机制。
致谢
[审稿后添加]
参考文献
Agentica. (2025). DeepSWE: A 32B Software Engineering Agent Trained with Purely RL. HuggingFace: agentica-org/DeepSWE-Preview.
Hogan, A., Blomqvist, E., Cochez, M., d’Amato, C., de Melo, G., Gutierrez, C., … & Zimmermann, A. (2021). Knowledge graphs. ACM Computing Surveys, 54(4), 1–37.
Jain, N., Singh, J., et al. (2025). R2E-Gym: Procedural Environment Generation and Hybrid Verifiers for Scaling Open-Weights SWE Agents. COLM 2025. arXiv:2504.07164.
Jimenez, C. E., Yang, J., Wettig, A., Yao, S., Pei, K., Press, O., & Narasimhan, K. (2024). SWE-bench: Can Language Models Resolve Real-World GitHub Issues? ICLR 2024. arXiv:2310.06770.
Liang, Y., Zhong, R., Xu, H., Jiang, C., et al. (2026). SkillNet: Create, Evaluate, and Connect AI Skills. arXiv:2603.04448.
Merrill, M. A., et al. (2026). Terminal-Bench: Benchmarking Agents on Hard, Realistic Tasks in Command Line Interfaces. arXiv:2601.11868.
OpenAI. (2024). Introducing SWE-bench Verified. OpenAI Blog.
Pan, J., Wang, X., et al. (2025). Training Software Engineering Agents and Verifiers with SWE-Gym. ICML 2025. arXiv:2412.21139.
Pi, R., Lam, G., Shoeybi, M., Jannaty, P., Catanzaro, B., & Ping, W. (2026). On Data Engineering for Scaling LLM Terminal Capabilities. arXiv:2602.21193.
Shinn, N., Cassano, F., Gopinath, A., Narasimhan, K., & Yao, S. (2023). Reflexion: Language Agents with Verbal Reinforcement Learning. NeurIPS 2023.
Song, H., Sun, S., et al. (2026). SWE-Master: Unleashing the Potential of Software Engineering Agents via Post-Training. arXiv:2602.03411.
Sun, S., Song, H., et al. (2026). SWE-World: Building Software Engineering Agents in Docker-Free Environments. arXiv:2602.03419.
Wang, G., Xie, Y., Jiang, Y., Mandlekar, A., Xiao, C., Zhu, Y., Fan, L., & Anandkumar, A. (2023). Voyager: An Open-Ended Embodied Agent with Large Language Models. arXiv:2305.16291.
Wang, W., et al. (2025). Let It Flow: Agentic Crafting on Rock and Roll. arXiv:2512.24873.
Wang, Y., Kordi, Y., Mishra, S., Liu, A., Smith, N. A., Khashabi, D., & Hajishirzi, H. (2023b). Self-Instruct: Aligning Language Models with Self-Generated Instructions. ACL 2023.
Wang, Z., et al. (2026). Multi-Agent Trajectory Synthesis via Reflective Internalization. arXiv:2602.23716.
Xu, C., Sun, Q., Zheng, K., Geng, X., Zhao, P., Feng, J., Tao, C., & Jiang, D. (2024). WizardLM: Empowering Large Language Models to Follow Complex Instructions. ICLR 2024.
Yang, J., et al. (2025). SWE-smith: Scaling Data for Software Engineering Agents. arXiv:2504.21798.
Zan, D., et al. (2025). Multi-SWE-bench: A Multilingual Benchmark for Issue Resolving. arXiv:2504.02605.
Zhang, Y., et al. (2025). SWE-bench Goes Live! NeurIPS 2025 D&B. arXiv:2505.23419.
Zhao, A., Huang, D., Xu, Q., Lin, M., Liu, Y.-J., & Huang, G. (2024). ExpeL: LLM Agents Are Experiential Learners. AAAI 2024.
附录
A 图遍历参数详情
A.1 依赖链采样参数
| 参数 | 取值 | 理由 |
|---|---|---|
| 最大链深度 | 6 | SkillNet depend_on 路径的第 95 百分位 |
| 最小链深度 | 1 | 用于课程预热的原子任务 |
| 采样温度 | 0.8 | 平衡多样性与连贯性 |
| 领域约束 | 必需 | 至少一个技能须匹配领域过滤器 |
A.2 组合树采样参数
| 参数 | 取值 | 理由 |
|---|---|---|
| 最大宽度 | 5 | 工具编排的实际上限 |
| 最大深度 | 3 | 避免过度嵌套的组合 |
| 必需边数 | ≥ 2 条 compose_with | 确保真正的组合 |
A.3 跨簇桥接参数
| 参数 | 取值 | 理由 |
|---|---|---|
| 最小簇距离 | 3 跳 | 确保非平凡的迁移 |
| 每对簇的最大桥接数 | 5 | 防止过度代表 |
| 类比质量阈值 | 0.7 | LLM 评判的类比连贯性分数 |
B 环境模板库
我们维护了 217 个按技能簇组织的可复用 Docker 环境模板:
| 类别 | 模板数 | 基础镜像 |
|---|---|---|
| Python 开发 | 42 | python:3.11-slim, python:3.12 |
| 系统管理 | 38 | ubuntu:22.04, debian:12 |
| 运维与容器 | 31 | docker:dind, k3s |
| 数据库 | 24 | postgres:16, mysql:8, redis:7 |
| 科学计算 | 22 | jupyter/scipy-notebook |
| 网络与安全 | 19 | kalilinux/kali-rolling |
| Web 服务 | 18 | node:20, nginx:latest |
| 编译与构建 | 15 | gcc:13, rust:1.77 |
| 其他 | 8 | 各种 |
C 提示词模板
C.1 链式任务生成模板
你是一位终端任务设计专家。给定以下具有依赖关系的有序技能链,
设计一个真实的终端任务,要求按指定顺序使用所有技能。
## 技能链(必须按此顺序使用)
{skill_chain_with_descriptions}
## 依赖关系说明
{dependency_explanations}
## 任务设计要求
1. 任务必须完全通过终端命令完成
2. 使用绝对文件路径(如 /root/data/、/root/output/)
3. 描述要达成什么,而不是如何达成
4. 包含具体的、可验证的成功标准
5. 难度级别:{target_difficulty}
6. 预估完成时间:{estimated_time}
## 输出格式
请提供:instruction.md、Dockerfile、test.py、solve.sh
C.2 组合任务生成模板
你是一位终端任务设计专家。给定以下技能组合树,其中多个工具需要
协同工作且数据在它们之间流动,设计一个真实的多工具终端任务。
## 技能组合树
{skill_tree_visualization}
## 数据流模式
{dataflow_description}
## 任务设计要求
[与 C.1 相同,附加要求:]
7. 任务必须要求一个工具的输出作为另一个工具的输入
## 输出格式
请提供:instruction.md、Dockerfile、test.py、solve.sh
D 分领域完整基准结果
表 A1. Terminal-Bench Pro 分领域结果(SkillSynth-32B SFT+RL)。
| 领域 | 任务数 | SkillSynth-32B | Nemotron-32B | Δ |
|---|---|---|---|---|
| 数据处理 | 25 | 40.0 | 32.0 | +8.0 |
| 系统管理 | 25 | 36.0 | 28.0 | +8.0 |
| 软件工程 | 25 | 32.0 | 28.0 | +4.0 |
| 机器学习 | 25 | 28.0 | 20.0 | +8.0 |
| 科学计算 | 25 | 24.0 | 16.0 | +8.0 |
| 调试 | 25 | 28.0 | 24.0 | +4.0 |
| 安全 | 25 | 20.0 | 16.0 | +4.0 |
| 游戏 | 25 | 20.0 | 12.0 | +8.0 |
| 总计 | 200 | 28.5 | 22.1 | +6.4 |
最大的增益出现在最受益于组合性和跨域训练的领域:机器学习(+8.0)、科学计算(+8.0)和游戏(+8.0)——这些领域都需要编排多个专业化工具。
E SkillNet API 使用示例
我们通过其公开的 Python SDK 访问 SkillNet:
from skillnet import SkillNetClient
client = SkillNetClient()
# 搜索终端相关技能
results = client.search("kubernetes pod debugging", top_k=50)
# 获取技能关系
relations = client.get_relations(skill_id="k8s-pod-debug",
relation_types=["depend_on", "compose_with"])
# 下载技能详情
skill = client.download(skill_id="k8s-pod-debug")
print(skill.description)
print(skill.instructions)
print(skill.metadata)