Python+DeepSeek组合拳:30秒生成专业级PPT(附可复制代码)

在数字化办公与教学场景中,演示文稿已成为信息传递的核心载体。作为兼具视觉表达与结构化呈现的工具,PowerPoint广泛应用于学术汇报、商业提案、教育培训等多个领域,其专业性与易用性使其成为职场人士和教育工作者的首选工具。然而,从内容策划、视觉设计到动态演示的全面打磨,往往需要投入大量认知资源与制作时间,这对快节奏工作场景下的效率需求构成了显著挑战。

针对这一效率瓶颈,智能演示生成技术应运而生。该技术深度整合自然语言处理(NLP),通过语义解析引擎实现文本信息的逻辑重构,完成信息收集与PPT生成。

我们以"Python入门教程"PPT为例,演示如何来实现。

在开始之前,我们先准备一下开发环境,使用pip安装openaipython-pptx

bash 复制代码
pip install openai python-pptx

一、基础方案

最简单的想法是:通过DeepSeek获取到需要的数据,然后填写到PPT文件中。具体步骤如下:

  1. 调用DeepSeek接口获取数据。注意要求AI输出结果为JSON结构(在提示词中注明),方便我们操作数据。
  2. 创建PPT文件对象。
  3. 遍历JSON数据,依次创建幻灯片并设置标题及内容。
  4. 保存PPT文件。
python 复制代码
import json
import time
from openai import OpenAI
from pptx import Presentation
from pptx.util import Inches, Pt


print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

# ==========第一步、通过DeepSeek获取数据==========
# 建立DeekSeek连接,其中api_key请自行到DeepSeek购买获取
client = OpenAI(api_key="<api_key>", base_url="https://api.deepseek.com")
# 提示词
messages = [
    {
        "role": "user", 
        "content": "你是ppt专家,也是一位资深的python开发工程师,请设计一份"Python入门教程"的PPT。要求:"
                   "1、以JSON格式输出"
                   "2、符合培训需求,将相关知识介绍清晰完整"
    }
]
# 发送请求
response = client.chat.completions.create(model="deepseek-chat", messages=messages, response_format={'type': 'json_object'})
# 将响应数据转为JSON格式
data = json.loads(response.choices[0].message.content)
print(data)


# ==========第二步、创建PPT文件并写入数据==========
# 创建一个新PPT对象
ppt = Presentation()
# 设置幻灯片版式(标题+内容)
slide_layout = ppt.slide_layouts[1]
# 遍历数据,添加幻灯片及内容
for slide_info in data['slides']:
    # 添加幻灯片
    slide = ppt.slides.add_slide(slide_layout)
    # 设置幻灯片标题
    title = slide.shapes.title
    title.text = slide_info['title']
    # 获取内容占位符
    content = slide.placeholders[1]
    tf = content.text_frame
    # 清空默认内容
    tf.clear()
    # 添加段落内容
    for line in slide_info["content"]:
        # 处理不同层级的内容
        if line.startswith("-"):
            p = tf.add_paragraph()
            p.text = line[2:].strip()
            p.level = 1
            p.font.size = Pt(18)
        elif line.strip().endswith(":"):
            p = tf.add_paragraph()
            p.text = line
            p.level = 0
            p.font.bold = True
            p.font.size = Pt(20)
        else:
            p = tf.add_paragraph()
            p.text = line
            p.level = 0
            p.font.size = Pt(22)
# 保存PPT文件
ppt.save('AI生成_Python入门教程.pptx')


print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

以上代码可以在30秒之内生成一份PPT,效果如下:

可以看出,这个文档的内容偏少,还不能满足我们真正的需求,主要受大模型输出内容篇幅所限制。

二、进阶方案

因此,我们换个角度来考虑这个问题。我们先让DeepSeek帮我们设计一下PPT的结构或目录;然后再遍历每个标题,让DeepSeek帮我们设计每一页的具体内容。

注意:在这种情景下,我们需要用到DeepSeek的多轮会话功能,以保证前后文内容一致,方法就是将所有问答记录都放到message中。

完整代码如下:

python 复制代码
import json
import time
from openai import OpenAI
from pptx import Presentation
from pptx.util import Inches, Pt


print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

