1289 lines
28 KiB
Markdown
1289 lines
28 KiB
Markdown
# NOVEL_IP_SYSTEM_DESIGN
|
||
|
||
状态:设计落地基线
|
||
创建时间:2026-06-17
|
||
适用范围:小说原创生产、小说阅读、听书派生、AI 短剧派生、IP 资产管理。
|
||
核心目标:高质量、低人工干预、长上下文不乱,并且天然适配听书和短剧。
|
||
|
||
## 1. 最高原则
|
||
|
||
这个系统不是“AI 帮我写一章小说”,而是:
|
||
|
||
```text
|
||
AI 主编室
|
||
+ AI 作家组
|
||
+ AI 审稿组
|
||
+ AI 档案管理员
|
||
+ AI 改编编剧室
|
||
+ AI 听书制作室
|
||
+ AI 短剧制作室
|
||
```
|
||
|
||
所有设计都围绕四个优先级:
|
||
|
||
```text
|
||
小说质量 > 上下文稳定 > 自动化效率 > 听书/短剧派生
|
||
```
|
||
|
||
硬性原则:
|
||
|
||
1. 小说正文是母体,听书和短剧是派生作品。
|
||
2. 听书和短剧必须基于小说版本快照,不直接依赖实时正文。
|
||
3. AI 可以自动执行,但不能擅自修改 IP 圣经、人物命运、重大反转和禁止规则。
|
||
4. 每章必须有章节卡、质检报告、记忆更新。
|
||
5. 每次重写、润色、修复都必须留版本。
|
||
6. 自动化必须有停机规则,不能连续生成低质量内容。
|
||
7. 角色、场景、道具、声音、视觉风格要资产化,不能每章重新发明。
|
||
8. 短剧系统不并入小说系统,听书系统也不并入小说系统;它们通过快照和派生任务关联。
|
||
|
||
## 2. 总体架构
|
||
|
||
```mermaid
|
||
flowchart TB
|
||
Brief[创作 Brief] --> Plan[NovelGenerationPlan\n生成计划]
|
||
Plan --> IPBible[IP 圣经\n故事/世界/人物/改编规则]
|
||
IPBible --> Assets[IP 资产库\n角色/场景/道具/声音/视频风格]
|
||
IPBible --> Outline[全书结构 / 分卷结构 / 章节规划]
|
||
Assets --> ChapterLoop[章节自动生产循环]
|
||
Outline --> ChapterLoop
|
||
|
||
ChapterLoop --> Card[章节卡]
|
||
Card --> Draft[正文初稿]
|
||
Draft --> Polish[润色稿]
|
||
Polish --> Quality[质量闸门]
|
||
Quality -->|通过| Final[终稿入库 NovelChapter]
|
||
Quality -->|局部问题| Repair[自动修复]
|
||
Quality -->|严重问题| Rewrite[整章重写]
|
||
Repair --> Quality
|
||
Rewrite --> Quality
|
||
Quality -->|多次失败| Review[人工审核]
|
||
|
||
Final --> Memory[上下文记忆更新]
|
||
Final --> Package[章节改编包\n听书/短剧可用结构]
|
||
Memory --> Next[下一章]
|
||
Package --> Snapshot[NovelVersionSnapshot]
|
||
|
||
Snapshot --> Audio[AudioBookProject\n听书派生]
|
||
Snapshot --> Drama[Drama Adaptation\n短剧派生]
|
||
Drama --> ExistingLive[现有 LiveActionModule\n关键帧/视频/合成]
|
||
```
|
||
|
||
## 3. 小说类型策略
|
||
|
||
不同体量不能用同一套上下文策略。
|
||
|
||
| 类型 | 建议规模 | 生成策略 | 上下文策略 | 人工闸门 |
|
||
| --- | ---: | --- | --- | --- |
|
||
| 短篇 | 1-5 章 / 5千-3万字 | 先完整设计结构,再逐章生成 | 可带较完整全局上下文 | 大纲确认 + 完结确认 |
|
||
| 中篇 | 6-30 章 / 3万-15万字 | 按 5-10 章批次生成 | IP 圣经 + 最近章节 + 关键记忆 | 每 10 章人工总审 |
|
||
| 长篇 | 30-300+ 章 / 15万字以上 | 按卷、按 10 章校准 | IP 圣经 + 卷纲 + 检索记忆 + 伏笔库 | 每卷/每 10 章检查 |
|
||
|
||
后台需要提供 `novel_scale`:
|
||
|
||
```text
|
||
short
|
||
medium
|
||
long
|
||
```
|
||
|
||
对应自动化等级:
|
||
|
||
```text
|
||
L1: 每章人工确认
|
||
L2: 自动 5-10 章,批次后人工总审
|
||
L3: 按卷自动,触发风险才暂停
|
||
```
|
||
|
||
第一阶段推荐启用 L1/L2,终局必须支持 L3。
|
||
|
||
## 4. 现有系统复用边界
|
||
|
||
当前项目已有很多基础,不要重复造。
|
||
|
||
### 继续复用
|
||
|
||
| 现有模型/模块 | 继续承担的职责 |
|
||
| --- | --- |
|
||
| `Project` | 所有作品的顶层容器,包括小说、短剧、派生项目 |
|
||
| `NovelSource` | 小说源头,导入文本或原创小说主体 |
|
||
| `NovelChapter` | 已发布或确认的章节终稿 |
|
||
| `StoryBible` | 故事核心、主线、卖点、禁忌规则,可作为 IP 圣经文本层 |
|
||
| `WorldBible` | 世界观、规则、时代、视觉规则 |
|
||
| `Character` | 项目角色档案、视觉、声音、表演风格 |
|
||
| `GlobalCharacter` | 我的长期真人脸包/全局角色 |
|
||
| `CharacterImage` | 角色定妆、锚点图、脸包引用 |
|
||
| `CharacterState` | 角色不同状态、服装、情绪、状态变体 |
|
||
| `ActorProfile` | 真人短剧角色参考配置 |
|
||
| `Episode` | 短剧分集 |
|
||
| `EpisodeScript` | 短剧剧本 |
|
||
| `StoryboardShot` | 真人短剧分镜和视频提示词承载 |
|
||
| `Asset` | 图片、视频、音频、字幕、成品文件 |
|
||
| `RenderTask` | 图片/视频/合成等长任务 |
|
||
| `ProviderConfig` | AI Provider 配置 |
|
||
| `ProviderLog` | AI 调用日志和成本记录 |
|
||
| `LiveActionModule` | 真人短剧生产链路,不并入小说系统 |
|
||
| `MediaModule` | 音频/字幕/视频合成能力 |
|
||
|
||
### 不建议重复新增
|
||
|
||
不要新增:
|
||
|
||
```text
|
||
novel_projects
|
||
novel_characters
|
||
novel_video_pipeline
|
||
```
|
||
|
||
原因:
|
||
|
||
- `Project` 已经能当项目容器。
|
||
- `Character` 已经有足够多角色字段,应增强而不是重建。
|
||
- 视频流水线已经在 `LiveActionModule`,小说只负责适配和派生。
|
||
|
||
## 5. 需要新增的核心能力
|
||
|
||
第一版可以少启用 Agent,但这些地基必须先设计好:
|
||
|
||
```text
|
||
Agent 注册表
|
||
Prompt 版本管理
|
||
AgentRun 调用记录
|
||
Workflow 状态机
|
||
Novel Context Builder
|
||
Quality Gate
|
||
Memory / Foreshadow
|
||
Chapter Version
|
||
Novel Snapshot
|
||
Derivative Job
|
||
IP Asset
|
||
Human Review Gate
|
||
```
|
||
|
||
## 6. 推荐新增数据模型
|
||
|
||
字段命名建议跟当前 Prisma 风格保持一致:`snake_case`、`BigInt` 自增、MySQL、JSON 字段承载可扩展结构。
|
||
|
||
### 6.1 NovelGenerationPlan
|
||
|
||
记录原创小说生产计划和自动化配置。
|
||
|
||
```text
|
||
NovelGenerationPlan
|
||
id
|
||
project_id
|
||
novel_source_id
|
||
user_id
|
||
novel_scale short / medium / long
|
||
target_words
|
||
target_chapters
|
||
genre
|
||
style_code
|
||
brief_json
|
||
ip_bible_json
|
||
volume_plan_json
|
||
pipeline_config_json
|
||
quality_threshold_json
|
||
automation_level L1 / L2 / L3
|
||
status draft / planning / writing / paused / completed / failed
|
||
current_chapter_no
|
||
created_at
|
||
updated_at
|
||
```
|
||
|
||
说明:
|
||
|
||
- `Project` 仍然是父级项目。
|
||
- `NovelGenerationPlan` 只是原创生产计划,不替代 `Project`。
|
||
- `pipeline_config_json` 记录是否允许自动听书、自动短剧、批量章数、人工闸门等。
|
||
|
||
### 6.2 NovelChapterVersion
|
||
|
||
每章的章节卡、初稿、润色稿、修复稿、终稿都要留版本。
|
||
|
||
```text
|
||
NovelChapterVersion
|
||
id
|
||
project_id
|
||
novel_source_id
|
||
novel_chapter_id
|
||
chapter_no
|
||
version_no
|
||
version_type chapter_card / draft / polished / repaired / final
|
||
title
|
||
content_text
|
||
content_json
|
||
source_agent
|
||
provider_code
|
||
model_name
|
||
quality_score
|
||
status draft / active / archived / rejected
|
||
created_at
|
||
```
|
||
|
||
说明:
|
||
|
||
- `NovelChapter` 只保存当前确认终稿。
|
||
- `NovelChapterVersion` 保存生产过程。
|
||
- 以后用户觉得某版更好,可以回滚。
|
||
|
||
### 6.3 NovelContextMemory
|
||
|
||
小说专用上下文记忆,和现有 `PlotMemory` 不冲突。
|
||
|
||
```text
|
||
NovelContextMemory
|
||
id
|
||
project_id
|
||
novel_source_id
|
||
chapter_no
|
||
memory_type
|
||
memory_text
|
||
memory_json
|
||
importance_level
|
||
status
|
||
created_at
|
||
```
|
||
|
||
`memory_type`:
|
||
|
||
```text
|
||
bible_summary
|
||
chapter_summary
|
||
character_state
|
||
relationship_state
|
||
world_update
|
||
timeline_update
|
||
location_update
|
||
style_rules
|
||
adaptation_notes
|
||
forbidden_to_forget
|
||
```
|
||
|
||
说明:
|
||
|
||
- `PlotMemory` 现在更偏分集/短剧连续性。
|
||
- 小说长篇需要 `novel_source_id`、`chapter_no`、结构化 JSON,所以单独建表更稳。
|
||
|
||
### 6.4 NovelForeshadow
|
||
|
||
伏笔管理是长篇不乱的核心。
|
||
|
||
```text
|
||
NovelForeshadow
|
||
id
|
||
project_id
|
||
novel_source_id
|
||
code
|
||
title
|
||
first_chapter_no
|
||
expected_reveal_chapter_no
|
||
actual_reveal_chapter_no
|
||
surface_text
|
||
hidden_truth
|
||
status planned / introduced / developing / revealed / abandoned
|
||
related_characters_json
|
||
related_assets_json
|
||
created_at
|
||
updated_at
|
||
```
|
||
|
||
硬规则:
|
||
|
||
- `project_id + code` 唯一。
|
||
- 如果当前章节超过预计回收章数太多,后台要提醒。
|
||
|
||
### 6.5 NovelQualityReport
|
||
|
||
每次质检都入库。
|
||
|
||
```text
|
||
NovelQualityReport
|
||
id
|
||
project_id
|
||
novel_source_id
|
||
novel_chapter_id
|
||
chapter_no
|
||
report_type draft / polished / final / batch_review
|
||
total_score
|
||
score_json
|
||
problems_json
|
||
suggestions_json
|
||
pass_status
|
||
rewrite_required
|
||
source_agent
|
||
provider_code
|
||
model_name
|
||
created_at
|
||
```
|
||
|
||
评分维度:
|
||
|
||
```text
|
||
plot_progress
|
||
character_consistency
|
||
continuity
|
||
emotion_depth
|
||
style_quality
|
||
foreshadow_management
|
||
scene_visualization
|
||
audio_adaptation
|
||
video_adaptation
|
||
```
|
||
|
||
### 6.6 NovelVersionSnapshot
|
||
|
||
派生听书/短剧必须基于快照。
|
||
|
||
```text
|
||
NovelVersionSnapshot
|
||
id
|
||
project_id
|
||
novel_source_id
|
||
version_no
|
||
title
|
||
snapshot_scope full_novel / chapter_range / single_chapter
|
||
chapter_start
|
||
chapter_end
|
||
source_hash
|
||
snapshot_text
|
||
snapshot_json
|
||
created_for audiobook / short_drama / export / manual
|
||
created_by_user_id
|
||
created_at
|
||
```
|
||
|
||
规则:
|
||
|
||
- 启动听书或短剧前必须创建快照。
|
||
- 小说后续修改不影响已创建快照。
|
||
- 重新生成派生作品时,用户选择使用旧快照还是最新快照。
|
||
|
||
### 6.7 NovelDerivativeJob
|
||
|
||
统一管理小说派生任务。
|
||
|
||
```text
|
||
NovelDerivativeJob
|
||
id
|
||
project_id
|
||
novel_source_id
|
||
snapshot_id
|
||
user_id
|
||
derivative_type audiobook / short_drama
|
||
target_project_id
|
||
target_ref_id
|
||
chapter_start
|
||
chapter_end
|
||
config_json
|
||
status pending / running / paused / completed / failed
|
||
progress_json
|
||
error_message
|
||
created_at
|
||
updated_at
|
||
```
|
||
|
||
说明:
|
||
|
||
- 它管理“从小说派生作品”的过程。
|
||
- `RenderTask` 继续管理图片、视频、合成等底层耗时任务。
|
||
|
||
### 6.8 ProjectIpAsset
|
||
|
||
项目级 IP 资产,承载场景、道具、声音、视觉风格。
|
||
|
||
```text
|
||
ProjectIpAsset
|
||
id
|
||
project_id
|
||
asset_type scene / prop / costume / music_style / video_style / voice_profile
|
||
asset_key
|
||
display_name
|
||
asset_json
|
||
prompt_base
|
||
negative_prompt
|
||
reference_asset_id
|
||
status
|
||
created_at
|
||
updated_at
|
||
```
|
||
|
||
说明:
|
||
|
||
- 角色不用放这里,继续用 `Character`。
|
||
- 场景、道具、服装、声音风格、视频风格放这里。
|
||
- 短剧生成时引用 `asset_key`,避免每章重新发明场景。
|
||
|
||
### 6.9 AgentPrompt
|
||
|
||
Agent Prompt 版本管理。
|
||
|
||
```text
|
||
AgentPrompt
|
||
id
|
||
agent_name
|
||
version
|
||
provider_type
|
||
default_provider_code
|
||
system_prompt
|
||
user_prompt_template
|
||
output_schema_json
|
||
temperature
|
||
max_output_tokens
|
||
is_active
|
||
created_at
|
||
```
|
||
|
||
说明:
|
||
|
||
- Prompt 不应写死在代码里。
|
||
- 后台可以调整 Prompt 版本。
|
||
- 设计类 Agent 必须有 `output_schema_json`。
|
||
|
||
### 6.10 AgentRun
|
||
|
||
每次 Agent 调用记录。
|
||
|
||
```text
|
||
AgentRun
|
||
id
|
||
project_id
|
||
novel_source_id
|
||
chapter_no
|
||
agent_name
|
||
prompt_version
|
||
provider_code
|
||
model_name
|
||
input_json
|
||
output_json
|
||
output_text
|
||
status
|
||
quality_score
|
||
error_code
|
||
error_message
|
||
started_at
|
||
finished_at
|
||
created_at
|
||
```
|
||
|
||
说明:
|
||
|
||
- 用来追踪 AI 为什么这样写。
|
||
- 用来成本统计、重试、回放、调参。
|
||
- 和 `ProviderLog` 的区别:`ProviderLog` 记录底层 Provider 调用,`AgentRun` 记录业务语义级 Agent 调用。
|
||
|
||
### 6.11 AudioBookProject
|
||
|
||
听书独立项目。
|
||
|
||
```text
|
||
AudioBookProject
|
||
id
|
||
project_id
|
||
novel_source_id
|
||
snapshot_id
|
||
user_id
|
||
title
|
||
status
|
||
voice_config_json
|
||
audio_style_json
|
||
progress_json
|
||
created_at
|
||
updated_at
|
||
```
|
||
|
||
可以第二阶段或第三阶段再实现,但表关系第一版要预留。
|
||
|
||
### 6.12 AudioBookChapter
|
||
|
||
听书章节。
|
||
|
||
```text
|
||
AudioBookChapter
|
||
id
|
||
audiobook_project_id
|
||
novel_chapter_id
|
||
chapter_no
|
||
audio_script_text
|
||
segment_json
|
||
subtitle_json
|
||
estimated_duration_sec
|
||
audio_asset_id
|
||
status
|
||
error_message
|
||
created_at
|
||
updated_at
|
||
```
|
||
|
||
## 7. Agent 终局设计
|
||
|
||
第一版不一定全部启用,但系统必须能容纳完整 Agent。
|
||
|
||
### 7.1 小说创作线
|
||
|
||
| Agent | 职责 | 第一阶段 |
|
||
| --- | --- | --- |
|
||
| `IPBibleAgent` | 生成 IP 圣经、主线、人设、风格、禁忌、改编规则 | 启用 |
|
||
| `VolumeOutlineAgent` | 生成全书/分卷/批次大纲 | 部分启用 |
|
||
| `ChapterCardAgent` | 生成章节卡,控制当章目标和禁止事项 | 启用 |
|
||
| `NovelWriterAgent` | 生成正文初稿 | 启用 |
|
||
| `NovelPolishAgent` | 润色文风和节奏 | 启用 |
|
||
| `ContinuityCheckAgent` | 检查设定、人设、时间线冲突 | 启用 |
|
||
| `QualityCheckAgent` | 评分、给出问题和修复策略 | 启用 |
|
||
| `RepairAgent` | 局部修复或整章重写 | 启用 |
|
||
| `MemoryUpdateAgent` | 更新章节摘要、人物状态、时间线 | 启用 |
|
||
| `ForeshadowAgent` | 新增/推进/回收伏笔 | 第二阶段 |
|
||
|
||
### 7.2 IP 资产线
|
||
|
||
| Agent | 职责 | 第一阶段 |
|
||
| --- | --- | --- |
|
||
| `CharacterAssetAgent` | 生成人物文字/视觉/声音基础档案 | 部分复用角色抽取 |
|
||
| `SceneAssetAgent` | 生成可复用场景资产 | 预留 |
|
||
| `PropAssetAgent` | 生成道具资产 | 预留 |
|
||
| `VoiceProfileAgent` | 生成角色声音档案 | 预留 |
|
||
| `AdaptationPackageAgent` | 抽取可听/可拍/可视频化结构 | 启用轻量版 |
|
||
|
||
### 7.3 听书线
|
||
|
||
| Agent | 职责 | 启用阶段 |
|
||
| --- | --- | --- |
|
||
| `AudioScriptAgent` | 小说正文转听书稿 | 第三阶段 |
|
||
| `VoiceSegmentAgent` | 旁白/对白/情绪/停顿/TTS 分段 | 第三阶段 |
|
||
| `AudioQualityAgent` | 检查听书稿可听性、角色声线一致性 | 第三阶段 |
|
||
|
||
### 7.4 短剧线
|
||
|
||
| Agent | 职责 | 启用阶段 |
|
||
| --- | --- | --- |
|
||
| `DramaScriptAgent` | 小说章节转短剧剧本 | 第四阶段 |
|
||
| `ShotListAgent` | 短剧剧本转分镜 | 第四阶段 |
|
||
| `VideoPromptAgent` | 分镜转视频提示词 | 第四阶段 |
|
||
| `VideoPromptQualityAgent` | 检查提示词是否可生成、是否超复杂 | 第四阶段 |
|
||
| `PublishPackageAgent` | 汇总小说/听书/短剧/封面/简介/标签 | 第五阶段 |
|
||
|
||
## 8. 第一版启用 Agent
|
||
|
||
第一版建议启用 8 个核心 Agent:
|
||
|
||
```text
|
||
IPBibleAgent
|
||
ChapterCardAgent
|
||
NovelWriterAgent
|
||
NovelPolishAgent
|
||
ContinuityCheckAgent
|
||
QualityCheckAgent
|
||
RepairAgent
|
||
MemoryUpdateAgent
|
||
```
|
||
|
||
同时预留:
|
||
|
||
```text
|
||
AdaptationPackageAgent
|
||
DramaScriptAgent
|
||
AudioScriptAgent
|
||
```
|
||
|
||
第一版目标不是做全套听书短剧,而是让小说质量闭环稳定。
|
||
|
||
## 9. Context Builder 设计
|
||
|
||
`NovelContextBuilderService` 是核心,不是可选项。
|
||
|
||
每次写第 N 章,不能把全文塞给模型,而是自动拼:
|
||
|
||
```text
|
||
IP 圣经摘要
|
||
当前卷纲
|
||
目标章节卡
|
||
最近 3-5 章摘要
|
||
本章出场人物档案
|
||
本章出场人物当前状态
|
||
相关伏笔
|
||
当前时间线
|
||
当前空间位置
|
||
禁止改动项
|
||
文风规则
|
||
改编规则
|
||
```
|
||
|
||
短篇、中篇、长篇策略:
|
||
|
||
```text
|
||
短篇:可带完整大纲和全部已写章节摘要
|
||
中篇:带当前卷/批次大纲 + 最近 5 章摘要
|
||
长篇:带 IP 圣经摘要 + 当前卷纲 + 检索相关记忆 + 最近 5 章摘要
|
||
```
|
||
|
||
早期检索策略:
|
||
|
||
```text
|
||
MySQL 条件检索
|
||
project_id
|
||
chapter_no 范围
|
||
memory_type
|
||
character names
|
||
foreshadow status
|
||
```
|
||
|
||
后期增强:
|
||
|
||
```text
|
||
Embedding 检索
|
||
NovelContextMemory
|
||
NovelChapter.summary
|
||
CharacterMemory
|
||
NovelForeshadow
|
||
```
|
||
|
||
## 10. Quality Gate 设计
|
||
|
||
每章必须经过质量闸门。
|
||
|
||
评分维度:
|
||
|
||
| 维度 | 权重 |
|
||
| --- | ---: |
|
||
| 剧情推进 | 15 |
|
||
| 人物一致性 | 15 |
|
||
| 上下文连续性 | 15 |
|
||
| 文风质量 | 12 |
|
||
| 情绪张力 | 12 |
|
||
| 伏笔管理 | 10 |
|
||
| 场景画面感 | 8 |
|
||
| 听书适配度 | 6 |
|
||
| 短剧适配度 | 7 |
|
||
|
||
默认规则:
|
||
|
||
```text
|
||
>= 88:自动通过
|
||
80-87:自动局部修复
|
||
< 80:整章重写
|
||
同一章最多重写 3 次
|
||
3 次仍不通过:need_human_review
|
||
连续 3 章低于 85:暂停批量自动生成
|
||
出现核心设定冲突:暂停
|
||
人物死亡、重大秘密揭露、主线反转:人工审核
|
||
```
|
||
|
||
质量报告必须写入 `NovelQualityReport`。
|
||
|
||
## 11. 章节内容包
|
||
|
||
每章最终不只是正文,还要有改编结构。
|
||
|
||
```json
|
||
{
|
||
"chapter_no": 1,
|
||
"title": "查无此人",
|
||
"novel_text": "",
|
||
"chapter_summary": "",
|
||
"memory_update": {},
|
||
"adaptation_package": {
|
||
"audio_candidates": [],
|
||
"drama_scenes": [],
|
||
"visual_hooks": [],
|
||
"dialogue_candidates": [],
|
||
"narration_candidates": [],
|
||
"character_refs": [],
|
||
"scene_refs": [],
|
||
"prop_refs": [],
|
||
"ending_hook": ""
|
||
},
|
||
"quality": {
|
||
"novel_score": 88,
|
||
"audio_adaptation_score": 82,
|
||
"video_adaptation_score": 86
|
||
}
|
||
}
|
||
```
|
||
|
||
这个结构建议存在:
|
||
|
||
- `NovelChapterVersion.content_json`
|
||
- 或 `NovelContextMemory` 的 `adaptation_notes`
|
||
- 后续可抽成单独 `ChapterAdaptationPackage`
|
||
|
||
第一版先不新增 `ChapterAdaptationPackage` 表,避免过重。
|
||
|
||
## 12. 小说到听书
|
||
|
||
听书线必须独立。
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
Novel[NovelSource / NovelChapter] --> Snapshot[NovelVersionSnapshot]
|
||
Snapshot --> AudioProject[AudioBookProject]
|
||
AudioProject --> AudioScript[AudioScriptAgent]
|
||
AudioScript --> VoiceSegment[VoiceSegmentAgent]
|
||
VoiceSegment --> VoiceProvider[VoiceProvider]
|
||
VoiceProvider --> AudioAsset[Asset audio]
|
||
AudioAsset --> AudioChapter[AudioBookChapter]
|
||
```
|
||
|
||
规则:
|
||
|
||
1. 小说正文不能直接 TTS。
|
||
2. 必须先转听书稿。
|
||
3. 听书稿要拆旁白、对白、情绪、停顿、BGM、音效建议。
|
||
4. 听书失败不影响小说正文。
|
||
5. 小说修改后不自动覆盖已生成听书,除非用户选择新快照重做。
|
||
|
||
## 13. 小说到短剧
|
||
|
||
短剧线通过适配层进入现有 LiveAction。
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
Novel[NovelVersionSnapshot] --> Adapter[NovelToDramaAdapter]
|
||
Adapter --> Project[生成/关联短剧 Project]
|
||
Project --> Story[StoryBible / WorldBible / Character]
|
||
Story --> Episode[Episode / EpisodeScript]
|
||
Episode --> Shots[StoryboardShot]
|
||
Shots --> Live[LiveActionModule]
|
||
Live --> Video[关键帧 / 视频片段 / 候选选择 / FFmpeg 合成]
|
||
```
|
||
|
||
`NovelToDramaAdapter` 负责:
|
||
|
||
```text
|
||
读取快照
|
||
选择章节范围
|
||
提取核心冲突
|
||
提取可视化场景
|
||
提取关键对白
|
||
提取角色/场景/道具引用
|
||
生成短剧 Project
|
||
生成 Episode
|
||
生成 EpisodeScript
|
||
生成 StoryboardShot
|
||
交给 LiveActionModule
|
||
```
|
||
|
||
规则:
|
||
|
||
- 小说章节是原料,不是剧本。
|
||
- 短剧不要直接塞大量小说旁白。
|
||
- 每个分镜都要引用已有角色/场景/道具资产。
|
||
- 合成前继续使用现有候选片段选择机制。
|
||
|
||
## 14. Provider 和模型策略
|
||
|
||
不要所有 Agent 都用最贵模型。
|
||
|
||
| 类型 | 适用 Agent | 模型策略 |
|
||
| --- | --- | --- |
|
||
| 高模型 | IP 圣经、人物设定、正文写作、最终润色 | 质量优先 |
|
||
| 中模型 | 章节卡、卷纲、记忆更新、伏笔更新 | 稳定结构 |
|
||
| 低模型 | 标签、摘要、格式转换、简单检查 | 成本优先 |
|
||
| 检查模型 | 连续性、质量评分、Prompt 质检 | 低温度、结构化输出 |
|
||
|
||
所有 Agent 都应支持:
|
||
|
||
```text
|
||
智能计划
|
||
手动指定模型
|
||
失败 fallback
|
||
ProviderLog
|
||
AgentRun
|
||
成本估算
|
||
```
|
||
|
||
设计类 Agent 必须使用 JSON Schema 或强结构化解析。
|
||
|
||
正文类 Agent 可以输出纯文本,但调用记录仍要保存。
|
||
|
||
## 15. 后台页面设计
|
||
|
||
后台小说详情建议分为这些 Tab:
|
||
|
||
```text
|
||
概览
|
||
正文
|
||
IP 圣经
|
||
角色资产
|
||
场景/道具
|
||
章节生产
|
||
记忆/伏笔
|
||
质检报告
|
||
听书
|
||
短剧
|
||
Agent 配置
|
||
任务队列
|
||
```
|
||
|
||
### 概览
|
||
|
||
显示:
|
||
|
||
- 小说类型:短篇/中篇/长篇。
|
||
- 自动化等级:L1/L2/L3。
|
||
- 当前章节。
|
||
- 最近质量评分。
|
||
- 伏笔风险。
|
||
- 派生作品数量。
|
||
- 当前任务状态。
|
||
|
||
### IP 圣经
|
||
|
||
显示:
|
||
|
||
- 一句话核心。
|
||
- 主题。
|
||
- 世界观。
|
||
- 主线。
|
||
- 人物命运。
|
||
- 禁止改动项。
|
||
- 改编规则。
|
||
- 版本记录。
|
||
|
||
### 章节生产
|
||
|
||
显示:
|
||
|
||
- 章节卡。
|
||
- 初稿。
|
||
- 润色稿。
|
||
- 修复稿。
|
||
- 终稿。
|
||
- 质检报告。
|
||
- AgentRun 记录。
|
||
|
||
操作:
|
||
|
||
- 生成下一章。
|
||
- 连写 5 章。
|
||
- 连写 10 章。
|
||
- 暂停。
|
||
- 重写本章。
|
||
- 使用某版本为终稿。
|
||
- 人工通过。
|
||
|
||
### 记忆/伏笔
|
||
|
||
显示:
|
||
|
||
- 最近章节摘要。
|
||
- 人物状态变化。
|
||
- 关系变化。
|
||
- 时间线。
|
||
- 位置变化。
|
||
- 伏笔状态。
|
||
- 逾期伏笔提醒。
|
||
|
||
### 听书
|
||
|
||
显示:
|
||
|
||
- 是否启用听书。
|
||
- 自动/手动生成配置。
|
||
- 快照选择。
|
||
- 听书项目列表。
|
||
- 每章音频状态。
|
||
- 试听。
|
||
- 重新生成。
|
||
|
||
### 短剧
|
||
|
||
显示:
|
||
|
||
- 是否启用短剧。
|
||
- 自动/手动生成配置。
|
||
- 快照选择。
|
||
- 派生短剧项目。
|
||
- 跳转真人短剧工作台。
|
||
- 成片预览。
|
||
|
||
## 16. 前台页面设计
|
||
|
||
前台不暴露复杂生产逻辑,只显示用户要看的内容:
|
||
|
||
```text
|
||
小说
|
||
听书
|
||
短剧
|
||
素材
|
||
成品
|
||
```
|
||
|
||
小说阅读器继续优化:
|
||
|
||
- 真书翻页模式。
|
||
- 传统上下章模式。
|
||
- 阅读进度。
|
||
- 书签。
|
||
- 批注。
|
||
- 搜索。
|
||
|
||
听书:
|
||
|
||
- 按小说/章节展示。
|
||
- 支持播放。
|
||
- 支持断点续播。
|
||
|
||
短剧:
|
||
|
||
- 按小说/项目/集展示。
|
||
- 支持播放。
|
||
- 支持查看来源章节和快照版本。
|
||
|
||
## 17. API 设计草案
|
||
|
||
### 生产计划
|
||
|
||
```text
|
||
POST /api/novels/:novelSourceId/generation-plans
|
||
GET /api/novels/:novelSourceId/generation-plans/:planId
|
||
PATCH /api/novels/:novelSourceId/generation-plans/:planId
|
||
POST /api/novels/:novelSourceId/generation-plans/:planId/start
|
||
POST /api/novels/:novelSourceId/generation-plans/:planId/pause
|
||
```
|
||
|
||
### Agent 执行
|
||
|
||
```text
|
||
POST /api/novels/:novelSourceId/agents/ip-bible/generate
|
||
POST /api/novels/:novelSourceId/chapters/:chapterNo/card/generate
|
||
POST /api/novels/:novelSourceId/chapters/:chapterNo/draft/generate
|
||
POST /api/novels/:novelSourceId/chapters/:chapterNo/polish
|
||
POST /api/novels/:novelSourceId/chapters/:chapterNo/quality-check
|
||
POST /api/novels/:novelSourceId/chapters/:chapterNo/repair
|
||
POST /api/novels/:novelSourceId/chapters/:chapterNo/memory-update
|
||
```
|
||
|
||
### 章节版本
|
||
|
||
```text
|
||
GET /api/novels/:novelSourceId/chapters/:chapterNo/versions
|
||
POST /api/novels/:novelSourceId/chapters/:chapterNo/versions/:versionId/activate
|
||
```
|
||
|
||
### 记忆与伏笔
|
||
|
||
```text
|
||
GET /api/novels/:novelSourceId/memories
|
||
GET /api/novels/:novelSourceId/foreshadows
|
||
POST /api/novels/:novelSourceId/foreshadows
|
||
PATCH /api/novels/:novelSourceId/foreshadows/:id
|
||
```
|
||
|
||
### 快照与派生
|
||
|
||
```text
|
||
POST /api/novels/:novelSourceId/snapshots
|
||
GET /api/novels/:novelSourceId/snapshots
|
||
POST /api/novels/:novelSourceId/derivatives/audiobook
|
||
POST /api/novels/:novelSourceId/derivatives/short-drama
|
||
GET /api/novels/:novelSourceId/derivative-jobs
|
||
```
|
||
|
||
## 18. BullMQ 任务设计
|
||
|
||
建议新增任务类型:
|
||
|
||
```text
|
||
novel.ip_bible.generate
|
||
novel.volume_outline.generate
|
||
novel.chapter_card.generate
|
||
novel.chapter_draft.generate
|
||
novel.chapter_polish.generate
|
||
novel.chapter_quality_check
|
||
novel.chapter_repair
|
||
novel.memory_update
|
||
novel.batch_generate
|
||
novel.snapshot.create
|
||
novel.audiobook.create
|
||
novel.short_drama.adapt
|
||
```
|
||
|
||
每个任务都要:
|
||
|
||
- 写 `AgentRun`。
|
||
- 写 `ProviderLog`。
|
||
- 支持重试。
|
||
- 支持暂停。
|
||
- 支持失败原因。
|
||
- 支持人工接管。
|
||
|
||
## 19. 工作流状态机
|
||
|
||
### NovelGenerationPlan.status
|
||
|
||
```text
|
||
draft
|
||
planning
|
||
ready
|
||
writing
|
||
paused
|
||
need_human_review
|
||
completed
|
||
failed
|
||
```
|
||
|
||
### NovelChapterVersion.status
|
||
|
||
```text
|
||
draft
|
||
active
|
||
archived
|
||
rejected
|
||
```
|
||
|
||
### NovelDerivativeJob.status
|
||
|
||
```text
|
||
pending
|
||
running
|
||
paused
|
||
completed
|
||
failed
|
||
cancelled
|
||
```
|
||
|
||
### AudioBookProject.status
|
||
|
||
```text
|
||
draft
|
||
generating_script
|
||
generating_voice
|
||
mixing
|
||
completed
|
||
failed
|
||
paused
|
||
```
|
||
|
||
### 短剧 Project.status 补充建议
|
||
|
||
```text
|
||
drama_adapting
|
||
storyboard_ready
|
||
live_action_ready
|
||
video_generating
|
||
clip_selecting
|
||
rendering
|
||
completed
|
||
failed
|
||
```
|
||
|
||
## 20. 分阶段落地计划
|
||
|
||
### Phase 0:设计冻结
|
||
|
||
目标:
|
||
|
||
- 固定本文档。
|
||
- 明确复用现有表和新增表。
|
||
- 明确第一版启用 Agent 和终局 Agent。
|
||
|
||
交付:
|
||
|
||
- `NOVEL_IP_SYSTEM_DESIGN.md`
|
||
- 后续开发任务清单。
|
||
|
||
### Phase 1:小说 IP 生产地基
|
||
|
||
目标:
|
||
|
||
- 建表。
|
||
- 建 Agent Prompt/Run。
|
||
- 建 NovelGenerationPlan。
|
||
- 建 ChapterVersion。
|
||
- 建 ContextMemory。
|
||
- 建 QualityReport。
|
||
- 建 Snapshot。
|
||
- 建 DerivativeJob。
|
||
- 建基础后台页面。
|
||
|
||
不要求一次生成完美小说,但要求所有过程可追踪。
|
||
|
||
### Phase 2:高质量单章闭环
|
||
|
||
目标:
|
||
|
||
```text
|
||
Brief
|
||
→ IP 圣经
|
||
→ 章节卡
|
||
→ 正文初稿
|
||
→ 润色
|
||
→ 连续性检查
|
||
→ 质量评分
|
||
→ 修复/重写
|
||
→ 终稿入库
|
||
→ 记忆更新
|
||
```
|
||
|
||
验收标准:
|
||
|
||
- 每一步有 AgentRun。
|
||
- 每一章有质量分。
|
||
- 低分会自动修复。
|
||
- 修复失败会暂停。
|
||
- 上下文不会靠手工粘贴。
|
||
|
||
### Phase 3:批量自动生成
|
||
|
||
目标:
|
||
|
||
- 支持 5 章/10 章批量生成。
|
||
- 支持短篇、中篇、长篇策略。
|
||
- 支持每 10 章自动体检。
|
||
- 支持伏笔逾期提醒。
|
||
- 支持人工审核闸门。
|
||
|
||
验收标准:
|
||
|
||
- 连续生成 10 章不明显断上下文。
|
||
- 人物状态能延续。
|
||
- 伏笔能新增、推进、回收。
|
||
- 低分章节不会直接发布。
|
||
|
||
### Phase 4:听书派生
|
||
|
||
目标:
|
||
|
||
```text
|
||
NovelVersionSnapshot
|
||
→ AudioBookProject
|
||
→ AudioScriptAgent
|
||
→ VoiceSegmentAgent
|
||
→ VoiceProvider
|
||
→ Asset 音频
|
||
```
|
||
|
||
验收标准:
|
||
|
||
- 听书基于快照。
|
||
- 小说修改不影响已生成听书。
|
||
- 听书稿不是直接 TTS 正文。
|
||
- 每章音频可播放。
|
||
|
||
### Phase 5:短剧派生
|
||
|
||
目标:
|
||
|
||
```text
|
||
NovelVersionSnapshot
|
||
→ NovelToDramaAdapter
|
||
→ Project / Episode / Script / StoryboardShot
|
||
→ LiveActionModule
|
||
```
|
||
|
||
验收标准:
|
||
|
||
- 可选择小说章节范围生成短剧项目。
|
||
- 自动生成短剧剧本和分镜。
|
||
- 分镜引用角色/场景/道具资产。
|
||
- 后续进入现有真人短剧流程。
|
||
|
||
### Phase 6:IP 资产强化
|
||
|
||
目标:
|
||
|
||
- 角色视觉资产稳定。
|
||
- 角色声音资产稳定。
|
||
- 场景/道具/服装/音乐/视频风格资产可复用。
|
||
- 视频 Prompt 不再每章乱写角色和场景。
|
||
|
||
### Phase 7:全自动与运营化
|
||
|
||
目标:
|
||
|
||
- L3 按卷自动生成。
|
||
- 自动生成封面提示词、简介、标签、预告片脚本。
|
||
- 支持平台版本:小说平台、听书平台、短剧平台。
|
||
- 支持成本、质量、失败率统计。
|
||
|
||
## 21. 第一轮开发任务拆分
|
||
|
||
建议按这个顺序开发,不容易翻车:
|
||
|
||
1. Prisma 新增基础表。
|
||
2. 新增 `AgentPrompt` 初始化数据。
|
||
3. 新增 `AgentRunService`,封装业务级 Agent 调用。
|
||
4. 新增 `NovelPromptBuilderService`。
|
||
5. 新增 `NovelContextBuilderService`。
|
||
6. 新增 `NovelQualityGateService`。
|
||
7. 新增 `NovelGenerationWorkflowService`。
|
||
8. 后台新增小说生产 Tab。
|
||
9. 跑通 IP 圣经生成。
|
||
10. 跑通单章生成闭环。
|
||
11. 加入 Snapshot。
|
||
12. 加入派生任务空壳。
|
||
|
||
第一轮不要急着接听书和短剧视频,先把小说质量闭环跑稳。
|
||
|
||
## 22. 验收清单
|
||
|
||
### 小说质量
|
||
|
||
- 能根据 Brief 生成 IP 圣经。
|
||
- 能生成章节卡。
|
||
- 能根据上下文生成正文。
|
||
- 能自动质检。
|
||
- 能自动修复。
|
||
- 能保存版本。
|
||
- 能更新记忆。
|
||
- 能管理伏笔。
|
||
|
||
### 自动化
|
||
|
||
- 人工不需要复制上下文。
|
||
- 人工不需要手工整理最近章节摘要。
|
||
- 人工只在质量闸门或重大节点介入。
|
||
|
||
### 长上下文稳定
|
||
|
||
- 第 N 章能读取最近 3-5 章摘要。
|
||
- 能读取出场人物当前状态。
|
||
- 能读取相关伏笔。
|
||
- 能读取禁止改动项。
|
||
- 能识别设定冲突。
|
||
|
||
### 听书/短剧适配
|
||
|
||
- 每章有改编包。
|
||
- 每次派生有快照。
|
||
- 派生任务失败不污染小说正文。
|
||
- 短剧最终进入现有 LiveActionModule。
|
||
|
||
## 23. 不做的事
|
||
|
||
第一阶段不做:
|
||
|
||
- 一键生成 100 章。
|
||
- 自动生成完整听书成品。
|
||
- 自动生成完整短剧成片。
|
||
- 替换现有 LiveActionModule。
|
||
- 重建角色系统。
|
||
- 重建视频任务系统。
|
||
|
||
第一阶段要做的是把“小说质量闭环 + 可追踪地基”打稳。
|
||
|
||
## 24. 最终判断
|
||
|
||
当前项目已经有视频流水线、角色库、Provider、素材、FFmpeg、小说导入和阅读器。现在正确方向不是重做,而是补上:
|
||
|
||
```text
|
||
Novel IP 生产中台
|
||
```
|
||
|
||
它负责:
|
||
|
||
- 写出高质量小说。
|
||
- 管住长篇上下文。
|
||
- 管住人物和伏笔。
|
||
- 管住版本和快照。
|
||
- 把小说变成可听、可拍、可生成视频的内容包。
|
||
|
||
最终系统形态:
|
||
|
||
```text
|
||
小说能独立成为作品
|
||
听书能从小说快照派生
|
||
短剧能从小说快照派生
|
||
三个系统互相关联,但互不污染
|
||
```
|
||
|