把提示词「编译」成函数:Compile by Training 让大模型退居二线

写程序的时候,你有没有遇到过这种函数:规则代码写起来又臭又长,改一个条件就崩;直接调大模型又贵又慢,每调一次都像在点外卖

比如「邮件分流」这种活儿------「signature 要的转立即处理,newsletter 转稍后看,其余问老板」。你可以写一堆 if-else,也可以一句 prompt 甩给 GPT。前者脆,后者贵。

一条更优雅的路:让大模型「教」一次,然后装进一个小模型里长期跑。 这就是 EMNLP 2026 System Demos 上《Compile by Training》做的事------把「微调」重新想象成「编译」,把大模型从运行时依赖降级成编译期老师。

TL;DR

  • 一句话规格 → 一个本地函数:开发者写句自然语言描述,系统自动合成示例数据、微调一个极小的 LoRA 适配器,打包成可存储、可版本化、可组合的「神经程序」。
  • 效果 :在 PAW 快速编译器无能为力的 FuzzyBench-Hard 子集上,语义准确率从 0.224 飙到 0.836 (+0.612 绝对提升);代价是编译从 3.5 秒变成约 51 秒------多等一分钟,买回六成正确性
  • 真实可用 :三个应用上线了。一个多站点网站助手、一个「说话控制 3D 角色」、一个英↔Claudish 双向翻译------后者上线 12 天完成了 100,747 次请求

你们可能想直接看的东西

前提:程序员都知道的「模糊函数」之痛

先看一个开胃问题。你有一个任务,比如「把用户说的一句话翻译成人话 Excel 公式」,或者「判断商家回复里是不是在推卸责任」。

这种任务的共同点:描述很容易,实现很麻烦。写规则,要考虑的边界条件无穷无尽;写 prompt 调大模型,每笔花费、每次延迟都逃不掉。

论文管这类活叫 模糊函数(fuzzy functions)------不是不知道要什么,而是没法用确定性的规则把它钉死。这类函数是 LLM 应用里最常见的一类「重复劳动」。

现有的解法各有各的坑:

方案 优点 痛点
if-else 硬编码 快、可控 边界条件写到手断,改需求就崩
每次调大模型 灵活、不写代码 贵、慢、绑死供应商、延迟抖
Prompt2Model 式微调 精度好 每个任务训整个模型,贵到没法仓储
LoRA 每个任务一个 便宜 训练流程重、没有「软件工程」基础设施

Compile by Training 的回答是:把中间那条路做对 ------共享一个冻结的小解释器,每个函数只多一个小适配器,然后把整个流程包装得像 npm install 一样顺手。

思路:把「微调」当「编译」用

一句话讲完这个系统:规格(spec)→ 合成示例 → 微调小模型 → 打包成函数 → 从此本地跑,不再麻烦老师。

markdown 复制代码
开发者写一句规格
    ↓
Teacher 大模型按模板合成示例对(低档 teacher 供量,高档补质,2:1 混用)
    ↓
编译器校验,畸形批次整体拒绝
    ↓
冻结的 Qwen3-0.6B 解释器上微调 rank-64 LoRA(约 50 秒,warm start 来自 PAW 摊销预测)
    ↓
打包成 .paw 函数(适配器 + 提示模板 + 规格 + 元数据)
    ↓
运行时:输入 → 拼 prompt → 本地小模型执行,全程不碰大模型

听起来是不是很像「编译」?源码(自然语言描述)→ 编译(teacher 合成 + 微调)→ 产物(.paw 程序卡)。产物能存、能版本化、能当依赖被别人组合------这是传统微调流程从来没有过的基建

编译流程:合成监督 → LoRA 特化 → 打包;运行时只依赖本地小解释器,不再调用 teacher 大模型

两个关键的小聪明

第一,双 teacher 混用。 便宜的小 teacher(GPT-5.4-mini)负责供量,贵的大 teacher(GPT-5.5)负责补难点。论文做了消融:同样 3600 条规格,单用 mini 的 LEM 是 0.746,混入 1/3 的大 teacher 直接到 0.851 ------加一点钱,白捡十个点。而数据量 1440→7200 四倍下去,只从 0.821 涨到 0.866------堆数据不如混老师,这是对「合成数据迷信」的一记实证冷水。

第二,把编译当后台 job,绝不是命令行的长达一分钟的阻塞等待。 合成阶段比单个训练 step 慢得多且方差大,系统让 teacher 请求、模型加载、训练流水线重叠------首批示例一到就开始训。跑在 B300 上冷编译约 51 秒,4 个并发用户排队等待平均只有 1.01 秒。用户体验像极了「代码在 CI 里构建」:提交,等,拿产物。

效果:多等一分钟,买回 61 个百分点的正确性

论文在 FuzzyBench-Hard 上正面硬刚基线------这个 benchmark 专门挑的是 PAW 快速编译器没有精确匹配的规格,也就是最难的那批。

FuzzyBench-Hard 上 mean LEM:一次性权重预测 0.224 → 编译 + 训练后 0.836

  • 指标是 LEM(LLM Exact Match):让 GPT-5.5 当判官,判断输出是否「语义上正确」------判官先拿 128 条作者标注校准过,准确率 0.977、一致性 κ=0.946,指标本身可信。
  • 0.224 → 0.836:61.2 个百分点的绝对提升,代价是编译时长从 3.5 秒拉到约 51 秒(B300)。这是「秒级凑合」和「分钟级到位」的明确分界线。

