openwebui 接入开源项目 pptmaster 折腾有感
开端
因为折腾大学生服务外包,自己和队友一步一步开始手把手搞 ai 制作ppt 这个功能,发掘到市面上大多数 ai ppt 生成不可控,效果不太理想
机缘巧合下在 b 站看到了牛人写的 ppt-master pptmaster项目,生成效果很可观,就在思考能不能将它放在 ai 对话界面上
这篇笔记的核心不是“怎么做出一个 PPT”,而是“怎么把一个 AI 能力嵌进对话网站里,并让它稳定工作”。
ppt-master 为何能生成 ppt
它不是“靠一堆 md 文件神奇地直接出 PPT”,而是把 AI 约束成了一条很强的流水线。
核心逻辑是:
md不是普通文档,是给 AI 看的“角色说明 + 规则 + 模板”Strategist.md负责先把内容拆成 PPT 结构executor-*.md负责告诉 AI 每一页 SVG 应该怎么画design_spec.md把整套设计固定下来scripts/负责把 Markdown、网页、PDF 转成可处理素材,再把 SVG 转成 PPTX
所以它能做 PPT,不是因为 AI 天生会做,而是因为这个项目把“会做 PPT”拆成了很多可控步骤。
ppt-master 做了三件关键事:
- 把 AI 的输出目标从“自然语言”改成“SVG/PPT 结构”
- 把生成过程拆成“规划 -> 逐页绘制 -> 后处理”
- 把图片能力外接到
image_gen.py这类脚本里,而不是指望模型凭空画图
你可以把它理解成:
md 规则 + 模板约束 + 逐页 SVG 生成 + 后处理脚本
= AI 真的变成 PPT 工厂
所以它强的地方不是“模型更聪明”,而是“项目工程化得很好”。
我觉得在开发 ai 应用时代,最重要的就是这种架构设计能力.比如你平常会跟 ai 说"给我生成一个 svg 代码,给我一个 ppt 大纲",而这个项目就是把这些小需求整合起来,最终搭建出了一个 ppt
过程
因为个人能力不足,把需求说给了 codex,他就帮我很快的设计出了一个架构:
flowchart LR
A[OpenWebUI 聊天框] --> B[Pipe / Function]
B --> C[OpenWebUI PPT Service]
C --> D[ppt-master 工作流]
D --> E[抓取 URL / 读取文件]
D --> F[生成设计规划]
D --> G[生成 SVG 页面]
D --> H[生成讲稿]
D --> I[Post-processing]
I --> J[PPTX 文件]
J --> K[签名下载链接返回 OpenWebUI]
通过 openwebui 自带的通信管道(pipe/fuction),再加上自建后端,后端激活 pptmaster 工作流,最后将结果返回给聊天框,实现生成 ppt
用户输入需求 -> OpenWebUI Pipe 解析聊天内容 -> 转发给独立 PPT 后端 -> 后端调用 ppt-master:
- 初始化项目
- 拉取 URL / 文件
- 生成规划
- 逐页生成 SVG
- 后处理
- 导出 PPTX -> 返回下载链接到 OpenWebUI
pipe层(信使)
先拿到 OpenWebUI 传进来的 body,里面最重要的是 messages。它会把用户消息里所有 text 拼出来,再用正则抓 URL、识别配置项(页数、风格、确认模式等),最后组装成 job_payload 发给后端
fastapi 后端(包工头)
/api/jobs/json 接 JSON,/api/jobs 接表单/文件上传。它把这些字段写进 payload,创建 job,再交给 Worker 去跑
PPTOrchestrator(工人)
它先初始化项目、导入来源、读 Markdown、让 LLM 出规划,再顺序生成 SVG、讲稿,最后导出 PPTX。
问题
其实这样子下来确实不难,我们就是一个搬运工,踩在先人的肩膀上造了一个小玩具. 明明这个项目放在 ai 编辑器里就能运行的,但我为了搞点花活选择在 openwebui 这个 ai 对话网站上嵌入生成 ppt.所以我做了大半天就是在做如何通过用户输入的内容让这个 pptmaster 开工
多模态处理怎么发送给pptmaster
我本来以为 openwebui 的多模态处理已经就造好了,不需要自己写了. 结果搞了半天才知道,这玩意是只能给原生 openwebui 用的,也就是:
- 附件先存在 OpenWebUI
- 普通聊天模型只看到文本上下文
- Pipe 也拿不到文件内容,除非 OpenWebUI 把它透传出来
所以就还需要 pipe 帮个忙,转发附件
- 如果是 url 这种附件直接发送就行 但如果是文件,就需要:
- 服务器先给每个任务开一个独立目录
- 附件先落到这个目录里
- 再被转换/导入到 sources/(转成二进制,后端处理变成真实文件放入 sources)
- AI 主要读取 sources/ 里的 Markdown、文本和图片
可复用的发布结构
- Obsidian 只写纯 Markdown
- front matter 负责分类和标签
- 图片统一走
assets/ - 发布时转换为 Hexo 可访问路径
- 首页和归档由 Hexo 重新生成
经过了这些,我们就能愉快地在手机上打开网页随时随地生成 ppt 啦!
不过生成一次 ppt 就要烧三四块钱,还是算了吧,这个玩具可能雪藏了,但也确实有他的用武之地 地址->https://github.com/wjsds666/openwebui-ppt-service
同步语法演示
这段是为了测试脚本会不会把增强语法真的转成网页内容。
把 OpenWebUI 和后端先接起来。
把笔记同步到 Hexo 页面。
这里放概览内容。
这里放目录或补充说明。



