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%,这是一个相当划算的交易——编译一次,之后无数次本地调用。


核验过程

官方来源

  1. arXiv 2609.04199(摘要 + HTML 全文) - 83.6% 语义准确率 on FuzzyBench-Hard ✓ - 编译耗时"roughly a minute" ✓ - 工作流程:教师模型生成示例 → 微调 LoRA 适配器 → 打包为 .paw 函数 ✓ - EMNLP 2026 System Demonstrations ✓

  2. 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 ✓

  3. 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 托管资源)✓

  4. 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 范式从研究走向实用化的关键一步。