← 返回文章列表

HUIIHONG PPT 模版开发:从AI协作到可复用技能的全记录

2026-05-29 · 约 10 分钟阅读
AI 协作 PPT python-pptx 效率工具

这篇文章记录了为一个投资路演 PPT 模版(汇竑资本 HUIIHONG 品牌,红金配色)开发 python-pptx 自动生成脚本,历经十轮迭代后封装为 OpenCode 可复用技能的完整过程。

核心数据:10 轮迭代~750 行 Python11 种自定义图标20+ MSO_SHAPE 形状,最终生成 15 页投资报告 PPT

背景:为什么需要自动生成 PPT

在算电协同投资研究中,频繁需要生成格式统一的投资路演 PPT。人工拖拽太慢,传统模板太死板。目标是用 python-pptx 实现:给定结构化数据 → 自动生成品牌一致的 PPT。

汇竑资本的 HUIIHONG 品牌有明确的视觉规范:深红 #C00000 + 金色 #D4AF37 + 白底卡片。难点在于精确复刻模版中的所有间距和对齐——0.01 英寸的偏差在放大后都会变得明显。

第一轮:精确测量与基础架构

从一份 40 页的参考模版(内蒙古新质动能科创投资基金路演报告申报材料)开始。用 python-pptx 逐页读取所有形状的位置、大小、颜色等属性:

from pptx import Presentation
prs = Presentation('template.pptx')
for slide in prs.slides:
    for shape in slide.shapes:
        print(shape.left, shape.top, shape.width, shape.height, shape.shape_type)

关键发现:python-pptx 的 Emu 单位 = 英寸 × 914400。所有模版元素都精确到 Emu 级别——比如 header bar 的 outer 框在 L0.642 T0.483,inner 红色 rect 在 L0.875 T0.684。

这一轮确定了基础架构:_add_header_bar + _add_header_title + _add_logo + _add_page_number 的页面骨架,以及 _set_cn_font 这个关键辅助函数——没有它,中文字符在 PPTX 中会显示为方框。

第二轮:封面与内容页布局

封面的核心挑战是模板中使用了背景图(城市夜景半透明),脚本需要检测图片是否存在,否则 fallback 到纯色背景。封面设计了黄金分隔线的位置(T4.80),以及底部的合规免责声明。

内容页采用「header bar + 标题 + 分页线 + logo + 正文」的五段式布局。卡片则采用「白底 + 0.042英寸红色左竖条」的模板标识模式。

第三轮:TOC 分节页

