小说改写剧本工具 - 产品需求文档 (PRD)

版本:v1.0
日期:2026-03-28
状态:已批准


1. 产品概述

1.1 产品定位

将短篇小说(1-2 万字)自动改写为短剧剧本,输出旁白为主(60%)+ 对白(40%)+ 分镜描述 + AI 绘画关键词,最终生成 40-50 分钟动漫素材。

1.2 目标用户

1.3 核心价值

价值点 描述
效率提升 人工改写需数天 → AI 改写需数分钟
质量稳定 多模型对比 + 质量评分确保输出达标
零人工干预 调试完成后全自动流水线
节奏优化 爆点前移,符合短视频传播规律

2. 功能需求

2.1 核心功能矩阵

模块 功能 优先级
项目管理 上传小说/查看列表/删除项目 P0
剧情分析 提取情节链/AI 识别爆点/爆点前移方案 P0
角色提取 NER 识别/性格分析/关系图/AI 绘画提示词 P0
剧本改写 文学→旁白/场景→分镜/对话口语化 P0
多模型对比 并行调用/差异对比/合并选择 P0
版本管理 Gitea 推送/Git 对比/分支管理 P0
调试模式 逐步执行/中间结果查看/手动修正 P0
质量评估 自动评分 + 人工评分/评分历史 P1
模型配置 OpenAI 兼容接口/多模型管理 P0

2.2 功能详细设计

2.2.1 项目管理

输入

处理

输出


2.2.2 剧情分析

输入:小说原文

处理

  1. 提取核心情节链(起承转合)
  2. AI 识别爆点位置
  3. 生成爆点前移方案

爆点类型

类型 说明 目标位置
hook 开篇钩子 前 10 秒
twist 剧情转折 前 1/3
climax 情绪高潮 中后段
reveal 真相揭示 结尾前

输出

{
  "plot_chain": ["起因", "发展", "转折", "高潮", "结局"],
  "plot_points": [
    {"type": "hook", "position": 150, "target_time": 10},
    {"type": "twist", "position": 3200, "target_time": 180}
  ],
  "hook_collection": "背叛、复仇、真相——他没想到,一切都是一场局"
}

调试模式


2.2.3 角色提取

输入:小说原文

处理

  1. NER 识别角色名
  2. 分析角色行为/对话提取性格
  3. 分析角色关系
  4. 提取口头禅/习惯用语
  5. 生成 AI 绘画提示词

输出

{
  "characters": [
    {
      "name": "林萧",
      "personality": "冷硬、内敛、重情义",
      "relationship": {"苏晴": "前女友", "陈峰": "宿敌"},
      "catchphrase": "无所谓",
      "image_prompt": "young man, black hair, cold expression, dark coat, cinematic lighting, anime style",
      "style_profile": {"tone": "简短", "emotion": "克制", "vocabulary": "口语化"}
    }
  ]
}

调试模式


2.2.4 剧本改写

输入:小说原文 + 剧情分析结果 + 角色档案

处理

  1. 文学描写 → 旁白解说
  2. 场景描写 → 分镜描述 + AI 绘画关键词
  3. 对话 → 口语化优化
  4. 节奏控制(紧凑快速)
  5. 爆点前移

输出格式

## 场景 1:雨夜相遇

【分镜描述】
镜头:中景→特写,推镜
画面:雨夜街道,霓虹灯闪烁,女主撑伞站立
AI 关键词:rainy night, neon street, young woman, umbrella, cinematic lighting, anime style

【旁白】(60%)
"那场雨下了一整夜,也冲走了他最后的退路。"

【对白】(40%)
林萧:"你不该来这里"(声音沙哑,点烟)
苏晴:"但你还是来了"(转身,眼神复杂)

【角色检查】
✓ 林萧台词符合"冷硬"风格
✓ 苏晴台词符合"外柔内刚"设定

调试模式


2.2.5 多模型对比

输入:小说原文 + 改写配置

处理

  1. 并行调用多个模型(Gemini/GPT/其他)
  2. 收集各模型输出
  3. 生成对比视图

输出

对比维度

维度 说明
剧情连贯性 情节是否流畅
角色一致性 台词是否符合人设
节奏控制 是否紧凑快速
旁白质量 是否流畅有感染力
画面可执行性 分镜描述是否清晰

2.2.6 版本管理(Gitea 集成)

输入:剧本草稿

