借助一点 Mermaid 提升你的 Prompt Engineering
Source: Dev.to
摘要
你可能已经在不知不觉中看到过很多 Mermaid 图表,而支撑它们的是一种 LLM 能够很好理解的形式化描述语言。
Mermaid 语法 非常适合描述形式化、结构化或时序信息,例如 “A 发生,然后 B,如果 X,则 C”。它强制清晰并保证可视化精确地反映文本定义,使其成为 prompt‑as‑code 方法的完美选择。
在提示中加入补充的 Mermaid 代码可以为 LLM 提供 双路径强化:
- 文本 提供上下文、意图、细微差别和软约束,解释目标、澄清歧义并指导整体解释。
- Mermaid 代码 提供严格、不可协商的逻辑,为文本奠定基础,明确地定义流程、参与者、时序和条件(循环、分支),防止幻觉或误解。
一旦定义好图表,提示工程师只需 引用可视化,无需再次阅读冗长的 Mermaid 代码来理清逻辑流程。这种视觉清晰度相较于 JSON 或 TypeScript 等其他 prompt‑as‑code 方法具有显著优势。
为什么 Mermaid 语法对 LLM 有帮助
对于大型语言模型(LLM)而言,Mermaid 语法在处理结构化信息时提供了若干关键优势:
- 复杂系统的自然语言描述(例如 “A 使用 B,除非 D 存在,否则调用 C”)本质上是 模糊的;LLM 必须解释上下文并解决语言关系。
- Mermaid 是一种领域专用语言(DSL),结构高度化且无歧义。
A --> B明确表示 “A 连接到 B”,瞬间揭示实体和有向关系,将自然语言解释任务转化为简单的解析任务。 - Mermaid 让 LLM 能够直接映射文本到明确定义的概念结构(图、树、时间线),类似于人类瞬间内化流程图而不是密集的文字描述。
示例:描述采购订单流程
为了演示在 LLM 提示中加入补充 Mermaid 语法的效率和结构清晰度,考虑一个常见场景:用户在电商系统中购买商品,涉及三个服务——Frontend、OrderService 和 InventoryService。
步骤
- 用户在 Frontend 上点击 Buy。
- Frontend 向 OrderService 发送请求以启动订单。
- OrderService 通过询问 InventoryService 检查库存。
- InventoryService 返回库存水平。
- 若有库存,OrderService 从 InventoryService 扣减库存。
- OrderService 向 Frontend 确认订单。
- Frontend 显示成功信息。
文本化表示
采购过程从 Frontend 向 OrderService 发送请求开始,包含产品 ID 和期望数量。
随后 OrderService 通过调用 InventoryService 检查该产品 ID 的当前库存水平。检查完成后,InventoryService 返回可用数量。
- 如果有库存:OrderService 向 InventoryService 发送扣减已购买数量的消息,然后将订单确认(包括新订单 ID)返回给 Frontend。
- 如果没有库存:OrderService 终止该分支,并立即向 Frontend 发送 “Error: Out of Stock” 消息。
无论结果如何,Frontend 最终向用户展示相应的成功或失败信息。
补充的 Mermaid 时序图(DSL)
sequenceDiagram
participant F as Frontend
participant O as OrderService
participant I as InventoryService
F->>O: Initiate Purchase (Product ID, Qty)
O->>I: Check Stock (Product ID)
I-->>O: Stock Available (Qty)
alt Stock Available
O->>I: Deduct Stock (Qty)
O-->>F: Order Confirmation (ID)
else Stock Unavailable
O-->>F: Error: Out of Stock
end
F->>F: Display Success Message
组合输入弥补了 LLM 的核心弱点:
- 文本歧义 – Mermaid 提供严格、不可协商的逻辑以支撑描述。
- 幻觉/创造性 – Mermaid 将模型约束在刚性结构中,防止其捏造不存在的步骤。
- 长上下文失效 – 图表充当易于解析的摘要,使模型能够交叉引用文本与可视化逻辑,保持长期注意力。
附录:你在提示中应考虑使用的 Mermaid 图表类型
| 图表类型 | 适用场景 | 示例用例 | 对 LLM 的关键收益 |
|---|---|---|---|
流程图 (graph TD, LR 等) | 时序流、过程逻辑、决策树 | 绘制复杂函数的执行路径、描述部署流水线、概述用户注册工作流 | 通过显式的节点‑节点连接,轻松提取 过程顺序 与 条件逻辑 |
时序图 (sequenceDiagram) | 时序交互、API 调用、消息传递 | 记录微服务之间的逐步交互、客户端‑服务器认证握手、事件发射顺序 | 明确定义 事件顺序 与 参与实体(生命线),有助于错误追踪 |
类图 (classDiagram) | 结构、层次、实体之间的关系(面向对象) | 定义新模块的结构、记录继承关系、展示代码库中对象的组合 | 无歧义地捕获 面向对象概念 如继承、组合以及可见性(public/private) |
实体关系图 (ERD) (erDiagram) | 数据结构、数据模型之间的关系 | 描述数据库模式、可视化外键关系、规划数据迁移 | 提供 实体关系 的精确映射,帮助 LLM 推理数据流和约束 |