用 LLM 自动生成 STEM 讲座视频?我用 30 行 Python 复刻了 Academa 的核心逻辑
用 LLM 自动生成 STEM 讲座视频?我用 30 行 Python 复刻了 Academa 的核心逻辑
最近 HN 首页出现了一个项目叫 Academa,核心功能是:给定一个 STEM 主题,自动生成长达数十分钟的讲座视频,包括脚本、语音、字幕。
评论区炸了。有人说"这不就是 AI 版 MIT OpenCourseWare 吗",有人说"质量根本不行"。
但我注意到一个更有趣的问题:它的核心 pipeline 并不复杂。本质上是:
主题 → 大纲生成 → 分段脚本 → TTS → 视频合成
前两步完全可以用 API 搞定,而且成本极低。今天我们就把这个 pipeline 拆开,用 Python 实现一个可运行的"AI 讲座脚本生成器"。
核心 Pipeline 拆解
输入主题
↓
[Step 1] 生成课程大纲(章节 + 要点)
↓
[Step 2] 逐章生成讲师口播脚本(自然语言,带过渡句)
↓
[Step 3] 输出结构化 Markdown,可直接送 TTS
Step 1 和 Step 2 都是 LLM 任务,区别在于 prompt 设计。
完整代码(可直接运行)
import os
import json
from openai import OpenAI
client = OpenAI(
api_key=os.environ.get("API_KEY", "your-key-here"),
base_url="https://api2everything.xyz/v1", # 国内直连,无需代理
)
OUTLINE_PROMPT = """你是一位经验丰富的大学教授。
请为以下主题生成一份结构清晰的讲座大纲,包含 4-6 个章节,每章 3-4 个要点。
以 JSON 格式返回,结构如下:
{{"chapters": [{{"title": "章节标题", "points": ["要点1", "要点2"]}}]}}
主题:{topic}"""
SCRIPT_PROMPT = """你是一位大学讲师,正在录制在线课程。
请为以下章节生成自然流畅的口播脚本(约 300 字),要求:
- 用第一人称,像真人讲课
- 包含过渡句和举例
- 避免过于书面化
章节标题:{title}
核心要点:{points}"""
def generate_outline(topic: str) -> dict:
resp = client.chat.completions.create(
model="gpt-4o-mini", # 也可换 deepseek-chat,更便宜
messages=[{"role": "user", "content": OUTLINE_PROMPT.format(topic=topic)}],
response_format={"type": "json_object"},
temperature=0.7,
)
return json.loads(resp.choices[0].message.content)
def generate_chapter_script(title: str, points: list[str]) -> str:
points_text = "\n".join(f"- {p}" for p in points)
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{
"role": "user",
"content": SCRIPT_PROMPT.format(title=title, points=points_text),
}
],
temperature=0.8,
)
return resp.choices[0].message.content
def generate_lecture(topic: str, output_file: str = "lecture.md"):
print(f"正在为主题「{topic}」生成讲座脚本...\n")
print("Step 1: 生成大纲...")
outline = generate_outline(topic)
chapters = outline.get("chapters", [])
print(f" → 共 {len(chapters)} 章\n")
result = [f"# {topic}\n\n---\n"]
for i, chapter in enumerate(chapters, 1):
title = chapter["title"]
points = chapter["points"]
print(f"Step 2.{i}: 生成「{title}」脚本...")
script = generate_chapter_script(title, points)
result.append(f"## 第{i}章:{title}\n\n{script}\n\n---\n")
full_text = "\n".join(result)
with open(output_file, "w", encoding="utf-8") as f:
f.write(full_text)
print(f"\n完成!脚本已保存至 {output_file}")
print(f"总字数约:{len(full_text)} 字")
return full_text
if __name__ == "__main__":
generate_lecture("量子纠缠与量子计算基础")
运行效果
生成一个 4 章的量子计算讲座,大概长这样:
正在为主题「量子纠缠与量子计算基础」生成讲座脚本...
Step 1: 生成大纲...
→ 共 5 章
Step 2.1: 生成「什么是量子比特」脚本...
Step 2.2: 生成「叠加态与干涉」脚本...
...
完成!脚本已保存至 lecture.md
总字数约:2847 字
整个过程大概 15-20 秒,费用不到 ¥0.05(用 gpt-4o-mini)。
几个值得注意的细节
1. response_format={"type": "json_object"} 是关键
大纲那步必须用 JSON mode,否则模型会在 JSON 外面包一堆废话,解析就炸了。这是 OpenAI API 里一个容易踩的坑。
2. 模型选择影响质量和成本
| 模型 | 质量 | 每次调用成本(约) |
|------|------|------------------|
| gpt-4o | 最高 | ~¥0.15 |
| gpt-4o-mini | 够用 | ~¥0.01 |
| deepseek-chat | 中文极好 | ~¥0.005 |
中文 STEM 内容推荐 deepseek-chat,性价比最高,只需把 model 参数改一下即可,base_url 不变。
3. 扩展到视频只差 TTS 这一步
脚本生成后,可以接:
openai.audio.speech.create()→ 生成 MP3ffmpeg+ 静态 PPT 截图 → 合成视频
这就是 Academa 做的事,核心并不神秘。
关于 API 成本
如果你在国内用 OpenAI 官方 API,除了需要代理,价格也是按美元结算。
我自己用的是无量Api(api2everything.xyz),支持 OpenAI / Claude / Gemini / DeepSeek 等 300+ 模型,国内直连不需要代理,价格比官方便宜约 65%。代码里的 base_url 换成他们的地址,其他一行不改,注册还送 ¥1 体验额度,余额永久有效。
对于这种批量生成脚本的场景,成本差异很明显——同样的任务,用无量跑下来大概是官方的三分之一。
下一步可以做什么
- 加一个 CLI 参数,支持从命令行传入主题
- 接入 TTS,直接输出 MP3 音频
- 用
asyncio并行生成多章节,速度提升 3-4 倍 - 加入"苏格拉底式提问"prompt,让脚本更有互动感
如果你跑通了或者遇到问题,欢迎在评论区留言。对 TTS 接入那部分感兴趣的,点个赞,下篇写音频合成。
无量Api 注册链接(国内直连,送¥1体验):
- Zhihu 读者:https://api2everything.xyz/?utm_source=zhihu&utm_medium=article&utm_campaign=daily&aff=wqUb
- V2EX 读者:https://api2everything.xyz/?utm_source=v2ex&utm_medium=article&utm_campaign=daily&aff=wqUb