我上一次手工做 PPT,是什么时候?

想了半天,大概是去年这个时候。那时候要给客户做一个技术方案,20 多页,我在电脑前坐了 4 个小时,复制粘贴、调字体、改配色。做完之后眼睛都花了,脑子里一片空白。

现在?这种活儿我基本不碰了。不是因为我不做 PPT 了——恰恰相反,我做的 PPT 比以前多多了——而是因为,我已经不记得上一次亲手调字体是哪天了。

这句话说出来我自己都觉得有点夸张。但这是真的。

今天想聊聊,我是怎么一步步把自己从 PPT 苦力,变成一个「指挥 AI 干活」的甩手掌柜的。这不是一个产品评测,不是一个炫酷 Demo 的展示,而是我真实用起来、踩过坑、也真的省了时间之后,写下的思考。


1. 现有 AI PPT 工具的问题

在聊我的方案之前,先说说为什么我没有直接用现成的 AI PPT 产品。

市面上这类工具我基本都试过。Gamma、Beautiful.ai、博思白板,还有一些国内的。能做到「一句话生成 PPT」的也有很多。技术本身不差,但用着用着,我发现了一个根本性的问题:

它们都在解决「制作效率」的问题,而不是「制作流程」的问题。

举个例子。你在 Gamma 里输入一个主题,它能给你生成一个完整的 PPT。看起来很美,对吧?但问题在于:

  • 你得先把内容整理好喂给它,它才能生成
  • 生成的风格不一定符合你的场景
  • 调整细节(比如某页的某句话)依然要手动改
  • 每次都是「从零生成」,没有上下文,没有记忆

这不是 AI PPT 的错。这是工具设计的思路问题。大多数工具在做的是「让人更快地做 PPT」,而不是「让人不需要再做 PPT」。

我需要的不是一个更快的编辑器,而是一个能理解我意图、能自主完成全流程的 Agent。


2. 我想要的,是一个「不用我操心」的 Agent

我理想中的 PPT 制作流程是这样的:

我说:「帮我做一个关于 React 18 新特性的技术分享,明天要用」
Agent 回答:「好的,我来处理」
然后它就自己去:
1. 搜集资料(读文档、搜技术文章)
2. 整理内容(提炼要点、组织结构)
3. 生成 PPT(根据我的偏好选择风格、配色)
4. 输出文件(或者直接生成在线链接)
全程我只需要最后看一眼,决定要不要微调

注意,不是「帮我生成一个 PPT」,而是「帮我完成 PPT 这件事」。这是两个完全不同的概念。

前者是工具,后者是 Agent。

工具需要人操作,Agent 需要人监督。

我把这个理念落地成了自己的一个小系统。不完美,但在用。


3. 架构设计:Multi-Agent 协作的 PPT 工厂

我的方案不是一个大模型搞定一切,而是一个多 Agent 协作的架构。为什么会这样?

因为 PPT 制作这件事,本质上包含多个不同性质的任务:

  • 内容理解:读懂需求,从海量信息中提取关键内容
  • 结构规划:决定怎么组织这些内容,分几页,每页讲什么
  • 视觉设计:选择配色、布局、字体风格
  • 代码执行:调用生成工具、存储文件、控制流程

每个任务的最佳模型可能不同。有些任务需要强推理,有些需要强记忆,有些需要很强的格式化能力。与其让一个模型硬扛所有,不如让专业的人干专业的事。

下面是我目前的架构:

┌─────────────────────────────────────────────────────────┐
│                    User (我)                             │
│                 「做一个关于 XXX 的 PPT」                  │
└─────────────────────────┬───────────────────────────────┘
                          │
                          ▼
┌─────────────────────────────────────────────────────────┐
│                  Orchestrator Agent                       │
│  (意图理解 + 任务拆解 + 结果整合)                          │
│                                                          │
│  输入:用户需求                                           │
│  输出:拆解后的任务清单 + 各 Agent 的执行结果              │
└─────────────────────────┬───────────────────────────────┘
                          │
          ┌───────────────┼───────────────┐
          ▼               ▼               ▼
   ┌────────────┐  ┌────────────┐  ┌────────────┐
   │  Research  │  │   Writer   │  │  Generator  │
   │   Agent    │  │   Agent    │  │   Agent    │
   │            │  │            │  │            │
   │ 搜集资料   │  │ 规划结构   │  │ 生成 PPT   │
   │ 整理信息   │  │ 撰写文案   │  │ 应用样式   │
   └────────────┘  └────────────┘  └────────────┘