目录页(TOC)的难点在于需要模拟模板的 2×2 网格布局。每个 TOC 项目是一个圆角矩形,当前章节红色高亮(#C00000),其他章节灰色边框。

最初的实现没有金色图标,后来经历了「先加 → 又被去掉 → 最终加上更精致的」的反复。

第四轮:卡片布局系统

两种核心卡片布局:

其中三列卡片是收益最高的布局——视觉冲击力强、信息密度适中,适合投资 PPT 的「论据页」。

第五~七轮:图标系统的三次演进

图标系统是迭代次数最多的部分,共经历了三次重写:

V1:简单几何(红/金色菱形、圆形)

MSO_SHAPE 的 OVAL、DIAMOND 等基本形状。优点是实现简单,缺点是样式单调,且与卡片内容毫无关联。

V2:复杂形状映射(金色圆角矩形 + 白色几何)

参考模版第 9 页,实现「金色 #BF9000 圆角矩形背景 + 白色形状」的两层结构。引入了 10 种 MSO_SHAPE 形状映射(star/hexagon/cross/chevron 等),开始根据卡片内容选择不同形状。

这一版的问题:形状仍然是简单的几何图形,缺乏语义——比如用「齿轮」代表技术、「闪电」代表电力,而这些简单的 MSO_SHAPE 做不到。

V3:Pillow 自定义 PNG(有意义的图标)

最终方案:用 Python Pillow 在内存中绘制透明 PNG 图标,每一笔都是白色像素。然后通过 add_picture 嵌入 PPT。实现了 11 种语义图标:

图标形状含义映射示例场景
靶子 🎯同心圆 + 准心目标/聚焦双碳目标、投资方向
盾牌 🛡多边形盾形政策/安全政策护航、估值安全
奖杯 🏆高脚杯 + 把手成就/回报投资回报、成果
天平 ⚖横梁 + 底座 + 托盘公平/政策政策评估、市场公平
K线图 📈坐标轴 + 柱状条 + 趋势线市场/数据市场驱动、数据分析
握手 🤝重叠弧线合作/协同算电协同、交易合作
放大镜 🔍圆形 + 手柄观察/研究行业研究、深度分析
书籍 📖打开的书本知识/研究方法论、理论基础
房屋 🏠三角屋顶 + 方形稳定/基础基础设施、底层架构
架构图 🏗建筑 + 三角形屋顶产业链产业链分析、系统架构
地球 🌐圆形 + 经纬线全球/宏观全球市场、宏观分析

这套系统的核心是 _add_gold_icon 函数:它先检查是否有自定义 PNG(查 _ICON_DRAW 字典),有则用;没有则 fallback 到 MSO_SHAPE 的几何形状。这种"插件式"设计让后续扩充图标只需要添加一个绘图函数。

第八轮:语义化映射

有了丰富的图标库之后,关键是把每个卡片标题映射到最合适的图标。这不是随意的——每张卡都经过语义匹配:

页面卡片标题图标映射逻辑
P2 最佳时机技术条件成熟齿轮 ⚙技术 = 齿轮
P3 驱动因素市场驱动K线图 📈市场 = 数据/K线
P4 政策演进正式入策钻石 ◆重要事件 = 钻石
P5 政策叠加双碳目标靶子 🎯目标/靶子 = target
P6 产业链协同侧握手 🤝协同 = 握手
P7 市场规模全球算力市场地球 🌐全球 = 地球
P8 投资逻辑估值安全边际八边形 ⛔安全/警示 = octagon
P9 布局企业协鑫能科太阳 ☀能源 = 太阳
P10 风险竞争加剧风险八边形 ⛔风险警示 = octagon

最受好评的映射是「协同→握手」和「双碳目标→靶子」——用户原话是"这样会显得很有设计感和质感"。

第九~十轮:死代码清理与系统打磨

金无足赤。第一版的自定义图标系统里混入了几个不存在的 MSO_SHAPE(如 MSO_SHAPE.SHIELD 在 python-pptx 中并不存在),导致运行报错。还有未使用的 _add_numbered_gold_circle 死代码。

所有 icon 数组最终通过 grep icons= 逐行验证,确保每个图标名都存在于 _ICON_DRAW_ICON_SHAPES 字典中。

从脚本到技能:封装为可复用模版

完成十轮迭代后,脚本运行稳定,生成 15 页 PPT 只需要几秒钟。但更好的做法是把它封装成一个可复用的 OpenCode 技能,让 AI 能够理解它的能力边界并正确调用。

技能封装了三个关键资产:

技能安装路径:~/.agents/skills/huihong-ppt/。当 AI 检测到用户需要生成"汇竑风格 PPT"、"红金配色路演材料"时,自动加载此技能。

技术与架构决策总结

决策选择原因
单位系统英寸(Inches)模版中所有数值以英寸测量,保持整数精度
颜色字典全局 C 字典一处定义全身引用,避免色值漂移
图标系统Pillow PNG + MSO_SHAPE 混合自定义图标有语义,MSO_SHAPE 做 fallback
卡片布局vert / 3col 两种模式覆盖绝大多数内容场景
TOC 分节2×2 网格 + 红色高亮严格复制模版风格
字体处理_set_cn_font 双字体回退确保中英文在不同系统上正确渲染

AI 协作的经验教训

这次开发过程中有几个值得记录的协作经验:

  1. 不要猜测模版参数:永远用脚本读取模版的实际数值,而非人眼估计。0.01 英寸的偏差在投影时会被放大。
  2. 语义映射优于随机图形:用户多次反馈"图标与内容不匹配"——最终用 Pillow 自定义绘制的方案最被认可。
  3. 用户是模版专家:开发过程中用户多次指出"参照模版第 X 页的做法"——把参考文件纳入上下文比 AI 凭空想象准确得多。
  4. 死代码影响信任:一个不存在的 MSO_SHAPE.SHIELD 报错就会中断整个生成流程。每轮迭代后 grep 验证所有引用是必要的。
  5. 从脚本到技能是质的飞跃:脚本只能执行固定逻辑,技能让 AI 理解能力边界、正确调用、甚至组合多个技能(比如这篇文章就是另一个技能生成的)。

相关的开发记录已沉淀为 OpenCode 技能,完整代码见 ~/.agents/skills/huihong-ppt/