
系列导航:在 《别急,沉下心来写自己的 AI Agent》 里,我们从零拆解了 AI Agent 的核心原理。上次在 《半天做一个企业AI问答助手:别一上来就RAG》 中,教大家做了一个企业级的实战项目。
这次,教大家做一个自己用的。
这篇文章有点长,但干货密集,文末附完整的系统提示词和源码(Python)。
赶时间的可以直接跳到第五节看成果演示视频。
先简单介绍一下Google NotebookLM,可能有些朋友还没用过。
NotebookLM 是 Google 推出的一款 AI 笔记工具。你把一堆文字材料丢进去——论文、报告、会议纪要都行——它能自动帮你生成精美的信息图风格幻灯片,视觉效果非常惊艳,排版专业、配色讲究,看着就像设计师做的。
它还有一个很火的功能:把你的文档变成一期播客对话,两个 AI 主播你一言我一语地聊你的内容,听起来非常自然。
但——
用过的人大概都会遇到一个问题:
生成的幻灯片,一个字都改不了。
我被这件事气过三次。
第一次,是它帮我生成了一套"看起来很高级"的 PPT。我很兴奋,准备改一下标题发给老板。然后发现——导出来的是 PDF,每一页都是图片,一个字都动不了。(现在 NotebookLM 虽然已经支持下载 .pptx 了,但本质没变——打开后每一页仍然是贴图,里面的元素还是不能编辑。)
第二次,是中文标题生成出来像"鬼画符"。信息图里的文字本质上是 AI 画出来的像素,不是真正的文本渲染。中文笔画复杂,AI 经常画得似是而非。
第三次,是我意识到一个更大的问题:
它不是在帮我做 PPT,它是在帮我做"截图"。
那一刻我就决定:
算了,我自己写一个。
之前有不少读者在我的文章后面留言,问能不能实现 NotebookLM 风格的信息图生成,还有人想要直接生成可编辑的 PPT。
这个需求我一直记着。现在,这个开源项目就是答案——完整的提示词和代码都在 GitHub 上,大家可以自行获取、直接使用或二次开发。
你遇到过这种情况吗?辛辛苦苦等了几分钟,结果标题是乱码,还改不了?评论区聊聊你被 AI 生成工具气到的经历。
后来我发现,这件事本质上不是"生成 PPT"。
而是一个更有意思的问题:
如何把"不可编辑的信息"(图片),还原成"可编辑的结构"(代码)?
一旦你能做到这一点——
这就不是一个工具了。这是一条路径。
具体怎么做?Python 有 python-pptx 这个库,可以用代码精确地创建 PPT 页面。如果让 AI看着信息图,写出对应的 python-pptx 代码,再运行代码生成 PPTX 呢?
整个设计就一句话:
原始文本 → AI优化拆页 → AI生成信息图 → AI读图写代码 → 运行代码 → 可编辑PPTX说人话:让一个 AI 画图,让另一个 AI 看图写代码。两步 AI 调用,搞定。
听起来有点像套娃,但效果很离谱。
搞懂了思路,接下来看具体怎么落地。
整个工具用 Streamlit 搭建,操作流程分四步。
把原始文字材料(会议纪要、技术文档、调研报告……)直接粘贴进去,AI(Gemini Flash)自动帮你:
优化稿和风格描述都是可编辑的,可以按自己的需要调整后再往下走。
点击「一键生成所有图片」,工具逐页调用 Gemini 的图片生成模型,根据每页内容和统一的风格描述,生成专业的信息图。

不满意某一页?可以单独重新生成,还能自定义该页的 Prompt。
这一步的产出和 NotebookLM 类似——一组精美的信息图图片。
如果你只需要 PDF,到这一步就够了。点击「合并为 PDF」即可下载。
这是和 NotebookLM 拉开差距的一步。

