📖 AI 小说创作系统
技术方案与路线设计 · 三层知识架构 + 微调 Qwen
🎯 核心理念:三层知识架构
一个小说创作助手的知识,分三层
第1层 · 模型层
微调 Qwen
叙事节奏、对话描写、场景铺陈、人物刻画
第2层 · 通用知识库
写作方法论
伏笔技巧、对话理论、
风格指南、类型公式
第3层 · 每本小说专用库
每本小说独立
情节时间线、章节要点、
已写内容、风格一致性
三层协同工作:模型知道怎么写 → 知识库提供方法 → 小说库记住写到哪里
🏗️ 系统架构总览
┌─────────────────────────────────────────────────────┐
│ 🖥️ 前端创作台 │
│ 在线编辑器 · 实时预览 · 大纲管理 · 角色管理 │
└──────────┬──────────────────────────┬───────────────┘
│ │
▼ ▼
┌─────────────────────┐ ┌──────────────────────────┐
│ 🧠 Agent 调度层 │ │ 📊 创作辅助工具 │
│ │ │ │
│ ・理解创作意图 │ │ ・灵感生成器 │
│ ・决定调哪层知识 │ │ ・人物关系图 │
│ ・编排多步写作流 │ │ ・情节推进建议 │
│ ・保持风格一致 │ │ ・写作风格分析 │
└──────────┬──────────┘ └──────────┬───────────────┘
│ │
▼ ▼
┌─────────────────────────────────────────────────────┐
│ 🔌 MCP 工具接口层 │
│ │
│ [检索知识库] [写入小说内容] [查询角色信息] │
│ [生成章节] [检查一致性] [建议改写] │
└──────────┬──────────┬──────────┬───────────────────┘
│ │ │
▼ ▼ ▼
┌──────────┴──────────┴──────────┴───────────────────┐
│ 🗄️ 数据层 │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ 模型服务 │ │ 通用KB │ │ 每本小说专用库 │ │
│ │ (Qwen FT) │ │ (Chroma) │ │ (FAISS/Chroma) │ │
│ │ vLLM 部署│ │ 写作方法 │ │ 角色/世界观/情节 │ │
│ └──────────┘ └──────────┘ └──────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────┐ │
│ │ MySQL / SQLite(小说元数据、章节内容、用户) │ │
│ └──────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
📋 三层知识架构详细设计
🧠 第1层:Qwen 微调(模型层)
目标:让模型学会"小说家的思维方式",而不是"回答问题的机器人"。
💡 训练数据构造思路:
指令类型 1:续写
用户:"这是一段都市小说的开头:[...],请续写下一段"
指令类型 2:按大纲写章节
用户:"大纲:第三章主角发现真相。请根据前三章的风格写这一章"
指令类型 3:改写/润色
用户:"这段对话太平淡了,改得更有冲突感:[原文]"
指令类型 4:设定生成
用户:"帮我设计一个修仙世界的力量体系,包含五个境界"
📚 第2层:通用写作知识库
目标:存储小说写作的"方法论"——让 AI 能"查资料"来指导写作。
💡 实施:将上述内容整理成纯文本文档 → 用 Embedding 模型向量化 → 存入 Chroma/FAISS。
每次创作时 AI 根据当前任务自动检索相关技巧。
例如用户写悬疑章节时,Agent 自动去知识库里查"悬念设置技巧"。
📖 第3层:每本小说专用知识库
目标:每本小说独立一个知识库,存放这本小说特有的内容,确保一致性。
每本小说新建时,自动初始化以下内容到专属知识库:
角色档案
姓名/性格/外貌/背景/动机/成长弧线
世界观设定
地理/历史/规则/势力/特殊设定
大纲与时间线
章节大纲、情节事件时间线
已写内容
已完成章节、写作风格样本
风格指南
叙事视角/语言风格/写作习惯
一致性规则
不能矛盾的地点和事件记录
💡 关键设计:每次写新章节前,Agent 自动从本小说知识库中检索
→ 角色当前状态("主角现在在第几层修为?")
→ 上一章结尾("上一章停在哪个悬念?")
→ 世界观约束("这个世界里魔法能用几次?")
然后才生成新内容,保证不出现"上一章主角受伤,下一章活蹦乱跳"这种 bug。
🛤️ 推荐技术路线(分阶段实施)
🟢 第一阶段:MVP(2~4 周)
目标:先跑通最核心的流程
| ✓ 搭建前端 | 在 Ascent Creator 新增「小说工坊」模块 |
| ✓ 接入基座模型 | 先不微调,直接用 Qwen2.5-7B + 提示词工程写小说 |
| ✓ 通用知识库 | 收集 20~50 篇写作技巧文档 → Chroma 向量化 |
| ✓ 单本小说库 | 输入角色/大纲/世界观 → 存入向量库 |
| ✓ 基础功能 | 续写、按大纲写章节、角色信息查询 |
🔵 第二阶段:微调 + 增强(4~6 周)
| ✓ 收集训练数据 | 从公版小说构建续写/改写指令数据集 |
| ✓ LoRA 微调 | 用 LLaMA-Factory 对 Qwen2.5 做 LoRA 微调 |
| ✓ vLLM 部署 | 用 vLLM 加载微调后的模型提供 API 服务 |
| ✓ Agent 增强 | Agent 自动判断何时查知识库、何时用模型生成 |
| ✓ 一致性检查 | 写完章节后自动检查是否有矛盾 |
🟣 第三阶段:成熟产品(长期迭代)
| ✓ 多轮微调 | 按创作类型细分(玄幻/言情/悬疑各一个 LoRA) |
| ✓ 写作分析 | AI 自动分析已写内容,给出改进建议 |
| ✓ 协作模式 | 多人协作写同一本小说 |
| ✓ 导出发布 | 一键导出为 EPUB/PDF/连载到论坛 |
| ✓ 风格学习 | 从用户已写内容中自动提取风格特征 |
🔄 核心创作流程(Agent 工作流)
当用户说"帮我写下一章"时,Agent 内部的工作流程:
⬇
① Agent 查询小说库
├─ 上一章结尾是什么?
├─ 当前角色状态?
└─ 第5章大纲要求?
⬇
② Agent 查询通用知识库
├─ 当前情节适合什么技巧?(悬念/高潮/转折)
└─ 检索相关写作建议
⬇
③ 构造完整 Prompt
├─ 系统提示(风格/视角/规则)
├─ 上章回顾 + 角色状态
├─ 本章目标 + 写作技巧参考
└─ 一致性约束条件
⬇
④ 调用微调模型生成
⬇
⑤ 后处理
├─ 一致性检查(角色名字/地点/时间线)
├─ 更新小说库(新章节内容)
└─ 更新角色状态("主角修为突破到金丹期")
⬇
输出章节 + 更新后的状态摘要
🔧 推荐技术栈
🗄️ 数据库核心表设计
id | title | author_id | genre | status | word_count | created_at
characters(角色表)
id | novel_id | name | gender | age | personality | background | appearance | current_status | arc_plan
chapters(章节表)
id | novel_id | chapter_num | title | content | summary | word_count | status | created_at
world_settings(世界观表)
id | novel_id | category | key | value | description
例:(1, 1, '修炼体系', '金丹期', '筑基之上的境界,可御剑飞行')
outlines(大纲表)
id | novel_id | chapter_num | outline_text | plot_points | status
timeline_events(时间线事件表)
id | novel_id | chapter_id | event_desc | importance | involved_characters
🔗 与 Ascent Creator 的整合方式
这个小说系统可以直接作为 Ascent Creator 的一个「小说工坊」模块,复用现有架构:
✅ 可复用的
- 前端框架(Vue 组件直接继承)
- 用户系统
- 模型网关(接入微调后的 Qwen)
- 文件上传/存储
🆕 需要新增的
- 小说专用的数据库表
- 每本小说的向量知识库
- 微调模型的训练流程
- 创作 Agent 工作流引擎
- 在线编辑器(支持富文本/Markdown)
🖥️ 硬件需求评估
🎯 推荐起步方案:
先用 阿里云百炼的 Qwen API + 提示词工程做 MVP,0 显卡投入。
验证方向可行后,再用 AutoDL / 矩池云 租一台 RTX 3090(约 2 元/小时)做微调。
微调完用 vLLM 部署到服务器(你的服务器有 16GB 显存的话就能跑 7B)。
📌 一句话总结
微调 Qwen 学会"怎么写"
通用知识库提供"怎么写得好"
每本小说库记住"写到哪里了"
Agent 把三层串起来干活
🔗 补:LangChain 如何优化这个架构
有四个核心环节可以引入 LangChain / LangGraph,让系统更灵活、更可控。
1️⃣ LangGraph 编排创作 Agent 工作流
用 LangGraph 替代手写 if-else 流程。把每步创作定义成图的"节点":
from langgraph.graph import StateGraph, END
# 定义创作流程的节点
graph = StateGraph(NovelState)
graph.add_node("parse_request", 解析用户指令)
graph.add_node("retrieve_kb", 并行查通用库+小说库)
graph.add_node("compose", 构造 Prompt)
graph.add_node("generate", 调用 Qwen 生成)
graph.add_node("check_consistency", 一致性检查)
graph.add_node("update_kb", 自动更新角色/世界观)
# 定义流转逻辑
graph.set_entry_point("parse_request")
graph.add_edge("parse_request", "retrieve_kb")
graph.add_edge("retrieve_kb", "compose")
graph.add_edge("compose", "generate")
graph.add_conditional_edges(
"generate",
检查是否通过 → 通过则 update_kb, 否则回到 compose
)
graph.add_edge("update_kb", END)
💡 LangGraph 带来的好处:
• 每步可插入人工审核断点——生成的内容你过目后再继续
• 支持并行——通用库和小说库同时查,不串行等待
• 支持重试和回退——生成质量不行自动重新来
• 可观测——每一步的输入输出都能查看和调试
2️⃣ LangChain RAG 统一管理两层知识库
LangChain 的 Document Loaders / Text Splitters / Retrievers 可以直接对接:
📚 通用灵感库
DirectoryLoader 加载写作文档
RecursiveTextSplitter 分割
Chroma + bge-embedding 向量化
MultiQueryRetriever 多角度检索
📖 每本小说库
ParentDocumentRetriever 保留章节上下文
SelfQueryRetriever 按角色名/地点筛选
TimeWeightedVectorStore 新章节优先
💡 LangChain RAG 相比手写优势:
• 内置十几种检索策略(相似度/MMR/BM25混合),不用自己调
• 支持 Self-Query:自然语言自动转过滤条件——"查主角的修为"自动识别角色名
• 支持 Contextual Compression:检索内容太长时自动压缩到最相关片段
3️⃣ LangChain Memory 管理写作会话
写小说不是一次请求搞定,而是持续的"创作会话"。LangChain 的 Memory 模块可以直接用:
具体场景:
- SummaryBufferMemory:记住本章"刚才生成了什么",避免重复
- VectorStoreMemory:记住前几章的关键事件,写新章时自动引用
- EntityMemory:记录角色关键信息("主角在第3章获得了金手指")
4️⃣ LangChain Tool 集成 MCP 工具
通过 LangChain 的 Tool 抽象层,可以把外部工具统一接入:
📌 引入 LangChain 后的整体架构变化
原来的手写调度逻辑 → LangGraph 有向图
原来的手写知识库检索 → LangChain RAG 组件
原来的会话状态管理 → LangChain Memory
原来的 MCP 工具调用 → LangChain Tool 统一封装
简单说:底层的三层知识架构不变,但用 LangChain 把这套系统的"连接和调度"做得更 灵活、可调试、可扩展。
登录后才能评论哦 ~ 立即登录