每个 Agent 的职责:

  • Research Agent:负责信息收集。调用搜索工具、读文档、抓取网页,把和主题相关的资料整理出来,输出结构化的笔记。
  • Writer Agent:负责内容创作。接收 Research 的输出,决定 PPT 的整体结构(分几章、每章几页),然后逐页撰写内容。
  • Generator Agent:负责最终输出。接收 Writer 的内容,调用具体的 PPT 生成工具(可以是 python-pptx,可以是某个 API),完成文件生成。

Orchestrator Agent 是核心,它理解用户需求,调度其他三个 Agent,整合结果,并且在出错时负责重试或调整。


4. 核心实现:代码与 Prompt 工程

架构说完了,关键在于实现。以下是我目前跑在生产环境里的核心代码片段(做了简化处理)。

4.1 Orchestrator:任务调度

class PPTOrchestrator:
    def __init__(self):
        self.researcher = ResearchAgent()
        self.writer = WriterAgent()
        self.generator = GeneratorAgent()

    async def build_ppt(self, user_request: str) -> str:
        # 1. 解析用户意图
        intent = self._parse_intent(user_request)

        # 2. 调度 Research Agent
        research_result = await self.researcher.investigate(intent.topic)

        # 3. 调度 Writer Agent
        content_plan = await self.writer.plan(
            research=research_result,
            style=intent.preference
        )

        # 4. 调度 Generator Agent
        final_file = await self.generator.create(
            plan=content_plan,
            theme=intent.theme
        )

        return final_file

这个看起来很简单,但魔鬼在细节。Orchestrator 的核心能力不在于「调用」,而在于:

  • 判断每个 Agent 任务的完成质量
  • 决定是否需要重来或者调整
  • 处理 Agent 之间的数据格式转换

4.2 Research Agent:信息收集

class ResearchAgent:
    def __init__(self):
        self.tools = [WebSearch(), DocFetcher(), NoteReader()]

    async def investigate(self, topic: str) -> ResearchOutput:
        # 并行搜索多个来源
        tasks = [
            self.tools[0].search(f"{topic} 官方文档"),
            self.tools[0].search(f"{topic} 技术博客 最新"),
            self.tools[1].fetch_official_docs(topic),
        ]

        results = await asyncio.gather(*tasks)

        # 提取关键信息
        key_points = self._extract_key_points(results)
        references = self._dedup_sources(results)

        return ResearchOutput(
            topic=topic,
            points=key_points,
            sources=references
        )

    def _extract_key_points(self, results: list) -> list:
        # 用 LLM 从搜索结果中提炼要点
        prompt = f"""
        从以下资料中提取 10 个最重要的知识点,用简洁的短句表达:
        {results}
        """
        response = llm.call(prompt)
        return parse_key_points(response)

这里有个关键点:Research Agent 不是简单地把搜索结果返回来,而是会用 LLM 做一次「蒸馏」——从大量信息里提取真正有价值的内容。没有这一步的话,Writer Agent 会收到太多噪音。

4.3 Generator Agent:PPT 生成

class GeneratorAgent:
    def __init__(self):
        self.ppt_engine = PythonPPTXEngine()
        self.style_loader = StyleLoader()

    async def create(self, plan: ContentPlan, theme: str) -> str:
        # 加载主题样式
        style = self.style_loader.load(theme)

        # 创建 PPT
        prs = Presentation()
        prs.slide_width = 12192000  # 16:9
        prs.slide_height = 6858000

        for page in plan.pages:
            slide = prs.slides.add_slide(self._get_layout(prs, 'title_and_content'))
            self._fill_slide(slide, page, style)

        # 保存
        output_path = f"/tmp/ppt_{uuid.uuid4()}.pptx"
        prs.save(output_path)

        return output_path

    def _fill_slide(self, slide, page: PageContent, style):
        # 填充标题
        title_shape = slide.shapes.title
        title_shape.text = page.title

        # 填充正文
        body = slide.placeholders[1]
        tf = body.text_frame
        for bullet in page.bullets:
            p = tf.add_paragraph()
            p.text = bullet
            p.level = bullet.get('level', 0)

这是用 python-pptx 的版本。如果你调用的是第三方 API(比如有些厂商提供 PPT 生成 API),换掉 PythonPPTXEngine 这层就行,Orchestrator 和 Prompt 的逻辑完全不用动。


5. 实际使用体验

说了这么多架构和代码,你可能最想知道:这玩意儿到底能不能用?

我的答案是:能用,但不像宣传片里那么神。

先说好的部分。

真的省时间。 以前做一个技术分享 PPT,我要先花半天整理资料,再花半天做 PPT。现在我把需求丢给 Agent,等 10 分钟,文件就出来了。我只需要做最后的人工审核——改一改某些表述,调一下顺序,基本上就能用。

风格一致性好。 我给 Agent 定义了一个「技术分享」的样式模板,包含字体大小、配色方案、每页的结构规范。一旦定好,每次生成的 PPT 风格都是统一的。这点比手工做强多了——手工做的时候,做到后面往往就懒得保持一致了。

迭代速度快。 如果我对某个章节不满意,可以让 Writer Agent 单独重写那一部分,然后让 Generator 重新生成那一页。不需要从头来。

现在说问题。

质量问题参差不齐。 LLM 生成的内容,有时候会有「听起来很正式但什么都没说」的问题。这不是 bug,是模型的性格。需要人工审核来过滤。

复杂图表还是得自己画。 我的 Agent 目前主要处理文字内容。如果 PPT 里需要流程图、架构图这类东西,Agent 的能力还是有限。它可以生成占位符,但生成真正好看的图表,目前还要依赖专门的绘图 Agent。

定制化程度有限。 我可以调整「风格偏好」这类宏观参数,但要让 Agent 完全按照我的个人审美来生成,目前还做不到。Agent 生成的东西,80% 我是满意的,剩下 20% 需要手工调整。


6. 我的工作流现在是这样的

说了这么多架构,可能有点抽象。说说具体我怎么用它。

周一早上,老板说:「这周技术分享你来,讲微服务治理。」

以前的我:打开 PPT 模板,开始痛苦地 Ctrl+C/V。

现在的我:在飞书里给 Bot 发一条消息——

/ppt 生成技术分享,主题:微服务治理实践,20分钟时长,听众是有一定经验的工程师

然后我去倒杯咖啡。回来的时候,文件已经在飞书里了。我打开看一遍,发现第三章的顺序可以调一下,于是告诉 Bot:

调整一下,把「熔断与限流」那章放到「服务网格」之前

Bot 照做,生成新版本,我确认,没问题,发送。

整个过程,我真正的介入时间大概 10 分钟。大部分时间在「等」和「审」,不在「做」。


7. 局限与真实想法

我不会把这套系统吹成什么革命性的东西。它就是一个工具,比没有它的时候好一点。仅此而已。

它解决不了的问题是:

  • 创意类的 PPT 做不了:如果你要做一个需要独特叙事结构的品牌宣讲,AI 给不了你这种东西。这不是技术问题,是创意来源的问题。
  • 复杂数据可视化做不了:目前还是需要手动或者专门的 BI 工具来处理。
  • 不能理解「我要的感觉」:你说「这个 PPT 要显得高级」,AI 能给你一个深色系配金色字体的版本,但它不知道你说的「高级」具体是什么意思。

这些局限不是技术瓶颈,而是 AI 能力边界的真实写照。我对它的期待是「帮我做我能描述清楚的事」,而不是「帮我做我自己都不知道要什么的事」。


8. 对 AI 工作流自动化的展望

说回到更大的话题。PPT 制作只是一个小场景,但它折射出一个更大的趋势。

我们正在从「用 AI 辅助做事」走向「让 AI 自主做事」。

这两个阶段的区别很微妙。辅助做事的时候,人还是主角,AI 是工具。自主做事的时候,AI 是主角,人变成监督者。

这种转变带来的最大变化,不是效率提升,而是人的角色重新定义

以前我们评价一个人的能力,会说「他会做 PPT」「他会写代码」「他会做数据分析」。未来,这些「会做」的价值会越来越低,因为 AI 都能做了。

那人的价值在哪?在于判断:知道要做什么,知道做到什么程度,知道结果好不好。这不是技能,是经验积累出来的直觉。

所以我现在训练自己的方式,不是学更多工具,而是学会给 AI 布置任务。你的 Prompt 越好,AI 帮你做得越好。这个能力,越来越重要。


9. 写在最后

回到标题那句话:「I don't make slides anymore. My agent does it entirely for me.」

这句话有一点点噱头,但不完全是噱头。它是真的。

我的 PPT 确实不是我自己做的了。但这不是因为 AI 变得多厉害,而是因为我想清楚了:我的时间应该花在 AI 做不了的事情上——判断、决策、审美、创意。把「做 PPT」这种事交给 Agent,是效率的选择,也是角色转换的开始。

如果你也在用类似的工具,或者在探索 AI 工作流自动化的可能性,我很想知道你的体验。毕竟,这条路还在走,没到终点。


(本文提到的代码示例已做简化处理,供参考。实际运行时需要根据具体的模型 API 和 PPT 生成工具做适配。)