📖 AI 小说写作助手
通过网盘分享的文件:AI小说生成器V2版本.exe
链接: https://pan.baidu.com/s/13S3FpXtQ6Uk9lpagSGi6Hw?pwd=xzjc 提取码: xzjc 复制这段内容后打开百度网盘手机App,操作更方便哦




基于 Flask + 大模型 API 的可视化小说写作工具。通过四层记忆架构,让大模型在长篇连载中始终记住人设、大纲、世界观,全程不跑偏。
核心特性
四层记忆架构
主要功能
一键批量生成 — 设置章节范围,自动逐章生成全书 自动摘要存储 — 每章写完自动提取摘要存入记忆,下一章自动带上前文记忆 自动文件存储 — 按书名创建文件夹,每章按 第001章_标题.md格式保存多模型适配 — 支持阿里百炼、Kimi、DeepSeek,页面可切换 多主题界面 — 浅色(默认)、深色、暖色、护眼绿四套主题 Markdown 输出 — 生成内容强制 Markdown 格式,方便后期排版发布
快速开始
1. 安装依赖
cd novel-writing-assistantpip install -r requirements.txt2. 启动应用
python app.py浏览器打开 http://localhost:5000
3. 配置 API Key
打开页面后点击「⚙️ 设置」tab,填入你的阿里百炼 API Key 并保存。
也可以通过环境变量配置:
set DASHSCOPE_API_KEY=你的Key
4. 开始写作
方式一:单章生成
在「✍️ 写作」tab 输入 写第1章,点击生成
方式二:一键批量生成
切到「🚀 一键生成」tab 确认书名(默认:我在女子学院当校草) 设置起始章和结束章 点击「开始批量生成」 系统自动逐章完成,每章自动保存文件和摘要
项目结构
novel-writing-assistant/├── app.py # Flask 主入口 + API 路由├── config.py # 配置管理(模型、路径)├── requirements.txt # Python 依赖├── models/│ └── llm_client.py # 统一 LLM 接口层├── memory/│ ├── anchor.py # 提示词 + 大纲锚定管理│ └── persistent.py # 记忆持久化(章节摘要、角色状态)├── templates/│ └── index.html # 前端页面├── static/│ └── style.css # 多主题样式├── data/ # 配置数据存储│ ├── prompts.json # 人设、世界观、写作风格│ ├── outline.json # 书名 + 全书大纲│ ├── memory.json # 章节摘要 + 角色状态│ └── settings.json # API Key + 模型选择└── books/ # 生成的小说存储 └── 我在女子学院当校草/ ├── 第001章_阴差阳错.md ├── 第002章_308宿舍集合.md └── ...页面模块说明
✍️ 写作
手动输入写作指令,如"写第5章"、"续写第三章,加入新角色"。生成完成后自动保存文件和摘要。
🚀 一键生成
书名输入框 — 决定存储文件夹名,可随时修改 章节范围 — 起始章到结束章 进度显示 — 实时显示当前生成进度 已生成章节列表 — 查看已完成的章节和字数 停止按钮 — 随时中断,下次从中断处继续
🎭 人设/世界观
人物设定 — 所有角色的性格、背景、口头禅 世界观设定 — 故事背景、时代环境、核心氛围 写作风格 — 字数要求、对话比例、格式要求、禁止事项
📋 大纲管理
书名 — 同时用于文件夹命名 全书大纲 — 每行一章,格式: 第X章:标题 —— 简述
🧠 记忆管理
自动生成的章节摘要(也可手动添加) 角色状态变化记录 可清空重置
⚙️ 设置
模型切换(阿里百炼 / Kimi / DeepSeek) API Key 配置(页面配置优先于环境变量)
工作原理
每次调用大模型生成时,系统自动构建如下 prompt 结构:
System Prompt:├── 【人物设定】 ← prompts.json.character├── 【世界观设定】 ← prompts.json.worldview├── 【写作风格】 ← prompts.json.style├── 【全书大纲】 ← outline.json.content├── 【已完成章节摘要】 ← memory.json(最近5章)└── 【角色最新状态】 ← memory.json(最近10条)User Prompt:└── "请根据以下大纲写第X章..." + 大纲中对应章节描述这样无论写到第几章,模型始终能"看到"完整的人设、世界观和前文摘要。
执行流程图
以下是用户输入"写第1章"后的完整执行流程:
┌─────────────────────────────────────────────────────────────────┐│ 用户输入:"写第1章" │└──────────────────────────┬──────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────────────┐│ 步骤1:解析章节号 ││ 从用户输入中提取 chapter_num = 1 │└──────────────────────────┬──────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────────────┐│ 步骤2:构建写作指令 ││ 从 outline.json 中查找第1章大纲: ││ "第1章:阴差阳错 —— 杨一凡收到录取通知书..." ││ 生成 prompt:"请根据以下大纲写第1章的完整内容..." │└──────────────────────────┬──────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────────────┐│ 步骤3:组装完整 System Prompt(四层记忆注入) ││ ││ ┌───────────────────────────────────────────────┐ ││ │ 第一层:人物设定(prompts.json → character) │ ││ │ 杨一凡、时大猛、张临志等6人完整人设 │ ││ └───────────────────────────────────────────────┘ ││ ┌───────────────────────────────────────────────┐ ││ │ 第二层:世界观设定(prompts.json → worldview) │ ││ │ 济南女子学校、308宿舍、时代背景 │ ││ └───────────────────────────────────────────────┘ ││ ┌───────────────────────────────────────────────┐ ││ │ 第三层:写作风格(prompts.json → style) │ ││ │ 6000字+、对话70%、Markdown格式、结尾哲理 │ ││ └───────────────────────────────────────────────┘ ││ ┌───────────────────────────────────────────────┐ ││ │ 第四层:全书大纲(outline.json → content) │ ││ │ 100章完整大纲锚定 │ ││ └───────────────────────────────────────────────┘ ││ ┌───────────────────────────────────────────────┐ ││ │ 第五层:历史记忆(memory.json) │ ││ │ 最近5章摘要 + 最近10条角色状态 │ ││ └───────────────────────────────────────────────┘ │└──────────────────────────┬──────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────────────┐│ 步骤4:调用大模型 API ││ 将 System Prompt + User Prompt 发送给阿里百炼(qwen-plus) ││ max_tokens=8000,temperature=0.8 │└──────────────────────────┬──────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────────────┐│ 步骤5:模型返回第1章内容(Markdown 格式,6000字+) │└──────────────────────────┬──────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────────────┐│ 步骤6:自动保存文件 ││ → books/我在女子学院当校草/第001章_阴差阳错.md │└──────────────────────────┬──────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────────────┐│ 步骤7:自动摘要 ││ 再次调用模型,传入本章内容,提取100-200字摘要 ││ 存入 memory.json → chapters[] │└──────────────────────────┬──────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────────────┐│ 步骤8:返回前端展示内容 ││ 显示生成内容 + 字数统计 + "已自动保存"提示 │└─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────┐ │ 下次输入"写第2章"时: │ │ 步骤3 的第五层会自动加载第1章摘要 │ │ → 模型"记住"了前面的故事 │ └─────────────────────────────────────┘上下文一致性保证机制
每一章生成时的 prompt 包含:━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 固定不变(每章都带): ✓ 完整人设 → 人物性格不会跑偏 ✓ 完整世界观 → 背景设定不会矛盾 ✓ 写作风格规范 → 文风保持统一 ✓ 100章大纲 → 知道整体走向 动态增长(每章累加): ✓ 前N章摘要 → 记住已发生的事 ✓ 角色状态 → 知道人物当前处境━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━这就是为什么模型能在第50章依然记得第1章的人设——因为每次调用都会把完整设定重新注入,而历史记忆通过摘要的方式传递前文信息。
写作风格默认配置
当前默认配置了以下硬性要求(可在页面修改):
每章 6000 字以上 对话占比 70% 以上 幽默搞笑、积极向上 上下文衔接呼应(承接上章、回顾前文) 每章结尾必须有哲理感慨独白 输出必须为 Markdown 格式 山东各地方言特色点缀
多模型支持
DASHSCOPE_API_KEY | ||
KIMI_API_KEY | ||
DEEPSEEK_API_KEY |
页面配置的 Key 优先级高于环境变量。切换模型在「设置」tab 选择即可。
注意事项
批量生成时每章约需 1-2 分钟(取决于模型响应速度和字数要求) 生成 100 章全书预计需要 2-3 小时,建议分批生成(如每次10章) 如遇 API 限流,可稍后重试,从中断章节继续 data/目录下的 JSON 文件均可手动编辑books/目录下的 .md 文件可直接用于公众号发布或电子书排版通过网盘分享的文件:AI小说生成器V2版本.exe
链接: https://pan.baidu.com/s/13S3FpXtQ6Uk9lpagSGi6Hw?pwd=xzjc 提取码: xzjc 复制这段内容后打开百度网盘手机App,操作更方便哦
夜雨聆风