Skip to content

0717lee/screenwright

Repository files navigation

剧本工坊 · Screenwright

AI 小说改编工作台 —— 把中文小说转换成结构化、可校验、可编辑的剧本初稿。

七牛云 AI 大模型暑期实训营 · 议题三「AI 小说转剧本」参赛作品。

Demo 视频

演示视频:剧本工坊 Screenwright · 中文小说转结构化剧本 Demo


核心特性

  • 章节智能切分:按「第 X 章」自动分章,支持 3 章以上整部小说连续转换。
  • DeepSeek 结构化生成:JSON 模式输出,严格对齐 Schema 数据契约。
  • 双层校验:JSON Schema 结构校验 + 代码侧引用完整性校验(对白 ↔ 人物、人物 ↔ 场次的交叉引用)。
  • 自动修复重试:模型输出非法时,把错误回传给模型让其自我修正。
  • 跨章节人物归一:同一人物的多种叫法/别名归并到稳定 id,场次全局重新编号并同步引用。
  • 三视图工作台:剧本预览(人类可读)/ YAML 源码(可编辑 + 实时校验)/ 人物表。
  • 一键导出 YAML / Fountain,支持「撤销到上次合法版本」。

架构

app.py  ……………… Streamlit 三视图工作台(UI)
  ├─ converter.py … 转换引擎:章节切分 → DeepSeek → 校验修复 → JSON→YAML → 渲染预览
  │    ├─ prompts.py … 模型输出的 JSON 契约(系统/用户/修复提示词)
  │    └─ validator.py … 双层校验(Schema 结构 + 引用完整性)
  │         └─ schema/screenplay.schema.json … 剧本数据契约【作品核心】
  └─ fountain.py … Fountain 导出器(结构化剧本 → 标准纯文本剧本)

快速开始

Windows 一键: 双击 setup.bat 安装依赖 → 复制 .env.example.env 并填入密钥 → 双击 run.bat 启动。

手动:

pip install -r requirements.txt          # 安装依赖
cp .env.example .env                      # 复制配置,填入 DEEPSEEK_API_KEY
streamlit run app.py                      # 启动工作台

可选:.env 中的 DEEPSEEK_TIMEOUT_SECONDS 控制单次模型请求等待上限,默认 120 秒。

命令行校验任意剧本 YAML:

python validate_screenplay.py examples/last-ferry.screenplay.yaml

命令行导出 Fountain:

python export_fountain.py examples/归途.screenplay.yaml

依赖说明(第三方库)

版本 用途
streamlit 1.32.0 Web 工作台 UI
openai 1.14.0 DeepSeek API 客户端(OpenAI 兼容协议)
pyyaml 6.0.1 JSON ↔ YAML 序列化
jsonschema 4.21.1 Draft 2020-12 结构校验
python-dotenv 1.0.1 加载 .env 配置
httpx 0.27.2 openai 的 HTTP 依赖(固定版本规避兼容问题)

原创性说明

本作品自主完成、无抄袭。原创核心

  • 剧本 Schema 设计schema/ + docs/schema-design.md):层级化数据模型、"有序带类型的元素流"、人物身份归一化 —— 本作品的核心。
  • 转换引擎converter.py):章节切分、跨章节人物 id 归并、场次全局重编号与引用同步、JSON→YAML 代码侧序列化、修复重试。
  • 提示词契约prompts.py)、双层校验器validator.py)、Streamlit 工作台app.py)。

上述第三方库仅作基础设施(UI 框架、API 客户端、序列化/校验工具),核心改编逻辑与数据模型均为原创

数据模型

一句话:剧本 = 文档 → 场次 → 有序的、带类型的元素流(动作/对白/转场/镜头)。设计理由详见 docs/schema-design.md

项目结构

screenwright/
├── app.py                  # Streamlit 工作台
├── converter.py            # 转换引擎
├── fountain.py             # Fountain 导出器
├── export_fountain.py      # YAML → Fountain 命令行工具
├── prompts.py              # 模型输出契约
├── validator.py            # 双层校验器
├── validate_screenplay.py  # 命令行校验工具
├── schema/                 # 剧本数据契约(JSON Schema + 注释版 YAML)
├── examples/               # 示例小说与转换成果
├── tests/                  # 测试与示例生成脚本(详见下)
└── docs/                   # Schema 设计说明

tests/(一律从项目根目录运行):

  • test_fixes.py — 离线单元测试(校验守卫 / finalize 清洗 / 容错),无需 API key:python tests/test_fixes.py
  • test_client_config.py — DeepSeek 客户端超时与重试配置测试,无需 API key。
  • test_progress.py — 多章节转换进度透传测试,无需 API key。
  • test_retry_budget.py — 模型修复重试预算测试,无需 API key。
  • test_schema_normalization.py — Schema 枚举兼容清洗测试,无需 API key。
  • test_connection.py — DeepSeek 连接冒烟测试(需先在 .env 配置密钥)
  • test_convert.py / test_novel.py — 单章 / 全本转换集成实测(需密钥,真实调用 API)
  • save_example.py — 重新生成示例 YAML 的维护脚本(会覆写 examples/,普通使用无需运行)

七牛云暑期实训营参赛作品 · 开发周期 2026-06-05 ~ 2026-06-07。

About

剧本工坊·screenwright,AI 小说改编工作台 — 把中文小说转成结构化、可校验、可编辑的剧本初稿。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors