Skip to content

Repository files navigation

EduPPTX

AI Agent 驱动的教育演示文稿生成器。输入主题,自动生成全页 SVG 设计稿,转换为可编辑的原生形状 PPTX。

特性

  • V2 SVG Pipeline — LLM 直接生成整页 SVG (Bento Grid 卡片布局),SVG→DrawingML 原生形状转换
  • 打开即编辑 — 输出原生 PowerPoint 形状,无需"转换为形状"
  • 策划/设计分离 — Phase 1 专注信息架构 (金字塔原理),Phase 3 专注视觉设计
  • DESIGN.md 驱动设计 — 视觉系统输出为人机共读的 markdown,typography / Components / Do's-and-Don'ts 直接驱动 Phase 3 SVG;用户手编辑后重跑 render 即生效
  • 5 套教育风格 — emerald / academic / warm / minimal / tech
  • 联网搜索 — Responses API 内置 web_search,规划阶段自动补充实时信息
  • Debug 模式--debug 跳过素材获取,快速预览布局
  • 教案备注 — 每页自动生成口语化教学脚本 (Speaker Notes)
  • LLM Review — Phase 4 自动检测+LLM 审阅修正 SVG 质量

快速开始

安装

git clone https://github.com/CodePothunter/EduPPTXGenerator.git
cd EduPPTXGenerator
uv sync
source .venv/bin/activate

配置 API

cp .env.example .env
# 编辑 .env,填入 API 密钥

支持火山方舟 (豆包) 或任何 OpenAI 兼容接口:

# 文本生成 LLM
GEN_MODEL=your-model-endpoint
GEN_APIKEY=your-api-key

# API 模式: "chat" = Chat Completions | "responses" = Responses API
LLM_PROVIDER=responses

# Provider-specific 推理控制(可选)
# DeepSeek: GEN_THINKING=enabled / GEN_REASONING_EFFORT=high
# OpenAI o-series: GEN_REASONING_EFFORT=low|medium|high
# GEN_THINKING=
# GEN_REASONING_EFFORT=

# 图片生成 (Seedream / DALL-E 兼容)
VISION_GEN_MODEL=your-image-model
VISION_GEN_APIKEY=your-image-key

生成 PPT

# 基础用法
uv run edupptx gen "勾股定理"

# 指定风格 + 附加要求
uv run edupptx gen "光合作用" -r "适合高中生" --style edu_academic

# Debug 模式 (跳过素材,快速预览)
uv run edupptx gen "计算机网络" --debug

# 启用 LLM 联网搜索 (仅 Responses API)
uv run edupptx gen "量子计算最新进展" --web-search

# 从文档生成 + Tavily 联网搜索
uv run edupptx gen "基于报告做汇报" --file report.pdf --research

# 分步:先出策划稿,审核后再渲染
uv run edupptx plan "人工智能"
uv run edupptx render output/session_xxx/plan.json

# 编辑 DESIGN.md 调视觉系统,重跑 render 即生效(需 EDUPPTX_VISUAL_PLANNER_FORMAT=design_md)
EDUPPTX_VISUAL_PLANNER_FORMAT=design_md uv run edupptx gen "光合作用" --debug
# 编辑 output/session_xxx/DESIGN.md 中的 colors / Components / Shapes
uv run edupptx render output/session_xxx/plan.json --debug

# 查看可用风格
uv run edupptx styles

作为 Agent 工具调用

EduPPTX CLI 设计为可被 LLM Agent 直接调用,提供机器可读输出。

# 静默 + JSON 输出 (适合 agent 解析)
uv run edupptx --quiet gen "牛顿三大定律" --debug --json
# → {"ok": true, "mode": "full", "session_dir": "...", "pptx_path": "...", ...}

# 失败时也返回 JSON 错误
uv run edupptx --quiet gen "x" --style invalid --json
# → {"ok": false, "error": "未知风格 'invalid'。可用: ...", "kind": "UnknownStyle"}

# styles 查询带描述
uv run edupptx --quiet styles --json
# → {"ok": true, "styles": [{"name": "edu_emerald", "description": "..."}, ...]}

# 生成后立即跑视觉 QA
uv run edupptx --quiet gen "电磁感应" --debug --json --qa
# 结果 payload 中追加 "qa": {...} 字段

