你每天在调用大模型做的事,其实不该叫"编程"
判断一条日志是否紧急、修复残缺的 JSON、按意图排序搜索结果——这些任务有个共同特点:你脑子里知道该怎么做,但写不出干净的正则或规则。于是代码里越来越多地出现 gpt("extract answer", text) 这种调用:每次输入都跑一遍 32B 参数的大模型,花钱、慢、依赖网络、还不可复现。
Waterloo 和哈佛团队在这篇论文里问了一个更根本的问题:能不能把这些"模糊函数"编译一次、本地运行?答案就是 PAW(Program-as-Weights)——一个全新的编程范式。
编译一次,运行无数次
PAW 把传统编程的"编译-运行"二分法搬到了神经网络世界:
- 编译阶段(云端,一次性):用自然语言描述你要的函数,一个 4B 参数的"神经编译器"把它编译成一个 LoRA 适配器(约 23MB)
- 运行阶段(本地,无数次):一个冻结的 0.6B Qwen3 解释器加载这个 LoRA,像调普通函数一样执行
翻译成人话:你写"判断邮件是否紧急",编译器给你一个 23MB 的文件,之后每次判断邮件都不需要联网,0.6B 小模型就能搞定。
0.6B 打败 32B:靠的不是魔法,是架构
PAW 的程序是混合体——离散和连续两部分:
- 离散部分(pseudo-program):编译器先把用户的自然语言规格重写成干净的伪程序,包含结构化的任务描述和少量示例
- 连续部分(LoRA):编译器从隐状态直接生成注入解释器的低秩适配权重
离散部分的作用被鲁棒性实验完美验证了。当用户规格有拼写错误时,带伪程序的 PAW 只下降 1.6 分,跳过伪程序直接用原始规格则下降 4.5 分——编译器在编译阶段就把噪声过滤掉了,解释器看到的是干净输入。
部署数据:430MB 跑出 30 tokens/s
| 配置 | 基座大小 | 适配器 | 精度 |
|---|---|---|---|
| PyTorch bf16 | 1515 MB | — | 65.80% |
| Q6_K + Q4_0 LoRA | 623 MB | 23 MB | 65.75% |
| Q4_K_M + Q4_0 LoRA | 484 MB | 23 MB | 64.53% |
| IQ4_XS + Q4_0 LoRA | 430 MB | 23 MB | 64.62% |
在 MacBook M3 上,量化后的系统跑 31.6 tokens/s,冷启动 0.48 秒。430MB 共享基座 + 每个程序 23MB——比很多 npm 包都小。还有一条 GPT-2 124M 的路径,完全能在浏览器 WebAssembly 里跑。
五个真实场景 + 多模态
论文给了五个端到端 case study:日志分流、意图分类、模糊搜索重排、Agent 工具调用管线(ToolCall-15 达 93%)、多语言猜词游戏。
更优雅的是,PAW 的编译器-解释器分离支持多模态扩展:解释器不用改,只换编译器——换成 Qwen3-VL-4B 后,同一个 0.6B 文字解释器就能处理图像条件任务。
本质:从"每次求解"到"一次建造"
PAW 最深层的 insight 是重新定义了基础模型的用途。传统用法是 per-input solver——每来一个输入,调一次大模型。PAW 把大模型变成 tool builder——只在编译时调用一次,产出一个小而可复用的"神经二进制",之后每次调用廉价且离线。
这和传统编程的类比非常精确:编译器只在构建时运行,编译出的程序可以被调用无数次。PAW 做的,是把"程序"的形式从符号代码扩展到了权重空间。
10M 例子的 FuzzyBench 数据集也已开源,覆盖 800+ 类别的模糊文本任务。代码在 GitHub,demo 在 programasweights.com。