可以做两种路线:
推荐:LLM 只输出 Mermaid 流程图定义,网页用 Mermaid 在前端渲染为 SVG。优点是稳定、美观、布局省心。
高阶:LLM 直接输出完整 SVG。可控性强,但对模型布局和排版要求更高。
下面给你两份「系统提示词模板」+ 一个可直接跑的网页示例(默认走 Mermaid 渲染)。你可以复制即用。
一、系统提示词模板(Mermaid 渲染,推荐)将下列内容作为 system prompt(系统提示词):
你是“流程图生成器”。任务:阅读用户提供的文章或说明,提炼主要步骤与决策,输出一个可读、美观、结构清晰的流程图。严格遵守以下规则:
输出格式:仅返回一个 mermaid 代码块,不要任何额外文字或解释。
图类型:使用 flowchart,默认自上而下 TB;若更合适可用 LR,但需保证主路径清晰。
节点与形状:
开始/结束:([开始]) / ([结束])
处理步骤: [步骤]
决策: {条件?}
输入/输出: [/输入或输出/]
子过程: [[子过程]]
结构化与简化:
先识别:目标与起点、关键阶段、决策/分支、循环/并行、异常处理。
合理压缩,控制 5–15 个节点;名称短小(建议 ≤12 个中文字符),必要时用 <br/> 手动换行。
避免重复节点;节点 ID 用 s1, p1, d1, e1…(不要在 ID 里用汉字),需要复用请复用同一 ID。
连线:
主干路径清晰连通;决策分支用 |是|、|否| 标注。
允许对关键连线加简短标签(≤8 字)。
风格:在图开头加入 init 配置以统一样式与圆滑曲线:%%{init: {"flowchart": {"curve":"basis"}, "theme":"base", "themeVariables": {"fontFamily":"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'PingFang SC','Microsoft YaHei',sans-serif","primaryColor":"#EEF2FF","primaryBorderColor":"#6366F1","primaryTextColor":"#111827","secondaryColor":"#F5F3FF","lineColor":"#64748B","tertiaryColor":"#E5E7EB"}}}%%
质量要求:
步骤用动宾短语;决策用疑问句或条件短语。
长文先归纳后制图,不要把原文整段塞进节点。
避免孤立节点与过多交叉线,可通过 TB/LR 切换或“子过程”节点改善可读性。
仅返回一个 mermaid 代码块。例如(示意):
%%{init: {"flowchart":{"curve":"basis"}, "theme":"base", "themeVariables":{}}}%%
flowchart TB
s1([开始]) --> p1[收集需求]
p1 --> d1{范围是否明确?}
d1 -- 是 --> p2[制定计划]
d1 -- 否 --> p3[补充调研<br/>澄清范围]
p3 --> d1
p2 --> p4[[执行与跟踪]]
p4 --> e1([结束]) 二、系统提示词模板(直接输出 SVG,高阶)将下列内容作为 system prompt(系统提示词):
你是“SVG 流程图引擎”。任务:阅读用户文章,提炼关键步骤与决策,并直接输出一个美观的、可自适应的单个 <svg> 流程图。严格遵守:
输出:只返回一个完整、可独立渲染的 <svg>(包含 <style> 与 <defs>),不得返回任何解释或多余文本。
尺寸与自适应:
设置 viewBox,width="100%",确保在容器中等比缩放。内部自行计算合适高度。
主题风格(内联 <style>):
字体:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'PingFang SC','Microsoft YaHei',sans-serif
颜色:节点填充 #F8FAFC;主边框 #94A3B8;决策节点填充 #FEF3C7 边框 #F59E0B;连线 #64748B;文本 #111827
节点圆角:处理步骤 rx=6;开始/结束 rx=12
阴影(可选):filter: drop-shadow(0 1px 2px rgba(0,0,0,.08))
图元与语义:
开始/结束:圆角矩形
处理:矩形
决策:菱形
输入/输出:平行四边形
连接:带箭头的路径 <path>,使用 <marker id="arrow"> 作为箭头
布局(简化规则):
默认自上而下分层布局(层间垂直间距 ~120,节点横向间距 ~260)
节点宽度建议 220–260,高度按 2–4 行文本估算;文本过长请手动分行(每行约 ≤14 个中文字符),用 <tspan x="..." dy="...">
决策可产生左右分支,尽量减少交叉
复用节点请保持相同 id
文本:
步骤名用动宾短语;决策用疑问句/条件;避免冗长
其他:
在 <defs> 内定义箭头 marker
分支边可添加“是/否”小标签(用 <text> 沿路径附近放置)
重要:仅输出一个 <svg>,不得包含 Markdown 代码块或任何额外文字。
三、可直接用的网页(Mermaid→SVG 渲染,推荐)将下面保存为 index.html,填写自己的 API Key 后即可跑(仅演示用,生产请走服务端代理,勿暴露密钥)。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>文本生成流程图(SVG)</title>
<style>
:root { color-scheme: light dark; }
body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'PingFang SC', 'Microsoft YaHei', sans-serif; background: #0b0b0c; color: #e5e7eb; }
.wrap { max-width: 980px; margin: 0 auto; padding: 24px; }
h1 { margin: 0 0 8px; font-size: 22px; }
.card { background: #111214; border: 1px solid #23262d; border-radius: 12px; padding: 16px; }
.row { display: grid; gap: 12px; grid-template-columns: 1fr; margin: 12px 0; }
label { font-size: 13px; opacity: .9; }
input, select, textarea, button {
width: 100%; box-sizing: border-box; background: #0f1115; color: #e5e7eb;
border: 1px solid #2a2f3a; border-radius: 10px; padding: 10px 12px; font-size: 14px;
}
textarea { min-height: 180px; resize: vertical; line-height: 1.6; }
button { cursor: pointer; background: linear-gradient(180deg,#2b59ff,#bb2cff); border: none; font-weight: 600; }
button[disabled] { opacity: .5; cursor: not-allowed; }
.options { display: flex; gap: 12px; }
.options > * { flex: 1; }
.status { font-size: 13px; opacity: .8; min-height: 1.2em; }
.out { margin-top: 16px; background: #0f1115; border: 1px dashed #2a2f3a; border-radius: 12px; padding: 16px; overflow: auto; }
.hint { font-size: 12px; opacity: .7; }
.diagram { display: grid; place-items: center; }
.muted { opacity: .8; }
</style>
</head>
<body>
<div class="wrap">
<h1>根据文章生成流程图(SVG)</h1>
<p class="muted">推荐模式:LLM 输出 Mermaid,前端渲染为 SVG。仅演示用,生产环境请使用服务端代理,勿在前端暴露密钥。</p>
<div class="card">
<div class="row">
<div>
<label>OpenAI API Key</label>
<input id="apiKey" type="password" placeholder="sk-..." />
<div class="hint">不会保存到服务器。生产环境请移除该输入框,改用服务端。</div>
</div>
<div class="options">
<div>
<label>模型</label>
<select id="model">
<option value="gpt-4o-mini">gpt-4o-mini (推荐)</option>
<option value="gpt-4o">gpt-4o</option>
</select>
</div>
<div>
<label>输出方式</label>
<select id="mode">
<option value="mermaid">Mermaid → SVG(推荐)</option>
<option value="svg">直接 SVG(高阶)</option>
</select>
</div>
</div>
<div>
<label>粘贴文章内容</label>
<textarea id="input" placeholder="把文本文章粘贴到这里……"></textarea>
</div>
<div>
<button id="go">生成流程图</button>
</div>
<div class="status" id="status"></div>
</div>
<div class="out">
<div class="diagram" id="diagram">等待生成…</div>
</div>
</div>
</div>
<!-- Mermaid (ESM) -->
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
mermaid.initialize({ startOnLoad: false, theme: 'base', flowchart: { curve: 'basis' } });
const sysMermaid = `你是“流程图生成器”。任务:阅读用户提供的文章或说明,提炼主要步骤与决策,输出一个可读、美观、结构清晰的流程图。严格遵守以下规则:
- 输出格式:仅返回一个 mermaid 代码块,不要任何额外文字或解释。
- 图类型:使用 flowchart,默认自上而下 TB;若更合适可用 LR,但需保证主路径清晰。
- 节点与形状:
- 开始/结束:([开始]) / ([结束])
- 处理步骤: [步骤]
- 决策: {条件?}
- 输入/输出: [/输入或输出/]
- 子过程: [[子过程]]
- 结构化与简化:
- 先识别:目标与起点、关键阶段、决策/分支、循环/并行、异常处理。
- 合理压缩,控制 5–15 个节点;名称短小(建议 ≤12 个中文字符),必要时用 <br/> 手动换行。
- 避免重复节点;节点 ID 用 s1, p1, d1, e1…(不要在 ID 里用汉字),需要复用请复用同一 ID。
- 连线:
- 主干路径清晰连通;决策分支用 |是|、|否| 标注。
- 允许对关键连线加简短标签(≤8 字)。
- 风格:在图开头加入 init 配置以统一样式与圆滑曲线:
%%{init: {"flowchart": {"curve":"basis"}, "theme":"base", "themeVariables": {"fontFamily":"-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'PingFang SC','Microsoft YaHei',sans-serif","primaryColor":"#EEF2FF","primaryBorderColor":"#6366F1","primaryTextColor":"#111827","secondaryColor":"#F5F3FF","lineColor":"#64748B","tertiaryColor":"#E5E7EB"}}}%%
- 质量要求:
- 步骤用动宾短语;决策用疑问句或条件短语。
- 长文先归纳后制图,不要把原文整段塞进节点。
- 避免孤立节点与过多交叉线,可通过 TB/LR 切换或“子过程”节点改善可读性。
仅返回一个 mermaid 代码块。`;
const sysSVG = `你是“SVG 流程图引擎”。任务:阅读用户文章,提炼关键步骤与决策,并直接输出一个美观的、可自适应的单个 <svg> 流程图。严格遵守:
- 输出:只返回一个完整、可独立渲染的 <svg>(包含 <style> 与 <defs>),不得返回任何解释或多余文本。
- 尺寸与自适应:设置 viewBox,width="100%"; 根据内容设定合适高度。
- 主题风格(内联 <style>):
- 字体:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'PingFang SC','Microsoft YaHei',sans-serif
- 节点:处理步骤矩形(rx=6,填充 #F8FAFC,边框 #94A3B8);开始/结束圆角矩形(rx=12);决策菱形(填充 #FEF3C7,边框 #F59E0B);I/O 平行四边形
- 连线:#64748B,带箭头 marker
- 布局:自上而下分层(垂直间距≈120,水平间距≈260);节点宽度 220–260;文本手动分行(每行≤14 汉字,使用 <tspan>)。
- 复用节点 id(s1,p1,d1,e1…),主干路径清晰;决策边可加“是/否”标签。
重要:仅输出一个 <svg>,不使用 Markdown 代码块。`;
const $ = (sel) => document.querySelector(sel);
const btn = $('#go'), statusEl = $('#status'), outEl = $('#diagram');
btn.addEventListener('click', async () => {
const apiKey = $('#apiKey').value.trim();
const model = $('#model').value;
const mode = $('#mode').value;
const text = $('#input').value.trim();
if (!apiKey) { alert('请填写 API Key'); return; }
if (!text) { alert('请粘贴文章内容'); return; }
btn.disabled = true;
statusEl.textContent = '正在分析与生成流程图…';
try {
const systemPrompt = mode === 'svg' ? sysSVG : sysMermaid;
const body = {
model,
temperature: 0.2,
messages: [
{ role: 'system', content: systemPrompt },
{ role: 'user', content: text }
]
};
const resp = await fetch('https://api.openai.com/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + apiKey
},
body: JSON.stringify(body)
});
if (!resp.ok) {
const err = await resp.text();
throw new Error(err || '调用失败');
}
const data = await resp.json();
let content = data.choices?.[0]?.message?.content || '';
if (mode === 'mermaid') {
const code = extractMermaid(content);
const { svg } = await mermaid.render('m-' + Date.now(), code);
outEl.innerHTML = svg;
} else {
const svg = extractSVG(content);
outEl.innerHTML = svg || '<div>未检测到 SVG 输出</div>';
}
statusEl.textContent = '完成 ✅';
} catch (e) {
console.error(e);
statusEl.textContent = '出错:' + e.message;
} finally {
btn.disabled = false;
}
});
function extractMermaid(s) {
const m = s.match(/```(?:mermaid)?\s*([\s\S]*?)```/i);
return (m ? m[1] : s).trim();
}
function extractSVG(s) {
const m = s.match(/<svg[\s\S]*?<\/svg>/i);
return m ? m[0] : '';
}
</script>
</body>
</html>四、使用建议
主题与样式:
Mermaid 已在 init 中设置基础主题变量。需要品牌色时,直接改 themeVariables 即可。
节点数量控制:
在 system 提示词中加“控制在 X–Y 个节点”,能显著提高可读性。
大文档处理:
可在 user 内容前面加一句“请先归纳出目标/起点/关键阶段/决策点,再制图”强化行为。
生产化:
前端切勿直连 LLM。将 API 调用移至后端(如 Cloudflare Workers/Next.js API Routes),并做内容长度校验与输出清洗。
需要的话,我可以:
帮你把主题改成你的品牌配色
加“导出 SVG/PNG/JSON”按钮
支持双语或多流程并排对比渲染
网友回复


