我试用了非常多市面上用于生成 PPt 的工具,目前市面上的生成工具往往都有一些问题:
- 内容质量不高:缺少细节和必要内容,乍一看内容还挺多,尤其是文件大纲目录比我想的还要完整,但是实际的内容质量不高。
- 缺少必要的元素:比如图片、图表、表格、公式等,这些元素对于 PPt 的展示效果非常重要。
- 版式固定:基本都只有“三段论”、“四段论”、“标题”等几种版式,无法满足不同主题的需求。
- 字体和母版有问题:虽然有的工具支持自行上传母版,但通过 AI 编辑后的 PPt ,会丢失母版信息,同时自己也会出现字体问题。
- 生成的 PPt 无法下载,只能在浏览器中查看,本地下载的只能是 PDF 。
所以我决定自己写一个 PPt 生成工具,来解决这些问题,项目取名为 PPt Yoda,希望它能像尤达大师一样,帮助每一个绝地大师完成 PPt 编写。
我对 PPt 制作的理解
PPt 创作的过程
相比于平铺的内容,PPt 的优势在于适配屏幕尺寸,给出更好的排版,通过动画等方式更加形象地展示内容。
所以我们可以简单地把 PPt 创作拆解成两个过程:
内容创作
+PPt 布局
- 关于
内容创作
,和基本 AI 创作的模式是一致的,最后应该形成具有良好层级结构的内容,包含表格、图表和图片,markdown 或者 json 都是不错的承载形式。
- 而
PPt 布局
则需要考虑 PPt 的特有属性,把平铺的内容拆分成一个一个的页面,根据页面内容添加必要的图片、动画,根据内容的多少、元素之间的关系进行合理布局。
工具化拆解 PPt 的制作过程
- 了解任务背景:首先明确 PPt 演示的主题、受众、场合、时长等基本信息,并明确通过材料希望达成的目标等。
- 确定内容大纲:根据任务背景,分为哪些具体的章节,每个章节希望达到什么目的。注意这个“内容大纲”和“PPt 大纲”并不等同。内容大纲更关注内容,而 PPt 大纲更关注 PPt 的结构。
- 素材与信息收集:收集信息的方式,可以包括网络数据检索,本地现有材料挖掘,或者自行创作等。
- 完成内容创作:根据内容大纲,结合收集到的信息,完成内容创作,包括文字、列表、图表、表格、公式等,确保内容的质量和准确性。
- 进行内容分页:根据内容创作的结果,综合考虑信息层级、内容字数等,对内容进行“分页”
- 完成页面设计:完成“分页”后,对每一页的内容进行分析,选择合适的布局,并添加必要的图片、动画等,确保 PPt 的质量和效果。
- 完成素材创作:材料中存在大量的图片、图表、表格、公式等,需要根据页面内容,对这些素材进行创作。
其中 1-4 是内容创作的过程,可以由 AI 辅助; 5-6 是 PPt 布局的过程; 7 是素材创作的过程。
值得注意的是:
- 在真实的场景下,2 、3 、4 步骤实际上是一个穿插的过程,当我们收集了一定的素材,我们可能会希望重新调整大纲,或者给每一页做内容调整。
- 理论上步骤 5 、6 的过程中,也可能不仅包括内容的删除和重组,可能也会为了页面的需求,增加一部分新的内容,但目前我们先不考虑。
功能设计
愿景与诉求
我希望我的 PPt 生成工具能够满足以下几个方面的需求:
- 内容质量高:通过 AI 生成的 PPt ,内容质量高,细节丰富,符合我的需求。
- 元素丰富:支持图片、图表、表格、公式等元素,能够满足不同主题的需求。
- 版式灵活:支持自定义版式,能够满足不同主题的需求。
- 字体和母版问题:支持上传母版,能够解决字体和母版问题。
- 生成 的 PPt 可以下载,也可以通过浏览器预览,兼容 PPt 的同时,支持一些 JS 动画。
- 人机协同:制作过程的每一步都可以形成一个独立的任务,交给 AI 来完成,同时支持人工监督或信息补充。
功能拆解
PPT Yoda 将整个创作过程流水线化,每一步都支持 AI 辅助和人工微调:
- 任务理解与大纲生成: AI 首先会分析用户的核心目标、受众和场景,生成一个逻辑清晰的演示大纲。
- 素材收集与整合: 系统能够根据大纲,从用户提供的本地文件或知识库中检索、整合相关信息。
- 全文内容创作: 基于大纲和素材,AI 会撰写每一页的详细讲稿,包括文字、数据要点等。
- 智能分页与布局: AI 会根据内容的逻辑层级和信息密度,自动将全文切分成独立的页面。
- 模板应用与生成: 最后,系统会将分页后的内容精确地填充到用户指定的 PPT 模板中,生成最终的演示文稿。
重点功能模块包括:
- 📚 素材管理: 支持用户对 PPt 相关素材内容进行管理,并提供素材收集任务的管理功能。
- 🤖 内容生成: 基于强大的语言模型( LLM ),可自动生成演示文稿的大纲和逐页讲稿;支持直接插入模板中的页面或章节。
- 🎨 多媒体生成:基于多模态大模型,根据材料需求,完成图片、图标等内容的自动生成。
- 🎆 PPt 生成: 用户可以上传自己的
.pptx
文件作为母版,AI 将在此基础上进行内容填充和布局,完美保留原始设计风格。
- 🌐 Web 用户界面: 提供一个基于 Next.js 的现代化界面,支持多用户管理,每个用户可以创建自己的项目空间,上传素材、选择模板并启动生成任务。
- 🗂️ 项目化管理: 将每一次演示文稿的创建过程作为一个独立项目进行管理,清晰地追踪从
想法 -> 素材 -> 大纲 -> 全文 -> 最终 PPt
的每一个阶段。
快速开始
环境准备
在开始之前,请确保您的系统已安装以下软件:
安装步骤
a. 克隆仓库
git clone https://github.com/maquedexiju/PPtYoda.git
cd PPtYoda
b. 安装后端依赖
# 使用 uv 根据 pyproject.toml 安装依赖
uv pip install -e .
c. 安装前端依赖
cd frontend
npm install
cd ..
d. 初始化项目
运行安装脚本来生成配置文件、初始化数据库并导入默认模板。
# 该脚本会自动创建 config.ini, 初始化数据库, 并创建超级用户
python install.py
注意:默认存在一个超级用户,用户名: ppt_killer
,密码: pt_12345
。
配置
a. 后端配置
安装脚本会自动从 config.ini.example
复制生成 config.ini
文件。您需要编辑此文件,填入您的 LLM API 密钥等信息。
[LLM]
LLM_BASE_URL = ...
LLM_API_KEY = sk-YourAPIKeyHere
LLM_MODEL = ...
...
启动项目
我提供了一个便捷的脚本,可以同时启动后端和前端服务。
python runserver.py
启动后:
- 🚀 后端 Django 服务 将运行在
http://localhost:8810
- 🚀 前端 Next.js 服务 将运行在
http://localhost:3000
现在,您可以打开浏览器访问 http://localhost:3000
开始使用。
您可以通过 http://localhost:8810/admin/
进行后台管理,默认用户名 ppt_killer
,密码 pt_12345
。
同时会自动生成一个演示项目,用来说明项目的使用方法,欢迎大家下载使用,提出自己的宝贵意见,并参与项目开发。
项目 github 地址: https://github.com/maquedexiju/PPtYoda