OpenClaw是一个开源的AI工具编排客户端,可以把大模型的文本输出直接对接到Mermaid渲染引擎,实现"自然语言描述→结构化流程图→SVG/PNG导出"的全自动链路,具体OpenClaw怎么自动生成流程图?下面就分享详细的方法。
环境准备
先把依赖装好:
# OpenClaw CLI
npm install -g openclaw@latest
# Mermaid CLI(渲染用)
npm install -g @mermaid-js/mermaid-cli
# 验证安装
openclaw --version # 我这边是 v2.3.1
mmdc --version # v11.4.0
Python 侧需要 openai SDK:
pip install openai>=1.52.0
整体架构
先画个图说清楚数据怎么流的:
核心就三步:生成、校验、渲染。校验失败的话让 LLM 自己修,最多重试 3 次。
方案一:纯Python脚本实现
最直接的方式,适合想快速跑通 demo 的场景。
import subprocess
import json
import tempfile
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("OFOX_API_KEY"),
base_url="https://api.ofox.ai/v1"
)
SYSTEM_PROMPT = """你是一个 Mermaid 流程图生成器。
用户会给你一段业务流程描述,你需要输出合法的 Mermaid DSL 代码。
规则:
1. 只输出 mermaid 代码块内的内容,不要包含 ```mermaid 标记
2. 使用 graph TD(从上到下)或 graph LR(从左到右)
3. ID 只用英文字母和数字,显示文本用中文
4. subgraph 必须有对应的 end
5. 不要用特殊字符作为 ID"""
def generate_mermaid(description: str, model: str = "claude-sonnet-4.6") -> str:
"""调用 LLM 生成 Mermaid DSL"""
resp = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": f"请为以下业务流程生成 Mermaid 流程图:\n\n{description}"}
],
temperature=0.2,
max_tokens=2000
)
raw = resp.choices[0].message.content.strip()
# 有时候 LLM 还是会包一层 ```mermaid
if raw.startswith("```"):
raw = raw.split("\n", 1)[1]
if raw.endswith("```"):
raw = raw.rsplit("```", 1)[0]
return raw.strip()
def validate_mermaid(code: str) -> dict:
"""用 OpenClaw 校验 Mermaid 语法"""
result = subprocess.run(
["openclaw", "validate", "--format", "mermaid", "--stdin"],
input=code,
capture_output=True,
text=True,
timeout=10
)
if result.returncode == 0:
return {"valid": True, "errors": []}
else:
return {"valid": False, "errors": result.stderr.strip().split("\n")}
def fix_mermaid(code: str, errors: list, model: str = "claude-sonnet-4.6") -> str:
"""让 LLM 修复语法错误"""
error_text = "\n".join(errors)
resp = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": "你是 Mermaid 语法修复专家。修复下面的代码,只输出修复后的代码。"},
{"role": "user", "content": f"代码:\n{code}\n\n错误信息:\n{error_text}"}
],
temperature=0.1,
max_tokens=2000
)
return resp.choices[0].message.content.strip()
def render_svg(mermaid_code: str, output_path: str) -> bool:
"""调用 mmdc 渲染成 SVG"""
with tempfile.NamedTemporaryFile(mode='w', suffix='.mmd', delete=False) as f:
f.write(mermaid_code)
tmp_path = f.name
try:
result = subprocess.run(
["mmdc", "-i", tmp_path, "-o", output_path, "-t", "default"],
capture_output=True,
text=True,
timeout=30
)
return result.returncode == 0
finally:
os.unlink(tmp_path)
def auto_flowchart(description: str, output: str = "output.svg", max_retries: int = 3):
"""一条龙:描述 → Mermaid → 校验 → 渲染"""
print(f"[1/3] 生成 Mermaid DSL...")
code = generate_mermaid(description)
print(f" 生成了 {len(code)} 字符的代码")
for attempt in range(max_retries):
print(f"[2/3] 校验语法(第 {attempt + 1} 次)...")
check = validate_mermaid(code)
if check["valid"]:
print(" ✅ 校验通过")
break
else:
print(f" ❌ 发现 {len(check['errors'])} 个错误,尝试修复")
code = fix_mermaid(code, check["errors"])
else:
print("重试 3 次还是不行,放弃了")
return None
print(f"[3/3] 渲染 SVG → {output}")
if render_svg(code, output):
print(f" ✅ 搞定!文件:{output}")
return output
else:
print(" ❌ 渲染失败")
return None
# 用法
if __name__ == "__main__":
desc = """
用户下单流程:
1. 用户浏览商品,加入购物车
2. 点击结算,选择收货地址
3. 选择支付方式(微信/支付宝/银行卡)
4. 提交订单,系统校验库存
5. 库存不足则提示用户,流程结束
6. 库存充足则生成订单,跳转支付
7. 支付成功通知仓库发货
8. 支付超时则取消订单,释放库存
"""
auto_flowchart(desc, "order_flow.svg")
跑一下,控制台输出大概长这样:
[1/3] 生成 Mermaid DSL...
生成了 487 字符的代码
[2/3] 校验语法(第 1 次)...
✅ 校验通过
[3/3] 渲染 SVG → order_flow.svg
✅ 搞定!文件:order_flow.svg
端到端大概 2.6s,其中 LLM 调用占了 2.1s。
方案二:用 OpenClaw Pipeline 配置文件
如果你不想写 Python,OpenClaw 自带 pipeline 机制,用 YAML 就能编排。
# flowchart-pipeline.yaml
name: auto-flowchart
version: 1
steps:
- id: generate
type: llm
config:
model: claude-sonnet-4.6
base_url: https://api.ofox.ai/v1
system_prompt: |
你是 Mermaid 流程图生成器。只输出合法的 Mermaid 代码,
不要包含 ```mermaid 标记。使用 graph TD 布局。
temperature: 0.2
max_tokens: 2000
- id: validate
type: mermaid-validate
config:
strict: true
retry_with_llm: true
max_retries: 3
- id: render
type: mermaid-render
config:
format: svg
theme: default
width: 1200
background: transparent
跑起来就一行命令:
openclaw run flowchart-pipeline.yaml \
--input "用户注册流程:填写手机号,发送验证码,输入验证码,设置密码,注册成功" \
--output register_flow.svg
这种方式更适合批量生成。我之前试过把 30 个业务流程描述丢进去批量跑,大概 2 分钟全部出图,中间有 4 个需要 LLM 修复语法,最终全部成功。
以上就是OpenClaw怎么自动生成流程图的详细方法,希望对大家有所帮助,如果想要了解更多OpenClaw玩法,欢迎来CoCoLoop社区交流。