Agent 调用要点

  • --quiet 抑制日志,stderr 安静;--json 让 stdout 只输出一行 JSON
  • 退出码:0=成功,1=运行时错误(JSON 模式 stdout 含详情),2=参数错误(Click 标准)
  • 风格在生成前校验,无效风格立即失败而不会浪费 LLM 调用
  • 失败时 LLM 原始响应保存到 output/_debug/llm_parse_fail_*.txt

架构

用户输入 (主题 + 要求)
        │
        ▼
┌──────────────────────────────────────┐
│  Phase 0: Input Processing           │
│  文档解析 + 联网搜索 (可选)            │
├──────────────────────────────────────┤
│  Phase 1a: Content Planning (LLM)    │
│  金字塔原理 → 大纲+内容 JSON          │
├──────────────────────────────────────┤
│  Phase 1b: Visual Planning (LLM)     │
│  主题色 + 背景 prompt + 卡片色        │
├──────────────────────────────────────┤
│  Phase 2: Background (Seedream AI)   │
│  Phase 2b: Materials (非 debug 模式)  │
├──────────────────────────────────────┤
│  Phase 3: SVG Generation (并行 LLM)  │
│  Bento Grid 卡片布局, 1280×720       │
├──────────────────────────────────────┤
│  Phase 4: Validate + LLM Review      │
│  自动修复 + LLM 审阅修正              │
├──────────────────────────────────────┤
│  Phase 5: SVG→DrawingML→PPTX         │
│  原生形状, 直接可编辑                  │
└──────────────────────────────────────┘
        │
        ▼
output/session_xxx/
├── plan.json       # Phase 1 输出
├── materials/      # 背景图 + 素材
├── slides/         # Phase 4 修正后 SVG
└── output.pptx     # 原生形状 PPTX

LLM Provider

支持两种 API 模式,通过 .envLLM_PROVIDER 切换:

模式 环境变量 说明
Chat Completions LLM_PROVIDER=chat 默认,兼容所有 OpenAI 兼容 API
Responses API LLM_PROVIDER=responses 火山方舟专属,支持联网搜索、上下文缓存

LLM_CONCURRENCY 控制 SVG 生成和 Review 阶段的 LLM 并行请求数(默认 4)。API 有限流时调低。

Responses API 额外支持 --web-search CLI 参数,让 LLM 在规划阶段自动联网搜索补充内容。

DESIGN.md 视觉规划

Layer 3b 引入 DESIGN.md 作为人机共读的视觉风格中间产物,启用后驱动 Phase 3 SVG 输出:

环境变量 说明
EDUPPTX_VISUAL_PLANNER_FORMAT json (默认) / design_md 设为 design_md 时,规划阶段额外写出 session_dir/DESIGN.md(YAML frontmatter + 8 段中文 prose)。其中 typography(硬字号/字体)+ Components / Elevation / Shapes / Do's-and-Don'ts 四段 prose 会被注入 Phase 3 SVG system prompt,{colors.xxx} token 自动解析为 hex
EDUPPTX_LINT_STRICT 0 (默认) / 1 设为 1 时把 style linter 的对比度告警升级为错误

风格文件加载器 load_style() 同时支持 .json(旧路径)与 .md(DESIGN.md 解析后 → StyleSchema)。

用户编辑流程edupptx gen 写出 DESIGN.md 后,可手工编辑 session_dir/DESIGN.md 再跑 edupptx render <plan.json>,编辑会真实生效。DESIGN.md 加载时立即过 resolve_style lint,broken-ref 等错误会被捕获并降级(不注入但不阻塞生成)。

调色板:styles/<name>.md(DESIGN.md 格式)

styles/ 目录下的调色板文件可以是 .json(紧凑、机器可读)或 .md(YAML frontmatter + 8 段中文 prose,人机共读)。两种格式经 load_style() 解析后产出严格等价ResolvedStyle,由 tests/test_style_migration_regression.py 守护。

  • styles/blue.md — 科技蓝主题,理工科课程
  • styles/emerald.md — 翠绿主题,自然科学 / 生命科学
  • styles/blue.json / styles/emerald.json — 等价 JSON 版本

prose 8 段固定为:OverviewColorsTypographyLayoutElevationShapesComponentsDo's and Don'ts,用 {colors.xxx} token 引用调色板字段,确保切换调色板时文档自动跟随。