# ==========第一步、通过DeepSeek获取数据==========
# 建立DeekSeek连接,其中api_key请自行到DeepSeek购买获取
client = OpenAI(api_key="<api_key>", base_url="https://api.deepseek.com")
# 提示词
messages = [
    {
        "role": "user",
        "content": "你是ppt专家,也是一位资深的python开发工程师,请设计一份"Python入门教程"的PPT大纲,输出每一页幻灯片的标题。要求:"
                   "1、以JSON格式输出,格式类似:{'slides':[{'title': '简介'}, ...]}"
                   "2、标题尽量简单、清晰"
                   "3、整个教程内容比较全面"
    }
]
# 发送请求
response = client.chat.completions.create(model="deepseek-chat", messages=messages, response_format={'type': 'json_object'})
# 将响应数据转为JSON格式
messages.append(response.choices[0].message)
print(type(response.choices[0].message), response.choices[0].message)
print(f"Messages Round 0: {messages}")
data = json.loads(response.choices[0].message.content)
print(data)


# ==========第二步、创建PPT文件并写入数据==========
# 创建一个新PPT对象
ppt = Presentation()
# 设置幻灯片版式(标题+内容)
slide_layout = ppt.slide_layouts[1]
# 遍历数据,添加幻灯片及内容
for i, slide_info in enumerate(data['slides']):
    title = slide_info['title']
    messages.append({'role': 'user', 'content': f'补全此幻灯片的内容:{title},不要多余的解释,结果以JSON格式输出, 格式:{{"content": ['']}}'})
    # print(f'请求数据: {messages}')
    response_per_page = client.chat.completions.create(model="deepseek-chat", messages=messages, response_format={'type': 'json_object'})
    messages.append(response_per_page.choices[0].message)
    print(f'Messages Round {i}: {messages}')
    print(response_per_page.choices[0].message.content)
    page_data = json.loads(response_per_page.choices[0].message.content)
    print(f'page {i}: {page_data}')
    # 添加幻灯片
    slide = ppt.slides.add_slide(slide_layout)
    # 设置幻灯片标题
    slide.shapes.title.text = title
    # 获取内容占位符
    content = slide.placeholders[1]
    tf = content.text_frame
    # 清空默认内容
    tf.clear()
    # 添加段落内容
    for line in page_data['content']:
        # 处理不同层级的内容
        if line.startswith("-"):
            p = tf.add_paragraph()
            p.text = line[2:].strip()
            p.level = 1
            p.font.size = Pt(18)
        elif line.strip().endswith(":"):
            p = tf.add_paragraph()
            p.text = line
            p.level = 0
            p.font.bold = True
            p.font.size = Pt(20)
        else:
            p = tf.add_paragraph()
            p.text = line
            p.level = 0
            p.font.size = Pt(22)
# 保存PPT文件
ppt.save('deepseek_ppt.pptx')

print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

以上代码可以在3分钟内生成一份完善的PPT文件,效果如图:

相关推荐
知乎的哥廷根数学学派12 分钟前
面向可信机械故障诊断的自适应置信度惩罚深度校准算法(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习·矩阵
且去填词23 分钟前
DeepSeek :基于 Schema 推理与自愈机制的智能 ETL
数据仓库·人工智能·python·语言模型·etl·schema·deepseek
人工干智能35 分钟前
OpenAI Assistants API 中 client.beta.threads.messages.create方法,兼谈一星*和两星**解包
python·llm
databook43 分钟前
当条形图遇上极坐标:径向与圆形条形图的视觉革命
python·数据分析·数据可视化
阿部多瑞 ABU1 小时前
`chenmo` —— 可编程元叙事引擎 V2.3+
linux·人工智能·python·ai写作
acanab1 小时前
VScode python插件
ide·vscode·python
知乎的哥廷根数学学派2 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习
WangYaolove13142 小时前
Python基于大数据的电影市场预测分析(源码+文档)
python·django·毕业设计·源码
知乎的哥廷根数学学派3 小时前
基于自适应多尺度小波核编码与注意力增强的脉冲神经网络机械故障诊断(Pytorch)
人工智能·pytorch·python·深度学习·神经网络·机器学习
cnxy1884 小时前
Python爬虫进阶:反爬虫策略与Selenium自动化完整指南
爬虫·python·selenium