DSL 如何让 LLM 的代码生成更靠谱
DSLs Enable Reliable Use of LLMs
现代 LLM 虽然能生成代码,但面对复杂系统设计时,单纯靠自然语言描述往往捉襟见肘。我发现,真正的关键在于引入 DSL(领域特定语言)。相比 Java 等通用语言,DSL 语法受限、概念聚焦,LLM 只需几个示例就能精准生成。更妙的是,DSL 通常自带确定性验证器,让 Agent 能自动循环生成、验证并修复错误,无需人工介入。从 PlantUML 绘图到 Kubernetes 配置,DSL 正成为连接人类意图与 LLM 能力的可靠桥梁,让设计在迭代中自然浮现。
编写代码迫使我们思考具体的决策,比如职责归属或边界暴露,而设计正是在这些决策中完整呈现的。
- 一位从业者分享使用 Goa DSL 的经验,指出其通过限制错误表面和自动处理 boilerplate,显著提升了 LLM 生成代码的可靠性。
- 有评论者反驳 DSL 必须完全新颖的观点,认为 DSL 若与 LLM 训练数据中的语言过于陌生,将消耗大量上下文来描述,反而降低效果。
- 针对 DSL 规模问题,有观点指出若 DSL 过大且缺乏确定性验证器,语义交互将呈指数级增长,导致 LLM 难以可靠生成代码。
- 有开发者提出反直觉洞察,即使 DSL 仅存在于个人笔记本电脑上的少量文档和示例中,Codex 等模型也能据此生成任意示例并扩展实现。
- 部分评论者质疑 Thoughtworks 等机构对 DSL 的推崇,认为其本质是咨询公司为增加人力投入而人为制造复杂性的商业策略。