共计 2340 个字符,预计需要花费 6 分钟才能阅读完成。
背景痛点
作为经常需要制作 PPT 的开发者,我深刻体会到了手动制作 PPT 的耗时问题。传统方式需要反复调整格式、对齐文本框、统一字体,往往内容创作只占 30% 时间,剩下 70% 都耗费在排版上。而直接使用 ChatGPT 生成的 PPT 内容常常面临以下问题:

- 格式错乱:生成的文本可能包含特殊字符或不符合 PPT 规范
- 结构不连贯:幻灯片之间的逻辑衔接生硬
- 样式单一:缺乏专业的视觉设计元素
技术架构选择
在尝试了多种方案后,我发现使用 Markdown 作为中间件是最优解。以下是两种主要方案的对比:
直接调用 API 方案
- 优点:实现简单,直接获取结果
- 缺点:
- 格式控制能力弱
- 错误难以追溯
- 内容调整成本高
Markdown 中间件方案
- 优点:
- 结构化内容易于处理
- 支持版本控制
- 可进行预处理和后处理
- 缺点:需要额外转换步骤
核心实现
1. 构建 Prompt 模板
一个好的 prompt 应该包含以下要素:
def build_prompt(topic, slides_count):
return f"""
你是一位专业的 PPT 内容创作者,请为 {topic} 主题创建包含 {slides_count} 张幻灯片的 Markdown 格式内容。要求:1. 使用 #表示幻灯片标题,## 表示二级标题,- 表示列表项
2. 每张幻灯片用 --- 分隔
3. 避免使用复杂表格和代码块
4. 中文内容需简洁明了
示例格式:# 封面页
这里是封面内容
---
# 第一页标题
- 要点 1
- 要点 2
"""
2. API 调用与错误处理
import openai
import time
def generate_content(prompt, max_retries=3):
retry_count = 0
while retry_count < max_retries:
try:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0.7
)
return response.choices[0].message.content
except Exception as e:
print(f"请求失败: {e}, 重试中... ({retry_count+1}/{max_retries})")
retry_count += 1
time.sleep(2)
raise Exception("API 请求多次失败")
3. Markdown 转 PPTX
from pptx import Presentation
from pptx.util import Inches
def md_to_pptx(md_content, output_file):
prs = Presentation()
slides = md_content.split('---')
for slide_content in slides:
if not slide_content.strip():
continue
# 添加新幻灯片
slide_layout = prs.slide_layouts[1] # 标题 + 内容布局
slide = prs.slides.add_slide(slide_layout)
# 处理标题和内容
lines = slide_content.split('\n')
title = lines[0].replace('#', '').strip()
body = '\n'.join(lines[1:]).strip()
slide.shapes.title.text = title
if body:
tf = slide.placeholders[1].text_frame
tf.text = body
prs.save(output_file)
生产级优化
中文排版字体回退
def set_chinese_font(shape):
for paragraph in shape.text_frame.paragraphs:
for run in paragraph.runs:
run.font.name = '微软雅黑'
run._element.get_or_add_rPr().append(pptx.oxml.shared.OxmlElement('a:latin')
).set('typeface', 'Calibri')
多线程速率限制
from ratelimit import limits, sleep_and_retry
# 限制每分钟 30 次请求
@sleep_and_retry
@limits(calls=30, period=60)
def safe_api_call(prompt):
return generate_content(prompt)
避坑指南
避免内容幻觉
- 在 prompt 中明确限制响应格式
- 要求 ChatGPT 只使用提供的信息
- 添加示例输出
幻灯片母版预设
- 提前设计好母版
- 定义好配色方案
- 设置默认字体
- 创建常用版式
扩展思考
集成 Stable Diffusion 实现图文混排:
- 在 prompt 中请求图像描述
- 使用图像描述调用 Stable Diffusion API
- 将生成的图片插入 PPT 相应位置
- 调整图片大小和位置
def add_image_to_slide(slide, image_path):
left = Inches(1)
top = Inches(1.5)
pic = slide.shapes.add_picture(image_path, left, top, height=Inches(4))
总结
通过这套方案,我成功将 PPT 制作时间从原来的 2 - 3 小时缩短到 15 分钟左右。最重要的是,现在可以专注于内容创作,而不用操心排版问题。对于开发者来说,这种自动化工作流可以节省大量重复劳动时间。
下一步计划是进一步完善模板系统,支持更多样化的幻灯片布局,并优化图像生成的质量和相关性。
正文完
发表至: 未分类
近三天内
