您的下一个 DSL 作者是语言模型
📌 One-Sentence Summary Typed Domain Grounding 将 DSL 嵌入到训练数据丰富的宿主语言中,使编译器能够捕获语法错误,从而减少 LLM 幻觉。 📝 Summary 文章认为, LLM 在生成 特定领域语言 ( DSL ) 代码时产生的幻觉主要是 训练数据频率问题,而非 知识缺口。 模型能够流畅地生成语法错误的 DSL 语句,因为它们在语料库中从相似的结构进行插值;检索增强生成(RAG)可以修正事实错误,但无法解决记法问题。 为了弥补这一差距,作者提出了 Typed Domain Grounding(TDG):将 DSL 作为一个类型化的内部 DSL 嵌入到在 LLM 训练数据中出现频率高的宿主语言中(例如 Kotlin、TypeScript、Python)。 通过设计 API 使领域错误表现为编译时类型错误——使用命名参数、枚举、构建器作用域和封闭层次结构——编译器成为一个能够立即标记幻觉语法的预言。 TDG 包含五个构建块:(1)一个内嵌而非外部的 DSL,它继承宿主语言的工具链;(2)根据语料亲和力选择宿主语言;(3)通过严格的 API 设计让编译器充当预言;(4)Generate‑Compile‑Repair(GCR)循环,利用编译器诊断作为修复提示;(5)按需教学通道,为所需结构提供 curated、可编译的示例。 通过 kUML(一个 Kotlin 内嵌的 UML/SysML v2/C4 DSL)以及一个思考实验中的类型化 Kotlin 基础设施 DSL 的说明表明,该方法能够将幻觉的属性、错误的类型、缺失的引用和无效的枚举作为普通的编译错误捕获出来。 文章将 TDG 与先前的工作如 TypeChat、Grammar Prompting、ThingTalk 和 AI‑oriented 语法进行对比,强调 TDG 避免发明新语法,而是利用已有的高频宿主语言。 最后,文章指出 TDG 的局限:它不会填补语义理解的空白,牺牲了记法自由,并且需要对宿主语言作出承诺;因此,它应被视为新 DSL 的默认考虑因素,而不是强制要求重写已有的 DSL。 💡 Main Points LLM 在 DSL 中的幻觉源于低训练数据频率,而非知识缺失。 模型生成流畅但语法错误的 DSL 代码是因为它们在语料库中从相似结构进行插值;检索增强只能纠正事实错误,无法修正记法错误。 Typed Domain Grounding 通过在高频宿主语言中嵌入类型化内部 DSL,让编译器充当预言来解决记法差距。 通过使用命名参数、枚举、构建器作用域等手段将领域错误暴露为编译时类型错误,模型可以根据编译器反馈进行修复。 TDG 的五个构建块是:内嵌 DSL、由训练数据亲和力决定的宿主语言、编译器作为预言、Generate‑Compile‑Repair 循环以及按需教学通道。 这些部分共同确保语法正确性、复用现有工具链、提供修复提示并在生成过程中提供相关示例。 通过 kUML 和思考实验中的类型化 Kotlin 基础设施 DSL 的示例,该方法能够将幻觉的属性、错误类型、缺失引用和无效枚举作为普通编译错误捕获。 这些例子表明编译器反馈循环在实践中有效,并且可以从建模领域推广到其他领域。 虽然 TDG 提高了语法忠实度,但它不解决语义理解差距,牺牲了记法自由,并要求对宿主语言作出承诺;设计者应将其视为新 DSL 的默认考虑,而不是强制重写已有 DSL。 该方法以可靠性换取灵活性,带来学习曲线和生态限制的实际成本。 💬 Key Quotes 模型写 Kotlin、TypeScript、Python 和 SQL 表现良好的主要原因是这些语言在其训练数据中出现次数极多。 不要为 LLM 从未见过的语法发明新语法:将领域嵌入到 LLM 已知的语言中,让编译器成为预言。 模型生成,编译器检查,诊断信息反馈作为修复提示。 Typed Domain Grounding 将这一其他轴进行 grounding。 编译器反馈修复循环在自调试文献中已有详细记载[1] —— GCR 本身并不是 TDG 的新颖部分。 📊 Article Meta AI Screening: 92 Featured: Yes Source: InfoQ Author: Irakli Betchvaia Category: 软件编程 Language: 英文 Read Time: 18 min Word Count: 4310 Tags: 编程与工程 , 开发者工具 , RAG / 检索增强 , 大语言模型 (LLM) , LlamaIndex Read Full Article
路过