手撕Gamma:开源AI PPT生成器Presenton实战
一、场景:再也不想熬夜做PPT
你有没有过这种经历?
周五下午接到通知,下周一要给大老板汇报项目进度。打开 PowerPoint,第一页写标题,第二页写背景,第三页写方案……光是排个版就要纠结两小时。更别提内容还要改三四版。
我统计过,一个20页的周报PPT,从构思到交稿平均需要4-6小时。其中至少一半时间花在“把Word内容搬进PPT”这种毫无创造性的体力活上。
如果有个工具,你只用输入一段文字,它就能自动把你的想法变成一页页排版精美的演示文稿——而且代码开源、数据可控、不用给SaaS平台交月费——你会试试吗?
今天要聊的项目 Presenton 就是干这个的,上线两天就冲到 GitHub 5800+ Star。作为 AI 自动化办公的实践者,我第一时间部署了它,并用它生成了一份真实的工作汇报。

二、Presenton 是什么?——不只是另一个AI PPT工具
2.1 一句话概括
Presenton 是一个开源的 AI 演示文稿生成器。你丢给它一句话或一段 Markdown 文本,它调用大模型(默认集成 OpenAI)分析内容结构,然后自动排版、配色、配图,生成 .pptx 文件供下载——整个过程不需要你碰任何设计软件。
2.2 它跟 Gamma、Beautiful AI 有什么区别?
我把主流产品拉了个表,你自己看:
| 维度 | Presenton (开源) | Gamma (闭源SaaS) | Beautiful AI (闭源SaaS) |
|---|---|---|---|
| 代码可见 | 开源 (MIT) | 不可见 | 不可见 |
| 数据隐私 | 自有部署,数据不出域 | 上传到云端 | 上传到云端 |
| 定制能力 | 可改模板、提示词、模型 | 固定模板,可调样式有限 | 固定样式 |
| 成本 | 仅需支付LLM API费用 | 月费 $10-$30 | 月费 $12+ |
| 生成质量 | 依赖模型 + 提示词;可调 | 较高(专业化提示工程) | 较高,限模板 |
| API | 提供REST API | 无公开API | 无公开API |
我的观点:闭源产品的体验确实更精致,但你永远不知道自己的数据在后台被如何处理。对于企业用户或注重隐私的开发者,自由部署的开源方案是唯一安全的选择。 Presenton 的价值不在于现在是否能打败 Gamma,而在于你拥有了一个可以完全控制的 AI 输出管道。
三、技术拆解:它到底怎么工作的?
3.1 整体架构
Presenton 基于 TypeScript 开发,前端使用 React (Next.js),后端处理逻辑,主要分为三步:
- 输入处理:接收用户输入的文本(自然语言或Markdown),附带主题、页数等参数。
- LLM调用:将输入内容组装成 Prompt,调用 OpenAI GPT-4 (或兼容API) 生成结构化的演示文稿数据(JSON格式,包含每页标题、要点、配图描述等)。
- 渲染输出:将结构化数据填入一套预定义的 PowerPoint 模板(通过 PptxGenJS 库),生成 .pptx 文件。

3.2 核心代码:Prompt 工程
我在项目源码中找到关键的 Prompt 模板(路径大概在 lib/prompt.ts 或类似位置)。核心逻辑就是让 LLM 按指定 JSON Schema 输出。
const presentationPrompt = `You are an expert presentation designer.
Given the topic: "${topic}" and the context: "${context}",
generate a presentation with ${numSlides} slides.
Each slide should have:
- title: short and impactful
- bullets: list of 3-5 key points
- imageDescription: a concise phrase for image search (can be used to generate image later)
- speakerNotes: optional extra context
Output as JSON array of slides.`;
注意这个设计:它没有直接让 LLM 生成 PPT 格式,而是先生成内容结构,再由程序去渲染模板。 这种解耦的好处是:
- 你随时可以换掉 LLM (比如用国产模型或本地模型)
- 你随时可以换模板样式,不影响内容逻辑
3.3 渲染引擎:PptxGenJS
项目选择了 PptxGenJS 这个纯 JS 库来生成 .pptx 文件,而不是用 Selenium 操控 PowerPoint 应用。优点是无头运行、跨平台、速度快。
示例代码(我根据源码重构的简化版):
import pptxgen from "pptxgenjs";
function renderSlides(slidesData: SlideData[], template: TemplateConfig): void {
const pptx = new pptxgen();
slidesData.forEach((slide, idx) => {
const slideObj = pptx.addSlide();
// 根据模板设置背景色
slideObj.background = { color: template.backgroundColor };
// 添加标题
slideObj.addText(slide.title, {
x: 0.5, y: 0.3, w: 9, h: 1,
fontSize: 28, bold: true, color: template.titleColor
});
// 添加要点
slideObj.addText(slide.bullets.map(b => `• ${b}`).join('\n'), {
x: 0.5, y: 1.5, w: 8, h: 4,
fontSize: 18, color: template.bodyColor,
lineSpacingMultiple: 1.5
});
// 如果有图片描述,可以用 Unsplash API 获取图片(项目可选)
});
pptx.writeFile({ fileName: `presentation-${Date.now()}.pptx` });
}
四、动手实战:30分钟部署你自己的AI PPT生成器
4.1 环境准备
你需要:服务器(或者本地 Docker)、一个 OpenAI API Key(或者其他兼容 API)。
4.2 部署步骤
项目提供了 Docker Compose 方式,非常友好。
# 1. 克隆
[email protected]:presenton/presenton.git
cd presenton
# 2. 复制环境变量模板
cp .env.example .env
# 编辑 .env,填入 OPENAI_API_KEY 等
# 3. 启动
[email protected] compose up -d
不到 5 分钟就能看到 Web 界面:http://localhost:3000
4.3 调用 API 自动化生成
我对 Presenton 最满意的一点是它提供了 REST API,可以嵌入到其他工作流中。比如,你想把 Jira 上新开的 Story 自动转成汇报 PPT:
curl -X POST http://localhost:3000/api/presentations \
-H "Content-Type: application/json" \
-d '{
"topic": "2025 Q1 技术部业绩回顾",
"context": "完成三个平台上线,团队扩展至15人,月度bug率下降30%",
"numSlides": 8,
"model": "gpt-4"
}'
# 返回一个 downloadUrl,可以程序化下载 .pptx 文件
结合 GitHub Actions 或 Zapier,可以做到:每天早晨自动生成昨日运营数据报告 PPT,并发送到邮箱。