需要把已有的 JSON 调色板转换为 .md 脚手架时:

uv run edupptx styles convert <name>      # 把 styles/<name>.json → styles/<name>.md(脚手架)
uv run edupptx styles convert blue --force # 强制覆盖(注意:会清空手写 prose)

转换后编辑 8 段 prose,再用 uv run pytest tests/test_style_migration_regression.py -v 验证 .md ↔ .json 等价。

AI 图片素材复用库

PPT 生成时可从已有素材库复用图片,而非每次都重新生成。库目录与开关:

  • EDUPPTX_DISABLE_AI_IMAGE_REUSE(默认 0):总开关。设为 1 完全关闭复用读路径,回到"每次新生成"的行为,并跳过 caption/keyword 等复用专用 LLM 调用。生产出问题时的一键回滚。
  • EDUPPTX_REUSE_BACKEND(默认 json):复用库存储后端。json=split index + npz sidecar;sqlite=单文件 library.db(sqlite-vec)。切 sqlite 前先 edupptx assets migrate <库目录> 生成 library.db,并做 goldset A/B 确认与 json 行为一致。维护命令:edupptx assets migrate/export/doctor
  • LIBRARY_DIR(默认 ./materials_library):主素材库目录。
  • REUSE_LIBRARY_DIRS(默认 [LIBRARY_DIR, ./materials_library_ppt]):复用检索的库目录列表,逗号/os.pathsep 分隔。建议显式设绝对路径,否则相对当前工作目录会随启动目录漂移。
  • EDUPPTX_AI_IMAGE_EMBEDDING_MODEL(默认 Qwen/Qwen3-Embedding-0.6B):嵌入模型;离线服务器用本机绝对路径。
  • EDUPPTX_DISABLE_AI_IMAGE_EMBEDDINGS(默认 0):关闭嵌入召回,仅用 BM25+substring(policy_score 会按可用权重归一化)。
  • 入库相关:EDUPPTX_ASSET_LIBRARY_VLM_REVIEW(默认 0,VLM 入库审查未充分调试)、EDUPPTX_ASSET_INGEST_JOB_DB(入库 SQLite 队列路径)、CLI --no-asset-ingest(本次运行不写库)。
  • 可选:EDUPPTX_LLM_MAX_WORKERSEDUPPTX_REUSE_COVERAGE_LOGEDUPPTX_AI_IMAGE_REUSE_DEBUG_MODEEDUPPTX_AI_IMAGE_EMBEDDING_BUILD_BATCH_SIZE

复用匹配并发开关

字段生成与 LLM 复审的并发/批量:

  • EDUPPTX_REUSE_TARGET_KEYWORD_BATCH_SIZE(默认 1):字段生成每次 LLM 处理的图片数。默认单张以保准确性。
  • EDUPPTX_REUSE_TARGET_KEYWORD_WORKERS(默认 15):字段生成并行 worker 数。注意上游 LLM 限流(豆包 ~10–20 req/s),撞 429 调小。
  • EDUPPTX_REUSE_POLICY_WORKERS(默认 5):policy/LLM-review 阶段跨图外层并发。单图内候选复审并发受预算 MAX_LLM_REVIEWS_PER_QUERY=5 约束。
  • EDUPPTX_REUSE_EMBED_RESCUE_FLOOR(默认 0.70):policy_score 因关键词稀疏跌破 T_REJECT、但 embedding >= 此值的 page_image 候选,改判 LLM review 而非硬拒。调高更保守、调低更激进。

练习题库绑定(默认关闭)

EDUPPTX_EXERCISE_POLICY=1 启用后,可在学科/年级/课名严格匹配时从 JSON 题库(EDUPPTX_EXERCISE_BANK_PATH)或 teach-kb SQLite(EDUPPTX_EXERCISE_DB_PATH)绑定题干/答案/解析/题图,题图根目录 EDUPPTX_EXERCISE_IMAGE_ROOT,每类候选上限 EDUPPTX_EXERCISE_CANDIDATE_LIMIT(默认 4)。

风格模板

模板 适用场景
edu_emerald 数学、自然科学 (默认)
edu_academic 学术、论文汇报
edu_warm 文科、人文社科
edu_minimal 简约通用
edu_tech 计算机、工程技术

