精读:Compile by Training —— 把提示词编译成本地权重
用教师模型从自然语言规格合成监督数据,微调一个 LoRA 适配器,得到可离线反复调用的本地神经函数
1 论文概览
一句话总结:把自然语言规格当成源代码,用教师模型合成一批样例、微调一个 LoRA 适配器,编译出可离线反复调用的本地神经函数——大模型由此从运行时依赖降级为构建期依赖。
核心问题
数据管道里有大量这样的文本函数:邮件分级(「Signature needed by EOD」→ immediate,newsletter → wait)、arXiv ID 抽取、工单路由、字段归一化。它们描述起来只要一句话,写成正则却要处理几十种边界,于是工程上最常见的做法是每行调一次大模型。这条路的代价是网络延迟、按量计费、供应商绑定,而且调用量越大越贵。
论文盯住的是夹在中间的一类需求:太模糊,规则写不住;太窄太频繁,不值得每次都付一次大模型调用的钱。
主要贡献
- 提出 compile by training 两阶段流程:教师模型从规格合成监督数据,梯度下降把这些数据结构化进一个共享解释器上的轻量适配器。
- 把「编译」落到可版本化的工件上:产物
.paw打包了适配器、运行时 scaffold、原始规格与解释器元数据,可以像普通软件一样存储、缓存、复用。 - 在工程上把分钟级编译做成交互式体验:教师合成与训练重叠执行、作业队列与教师输出缓存、编译作为后台任务持久化。
- 给出真实部署证据:30 个编译程序支撑 4 个站点的问答助手、一个语言控制的 3D 头像、一个英–Claudish 双向翻译服务(公开上线 11 天完成 100,747 次请求)。
基本信息
| 项 | 内容 |
|---|---|
| 论文 | Compile by Training: Turning Natural-Language Specifications into Local Neural Functions |
| 作者 | Yuntian Deng、Pengyu Nie(University of Waterloo)、Stuart Shieber(Harvard University) |
| arXiv | 2609.04199 [cs.CL] |
| 提交 | 2026-09-03 |
| 去向 | EMNLP 2026 System Demonstrations |
| 前作 | Program-as-Weights (PAW),arXiv:2607.02512 |
2 方法详解
架构:Compile / Run 两段式
系统对外只暴露两个动作:
—— §2 System Overview
是自然语言规格, 是编译产物, 是新输入。关键切分是构建期用教师,运行期不用教师:
Compilation is a hosted process: the function specification is sent to the PAW service and teacher APIs to generate supervision and train the program. By contrast, local SDK execution does not send future inputs to PAW or the teachers.
—— §2 System Overview
3.1 从规格到监督
规格本身不带标注数据。论文用一个教师(公开服务用两个)合成任务专属数据集 ,请求格式强制为 JSON,编译器逐批校验、丢弃畸形样本。合成的原始素材长这样:
Input: Check these papers: https://arxiv.org/pdf/2607.02512.pdf and https://arxiv.org/abs/2507.08800 . Output: [“2607.02512”]
—— §3.1 From Specification to Supervision
这条样例同时考了「要 /pdf/ 不要 /abs/」和「输出必须是数组」两件事,说明合成器确实在按规格构造判别性样本,而不是随便生成同义句。
3.2 特化与打包
给每个规格单独训一个全模型,存储和编译成本都不可接受。论文的做法是所有程序共享一个冻结的 Qwen3-0.6B 解释器,每个函数只提供两样东西:
all programs share a frozen Qwen3-0.6B interpreter, and each function is represented by a lightweight LoRA adapter and a run-time scaffold. Here, the scaffold is a compiler-generated prompt template that encodes the user’s free-form specification as structured task instructions and examples and leaves a placeholder for the run-time input.
—— §3.2 Specialization and Packaging
训练目标是标准的学生似然 。
这里有个容易被读漏的设计:适配器不是随机初始化的。PAW 的 amortized compiler(超网络)先一次性前向预测出 和 scaffold ,耗时秒级;compile by training 把它当起点,再投入额外算力做规格专属优化。概念上讲,这是把「一次性预测权重」降级成了「预测初始化」,属于对前作的一次精准再定位——前作的问题被重新表述为「初始化器精度不够」而不是「范式不行」。
公开配置(Finetuned Standard)见附录 Table 2:
| 组件 | 取值 |
|---|---|
| 解释器 | Qwen3-0.6B,量化本地运行时 |
| 教师 | GPT-5.4-mini : GPT-5.5 = 2:1 |
| 数据 | 2400 条唯一样本对,展开为 6400 条训练样本 |
| 优化 | batch 48,100 步,cosine 学习率衰减 |
| 适配器 | LoRA rank 64,alpha 16,超网络初始化 |
与基线方法的区别
| 维度 | 规则/代码 | 直接调用远程 LLM | PAW 快速编译器 | Compile by Training |
|---|---|---|---|---|
| 模糊语义 | 写不住 | 支持 | 支持 | 支持 |
| 单次调用成本 | 极低 | 高 | 低 | 低 |
| 编译耗时 | — | 0 | 3.5 秒 | 50.9 秒 |
| FuzzyBench-Hard LEM | — | 未测 | 0.224 | 0.836 |
| 运行期依赖外部服务 | 否 | 是 | 否 | 否 |
真正的对照系是 PAW 的 amortized compiler:两者共用同一套程序格式与运行时接口,差别只在编译期投多少算力。这条设计让「秒级 vs 分钟级」成为一个可调的档位,而不是两套互不相容的系统。
流式编译:工程上最有信息量的部分
朴素实现是先等教师把所有样本生成完,再加载模型训练——GPU 会在等待最慢的那批教师请求时空转。论文的部署版本让三件事并发启动,训练一旦凑够第一个 batch 就开始,只在追上合成进度时才阻塞;调度器把后到的样本优先补进前面 batch 还缺的槽位,且不改变已确定样本的 prescribed 训练顺序。
依据很直接:教师合成比单个训练步慢得多、方差也大得多,把它挪出关键路径就能省下大部分墙钟时间。
3 实验结果
主要指标
评测指标是 LEM(LLM Exact Match):由 LLM 裁判按规格判断预测是否语义正确。选中的 GPT-5.5 裁判对 128 条作者标注达到 0.977 准确率、Cohen’s =0.946;GPT-5.4-mini 为 0.938 / 0.858(附录 Table 3)。
核心结果(§5.2,Figure 4):
Compile by training improves mean LEM by 0.612 absolute, from 0.224 to 0.836. This improvement comes at the cost of longer compilation: 50.9 seconds, compared with 3.5 seconds for PAW’s fast amortized compiler.
—— §5.2 Does training improve correctness?
相对提升 3.73 倍,代价是编译时间 14.5 倍。
监督配置扫描(Table 1)
| 扫描维度 | 设置 | LEM |
|---|---|---|
| 教师混合 | 仅 GPT-5.4-mini(3600/0) | 0.746 |
| 教师混合 | 2:1 mini/GPT-5.5(2400/1200) | 0.851 |
| 数据规模 | 1440 条唯一样本对 | 0.821 |
| 数据规模 | 2400 条 | 0.836 |
| 数据规模 | 3600 条 | 0.836 |
| 数据规模 | 7200 条 | 0.866 |
延迟(§5.4)
冷编译(无教师输出缓存)同一条代表性规格:B300 上 50.9 秒,H200 上 68.2 秒,RTX GPU 上 99.2 秒。四作业并发压测:全部完成,平均排队等待 1.01 秒,worker 利用率均匀。
应用验证(§6)
- paw-helper:30 个编译程序,28 个参与线上路由,一个后端服务 4 个网站(第一作者个人站、Waterloo CS 486 课程站、NeuralOS、PAW 官网)。
- Avatar Director:44 条手写验证指令,43 条产出预期动作结构。
- Claudish 双向翻译:2026-08-22 至 09-02 完成 100,747 次成功翻译请求。
4 个人分析
亮点
一、抽象是对的,而且落到了具体构件上。「把提示词编译成权重」这句话很容易写成空头比喻。论文把它拆成了三件可操作的东西:冻结解释器(共享,不重复付钱)、LoRA 适配器(每函数一份,几 MB)、scaffold 提示词模板(把自由文本规格转成结构化指令 + 留好输入占位符)。这三者合起来才构成 .paw 工件,也才谈得上版本化和组合。
二、对前作的再定位很干净。 PAW 的超网络一次性预测权重,快但每个函数花的算力一样多。论文没有另起炉灶,而是把超网络的输出降级为初始化,再叠加规格专属优化。这个处理保留了前作的全部工程资产(程序格式、运行时、SDK),只在编译期加了一段。
三、真实部署给了 demo 论文少见的分量。 30 个编译程序上线服务 4 个站点、11 天 10 万次翻译请求,说明编译产物在真实流量下跑得住。demo track 论文能做到这一步的不多。
四、分工表述值得单独拎出来。 §6.1 那句话把整个架构的边界说清楚了:
compiled functions make fuzzy decisions, while ordinary code handles exact operations such as retrieval, caching, and branch control.
—— §6.1 Composing many compiled functions
模糊判定下沉到本地小模型,检索、缓存、分支控制留在确定性代码里。这比「编译」这个比喻本身更有迁移价值。
局限性
一、致命缺失:没有「直接问教师」这条基线。 论文的立论是「替代每次调用远程大模型」,可全篇没有测教师模型在 FuzzyBench-Hard 上的 LEM。0.836 是相对快速编译器(0.224)的增益,不是相对「直接调 GPT-5.5」的落差。若教师零样本直接做是 0.95,那么 0.836 意味着省下的调用费买的是 11 个点的准确率损失——这个交易的划算与否,恰恰是论文最该回答却没回答的问题。加上这点后,0.612 的绝对提升只是一个内部对照,不构成对替代方案的论证。
二、评测集是按基线失败条件筛出来的,且筛选指标与比较指标不一致。 FuzzyBench-Hard 的定义是「PAW 快速编译器零精确匹配」的规格子集。以基线失败为条件抽样,会把增益往大里放:被筛掉的恰好是基线做得对的那些,而全集上的真实差距论文从未报告。更微妙的是,筛选用的是精确匹配,比较用的是 LEM,论文自己也点破了这一点:
the fast compiler has a nonzero LEM score because some predictions are semantically correct even though they do not exactly match the reference outputs.
—— §5.1 Metric and benchmark
子集名称里的 Hard 是相对精确匹配定义的,0.224 这个基线分说明快速编译器在 LEM 口径下其实答对了不少。子集选择条件与评测口径错配,让 +0.612 既不能外推到完整 FuzzyBench,也不能与其他工作的全集数字横向比较。
三、Table 1 的两组扫描口径不一致,教师混合的 +0.105 无法干净归因。 附录 C 写得很清楚:
The teacher-mixture rows compare counts of GPT-5.4-mini and GPT-5.5 examples while repeating 3600 unique pairs to form 6400-example training sets and holding batch 64, learning rate , and 100 steps fixed. The data-scaling rows use batch 48, learning rate , and 100 steps.
—— Appendix C Supervision Sweep Protocol
batch 64 与 batch 48 的差异带来一个被忽略的后果:教师混合组 100 步 × 64 = 6400 样本,正好走完一个 epoch;数据规模组 100 步 × 48 = 4800 样本,从 6400 的池子里只消费 0.75 个 epoch。于是「同样是 3600 条唯一样本对」在两组里得到 0.746 与 0.836 两个差 0.09 的分数,而变量至少有三个在动——教师构成、batch 大小、实际见到的样本量。教师混合的真实收益有多大,从这张表读不出来。
四、数据规模的边际收益极低,论文没有点破。 把数据从 1440 条拉到 7200 条(5 倍),LEM 从 0.821 到 0.866,只涨 0.045;中间 2400 与 3600 完全持平(都是 0.836)。相比之下,只把三分之一的样本换成更强的教师,LEM 就涨 0.105——换成单位样本收益,教师质量的效率是堆数据量的 2.33 倍。
这条对比指向一个作者没写出来的结论:瓶颈不在监督数据的量,而在监督数据的质量和 0.6B 解释器的容量。数据曲线在 2400 就进入平台期,是典型的容量受限或标注噪声地板特征。区分这两者只需要一个消融:换 1.5B 或 4B 解释器重跑数据扩展曲线——曲线整体上移就是容量问题,原地不动就是教师噪声地板。论文没有做解释器规模的消融,全篇只有一个 0.6B。而公开配置选的正是 2400 条,也就是平台期的起点:剩下那 0.03 分要再花三倍数据才拿得到。
五、warm start 声称了却没验证。 论文在引言明确把「用 amortized 预测作为起点」列为与 PAW 的区别,可 Table 1 里每一行都带着 warm start,没有「超网络初始化 vs 随机初始化 vs 全零初始化」的对照。这是三大贡献之一,缺了对应的消融。
六、自陈局限只有两句,且漏了更实际的几条。 §9 只写了合成监督会继承教师错误、缺用户研究。没提的是:教师合成的输入分布与线上真实输入分布的错位(合成样本的输入也是教师编的,不是真实流量采样);规格变更后只能重新编译,没有增量编译路径;编译产物的回归测试怎么做——这三条在真实管道里都会先撞上。
对大模型领域的影响
本专栏前四期追问的是同一条主线:怎么从轨迹里造出监督和环境(DART-SD 换标注单元、SPADE 把优化对象上移到生成器、OPSA 去掉外部教师、Terminal-Universe 把轨迹反转成环境)。这一篇问的是反面:已经会的东西,怎么固化下来不再重复付费。
两者合起来才是完整的产业命题。前四期解决「没东西练」,这一篇解决「练会的别每次重算」。对数据工程这门行当,后者的短期价值更高——按论文公开配置做一次 token 账:编译一次需要教师生成 2400 条样本对,按每对 100–150 token 计约 0.24–0.36M token;直接调用一次(scaffold + 输入 + 输出)约 300–400 token。两者相除,盈亏平衡点在 600–1200 次调用 量级(此为本专栏按公开配置推算,非论文数据,且未计 GPU 时间;若基线段用便宜小模型而编译段用了 GPT-5.5,按美元计的平衡点还要上移)。
这个量级的含义很实在:离线批处理的数据管道基本都在平衡点之上,ad-hoc 的一次性清洗基本都在之下。「编译一次、到处运行」不是无条件的,它有一个清晰的规模门槛。
再往远看一层:如果编译这条路走得通,提示词工程的产出物形态会变。今天写在系统提示词里、每次推理都重新读一遍的那些规则,会越来越多地以适配器权重的形式沉淀下来,提示词只剩下运行时 scaffold。§6.1 的分工已经预告了这个走向——模糊的部分被压进权重,确定的部分留在代码。
5 实践启示
可以借鉴的技术
一、超网络预测当初始化,不当终局。 一次性前向预测权重快但精度有限;把它当 LoRA 的起点、再叠加几十秒的规格专属微调,是个性价比很高的折中。凡是有一键生成、精度又不够的场景(路由策略、判定规则、分类器),都值得试这个两档结构。
二、合成慢、训练快时,让训练先跑起来。 教师请求延迟高且方差大,训练步短且稳定,把两者重叠、由调度器按 batch 槽位补齐,是流水线气泡问题的标准解。任何「先生成数据再训练」的管道都能直接照搬,包括离线数据合成。
三、教师输出缓存按规格键控。 论文在请求新样本前先查缓存复用匹配的教师输出(§4.2)。规格相似、反复迭代的场景下,这一条能省掉大部分重复开销。
四、把模糊判定下沉、控制流留在代码。 30 个编译程序的组合不是权重层面的融合,而是 I/O 串联加确定性路由。这条分工比「编译」本身更好抄。
潜在应用场景
- 数据清洗与归一化管道:字段抽取、单位归一、类别映射、脏值判定——模糊但高频,是编译的最佳对象。
- 标注质量控制:把「这条标注是否合格」的判定规则编译成本地判别器,替代逐条送审的 LLM-as-judge,成本降一个数量级。
- 路由与分流:意图分类、工单派发、多智能体系统的调度决策,调用量天然大。
- 边缘与合规场景:数据不出域的硬约束下,编译产物可本地部署,运行期零外呼。
落地前需要补的功课
- 先做调用频次画像。只编译越过盈亏平衡点(本专栏估算约千次量级)的环节,别为一次性任务付编译成本。
- 每个编译产物配一份 held-out 回归集。规格一改就重编译并回归,把编译产物纳入 CI——论文没有这条,但生产环境必须有。
- 保留确定性兜底路径。论文自己也这么说:
Synthetic supervision may inherit teacher errors. Applications that require guaranteed correctness should validate outputs or retain deterministic control paths.
—— §9 Limitations
- 评估口径要统一。别按基线失败筛子集再换指标比较;真实收益要在完整分布上测,并补上「直接问教师」这条上界基线。
参考文献
Deng, Y., Nie, P., & Shieber, S. (2026). Compile by Training: Turning Natural-Language Specifications into Local Neural Functions. arXiv:2609.04199 [cs.CL]. University of Waterloo; Harvard University. EMNLP 2026 System Demonstrations.
Zhang, W., Hotsko, L., Kim, W., Nie, P., Shieber, S., & Deng, Y. (2026). Program-as-Weights: A Programming Paradigm for Fuzzy Functions. arXiv:2607.02512.
Hu, E. J., Shen, Y., Wallis, P., Allen-Zhu, Z., Li, Y., Wang, S., Wang, L., & Chen, W. (2022). LoRA: Low-Rank Adaptation of Large Language Models. ICLR.
Yang, A., et al. (2025). Qwen3 Technical Report. arXiv:2505.09388.
Viswanathan, V., Zhao, C., Bertsch, A., Wu, T., & Neubig, G. (2023). Prompt2Model: Generating Deployable Models from Natural Language Instructions. EMNLP 2023 System Demonstrations.
Zhao, J., et al. (2024). LoRA Land: 310 Fine-tuned LLMs That Rival GPT-4, A Technical Report. arXiv:2405.00732.
相关精读
- 精读:Terminal-Universe — 把公开轨迹反转成可复用的终端环境
- 精读:OPSA — 去掉外部教师的 on-policy 自适
- 精读:SPADE — 把优化对象从轨迹上移到环境生成器
- 精读:DART-SD — 用状态图替代轨迹作为标注单元
- 精读:One-Shot OPD —— 一条 query 够不够,取决于它走出多宽的状态:续篇。用状态覆盖率与吸收速率两把尺子证明,OPD 阶段数据量砍到全量的 1/17000 也基本不掉,绑定约束在优化器那一侧。
- 精读:OPD-then-RL——两阶段为什么打过单步融合:续篇。把 OPD 与 RLVR 从同一步内加权混合改成前后两阶段执行,逻辑推理 pass@1 领先七种联合方法 11.7–26.7 分,并用「教师天花板」解释联合方法为何集体卡在教师水平。
- 精读:Co-Evolving Harnesses and Models——同一份专家轨迹,换个脚手架符号就反过来:续篇。同一批专家轨迹在进化脚手架上是 −14.9 分、在未进化脚手架上是 +6.3 分,说明监督信号的价值不是信号自身的属性,而是信号与运行环境的联合属性;它给的处方是把纠正粒度从整条轨迹压到单轮。
- 精读:NSD 负向自蒸馏——不靠近看过答案的自己,只远离粗心的自己:续篇。把自蒸馏的目标函数翻成负号——推离「被提示成粗心解题者的自己」,全程不用金标也不用外部教师;纯噪声负条件在策略梯度设定下三个尺寸全部第一,说明起作用的是扰动本身而不是扰动的内容。
- 精读:E-SFT——只留推理轨迹的首尾,中间整段删掉:续篇。按位置删掉中间约 20% 的 token 再做 SFT,零额外算力胜过五种过滤基线;解码时再删 75%,精度只掉 0.02 分。
- 精读:TrimSFT——只让「中间那一段置信度」的 token 参与 SFT:续篇。用 gold token 与最强竞争者的 logit gap 做高斯带通加权,剪掉已掌握与学不会的两端;按其附录重算,真正与精度强相关的是「参与训练的 token 有多少」(R_eff 相关 −0.83),而不是权重曲线的形状。
- DataFlex-RL:13 种 RLVR 数据策略,没有一个跑赢均匀采样:续篇。前十一期默认了「挑对数据就有收益」,这一期在 RLVR 层次上问这个收益大到量得出来吗。
- 精读:把「做不出来」的题变成训练信号:续篇。数据选点推到端点——连一条 rollout 都做不对的题,用教师的部分推理轨迹装上难度旋钮照样榨得出梯度;按其 Table 2 重算,按题量加权后 MFC 对 GRPO 的领先只剩 0.78pp,每条 headline 优势都落在一个标准误以内。
- 精读:NGU 与 RL 里的马太效应
- 一条响应里只给三个位置价值监督:SP³O
- 精读:不跑 RL,先把新奖励的结果预测出来
- 精读:GMC-GRPO——把重要性比从逐条裁剪换成整组收缩
- 精读:ActObs——把被 mask 掉的那 45% 观察 token 重新纳入损失:续篇。这十五期都在问「一条轨迹里哪些 token 配得上监督」,本篇按 token 的来源(动作 vs 环境)作答,代价为零而收益只有 1–3 道题。
- 精读:Score Centering——把训练-推理失配里的漂移项减掉
- 精读:把公开代码库里已实现的功能翻成 RL 环境
- 精读:按梯度可估性给 token 分配蒸馏监督
- 精读:给 token 级信用一个唯一解,然后把它求和掉
- 精读:把中间状态的价值估计整体消掉
- 精读:把后训练配方本身当成果,再逐阶段对账
本篇问的是前四期的反面:前四期解决「拿什么练」,本篇解决「练会的别每次重算」。