五、实测效果:它真的能取代人工吗?
5.1 我测试的一个场景
输入:"# 2025年三月网站运营月报\n## 流量概览\n- 总访问量:120万,环比增长15%\n- 新用户占比42%\n- 跳出率下降至28%\n## 转化分析\n- 整体转化率2.1%,同比提升0.3pp\n- 落地页A/B测试:版本B转化率3.4% 高于版本A的2.1%\n## 下月计划\n- 优化付费流程\n- 上线新landing page"
5.2 生成结果
- 耗时:从发出请求到下载完成大约 25 秒(包括GPT处理时间 + 渲染)
- 页数:默认 8 页(封面+目录+3个章节+总结),结构合理
- 排版:使用了默认的“Professional”主题配色,字号、间距都在合理范围内
- 内容:没有错别字,但“版本B转化率3.4%”被拆成了单独一页,有点过度细碎。
5.3 需要人工调整的地方
- 配图:默认主题没有自动配图,需要手动添加或启用 Unsplash 集成(有版权风险,建议关闭)
- 图表:没有自动生成柱状图/折线图,这类量化数据最好还是用工具做图后嵌入
- 细节:有些页面要点太长,一行放不下需要手动换行
整体来说,它生成的初稿可以直接交付给领导看,节省了我至少60%的排版时间。但要达到高质量终稿,仍需人工微调。
六、落地注意事项(开发者版)
6.1 模型选择与成本
Presenton 默认用 GPT-4,但 GPT-4 成本较高(一个20页的 PPT 大约消耗 3000-5000 token,费用约 $0.1-0.2)。如果只是内部快速打样,可以考虑 GPT-3.5-turbo(便宜 20 倍,但生成的结构化质量略差)。
我推荐用 Claude 3 Haiku 或者 Qwen2.5-72B(通过 API),性价比高,输出 JSON 的稳定性也不错。
6.2 提示词优化
原项目的 Prompt 比较通用,你可以 fork 后修改提示词来适配自己的业务场景,比如:
- 加入企业品牌风格要求(色号、字体)
- 规定每页要点数量不超过5个
- 要求所有数据点都附带来源
const myPrompt = `...您必须遵循以下样式规范:
- 主色调:#2B579A
- 标题字体:'微软雅黑',加粗,字号32
- 正文字体:'微软雅黑',字号18,行距1.5倍
- 每页最多3个要点,且每个要点不超过15个字
...`;
6.3 模板系统扩展
目前项目内置了 3-4 套模板,全在代码里。你可以通过修改 templates/ 目录下的配置来增加新模板,注意同步修改渲染逻辑。
6.4 安全与合规
- 数据: 如果使用 OpenAI API,你的内容仍然会经过第三方;如果要彻底私有化,可以接入本地的 Ollama 模型(Llama 3 或 Qwen)
- 输出: 自动生成的 PPT 可能包含版权图片(如果开启 Unsplash),建议在公司内部使用 FreePik API 或 Pixabay 并加上正确 attribution
- 内容审核: LLM 可能生成不当言论,在正式发布前一定要人工复核
七、我的判断:开源AI PPT的下一步
Presenton 的火爆说明了一件事:开发者对闭源演示工具的忍耐已经到达临界点。大家受够了每月付费、功能阉割、数据泄露的恐惧。
但请注意,这个项目的代码量不大,核心是“LLM + PPTX模板”的胶水代码。这意味着:
- 竞争壁垒低:很快会涌现出大量类似的轮子。
- 价值在于定制:谁能在模板质量、Prompt优化、多语言支持、图表生成上做得更好,谁才真正有壁垒。
- 对企业更实在:与其买Gamma的团队版,不如内部部署一个 Presenton 并针对本团队报告格式微调,长期成本更低。
给开发者的建议:如果你有内部报告生成的需求,现在就可以 git clone 下来改一改。不要追求完美,先用起来,再逐步优化模板和提示词。它不一定能帮你做出惊艳的 keynote,但绝对能把你从重复排版中解放出来。
最后,如果你部署并改进了 Presenton,欢迎分享你的自定义模板。自动化办公的乐趣,就是看着机器替你把时间省下来,去做真正有创意的事。
本文所有代码示例基于 Presenton v0.1.0 (2025-03-15 commit)。实际使用时请参考最新源码。