Compile by Training: 用自然语言规格编译本地神经函数 · 干货攻略
- 链接: https://arxiv.org/abs/2609.04199
- 分类: x-tips
- 来源: X @_akhaliq
- 作者: Jay
- 更新: 2026-09-09
- 仓库: programasweights/compile-by-training
这是什么
Compile by Training(CbT)是 Program-as-Weights(PAW) 范式的第二代编译器,由 Yuntian Deng、Pengyu Nie、Stuart Shieber 三位作者在 EMNLP 2026 System Demonstrations 会上发布。它做的事情很直接:把你用自然语言描述的模糊文本函数,编译成一个可以完全离线运行的本地神经程序(.paw 文件),不需要 API 调用,不需要联网。
底层思想来自 PAW 范式本身:把 LLM 从"每次输入都调用一次的解题者"变成"只调用一次就生产工具的工具建造者"。一次编译,多次本地调用。
为什么值得关注
日常开发中有很多"说起来简单、写规则麻烦"的模糊文本任务:日志告警分类、修复格式损坏的 JSON、按意图排序搜索结果、情感分析……以前要么靠 prompt 调用远程大模型(成本高、延迟高、依赖外部服务),要么硬写正则(脆弱、覆盖不了边界)。
PAW 范式给了一种新选择:把自然语言规格"编译"成一个小体积神经工件,之后调用就像调普通 Python 函数。CbT 在这个方向上往前迈了一步——解决了初代快速编译器(fast PAW compiler)在困难样本上精度不足的问题。
核心对比(官方数据,来自 arXiv 2609.04199 摘要):
| Fast PAW 编译器 | Compile by Training | |
|---|---|---|
| FuzzyBench-Hard 语义准确率 | 22.4%(原帖主张"无精确匹配",注:FuzzyBench 整体 73.78%) | 83.6% |
| 编译耗时 | 数秒 | 约 1 分钟 |
| 运行方式 | 本地,无 API 调用 | 本地,无 API 调用 |
⚠️ 原帖说法"fast compiler produced no exact matches"与官方全文(FuzzyBench 整体 73.78%)存在差异:fast compiler 在 FuzzyBench 整体数据集上有 73.78% 精确匹配,但在 FuzzyBench-Hard 硬子集上确实几乎不出精确匹配结果。本攻略以官方全文描述为准。
简单说:用约 1 分钟编译时间,换 Hard 子集精度从 22.4% 提升到 83.6%,这是一个相当划算的交易——编译一次,之后无数次本地调用。
核验过程
官方来源
-
arXiv 2609.04199(摘要 + HTML 全文) - 83.6% 语义准确率 on FuzzyBench-Hard ✓ - 编译耗时"roughly a minute" ✓ - 工作流程:教师模型生成示例 → 微调 LoRA 适配器 → 打包为 .paw 函数 ✓ - EMNLP 2026 System Demonstrations ✓
-
GitHub README(programasweights/compile-by-training) - Python 3.10+、uv 依赖 ✓ - 默认配方需 ~40GB 可用显存,小显存可用
--micro-batch-size/--gradient-checkpointing✓ - 0.6B 共享解释器(Qwen3 0.6B)✓ - 命令示例uv run compile.py "Classify sentiment..." -o sentiment.paw✓ - MIT License ✓ -
programasweights-python SDK(GitHub programasweights/programasweights-python) - pip 安装方式:
pip install programasweights --extra-index-url ...✓ - 运行调用:import programasweights as paw; fn = paw.function("<program-id>")✓ - 浏览器端推理支持(Hugging Face 托管资源)✓ -
HuggingFace Papers 页面(huggingface.co/papers/2609.04199) - 与 arXiv 摘要一致,额外补充了 Claudish 翻译器、网站助手、3D Avatar 三个演示案例 ✓
交叉验证
- AI/TLDR(ai-tldr.dev)独立报道:FuzzyBench-Hard 83.6%,b300 基准编译耗时 50.9s,与官方数据吻合 ✓
- AI Weekly 报道:确认"约 1 分钟 vs 数秒"的时间 trade-off,与摘要一致 ✓
- Developers Digest 分析文章:解释了 PAW 范式定位("not replace every LLM call"),明确了 CbT 适用场景(稳定、频繁、范围窄、代价高的调用),与官方定位一致 ✓
- AIware 2026 PAW 原始论文(arXiv 2607.02512):确认 0.6B Qwen3 解释器性能数据,以及 PAW 基本工作原理,提供了上下文 ✓
无法核验项
- 0.6B 解释器具体量化推理速度"30 tokens/s on a MacBook M3"——该数据来自 PAW 原始论文(2607.02512),不在 CbT 论文正文,原帖未提及此数据,本攻略引用需标注为来自 PAW 原始论文,未对 CbT 场景单独核验。
- CbT 在不同硬件配置下的实际运行内存占用——官方 README 仅提"约 40GB 可用显存"的默认值,未提供更多硬件配置数据。
上手步骤
环境准备
# Python 3.10+ required
# 使用 uv 管理依赖(推荐)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 设置 OpenAI API Key(编译时需要教师模型)
export OPENAI_API_KEY=sk-...
安装 PAW Python SDK
pip install programasweights --extra-index-url https://pypi.programasweights.com/simple/
编译第一个本地神经函数
# 编译一个情感分类函数(sentiment.paw)
uv run compile.py "Classify sentiment. Return only positive, negative, or neutral." -o sentiment.paw
脚本会依次完成:
1. 用 fast PAW compiler 初始化神经程序
2. 调用教师模型(默认 gpt-5.4-mini=800 + gpt-5.5=400)合成任务专属示例
3. 在本地 0.6B 解释器上微调 LoRA 适配器(约 80 steps)
4. 打包为 sentiment.paw 并安装到本地 PAW 缓存
调用已编译函数
import programasweights as paw
# 从缓存加载(program-id 在编译输出中显示)
sentiment = paw.function("<program-id>")
# 本地推理,无需 API 调用
result = sentiment("I loved it.")
print(result) # "positive"
自定义配方参数
uv run compile.py "Classify sentiment. Return only positive or negative." \
--teacher gpt-5.4-mini=800 \
--teacher gpt-5.5=400 \
--steps 80 \
--batch-size 32 \
--micro-batch-size 8 \
--learning-rate 1e-4 \
-o sentiment.paw
# 打印当前配置
uv run compile.py --print-config
# 查看所有可用参数
uv run compile.py --help
小显存设备
# 40GB 以下显存加这两个参数
uv run compile.py "Your function spec here" \
--micro-batch-size 4 \
--gradient-checkpointing \
-o output.paw
坑与适用边界
适用场景 ✅
- 稳定、频繁、范围窄的模糊文本任务(日志分类、情感分析、格式修复、意图识别)
- 需要本地离线运行、不想暴露 API key 的场景
- 编译一次、调用多次的高频场景——调用次数越多,省的 API 成本越可观
不适用场景 ❌
- 高风险、需要细腻推理的任务——保留用大模型,CbT 擅长的是"定义清楚但规则难写"的任务
- 每次输入都不同的高熵任务——CbT 编译出来的程序本质上学到了某种泛化,不适合一次性查询
- 需要快速迭代的场景——1 分钟编译时间在需要频繁改规格时是摩擦成本
当前局限
- 仅支持文本——暂无图像条件版本,但 PAW 论文提到同一抽象可扩展到图像条件任务
- 教师模型需要 OpenAI API key——编译时需要,运行时不需要
- Python SDK 需从自定义 index 安装:
--extra-index-url https://pypi.programasweights.com/simple/ - 目前只有 3 stars / 0 forks(GitHub 截至 2026-09-08)——社区还很小,慎用于生产关键路径
精度提醒
- 83.6% 是 FuzzyBench-Hard 子集(fast compiler 完全无法处理的困难样本)的数字,不代表所有任务都能达到这个精度
- Hard 子集之外还有普通 FuzzyBench 样本,整体效果取决于任务难度分布
一句话结论
Compile by Training ≈ 1 分钟编译 + 教师模型合成示例微调 LoRA = 本地可离线调用、精度远高于初代 fast PAW 的文本神经函数——适合"规格清晰、调用频繁"的文本处理流水线,是 PAW 范式从研究走向实用化的关键一步。