7.7
深览指数
科技Bestblogs·Martin Fowler··AI 生成

DSLs 实现 LLM 的可靠应用

本文由 Martin Fowler 撰写,核心观点是:领域特定语言(DSL)通过提供受限的语法和确定性验证器,使 LLM 生成代码变得可靠且可迭代。不同于传统观点认为设计应自上而下,作者指出前期规范只是假设,真正的设计约束在实施中迭代涌现。文章通过 PlantUML、SQL、Kubernetes YAML 及 Tickloom 框架等案例,展示了 DSL 如何将 LLM 的探索空间限制在领域范围内,从而无需人工干预即能生成正确的输出。适合关注 LLM 软件工程实用化、AI 编程及软件设计的开发者阅读。原文 ↗

核心观点
  • 领域特定语言(DSL)通过提供受限的语法和确定性验证器,使得 LLM 能够生成可靠且符合预期的代码,这是将 LLM 应用于实际软件工程的关键策略。
  • 前期的软件设计规范不过是起始假设,真正的设计约束(如权衡、边缘情况)只能在实施过程中通过迭代生成和修复来发现。
  1. 01DSL 如 PlantUML, Mermaid, Kubernetes YAML 和 SQL 具备有限的词汇表,LLM 仅需少量上下文示例即可生成正确的输出,因为其状态空间被严格限定。
  2. 02DSL 通常配备确定性验证器(解析器、JSON Schema 或编译器),LLM 可通过生成→验证→修复的循环实现全自动化,无需人工干预。
  3. 03文章以 Tickloom 框架为例,说明语义模型如何将底层细节(线程、网络、时序)抽象为 Replica、MessageType、Clock 等具体领域概念,使 LLM 专注于高层协议逻辑。
  4. 04文中展示了两个具体案例:一是为 PowerPoint 幻灯片构建带步骤标记的 PlantUML 图,二是使用 Tickloom 的 Replica 抽象实现基于仲裁的键值存储。
  5. 05作者指出,DSL 作为桥梁,将自然语言意图转化为可执行的、经过验证的代码,大幅提升了 LLM 在软件工程中的实用价值,尤其在需要高可靠性的场景。
反方 / 局限
  • 创建 DSL 本身需要投入前期设计成本,对于小型或一次性项目来说可能得不偿失。
  • 文章承认,对于某些场景,无需构建完整的 DSL,仅创建清晰的领域抽象(如面向对象中的接口)也可作为轻量级的替代方案,暗示 DSL 并非万能药。
3 分钟 · 3 卡片 · 8 资料
读原文 →

前置背景

平行视角

延伸追问