显式 -s 锁定配色:传入 edu_academic / edu_warm / edu_minimal / edu_tech 时,该主题的整套配色会覆盖按学科/学段自动推断的调色板。 不传 -s(即默认 edu_emerald)时按主题自动选色——因此 edu_emerald 不参与锁定,等同"自动路由"。 注:-s 只锁颜色;版式模板族仍按学科/学段自动路由。颜色在 gen 阶段固化进 plan.json,故 render 阶段改 -s 不再生效(应改 plan.json / DESIGN.md)。

项目结构

edupptx/
  agent.py                    # 5 阶段管线编排器
  models.py                   # 数据模型 (InputContext, PlanningDraft, VisualPlan, ...)
  llm_client.py               # LLM 客户端 (Chat + Responses API)
  config.py                   # 环境变量配置
  session.py                  # 会话目录管理
  cli.py                      # CLI 入口 (gen/render/plan/styles[+convert])
  style_schema.py             # 风格 schema + ResolvedStyle (load_style 双格式分发)
  style_resolver.py           # palette ref 解析 + 命名 intent 映射 + lint 钩子
  style/
    design_md.py              # DESIGN.md ⇄ StyleSchema parser + Phase 3 约束抽取
  planning/
    content_planner.py        # Phase 1a: 内容规划
    visual_planner.py         # Phase 1b: 视觉规划 (双路径: VisualPlan JSON + DESIGN.md)
    prompts.py                # 规划阶段 prompt 模板
  design/
    prompts.py                # SVG 生成 prompt (Bento Grid + 约束 + DESIGN.md 注入)
    svg_generator.py          # Phase 3: 并行 SVG 生成
    style_templates/          # 5 套教育主题 SVG 模板
    references/               # V3 设计参考 (design-base / shared-standards / page-types)
    chart_templates/          # 图表 SVG 参考模板 (bar/line/pie/timeline)
  materials/
    image_provider.py         # 多源图片获取 (Pixabay/Unsplash/Seedream)
    background_generator.py   # Phase 2: Seedream 背景生成
    icons.py                  # 255 个 Lucide SVG 图标
  postprocess/
    svg_validator.py          # SVG 自动修复 (viewBox/字体/边界/重叠)
    svg_sanitizer.py          # PPT 兼容清理 (去 script/事件)
    svg_reviewer.py           # Phase 4: LLM 审阅修正
    style_linter.py           # WCAG 对比度 + palette broken-ref 自检
  output/
    svg_to_shapes.py          # SVG→DrawingML 原生形状转换器
    pptx_assembler.py         # PPTX 组装 (原生形状模式)
  input/
    document_parser.py        # PDF/Word/MD 文档解析
    web_researcher.py         # Tavily 联网搜索

CLI 参考

edupptx gen TOPIC [OPTIONS]     从主题生成演示文稿
edupptx plan TOPIC [OPTIONS]    只生成策划稿
edupptx render PLAN [OPTIONS]   从策划稿渲染
edupptx styles                  列出可用风格模板

gen 选项:

选项 说明
-r, --requirements 附加要求 (如"适合高中生")
-s, --style 风格模板 (默认 edu_emerald);显式传非默认值会锁定该主题配色,覆盖自动调色
--file 输入文档 (PDF/Word/MD/TXT)
--research 启用 Tavily 联网搜索
--web-search 启用 LLM 联网搜索 (仅 Responses API)
--review 策划稿生成后暂停审核
--debug 跳过素材获取,快速预览布局
-o, --output 输出目录 (默认 ./output)
-v, --verbose 详细日志

开发

uv sync
uv run pytest tests/ -v

文档

设计参考

V3 的设计系统(色彩层级、字号体系、SVG 技术约束规范)参考了 PPT Master(MIT 许可)的设计方法论。PPT Master 专注于咨询类演示文稿的高质量生成,其分层 prompt 架构和设计规范体系对本项目的教育类设计系统建设有重要启发。

EduPPTX 专注于 K12 教育场景,在以下方面有独立的设计:教育专属页面类型(练习题/公式推导/实验步骤/对比表格/知识归纳)、面向课堂投影的内容密度分级(讲授/复习模式)、自动化 SVG→DrawingML 原生形状管线、以及面向教师的一键生成工作流。

License

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages