用 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 的主流程是:

  1. 确认输入和输出路径。
  2. 解析参考图的语义结构:图类型、布局、文字、形状族、连接线、颜色、分组关系。
  3. 优先选择 Visio 原生形状、左侧形状栏、stencil/master,而不是直接用低级几何线条拼图。
  4. 生成 JSON drawing plan。
  5. 对复杂图运行布局预检。
  6. 使用 Visio COM 可见地执行最终绘制。
  7. 保存 .vsdx,默认不导出 PNG,除非明确要求预览。

这套流程的重点是“先理解语义,再绘图”,而不是逐像素模仿。

3. 关键能力设计

3.1 优先使用 Visio 原生能力

如果参考图里有流程图、判定框、文档框、动态连接线、长方体、分层模块等常见结构,skill 会优先尝试使用 Visio stencil/master。

例如:

  • 文档形状优先找 Visio 的 Document master;
  • 流程框优先找 Process
  • 判定框优先找 Decision
  • 特征图长方体优先找 3-D boxCubeHorizontal bar 等 master;
  • 语义连接优先用动态连接线和 glued endpoint。

只有找不到合适 master 时,才退回到基础矩形、椭圆、多边形或自定义线条。

3.2 公式和中英文混排

科研图里常见 G_W(x_1)E_Wf_φg_φ 等数学标注。
skill 支持 richText,可以在同一个 Visio 文本框中设置:

  • 中文:默认宋体;
  • 英文/数字/数学:默认 Times New Roman;
  • 变量斜体;
  • 上标、下标;
  • 字号差异。

这比把公式拆成多个文本块更稳定,也更接近后续人工编辑的需求。

3.3 布局预检

测试过程中发现,很多错误不是“画不出来”,而是布局质量不稳定,例如:

  • 文字压到图片或节点上;
  • 连接线压住独立文字;
  • 线段穿过非端点节点;
  • 图形越出页面;
  • 容器标题贴边;
  • 分支标签“是/否”压在线上。

因此 skill 加入了 validate_plan_layout.py,在生成 Visio 前检查这些问题。

当前预检规则包括:

  • 非预期的文字/图像重叠;
  • 图像/图像重叠;
  • 页面越界;
  • 独立文字与连接线相交;
  • 连接线穿过非端点节点;
  • 背景区域、容器层、路由辅助点不作为障碍物;
  • 如果确实是设计性叠放,可通过 allowOverlapallowedOverlaps 显式声明。

这让很多问题在生成前被拦截,而不是等用户打开 Visio 后再肉眼发现。

3.4 曲线和连接线策略

连接线不是越圆滑越好,也不是越规整越好。当前规则是:

  • 可读性优先;
  • 清晰曲线优先于清晰折线;
  • 清晰折线优先于混乱曲线;
  • 如果参考图是直线或直虚线,优先保持直线风格;
  • 避让碰撞时,优先微调附近节点或标签,而不是机械地把直线改成折线;
  • 曲线需要稳定时,优先用 cubic Bezier 或 spline;
  • 不把 COM 的 DrawPolylineDrawSplineribbon 伪称为 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,并在生成前做布局预检。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