← 返回内容列表

DSL让LLM更可靠:Martin Fowler详解领域特定语言的约束力量

DSL让LLM更可靠:Martin Fowler详解领域特定语言的约束力量

Martin Fowler网站发文探讨DSL如何提升LLM输出可靠性。DSL通过约束变异空间、提供内置验证器(解析器、类型检查器等),让LLM在Agent模式下实现自动生成-检查-修复闭环。文章主张DSL和语义模型才是真正的source of truth,而非prompt本身。

2026年7月,Martin Fowler网站发表了Unmesh Joshi撰写的文章,深入探讨了DSL(Domain-Specific Language)如何让LLM的输出更加可靠。文章的核心论点简洁有力:通用编程语言(如Java)允许大量不同方式表达同一意图,而DSL通过剥离这种变异性,使LLM的输出更加可预测。

文章指出,由于DSL的受限语法,仅需少量上下文示例(in-context examples)就能有效引导LLM生成正确语法。更关键的是,主流LLM在训练阶段已大量接触PlantUML、Mermaid、SQL、Kubernetes YAML等常见DSL,因此并非从零开始学习。这使得DSL成为LLM天然的友好伙伴。

DSL最关键的技术优势在于其确定性的验证机制。文章详细描述了四种验证手段:parser(语法层面结构验证)、JSON Schema(数据格式约束)、type checker(类型安全验证)和编译器(完整编译期校验)。这些验证器构成了Agent模式下的自动修复闭环:LLM生成候选代码,验证器检查并返回错误,LLM根据错误信息自动修复,全程无需人工介入。

尤为重要的是,DSL的错误信息处于领域语义层面。例如验证器会返回"你不能在选择客户端之前选择操作"这样的业务语义错误,而非深埋在生成代码中的堆栈跟踪。这使得LLM能更有效地理解和修正错误,因为错误信息本身就是LLM擅长处理的自然语言。

文章以Tickloom项目为例展示了内部DSL的验证策略。通过渐进式接口(Progressive Interfaces)强制执行语法顺序——不能在定义拓扑结构之前声明步骤。类型系统使得不合法的场景直接无法编译,而非运行时才暴露问题。编译错误精确定位到非法步骤,而非模糊的运行时异常。

即使不构建完整DSL,干净的领域抽象也能达到类似效果。Tickloom的语义模型仅由四个核心抽象构成:Process/Replica(计算与消息处理)、Network(通信)、Storage(持久化)和Clock(逻辑时钟)。这些既定的抽象消除了线程模型、网络模式、时序语义等开放性问题,使LLM几乎没有幻觉空间。

文章的最终主张发人深省:DSL和语义模型才是真正的source of truth(真相之源),而非prompt。一个设计良好的DSL足以承载完整意图,即使原始prompt丢失,DSL本身仍可作为LLM的充分上下文继续工作。这为AI时代的软件设计提供了重要启示:与其依赖脆弱的prompt工程,不如构建强约束的领域语言。


术语注释

  1. DSL(Domain-Specific Language):领域特定语言,为解决某一特定领域问题而设计的受限语言。与Java、Python等通用编程语言不同,DSL只关注领域概念,如SQL用于数据库查询、正则表达式用于文本匹配。其受限性使得语法更简洁、验证更严格。
  2. 变异空间(Variation Space):指同一意图可以用多少种不同方式表达。通用编程语言的变异空间很大,LLM可能生成各种风格迥异的代码;DSL通过限制语法,大幅缩小变异空间,使输出更可预测。
  3. In-context examples(上下文示例):在提示词中提供给LLM的少量输入-输出示例,用于引导LLM理解期望的输出格式和模式。DSL的受限语法使得少量示例即可覆盖大部分用法。
  4. Source of truth(真相之源):系统中唯一权威的信息来源。文章主张DSL本身应作为项目的真相之源,而非prompt,因为DSL是确定性的、可验证的、可维护的。

延伸阅读:更好的模型更差的工具:Flask作者揭示LLM工具调用退化, Antirez:掌控想法而非代码——AI时代程序员的核心价值

评论 (0)

加载评论中…

DSL让LLM更可靠:Martin Fowler详解领域特定语言的约束力量 | 必学必会