桃子桃子快讯
返回首页
工具

Sigil:把 SKILL.md 编译成小模型也能跑得稳的 agent

Sigil 将 Markdown 写的 skill 编译为强类型、可执行的 agent 程序,让小模型也能忠实执行每一步…

2026.07.24 · 周五4 分钟阅读

Sigil 是一个面向 AI agent 的编译器,作者把它设计成「让 skill 从提示词变成源码」的桥梁:开发者仍然以熟悉的 SKILL.md 描述任务,Sigil 则把它编译成强类型、可直接运行的 agent 程序,让模型无法跳过步骤、无法忽略 MUST、也无法改写代码块。

解决的核心问题

在当前的 agent 框架里,skill 本质上是一段提示词,模型读完之后是否照做完全取决于它的服从度。前沿大模型大多数时候会照做,但小模型、本地模型常常漏步骤、自创顺序、忘记验证。作者认为,把 skill 当成源码而非提示词,才能把执行结构固化下来。

编译后的程序具有以下性质:

  • 每一步「必须做」变成执行流必须访问的节点,顺序即控制流;
  • 每一条「禁止」变成节点上的约束,运行路径不会触达;
  • skill 中的代码段会被落地为可执行的 tool body,agent 不能改写;
  • 验证步骤成为有类型的「门」(gate),输出明确通过/失败;
  • 模型判断只允许出现在 skill 显式留出的「by llm」槽位里。

两段式编译器架构

Sigil 采用经典编译器的前后端分离结构:

  • LIFT(前端):用 AI 把 SKILL.md 提取为 AG-IR(Agent Graph IR),所有「判断」集中在此阶段,受忠实性约束。
  • LOWER(后端):纯机械地把 AG-IR 转译为 Jac(OSP)源码,不做任何判断,保证确定性。

中间表示 AG-IR 是一个有类型的有向图,可以从四个角度读取:步骤流程图、控制流图、带类型的 carry 数据流、知识/工具驻留图。其原语分三大家族:Mind(GEN-RAW / GEN-FILL / GEN-ENUM / GEN-EDIT)由模型拥有;Boundary & Code(SENSE / ACT / CODE)由代码拥有;Flow(ROUTE / LOOP / CALL / SPAWN)则由两者协同。

LIFT 阶段:防止漂移的设计

LIFT 内部按「模型提议、代码裁定」原则组织,核心包括:

  • Spec loop:模型抽取候选规则,但每条规则必须能逐字对应到原文中的某段引文,否则被丢弃;三个覆盖度 critic 检查是否有义务被漏掉,代码审计则防止条件句被悄悄升级为 MUST。整个循环必须在 sound ∧ complete ∧ 无漂移时才退出。
  • 四视图脊柱:在冻结的 RuleSet 上为每个步骤生成 IO 流、Context 流、知识流和 HIL 流,四者并行写出,互不污染。
  • Gate battery:G1、G4、G5 等一组门控必须全部通过才能落盘。G4 是「编译预言机」:把候选 IR 完整跑一遍后端与 Jac 类型检查,得到手写 skill 没有的确定性真值;G5 STRUCT-COV 则核对编译产物是否兑现了所有硬性要求。任何门控失败都会抛错,Sigil 拒绝持久化一份不忠实的 skill。

LOWER 阶段:纯机械转译

LOWER 端只做一件事:把写好的 AG-IR 转译为 Jac(OSP)源码。由于每个 AG-IR 原语只有一种 lowering 路径,后端是纯函数级别的转换,没有自由发挥空间。最终产出的 agent.jac 可以搭配任意模型运行,作者示例中使用了本地 qwen3:8b 来演示小模型同样能跑出稳定的执行流。

整体来看,Sigil 试图回答一个具体工程问题:如何让 skill 在弱模型上也跑得稳。它没有提出新模型或新训练方法,而是把「纪律」从模型迁移到了 harness 本身。

信源