点击「一键生成完整 PPT」,工具对每张信息图做三件事:
build_slide(slide) 函数,用代码精确重现这页幻灯片.pptx 文件最终你得到的是一个原生的 PowerPoint 文件,里面的每个文字框、每个图表、每个形状都是独立的可编辑元素。
AI 不会替你做 PPT,它只会替你生成一张更高级的截图。
而我们做的事情,是把截图还原成结构。
AI 生成的代码不可能一次就完美。所以在设计上做了几个关键考量:
每页信息图下面都有独立的操作区:
AI 先出一版 → 手动微调代码 → 立即看效果 → 不满意再调。整个过程不需要反复等 AI 响应。
我预定义了一套 PPT 组件函数,作为 AI 生成代码时的"工具箱":
pythonadd_header_banner(slide, "标题", bg_color=...) # 顶部横幅add_bullet_item(slide, ..., symbol="⚡", ...) # 带图标的要点add_bar_chart(slide, ..., categories=[...], ...) # 柱状图add_data_card(slide, ..., value="50%", ...) # 数据卡片add_table(slide, ..., data=[[...]]) # 表格add_callout_label(slide, ..., text="提效 50%") # 标注标签AI 在 Prompt 中就知道这些函数可用,生成的代码会优先调用它们,而不是从零写起。这大大提高了代码的成功率和一致性。
说人话:给 AI 一盒乐高积木,而不是让它从沙子开始造房子。
你觉得这种"给 AI 预制件"的思路,还能用在什么场景?欢迎评论区脑暴。
AI 写 python-pptx 代码时经常犯一些固定的错误。工具内置了自动纠错层,在代码运行前自动修复:
python# AI 常写错的:shape.line.background()# 自动修正为:shape.line.fill.background()# AI 常用不存在的形状:MSO_SHAPE.DOCUMENT# 自动替换为:MSO_SHAPE.ROUNDED_RECTANGLE每页的代码独立保存、独立生成单页 PPTX,最后再合并为完整文件。
好处:某一页失败不影响其他页,可以单独重做而不用全部重来。
整个项目不到 1000 行代码,结构非常简洁:
app.py # Streamlit 主应用(UI + 流程编排)src/├── optimizer.py # 文档优化(调 Gemini Flash 拆页提炼)├── image_generator.py # 信息图生成(调 Gemini Pro Image)├── ppt_generator.py # PPT 代码生成 + 组装 + 执行├── pdf_builder.py # 图片合并为 PDF├── gemini_client.py # Gemini API 封装└── prompts.py # 所有 Prompt 模板三个 Gemini 模型各司其职:
gemini-3-flash-preview | |
gemini-3-pro-image-preview | |
gemini-3-pro-preview |
PPT 生成的核心流程:
信息图图片 ↓ Gemini Pro(多模态输入:图片 + Prompt)build_slide(slide) 函数代码 ↓ 组装(加入辅助函数 + 颜色常量 + 主程序)完整 Python 脚本 ↓ exec() 执行.pptx 文件直接看视频,从粘贴原稿到生成可编辑 PPT 的完整过程:
视频里可以看到,生成的 PPTX 打开后,每个文字框、图表、形状都是独立的可编辑元素——这就是和 NotebookLM "贴图式 PPT"的本质区别。
这个项目目前是一个"能跑起来"的版本,我接下来想做的几个方向:
1. 接入企业 PPT 模板—— 让生成的 PPT 自动继承公司品牌风格、logo、页脚。
2. 支持更多模型—— 核心的"读图写代码"能力不依赖特定模型,可以替换为 Claude、GPT-5 等。
3. 代码修复闭环—— 代码运行失败时,自动把错误信息回传给 AI 修复,形成"生成 → 运行 → 报错 → 修复 → 重试"的自动闭环。
4. 更丰富的组件库—— 时间轴、流程图、环形图、图片插入……给 AI 更多"积木"。
这件事做完之后,我有一个很强的感觉:
未来很多工具,都会走同一条路——
不是"直接生成结果",而是:
先生成,再还原成结构。
因为只有结构,才是可以被修改、被复用、被进化的。
PPT 是这样,系统也是这样。
真正的价值,不在生成结果,而在把结果重新变回结构。
如果你也被"截图式 AI"折磨过,这个项目你可以试试。
GitHub 地址:
https://github.com/goeasyway/my_notebooklm_with_ppteditable
技术栈:Streamlit + Google Gemini + python-pptx
一句话总结:用 AI 生成信息图,再用 AI 把信息图翻译成可编辑的 PPT 代码。
如果觉得有用,欢迎点赞、在看、转发,让更多有需要的朋友看到。