处理

  1. 在 Gitea 创建分支(project-{id}-version-{n}
  2. 提交剧本内容
  3. 记录版本元数据到 MySQL

输出

Git 操作

操作 说明
push 推送版本到 Gitea
diff 对比两个版本差异
log 查看版本历史

2.2.7 调试模式

设计原则

调试流程

1. 上传小说 → [暂停] 确认原文
         ↓
2. 剧情分析 → [查看] 情节链/爆点位置
         ↓
3. 角色提取 → [查看/编辑] 角色档案
         ↓
4. 剧本改写 → [查看] 中间结果
         ↓
5. 输出版本 → [对比/评分]

调试界面


2.2.8 质量评估

自动评分

指标 权重 评估方法
剧情连贯性 25% AI 评估情节逻辑
角色一致性 25% 台词风格匹配度
节奏控制 20% 爆点分布分析
旁白质量 20% 语言流畅度
画面可执行性 10% 分镜描述完整度

人工评分

评分历史


2.3 模型配置

支持接口:OpenAI 兼容格式

配置项

字段 说明 示例
name 模型名称 Gemini-Pro
base_url API 地址 https://api.gemini.com/v1
api_key API 密钥 sk-xxx
model_name 模型标识 gemini-3.1-pro
is_active 是否启用 true

操作


3. 技术架构

3.1 技术栈

层级 技术
前端 Vue 3 + Element Plus + Axios
后端 Python 3.11 + FastAPI + SQLAlchemy
数据库 MySQL 8.0
缓存 Redis 7.0
版本控制 Gitea 1.20
文件存储 本地存储(data/storage/)
部署 Docker + Docker Compose

3.2 系统架构

┌─────────────────────────────────────────────────────────────────┐
│                        Docker Compose                           │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐            │
│ │   Vue 前端   │  │  FastAPI    │  │   MySQL     │            │
│ │   :8080     │  │   :8000     │  │   :3306     │            │
│ └─────────────┘  └─────────────┘  └─────────────┘            │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐            │
│ │   Gitea     │  │   Redis     │  │  MinIO      │            │
│ │   :3000     │  │   :6379     │  │  :9000      │            │
│ │  (版本管理)  │  │   (缓存)    │  │ (可选)      │            │
│ └─────────────┘  └─────────────┘  └─────────────┘            │
└─────────────────────────────────────────────────────────────────┘
                              ↓
                    ┌─────────────────┐
                    │  外部模型 API    │
                    │  - Gemini       │
                    │  - GPT          │
                    │  - 其他兼容接口  │
                    └─────────────────┘

3.3 数据库设计

项目表 (projects)

字段 类型 说明
id INT 主键
name VARCHAR(255) 项目名称
novel_text TEXT 小说原文
word_count INT 字数
status ENUM 状态 (draft/processing/review/completed)
created_at TIMESTAMP 创建时间
updated_at TIMESTAMP 更新时间

角色表 (characters)

字段 类型 说明
id INT 主键
project_id INT 项目 ID
name VARCHAR(100) 角色名
personality TEXT 性格描述
relationship TEXT 关系图
catchphrase VARCHAR(255) 口头禅
image_prompt TEXT AI 绘画提示词
style_profile JSON 台词风格档案

版本表 (versions)

字段 类型 说明
id INT 主键
project_id INT 项目 ID
branch_name VARCHAR(100) Gitea 分支名
model_name VARCHAR(100) 模型名称
script_content TEXT 剧本内容
storyboard JSON 分镜数据
quality_score DECIMAL(3,2) 质量评分
auto_score JSON 自动评分详情
manual_score JSON 人工评分详情
created_at TIMESTAMP 创建时间

模型配置表 (model_configs)

字段 类型 说明
id INT 主键
name VARCHAR(100) 模型名称
base_url VARCHAR(255) API 地址
api_key VARCHAR(255) API 密钥
model_name VARCHAR(100) 模型标识
is_active BOOLEAN 是否启用

爆点标记表 (plot_points)

字段 类型 说明
id INT 主键
project_id INT 项目 ID
type ENUM 类型 (hook/twist/climax/reveal)
position INT 原文位置
target_time INT 目标出现时间(秒)
description TEXT 描述

3.4 API 设计

# 项目管理
POST   /api/projects                    # 创建项目
GET    /api/projects                    # 项目列表
GET    /api/projects/{id}               # 项目详情
DELETE /api/projects/{id}               # 删除项目
PUT    /api/projects/{id}               # 更新项目

# 剧情分析
POST   /api/projects/{id}/analyze       # 执行分析
GET    /api/projects/{id}/analysis      # 查看分析结果
PUT    /api/projects/{id}/analysis      # 修改分析结果

# 角色管理
POST   /api/projects/{id}/extract       # 提取角色
GET    /api/projects/{id}/characters    # 角色列表
PUT    /api/characters/{id}             # 更新角色

# 剧本改写
POST   /api/projects/{id}/rewrite       # 执行改写
GET    /api/projects/{id}/draft         # 查看草稿
PUT    /api/projects/{id}/draft         # 修改草稿

# 版本管理
POST   /api/projects/{id}/versions      # 创建版本
GET    /api/projects/{id}/versions      # 版本列表
GET    /api/compare                     # 版本对比
POST   /api/projects/{id}/merge         # 版本合并

# 模型管理
GET    /api/models                      # 模型列表
POST   /api/models                      # 添加模型
PUT    /api/models/{id}                 # 更新模型
DELETE /api/models/{id}                 # 删除模型
POST   /api/models/{id}/test            # 测试连接

# 质量评估
POST   /api/quality/auto-score          # 自动评分
POST   /api/quality/manual-score        # 人工评分
GET    /api/projects/{id}/scores        # 评分历史

4. 数据流

用户上传小说
    ↓
本地存储 (data/storage/projects/{id}/original.txt)
    ↓
MySQL 记录元数据 (projects 表)
    ↓
剧情分析 → 中间结果 (temp/) → 调试查看
    ↓
角色提取 → 中间结果 (temp/) → 调试查看
    ↓
剧本改写 → 草稿 (temp/) → 调试查看
    ↓
确认输出 → 推送到 Gitea → MySQL 记录版本
    ↓
多模型对比 → 选择最佳版本
    ↓
质量评分 → 反馈优化

5. 目录结构

~/novel-rewriter/
├── docker-compose.yml
├── .env                    # 环境变量
├── backend/
│   ├── app/
│   │   ├── main.py        # FastAPI 入口
│   │   ├── config.py      # 配置
│   │   ├── database.py    # 数据库连接
│   │   ├── models/        # SQLAlchemy 模型
│   │   ├── schemas/       # Pydantic schema
│   │   ├── api/           # API 路由
│   │   ├── services/      # 业务逻辑
│   │   └── utils/
│   ├── requirements.txt
│   └── Dockerfile
├── frontend/
│   ├── src/
│   │   ├── views/
│   │   ├── components/
│   │   └── api/
│   ├── package.json
│   └── Dockerfile
├── data/
│   ├── mysql/             # MySQL 数据
│   ├── gitea/             # Gitea 数据
│   ├── redis/             # Redis 数据
│   └── storage/           # 本地文件存储
│       ├── projects/
│       ├── versions/
│       └── temp/
└── scripts/
    ├── init-db.sql
    └── deploy.sh

6. 实现计划

Phase 1: 基础框架(第 1 周)

任务 负责人 状态
docker-compose.yml 配置 -
MySQL 初始化脚本 -
FastAPI 项目骨架 -
Vue 项目骨架 -
模型调用模块 -
本地文件存储模块 -

Phase 2: 核心功能(第 2-3 周)

任务 负责人 状态
剧情分析模块(爆点识别) -
角色提取模块 -
剧本改写模块 -
Gitea 集成 -
调试模式 -

Phase 3: 对比与评估(第 4 周)

任务 负责人 状态
多模型并行调用 -
版本对比界面 -
自动评分系统 -
人工评分界面 -

Phase 4: 优化(第 5 周+)

任务 负责人 状态
质量反馈循环 -
性能优化 -
批量处理支持 -

7. 验收标准

7.1 功能验收

功能 验收标准
项目管理 可上传/查看/删除项目
剧情分析 正确识别爆点位置,生成前移方案
角色提取 正确提取角色信息,生成 AI 提示词
剧本改写 输出符合格式,旁白 60%+ 对白 40%
多模型对比 可并行调用,可对比差异
版本管理 可推送到 Gitea,可查看差异
调试模式 可逐步执行,可查看中间结果
质量评估 自动 + 人工评分正常工作

7.2 性能验收

指标 目标
1-2 万字分析时间 < 30 秒
1-2 万字改写时间 < 2 分钟/模型
版本对比响应 < 3 秒
并发支持 ≥ 10 个并行项目

7.3 质量验收

指标 目标
剧情连贯性评分 ≥ 4.0/5.0
角色一致性评分 ≥ 4.0/5.0
人工满意度 ≥ 80%

8. 风险与应对

风险 影响 应对措施
模型 API 不稳定 改写失败 多模型备份,自动重试
爆点识别不准确 节奏问题 人工修正 + 反馈优化
角色一致性差 人设崩坏 台词风格检查 + 人工审核
Gitea 推送失败 版本丢失 本地备份 + 重试机制

9. 附录

9.1 术语表

术语 说明
爆点 剧情转折点/高潮/悬念
爆点前移 将爆点提前到开篇吸引观众
钩子 (Hook) 开篇 10 秒吸引观众的亮点
分镜 镜头描述 + 画面提示

9.2 参考文档


修订历史

版本 日期 修改内容 作者
v1.0 2026-03-28 初始版本 聋瞎

文档状态: ✅ 已批准 - 可以开始开发