英文版:
SKILL.en.md
diagram — 图表与示意图
这是一个轻量级技能,包含两个脚本:scripts/mmd2png.py(Mermaid → PNG,默认仅通过本地 mmdc 渲染;远程后端仅在明确选择时使用)和 scripts/chart.py(数据图表 → PNG,通过 uv 或系统自带的 matplotlib 渲染)。源文件与输出文件并排放置,不会覆盖已有文件。
按需路由表
| 需求 | 做法 |
|---|---|
| 流程图 / 时序图 / 类图 / 状态图 / ER图 / 甘特图 / 系统架构图 | Mermaid → scripts/mmd2png.py(默认仅使用本地 mmdc) |
| 基于真实数据的柱状图 / 饼图 / 折线图 | scripts/chart.py(matplotlib;若缓存中无对应包,uv 可能需要网络) |
嵌入 .report.docx 报告 | PNG +  放在 .report.md 中,通过 paper 技能和 doc 配方生成 docx |
| 超出 Mermaid/matplotlib 能力(3D、高度自定义图形) | [N/A] — 向用户明确说明限制,不编造方案 |
规则
- 输出与源文件并排放置:
<原文件名>.diagram.png(图片) +<原文件名>.diagram.mmd(Mermaid 源码,可编辑)。不覆盖源文件。 - Mermaid:写入
.mmd文件,运行python3 scripts/mmd2png.py '<f>.mmd' '<f>.diagram.png';图表标签使用用户所说的语言。 - 绘制到图表的数据必须来自测量值或来源(标记为
[fact]/[observed]);不得绘制编造的数据。 - 本地优先,不静默发送源码:默认情况下,
mmd2png.py仅使用mmdc;如果缺少 CLI 或浏览器,或出现错误,则停止并报告原因,不调用网络。请安装npm i -g @mermaid-js/mermaid-cli和 Chrome/Chromium。仅当用户/智能体明确选择时,才设置MMD2PNG_BACKEND=remote(先是 Kroki,然后是 mermaid.ink)、kroki或ink。chart.py在本地处理;uv run --with matplotlib可能需要网络来获取包(如果尚未安装或缓存),因此离线时应使用自带 matplotlib 的 Python 或已准备的缓存。 - 交付前验证:
mmd2png.py自动检查 PNG 魔数以及文件大小是否 ≥ 1 KB;来自远程的 JPEG 图片通过 ImageMagick 转换为真正的 PNG(如果缺少转换器 → 写入<f>.jpg并发出警告,不假装成.png);嵌入报告时 → 在 DOCX→PDF 转换后使用pdfinfo+pdftotext再次检查(图片应正常显示,不导致页面破裂)。 - 尺寸:每个图表只表达一个主题,字体足够清晰;过宽的图表应拆分为多个小图表,而不是让编辑器压缩内容。
- 输入语言提示 — 使用用户所说的语言进行回复。
脚本
scripts/mmd2png.py— Mermaid → PNG(默认仅本地;通过MMD2PNG_BACKEND启用远程):python3 scripts/mmd2png.py '<f>.mmd' '<f>.diagram.png' [--scale 2] [--size 1600] [--theme forest]scripts/chart.py— CSV 数据(两列:标签,数值) → PNG:uv run --with matplotlib python3 scripts/chart.py '<f>.csv' '<f>.diagram.png' <bar|pie|line>
