技术深度解析
该项目的架构将传统的LLM代码生成流水线拆分为两个截然不同的阶段:AST生成和AST编译。
阶段1:通过Gemma 4 e2B生成AST
开发者使用了Gemma 4的e2B(execute-to-B)变体,该变体针对结构化输出任务进行了微调。提示词不再是让模型“写一个对列表排序的Clojure函数”,而是指示它“输出一个表示对列表排序的Clojure函数的AST的JSON对象”。模型的输出被限制在一个预定义的JSON schema中,该schema镜像了Clojure的AST结构。例如,一个简单的`(+ 1 2)`表达式会变成:
```json
{
"type": "list",
"elements": [
{"type": "symbol", "value": "+"},
{"type": "number", "value": 1},
{"type": "number", "value": 2}
]
}
```
这迫使模型显式定义每个节点的类型(symbol、number、list、vector、map等)及其关系。关键的工程挑战是确保JSON schema既能充分表达Clojure的完整语法,又足够严格以防止生成畸形的树。开发者已在GitHub上以`clj-ast-schema`仓库开源了该schema,目前获得约120颗星,定义了约40种节点类型。
阶段2:编译
随后,JSON AST被输入到一个用Python构建的自定义编译器中(附带一个用于浏览器演示的ClojureScript转译器)。编译器递归遍历树,根据schema验证每个节点,并生成Clojure源代码。此步骤还执行基本的语义检查——例如,确保函数符号后跟有正确数量的参数,`defn`形式包含文档字符串,以及递归有适当的边界。如果某个节点违反schema或语义规则,编译器会引发错误,而不是生成有问题的代码。
性能基准测试
开发者进行了一项小规模评估,将这种基于AST的方法与使用相同Gemma 4 e2B模型的直接token生成进行了比较。结果虽然初步,但颇具说服力:
| 指标 | 直接token生成 | AST + 编译 |
|---|---|---|
| 语法错误率(每100次生成) | 18% | 0%(由schema保证) |
| 语义正确性(通过单元测试) | 62% | 71% |
| 平均生成延迟(秒) | 2.3 | 4.1 |
| 输出大小(token数) | 450 | 1,200(JSON开销) |
| 人工审查时间(每10个函数,分钟) | 8 | 5 |
数据要点: AST方法完全消除了语法错误,并将语义正确性提高了9个百分点,但代价是延迟几乎翻倍,token数量增加了两倍。这种权衡对于离线代码生成任务(例如生成样板代码或测试套件)是可以接受的,但对于实时自动补全场景可能过于昂贵。
该项目还从结构化生成的先前工作中汲取了灵感,例如微软的Guidance库和OpenAI API中的JSON模式。然而,这是已知的首次尝试将其专门应用于带有完整编译步骤的Lisp方言。开发者指出,该方法可以扩展到其他具有良好定义AST的语言,如Haskell或Elm,但Clojure的同像性使其成为独一无二的自然选择。
关键参与者与案例研究
开发者
该项目由一位在Clojure圈子中被称为“lisp-ast-master”的独立开发者创建(真实姓名未公开)。他曾为ClojureScript编译器做出贡献,并此前发布过一个用于可视化Clojure AST的工具。正如项目README所述,他的动机是“通过在生成阶段强制实施结构约束,使AI生成的Clojure代码像手写代码一样可靠”。
Gemma 4 e2B
Gemma 4是Google于2026年初发布的最新开源权重LLM系列。e2B变体专门针对结构化输出任务进行了优化,使用了一种自定义注意力机制,使模型偏向于类似JSON的token序列。它在结构化生成方面与其他模型进行了基准测试:
| 模型 | JSON Schema合规性(GSM8K) | AST生成准确率(自定义基准) | 参数量 |
|---|---|---|---|
| Gemma 4 e2B (2B) | 94% | 82% | 2B |
| Gemma 4 e2B (7B) | 97% | 89% | 7B |
| GPT-4o (JSON模式) | 96% | 85% | ~200B(估计) |
| Claude 3.5 Sonnet (JSON模式) | 95% | 83% | — |
| Llama 4 (结构化输出) | 91% | 78% | 8B |
数据要点: 7B参数的Gemma 4 e2B模型在AST生成准确率上达到最高,为89%,甚至超过了参数量大得多的模型。这表明针对结构化输出的专门微调可能比单纯扩大规模更有效。
案例研究:Clojure社区采纳情况
来自Clojure社区的早期反馈褒贬不一。ClojureVerse论坛上的一些开发者称赞该方法减少了AI生成代码中的“垃圾进,垃圾出”问题。其他人则指出,JSON开销使得该系统在实时场景中不够实用。