手撕Gamma:开源AI PPT生成器Presenton实战

一、场景:再也不想熬夜做PPT

你有没有过这种经历?

周五下午接到通知,下周一要给大老板汇报项目进度。打开 PowerPoint,第一页写标题,第二页写背景,第三页写方案……光是排个版就要纠结两小时。更别提内容还要改三四版。

我统计过,一个20页的周报PPT,从构思到交稿平均需要4-6小时。其中至少一半时间花在“把Word内容搬进PPT”这种毫无创造性的体力活上。

如果有个工具,你只用输入一段文字,它就能自动把你的想法变成一页页排版精美的演示文稿——而且代码开源、数据可控、不用给SaaS平台交月费——你会试试吗?

今天要聊的项目 Presenton 就是干这个的,上线两天就冲到 GitHub 5800+ Star。作为 AI 自动化办公的实践者,我第一时间部署了它,并用它生成了一份真实的工作汇报。

presenton screenshot with input and output


二、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),后端处理逻辑,主要分为三步:

  1. 输入处理:接收用户输入的文本(自然语言或Markdown),附带主题、页数等参数。
  2. LLM调用:将输入内容组装成 Prompt,调用 OpenAI GPT-4 (或兼容API) 生成结构化的演示文稿数据(JSON格式,包含每页标题、要点、配图描述等)。
  3. 渲染输出:将结构化数据填入一套预定义的 PowerPoint 模板(通过 PptxGenJS 库),生成 .pptx 文件。

presenton architecture diagram input->LLM->template->pptx

3.2 核心代码:Prompt 工程

我在项目源码中找到关键的 Prompt 模板(路径大概在 lib/prompt.ts 或类似位置)。核心逻辑就是让 LLM 按指定 JSON Schema 输出。

typescript
1 2 3 4 5 6 7 8 9
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 应用。优点是无头运行、跨平台、速度快。

示例代码(我根据源码重构的简化版):

typescript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
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 方式,非常友好。

bash
1 2 3 4 5 6 7 8 9 10
# 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:

bash
1 2 3 4 5 6 7 8 9
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,并发送到邮箱。

terminal showing curl request and response with download URL


五、实测效果:它真的能取代人工吗?

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个
  • 要求所有数据点都附带来源
typescript
1 2 3 4 5 6
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模板”的胶水代码。这意味着:

  1. 竞争壁垒低:很快会涌现出大量类似的轮子。
  2. 价值在于定制:谁能在模板质量、Prompt优化、多语言支持、图表生成上做得更好,谁才真正有壁垒。
  3. 对企业更实在:与其买Gamma的团队版,不如内部部署一个 Presenton 并针对本团队报告格式微调,长期成本更低。

给开发者的建议:如果你有内部报告生成的需求,现在就可以 git clone 下来改一改。不要追求完美,先用起来,再逐步优化模板和提示词。它不一定能帮你做出惊艳的 keynote,但绝对能把你从重复排版中解放出来。

最后,如果你部署并改进了 Presenton,欢迎分享你的自定义模板。自动化办公的乐趣,就是看着机器替你把时间省下来,去做真正有创意的事。


本文所有代码示例基于 Presenton v0.1.0 (2025-03-15 commit)。实际使用时请参考最新源码。