数据说明:语义正确性的收益远大于「把话说对」------LEM 判定的是任务达成,不是字面匹配。这正好是模糊函数最在意的东西。

真实世界:不是玩具,三个应用上了线

Demo 论文最怕「PPT 造车」,这篇反而给了最诚实的证据------真实用户真实流量的 case study

1. 多站点网站助手(paw-helper)

程序员查「Assignment 1 有什么变化」这种问题,得自己翻好几个页面。paw-helper 把问题拆给一组编译出来的小函数 :分类器判断问题类型、回答器在检索结果上作答、选择器挑最有用的信息......这些模糊函数各司其职,外围再用确定性代码 (BM25 检索、缓存、分支控制)把它们串成程序树。编译函数做「判断」,普通代码做「检索结论」------模糊与确定性协作的架构,比端到端单模型更接近工业可落地形态。

2. 语言控制 3D 角色(Avatar Director)

一句话,比如「让他往前走三步,然后跳一下,同时转身」,编译器把自然语言翻译成一段小型动作 DSL(序列/时长/重复/并行),浏览器解析执行。论文报的手写验证集里 44 条指令有 43 条产出预期动作结构。这就是「人类→自然语言→程序」的一小步演示,但做得很结实。

3. 英↔Claudish 双向翻译(100,747 次请求)

Claudish 是 Claude Code 圈子里流行的一种「文风位面」------把它翻成中文是很多人每天的刚需。作者把它做成双向:英文→Claudish 一个规格一个适配器,Claudish→英文再来一套 。2026-08-22 到 09-02,12 天 100,747 次成功请求。二月份没敢想的事:一个编译出来的 0.6B 小函数,扛住了六位数真实流量------这就是「一次教学、长期复用」的落地形状。

Claudish 双向翻译(在线产品,截图来自论文 Figure 7)

泼冷水:三个必须说的保留意见

作为开发者,读完不能只顾着喊「好酷」,有三点得写进自己的决策清单:

1. 评测有点「自己人查自己人」。 训练数据的 teacher 是 GPT 系,判正确性的 judge 也是 GPT-5.5。小模型高分,可能一部分是「学会了猜判官喜欢的输出形态」而不是真懂规格语义。判官校准过(κ=0.946)能挡格式差异,但挡不住同族模型的系统性盲区。落地前建议对关键子集做人工盲测。

2. 基准是被「挑出来的」对手。 FuzzyBench-Hard 定义就是「PAW 快编译器没有精确匹配」的规格------这数据天然对快速预测不利。快编译器在子集上仍有 0.224 的 LEM,说明「无精确匹配」不是「必错」,对比有一点点放大器味道。看完整结果,别只看这一个数。

3. 分布外风险全在你身上。 合成的都是函数式「输入→输出」对。真实世界的输入偏斜、对抗输入、罕见分支,论文没测。51 秒编译买到的是「在合成分布上的正确」------上线前记得拿真实流量回流验证,必要时保留一条确定性回退路径(这也是作者自己在 Limitations 里的原话)。

为什么这篇值得你关注

如果你在做 LLM 应用、Agent 工具、或者任何「重复调用大模型做同一类小事」的服务,这篇论文给出的是一种新的成本结构思维:

大模型不该是运行时依赖,而该是编译期老师。

一次花几十秒教会一个小函数,之后每次调用都便宜、本地、不绑供应商、可版本化、可被别人组合------这才是「把大模型用进软件工程」该有的样子。等这路子成熟,你会看到适配器仓库像 npm 一样遍地开花,而「调一次大模型做一件事」会变成浪费。

论文很短,demo 在线可玩,翻译服务直接开源。没有比这更低成本的考察方式了。

理性看待

  • 本文不自称解法唯一:合成监督继承 teacher 错误是明写的限制;需要确定性保证的场景应验证输出或保留规则路径。
  • 编译成本(teacher API 费 + GPU 分钟)与长期节省的盈亏平衡点,论文没算------重度使用的场景值得自己算一笔账。
  • 团队背景:延续 Program-as-Weights(Zhang et al., 2026)模糊函数范式,属同一研究序列的工程落地。

封面图:picsum.photos(占位,上站时替换为自有图床)

文内图:来自论文 arXiv 2609.04199 原图

相关推荐
修远客2 小时前
持久化与缓存:Agent的数据底座 — 没有持久化的Agent像金鱼记忆,重启就忘
llm·agent·ai编程
武子康2 小时前
同一份长文问两次,SGLang 怎样少算一遍
人工智能·llm·agent
张彦峰ZYF3 小时前
从“记住对话”到“经营组织经验”:TencentDB Agent Memory 的团队级记忆架构、工程取舍与企业落地边界
人工智能·架构·llm·agent·skill·agent memory·tencentdb
AINative软件工程4 小时前
编程
前端·llm
2601_9623818617 小时前
基于Python-use范式的开源Agent
llm·代码生成·工具调用·agent框架·python-use
程序员于老七19 小时前
漫话大模型:同一个模型,换台机器效果就不同?——推理引擎这个隐形选手
llm
liulilittle21 小时前
为什么需要回程闲置保护?
ai·llm·prompt·agent·tools·subagent·opencode
七牛开发者21 小时前
HarnessDev:让 LLM 自己创建并迭代 Agent Harness
chatgpt·llm·agent
桃西西呀1 天前
红酒标签上的 87 分是怎么算出来的?我拿 1599 瓶真酒把线性回归和逻辑回归拆开讲
人工智能·机器学习·llm