用 Codex + Microsoft Visio COM 构建可编辑科研/流程图自动绘制 Skill
用 Codex + Microsoft Visio COM 构建可编辑科研/流程图自动绘制 Skill
本文整理的是一个面向 Microsoft Visio 的 Codex skill:
visio-template-drawing。它的目标不是把截图粘贴进 Visio,而是根据 PNG 参考图、文字描述或模板,生成真正可编辑的.vsdx图。
项目地址:
https://github.com/zxc-heu/visio-template-drawing-skill

示例测试结果
下面 5 组示例中,示例x.png 是原始参考图,out_示例x.png 是用该 skill 绘制后的结果预览。实际交付物是可编辑 .vsdx。
示例 1:相似度计算流程图
原图:
绘制结果:
覆盖能力:
- Visio 文档形状;
- 中文流程框;
- 公式富文本;
- 上下标;
- 箭头连接;
- 共享权重
W标签避线。
示例 2:聚类/原型分类示意图
原图:
绘制结果:
覆盖能力:
- 背景分区;
- 原型节点和样本点;
- 节点辐射线;
- 虚线距离关系;
- 曲线输入箭头;
- 保持直虚线风格,同时通过微调节点避免穿线。
示例 3:关系网络模块图
原图:
绘制结果:
覆盖能力:
- 照片素材裁剪后插入;
- 支持集/查询集;
- 多组 feature map 长方体;
- 关系模块;
- one-hot 向量;
- 曲线扇入/扇出;
- 图像、标签、连接线的布局预检。
示例 4:分层业务架构图
原图:
绘制结果:
覆盖能力:
- 分层容器;
- 容器标题内边距;
- 业务模块框;
- 主干箭头;
- 分支汇合线;
- 避免箭头停在层边界或穿过模块文字。
示例 5:缺失值处理流程图
原图:
绘制结果:
覆盖能力:
- 开始/结束圆角框;
- 处理框;
- 判定菱形;
- “是/否”分支标签;
- 汇合线;
- 长路径回流线;
- 分支标签避线。
1. 为什么要做这个 Skill
很多科研图、流程图、算法示意图最终都需要被人工继续编辑。常见的自动绘图方式可以快速生成 SVG、PPT 或位图,但这些结果在 Visio 里往往不好二次修改。
这个 skill 的目标是:
- 输入:PNG 参考图、文字说明、已有 Visio 模板;
- 输出:可编辑的
.vsdx; - 绘制方式:通过 Microsoft Visio COM 自动化真实打开 Visio;
- 图中对象:尽量使用 Visio 原生形状、文本、连接线、stencil/master;
- 禁止伪结果:不能只把参考截图贴进 Visio 冒充可编辑图。
一句话:让 Codex 更像一个熟练的 Visio 用户,而不是只会画几何图形的脚本。
2. Skill 的核心工作流
当前 visio-template-drawing 的主流程是:
- 确认输入和输出路径。
- 解析参考图的语义结构:图类型、布局、文字、形状族、连接线、颜色、分组关系。
- 优先选择 Visio 原生形状、左侧形状栏、stencil/master,而不是直接用低级几何线条拼图。
- 生成 JSON drawing plan。
- 对复杂图运行布局预检。
- 使用 Visio COM 可见地执行最终绘制。
- 保存
.vsdx,默认不导出 PNG,除非明确要求预览。
这套流程的重点是“先理解语义,再绘图”,而不是逐像素模仿。
3. 关键能力设计
3.1 优先使用 Visio 原生能力
如果参考图里有流程图、判定框、文档框、动态连接线、长方体、分层模块等常见结构,skill 会优先尝试使用 Visio stencil/master。
例如:
- 文档形状优先找 Visio 的
Documentmaster; - 流程框优先找
Process; - 判定框优先找
Decision; - 特征图长方体优先找
3-D box、Cube、Horizontal bar等 master; - 语义连接优先用动态连接线和 glued endpoint。
只有找不到合适 master 时,才退回到基础矩形、椭圆、多边形或自定义线条。
3.2 公式和中英文混排
科研图里常见 G_W(x_1)、E_W、f_φ、g_φ 等数学标注。
skill 支持 richText,可以在同一个 Visio 文本框中设置:
- 中文:默认宋体;
- 英文/数字/数学:默认 Times New Roman;
- 变量斜体;
- 上标、下标;
- 字号差异。
这比把公式拆成多个文本块更稳定,也更接近后续人工编辑的需求。
3.3 布局预检
测试过程中发现,很多错误不是“画不出来”,而是布局质量不稳定,例如:
- 文字压到图片或节点上;
- 连接线压住独立文字;
- 线段穿过非端点节点;
- 图形越出页面;
- 容器标题贴边;
- 分支标签“是/否”压在线上。
因此 skill 加入了 validate_plan_layout.py,在生成 Visio 前检查这些问题。
当前预检规则包括:
- 非预期的文字/图像重叠;
- 图像/图像重叠;
- 页面越界;
- 独立文字与连接线相交;
- 连接线穿过非端点节点;
- 背景区域、容器层、路由辅助点不作为障碍物;
- 如果确实是设计性叠放,可通过
allowOverlap或allowedOverlaps显式声明。
这让很多问题在生成前被拦截,而不是等用户打开 Visio 后再肉眼发现。
3.4 曲线和连接线策略
连接线不是越圆滑越好,也不是越规整越好。当前规则是:
- 可读性优先;
- 清晰曲线优先于清晰折线;
- 清晰折线优先于混乱曲线;
- 如果参考图是直线或直虚线,优先保持直线风格;
- 避让碰撞时,优先微调附近节点或标签,而不是机械地把直线改成折线;
- 曲线需要稳定时,优先用 cubic Bezier 或 spline;
- 不把 COM 的
DrawPolyline、DrawSpline、ribbon伪称为 Visio UI 菜单里的“任意多边形(F)”。
这个规则来自多轮测试:有些图必须保持直线关系,有些图则需要平滑曲线来保留视觉逻辑。
4. 当前限制
这个 skill 仍然不是“截图到 Visio 的一键完美复刻”。
当前仍需注意:
- 对复杂截图,仍需要先生成 drawing plan;
- 部分 Visio UI 工具,例如菜单里的“任意多边形(F)”,不能完全等价为 COM 的低级绘图 API;
- 图片类内容仍需要以 raster image 插入,不能变成完全矢量;
- 高复杂度图需要多轮预检和人工反馈;
- 生成效果取决于本机 Visio 版本、字体、stencil 是否可用。
但相比简单脚本绘图,它已经能稳定处理:
- 可编辑 Visio 对象;
- 中文流程图;
- 科研公式标注;
- 图像素材;
- 背景分区;
- 长方体/特征图;
- 曲线和直线连接;
- 布局预检。
5. 小结
这个项目的核心不是“让 Codex 会画一张图”,而是把多轮失败、反馈和修正沉淀为一个更稳定的 Visio 绘图工作流。
目前 visio-template-drawing 已经形成了三层能力:
- 规则层:像熟练 Visio 用户一样选择图形和布局策略;
- 计划层:用 JSON 描述图形、文本、连接线、样式和语义;
- 执行层:用 Visio COM 生成可编辑
.vsdx,并在生成前做布局预检。
更多推荐

所有评论(0)