文章

开发文档

《AI 小说工坊》开发文档

67 分钟 2.7w 字 7 阅读

《AI 小说工坊》开发文档

交付对象:WorkBuddy(开发实施方) 交付用途:作为该应用完整开发的唯一需求与实现依据 产品名占位说明:以下统称「AI 小说工坊」,最终名称可在设置中自定义,文档内名称均可全局替换。


1. 项目概述

1.1 产品定位

一款本地化安装的 Windows 桌面应用(EXE 安装包,一键安装即用),面向小说作者与 AI 写作用户。用户只需选择生成模型并填写少量创作参数,应用即可自动完成从故事构思、大纲、角色、物品、地图、伏笔到逐章正文的全流程创作,产出一整套可查看、可编辑、可阅读、可导出 TXT 的「完整小说资产包」。

1.2 目标用户

  • 网络小说作者(辅助创作、批量生成草稿)
  • AI 写作爱好者、内容工作室
  • 需要长篇连载产出的内容团队

1.3 核心价值

#价值点说明
1全流程自动化输入 8 项基础参数 → 输出完整小说工程(介绍/大纲/章节大纲/正文/角色/物品/地图/伏笔/封面/阅读器)
2全模型兼容支持主流大模型 + 任意 OpenAI 兼容自定义接入(自配密钥)
3长篇一致性10–2000 章规模下,通过大纲约束 + 上下文包 + 伏笔台账 + 滚动一致性审查,保证故事贯通、不重复、不跑题
4本地化可控数据全部本地存储,联网仅用于调用用户所选模型的 API;所有产出均可人工编辑
5断点续跑章节生成过程随时暂停/中断/重启后继续,进度不丢失、不重复
6完整体验内置小说风格阅读器、角色关系图谱、黑白双主题带动画 UI

1.4 名词约定

  • 小说资产:一部小说产生的全部结构化内容(介绍、大纲、章节大纲、章节正文、角色、物品、地图、伏笔、封面信息)。
  • 设定包:世界观、主线、角色状态、物品规则、地图等"冻结设定"的合集,正文生成时注入以保证一致性。
  • 上下文包:生成单章正文时注入模型的全部上下文(设定包 + 章节大纲 + 前文摘要 + 伏笔台账 + 前章结尾等)。

2. 总体架构

2.1 架构方案(推荐)

采用 Wails v2(Go 写桌面后端 + Vue3 写前端,可直接打包 Windows EXE 安装包),这是与"VUE + GO 技术栈 + 本地 EXE 安装包"要求最契合的官方成熟方案,无需额外运行时,体积小、资源占用低。

┌──────────────────────────────────────────────────────────────┐
│                    Windows 桌面(EXE 安装包)                   │
│  ┌────────────────────────┐  ┌────────────────────────────┐  │
│  │  Vue3 前端(本地 UI)    │  │  Go 本地后端                 │  │
│  │  · 小说风格主题/黑白双色  │  │  · Binding API / 事件推送    │  │
│  │  · 阅读器/角色图谱/表单  │◄─┤  · 生成流水线 + 任务队列      │  │
│  │  · 动画/页面路由         │  │  · 一致性审查 Agent          │  │
│  └────────────────────────┘  │  · LLM 适配层(多模型)        │  │
│                              │  · SQLite 持久化 / 文件存储    │  │
│                              └───────────────┬────────────┘  │
└──────────────────────────────────────────────┼──────────────┘
                                               ▼
                          ┌──────────────────────────────────┐
                          │  外部 LLM API(用户选择/自配密钥) │
                          │  OpenAI 兼容 / 厂商 SDK / 本地     │
                          │  Ollama(无需密钥)               │
                          └──────────────────────────────────┘

架构图补充说明:可视化附图见随文档交付的《AI小说工坊-架构与生成流水线.html》。

2.2 关键设计决策

决策点选择理由
桌面框架Wails v2Go + Vue 原生组合、EXE 打包、低内存
前端构建Vue 3 + TypeScript + Vite + Pinia + Vue Router生态成熟、开发效率高
数据存储SQLite(GORM,纯 Go 驱动避免 CGO)本地单文件、2000 章规模足够
密钥存储Windows DPAPI 加密后入库本地安全、防明文
LLM 协议统一 OpenAI 兼容协议为主 + 厂商特适配 + Ollama 本地覆盖绝大多数模型
前端 UI 组件Naive UI 或 Element Plus(深/浅色适配)双主题友好
图表ECharts(角色关系图谱、伏笔时间线)关系图能力强
阅读器自研轻量阅读器(本地章节渲染)无网络依赖、可控性强

2.3 备选方案(如开发方对 Wails 不熟)

  • 方案 B:Go 后端内嵌 Vue 静态资源 + 本地 HTTP 服务 + 系统托盘 + 打开系统浏览器窗口。缺点:浏览器窗口 UI 风格受限、顶部标题栏难以自绘。
  • 方案 C:Electron + Go sidecar 子进程。缺点:体积大、违背"VUE+GO 轻量"初衷。
  • 默认采用方案 A(Wails v2),开发方如需更换必须说明理由并经确认。

3. 技术选型明细

3.1 前端

项选型说明
框架Vue 3(Composition API)+ TypeScript—
构建Vite—
状态Pinia全局设置、当前小说、生成进度
路由Vue Router见 7.2 页面清单
UI 组件Naive UI(推荐,主题化强)或 Element Plus双主题切换需全部走 CSS 变量
图表ECharts 5关系图谱、伏笔时间线
动画CSS 动画 + GSAP页面转场、打字机、主题切换墨迹扩散
阅读器自研分页阅读器目录、字号、背景、翻页动画、伏笔高亮
字体标题衬线(宋体/思源宋体)+ 正文黑体小说风格

3.2 后端(Go)

项选型说明
桌面框架Wails v2(含 window 配置、事件系统)前端通过 Binding 直接调用 Go 方法
Web 框架标准库 / Gin若启用 HTTP 模式备用
ORMGORM + SQLite 驱动(modernc.org/sqlite 纯 Go,避免 CGO)本地单文件
LLM 客户端① OpenAI 兼容:sashabaranov/go-openai(可自定义 BaseURL)② 特殊厂商:Claude(anthropic sdk)、Gemini(google-generativeai)等按需 ③ Ollama:本地 HTTP 调用见第 5 章
加密golang.org/x/sys/windows(DPAPI)+ AES-GCM 兜底密钥加密
任务队列自研状态机 + SQLite 事务轻量、可控、断点续跑友好
打包Wails 内置 NSIS 打包一键生成安装包

3.3 开发环境要求

  • Go ≥ 1.22,Node.js ≥ 18,Wails CLI v2
  • 构建命令:wails build(Windows 平台产出 EXE 与 NSIS 安装包)

4. 工程目录结构(建议)

novel-studio/
├── frontend/                    # Vue3 前端
│   ├── src/
│   │   ├── main.ts / App.vue
│   │   ├── router/index.ts
│   │   ├── stores/              # Pinia(app / novel / progress / settings)
│   │   ├── views/               # 页面(见 7.2)
│   │   ├── components/          # 阅读器 / 关系图谱 / 卡片组件等
│   │   ├── api/                 # Wails Binding 封装(统一 promise 化)
│   │   ├── styles/
│   │   │   ├── theme-dark.css   # 墨黑主题变量
│   │   │   ├── theme-light.css  # 素白主题变量
│   │   │   ├── base.css         # 动画 / 字体 / 纸张纹理
│   │   └── assets/
│   └── package.json
├── backend/                     # Go 后端
│   ├── cmd/novel-studio/main.go
│   ├── internal/
│   │   ├── app/                 # Wails app 装配、事件
│   │   ├── models/              # GORM 模型(见第 5 章)
│   │   ├── service/             # 业务:创作 / 章节 / 资产 CRUD
│   │   ├── pipeline/            # 生成流水线(见第 7 章)
│   │   ├── queue/               # 任务状态机、断点续跑
│   │   ├── llm/                 # Provider 接口 + 各厂商实现
│   │   ├── consistency/         # 一致性审查 Agent
│   │   ├── storage/             # SQLite 初始化、迁移、文件目录
│   │   └── export/              # TXT 导出
│   └── go.mod
├── build/                       # Wails 打包资源(图标、安装引导图)
└── docs/

5. 数据模型设计(SQLite / GORM)

5.1 ER 关系总览

novels(1) ──┬── (N) chapters             novels(1) ── (1) outlines
            ├── (N) chapter_outlines     novels(1) ── (N) characters
            ├── (N) items                characters(M) ── (N) character_relations
            ├── (N) maps                 novels(1) ── (N) foreshadows
            └── (1) cover_info           novels(N) ── (1) model_configs
generation_tasks(N) ── (1) novels        global_settings(KV)

删除小说时级联删除所有子表(ON DELETE CASCADE)。

5.2 表结构(核心字段)

novels 小说主表

字段类型说明
idINTEGER PK
titleTEXT书名(AI 生成 + 可改)
categoryTEXT分类(见 7.1 预设)
tagsTEXT(JSON)标签数组
descriptionTEXT用户输入的创作描述(核心输入)
styleTEXT文风预设
perspectiveTEXT叙事视角预设
target_chaptersINTEGER目标章节数(10–2000)
chapter_word_countINTEGER每章目标字数
introTEXT小说介绍(AI 生成)
cover_pathTEXT封面图片本地路径(可空)
cover_promptTEXT封面 AI 生成描述词
statusTEXT生成状态:planning / writing / paused / completed / failed
progressINTEGER已完成章节数
model_config_idINTEGER FK使用的模型配置
settings_jsonTEXT(JSON)生成参数快照(便于追溯)
created_at / updated_atDATETIME

outlines 故事大纲

字段类型说明
idINTEGER PK
novel_idINTEGER FK
titleTEXT大纲标题
structure_typeTEXT卷结构类型(三幕式 / 卷宗式 / 单元剧等)
contentTEXT(JSON)卷/部结构、主线、支线、主题、世界观设定、结局方向、关键转折点
notesTEXT备注

chapter_outlines 章节大纲

字段类型说明
idINTEGER PK
novel_idINTEGER FK
chapter_indexINTEGER第 N 章(与 novels 唯一约束)
titleTEXT章节标题
purposeTEXT本章目标
eventsTEXT(JSON)事件列表
charactersTEXT(JSON)出场角色及本章状态
foreshadow_setTEXT(JSON)本章设置的伏笔(标题/重要性/回收提示)
foreshadow_resolveTEXT(JSON)本章回收的伏笔
ending_hookTEXT本章结尾钩子(保证衔接)
continuity_fromTEXT承接上一章结尾的衔接要点
statusTEXT待生成 / 已生成 / 已修订

chapters 章节正文

字段类型说明
idINTEGER PK
novel_idINTEGER FK
indexINTEGER章节序号(唯一)
titleTEXT章节标题
word_countINTEGER实际字数
contentTEXT正文
summaryTEXTAI 生成的章节摘要(供后续上下文使用)
statusTEXTpending / generating / done / edited / regenerating / failed
token_costINTEGER本节约消耗 token(统计用)
revisionINTEGER重写版本号
created_at / updated_atDATETIME

characters 角色

字段类型说明
idINTEGER PK
novel_idINTEGER FK
nameTEXT姓名
role_typeTEXT主角 / 重要配角 / 反派 / 配角 / 关键NPC
identity / gender / ageTEXT身份 / 性别 / 年龄
personalityTEXT性格
appearanceTEXT外貌
backgroundTEXT背景
motivationTEXT动机
arcTEXT成长弧光
factionTEXT阵营
statusTEXT存活 / 失踪 / 死亡 / 黑化等
avatar_pathTEXT头像路径(可空)
card_jsonTEXT(JSON)角色卡片结构化信息(用于卡片展示)
detailTEXT角色详情长文
notesTEXT备注

character_relations 角色关系

字段类型说明
idINTEGER PK
novel_idINTEGER FK
from_char_idINTEGER FK源角色
to_char_idINTEGER FK目标角色
relation_typeTEXT敌对 / 师徒 / 恋人 / 家人 / 盟友 / 宿敌 / 上下级等
strengthINTEGER关系强度 1–10
descriptionTEXT关系描述
evolutionTEXT关系演变(随剧情变化)

items 物品卡

字段类型说明
idINTEGER PK
novel_idINTEGER FK
nameTEXT名称
typeTEXT武器 / 法宝 / 道具 / 科技 / 信物 / 功法等
rarityTEXT普通 / 稀有 / 史诗 / 传说 / 唯一
owner_char_idINTEGER FK当前持有角色(可空)
attributesTEXT(JSON)属性/规则
loreTEXT来历与设定
card_jsonTEXT(JSON)物品卡结构化信息
detailTEXT物品详情长文
notesTEXT备注

maps 地图卡

字段类型说明
idINTEGER PK
novel_idINTEGER FK
nameTEXT地名
region_typeTEXT主城 / 秘境 / 势力 / 野外 / 国家等
parent_map_idINTEGER FK上级地图(支持层级树)
descriptionTEXT概述
key_locationsTEXT(JSON)关键地点列表
card_jsonTEXT(JSON)地图卡结构化信息
detailTEXT地图详情长文
notesTEXT备注

foreshadows 伏笔管理

字段类型说明
idINTEGER PK
novel_idINTEGER FK
titleTEXT伏笔名称
descriptionTEXT伏笔内容
setup_chapterINTEGER埋设章节
resolve_chapterINTEGER回收章节(可空)
importanceTEXT主线 / 支线 / 彩蛋
statusTEXTplanted(已埋设)/ pending_resolve(待回收)/ resolved(已回收)/ abandoned(放弃)
notesTEXT备注

cover_info 封面信息

字段类型说明
idINTEGER PK
novel_idINTEGER FK
promptTEXT封面 AI 生成描述词(完整提示词)
style_tagsTEXT(JSON)风格标签(国漫厚涂/水墨/写实等)
compositionTEXT构图说明
aspect_ratioTEXT建议比例(如 3:4)
commercial_pointsTEXT(JSON)商业卖点词(视觉记忆点、市场风格)
negative_promptTEXT负面提示词
image_pathTEXT已应用的封面本地路径

model_configs 模型配置

字段类型说明
idINTEGER PK
nameTEXT配置名(如"DeepSeek")
providerTEXTopenai_compat / doubao / qianfan / claude / gemini / ollama / custom
base_urlTEXT接口地址(custom 必填)
api_key_encryptedTEXTDPAPI 加密后的密钥
modelTEXT模型名
endpoint_idTEXT火山方舟等需要的 endpoint(可空)
max_tokensINTEGER默认输出上限
temperatureREAL默认温度
concurrencyINTEGER该模型的并发数
timeout_secINTEGER超时
extraTEXT(JSON)厂商特有参数(如 anthropic_version)
is_presetBOOL是否官方预设
is_defaultBOOL是否默认选中

generation_tasks 生成任务(断点续跑核心)

字段类型说明
idINTEGER PK
novel_idINTEGER FK
task_typeTEXTplan / intro / outline / chapter_outlines / characters / items / maps / chapters / cover / finalize
step_orderTEXT(JSON)完整步骤顺序(用于恢复)
current_stepINTEGER当前执行到第几步
current_indexINTEGER当前进度(如第 N 章)
total_stepsINTEGER总步骤数
statusTEXTqueued / running / paused / failed / completed
errorTEXT最近错误信息
retry_countINTEGER连续重试计数
checkpoint_jsonTEXT(JSON)阶段 checkpoint 数据
created_at / updated_at / finished_atDATETIME

global_settings 全局设置

字段类型说明
keyTEXT PK如 theme / default_export_path / default_model_id / ui_language / audit_interval
valueTEXT(JSON)值

5.3 索引与约束

  • chapters(novel_id, index) 唯一;chapter_outlines(novel_id, chapter_index) 唯一
  • foreshadows(setup_chapter)、foreshadows(resolve_chapter) 索引
  • 全部子表 novel_id 建索引;删除小说级联删除

6. LLM 适配层(核心模块)

6.1 统一 Provider 接口

type ChatMessage struct {
    Role    string `json:"role"`    // system / user / assistant
    Content string `json:"content"`
}

type ChatRequest struct {
    Model       string
    Messages    []ChatMessage
    Temperature float64
    MaxTokens   int
    JSONMode    bool            // 强制 JSON 输出
    Stop        []string
    Extra       map[string]any  // 厂商特有参数
}

type ChatResponse struct {
    Content string
    Usage   struct{ PromptTokens, CompletionTokens int }
}

type Provider interface {
    Name() string
    Chat(ctx context.Context, req ChatRequest) (*ChatResponse, error)
}

6.2 预设提供商清单(至少内置 6+ 家 + 自定义)

预设provider默认模型示例说明
DeepSeekopenai_compatdeepseek-chatbase_url: https://api.deepseek.com/v1
豆包 / 火山方舟doubaodoubao-seed--需 Endpoint ID
通义千问openai_compatqwen-plusDashScope 兼容模式
Kimi(月之暗面)openai_compatmoonshot-v1-8k
智谱 GLMopenai_compatglm-4-plus
文心一言qianfanernie-4.0单独适配鉴权
OpenAIopenai_compatgpt-4o-mini
Claudeclaudeclaude-sonnet-4单独适配(非 OpenAI 协议)
Geminigeminigemini-2.5-flash单独适配
Ollama(本地)ollamaqwen2.5:14b本地模型,无需密钥
OpenRouteropenai_compat任意聚合接入
自定义custom用户填写base_url + api_key + model,走 OpenAI 兼容协议;无法确认兼容性时给出提示

6.3 密钥安全

  • Windows 下使用 DPAPI(CryptProtectData)加密后写入 model_configs.api_key_encrypted
  • 开发期其他平台用 AES-GCM 兜底,密钥由用户输入
  • 前端只显示掩码(sk-****abcd),任何接口不回传明文;日志禁止记录密钥

6.4 结构化输出规范(所有"生成资产"统一走 JSON)

  • 优先使用各模型 response_format: {type: "json_object"} / JSON Mode
  • 不支持 JSON Mode 的模型:prompt 强制 + 解析 + 自动修复(去包裹、截断补全、转义修复),最多重试 3 次,指数退避
  • 解析失败超过上限 → 该步骤标记 failed 并保留错误信息,可人工重试(断点续跑支持)

6.5 上下文包与 Token 预算(章节衔接的命脉)

单章正文生成的 Prompt 组装顺序(固定模板):

  1. system 提示词:写作规范、文风、视角、禁止重复/跑题/设定冲突的禁令
  2. 设定包:世界观设定、主线梗概、当前卷摘要(按 Token 预算截断)
  3. 章节大纲:当前章大纲 + 前后各 1 章大纲(保证衔接)
  4. 角色状态快照:存活角色清单 + 关键状态 + 所在地
  5. 伏笔台账:未回收伏笔列表 + 本章应回收伏笔
  6. 前文摘要:最近 5–10 章摘要 + 全文滚动摘要(Long Summary 压缩)
  7. 前章结尾:上一章正文最后 200–300 字(无缝衔接)
  8. 本章要求:事件清单、字数目标、结尾必须呼应 ending_hook

Token 预算策略:按模型上下文窗口分档(8k / 32k / 64k / 128k+),超出部分逐级丢弃(先丢次要设定,再压缩摘要)。每章正文若目标字数超出单次调用能力,则拆分为 1–3 次"续写"调用,续写上下文注入已写部分结尾 300 字。

6.6 一致性保障机制(10–2000 章不跑题、不重复)

机制实现
大纲约束正文必须严格按章节大纲事件生成;章节大纲由故事大纲派生;故事大纲由描述+参数派生(层层约束)
设定冻结世界观/角色/物品/地图在 P4–P5 阶段生成后"冻结",正文生成强制注入
伏笔台账章节大纲阶段登记伏笔;正文只允许设置已登记的伏笔,回收必须登记对应关系
章节摘要每章完成后调用模型生成结构化摘要(新事件/角色状态变化/新增伏笔)写入 chapters.summary
滚动一致性审查每 N 章(默认 20,可配置)运行一致性审查 Agent:对照设定包与近 N 章摘要,输出冲突清单 → 自动修正设定(需用户确认)或生成"修订建议"人工处理
防重复防跑题生成前注入"本卷主线 + 最近事件",明确禁令;可选对已写章节摘要做相似度检测(关键词/向量),相似度过高自动要求重写
结尾钩子每章大纲预设 ending_hook,正文结尾强制呼应,下章开篇承接

6.7 限流与成本

  • 每模型并发数可配置(默认 1–2)
  • 失败重试 + 指数退避(30s/60s/120s);连续失败 5 次 → 任务自动暂停并提示用户
  • 每章记录 token 消耗;进度页展示估算成本

7. 生成流水线(业务核心)

7.1 用户输入(生成表单,全部带预设)

参数预设说明
生成模型6.2 预设列表 + 自定义必选
分类玄幻 / 仙侠 / 都市 / 科幻 / 悬疑 / 言情 / 历史 / 游戏 / 军事 / 轻小说 / 其他单选
标签穿越、系统、无敌流、重生、克苏鲁、电竞、星际、校园、商战、末世…多选,可自增
描述自由文本核心输入,一句话/一段话故事构思
章节数量10–2000(输入整数,越界提示)必填
每章字数1000 / 2000 / 3000 / 4000 / 5000 / 8000(可自定义)必填
文风网文爽文 / 文青细腻 / 悬疑冷峻 / 幽默吐槽 / 古典文言 / 科幻硬核 / 温暖治愈 / 史诗厚重 / 自定义单选
叙事视角第一人称 / 第三人称限知 / 第三人称全知 / 多视角单选

高级选项(默认合理值,可展开):世界观基调、是否自动生成角色/物品/地图、一致性审查间隔(章)、并发数、摘要用小模型(省钱)。

7.2 流水线步骤(状态机,全步骤可断点续跑)

P1 任务初始化
  └ 校验参数、创建 novel 记录、生成任务落库
P2 生成小说介绍(简介 + 卖点)
P3 生成故事大纲(含卷结构;章节数 > 100 自动按卷分块,每卷约 30–60 章)
P4 生成章节大纲(批量并行,每批 10–20 章;依赖 P3)
P5 生成角色体系(角色清单 → 角色卡片 → 角色详情 → 关系图谱)
P6 生成物品卡 / 地图卡(依赖世界观设定)
P7 逐章正文生成(核心循环,见 7.3)
P8 封面工坊(生成商业封面描述词;可选调用图像模型生成本地封面)
P9 收尾(一致性总检、状态置 completed、输出生成报告)
  • 每一步完成即事务提交;已完成步骤在续跑时自动跳过
  • 任一步失败:记录 error + 步骤上下文,任务置 failed/paused,可手动从该步骤继续

7.3 逐章正文生成循环(P7)

for i = 当前进度 → target_chapters:
  1. 读取 chapter_outlines[i],组装上下文包(6.5 模板)
  2. 调用 LLM 生成正文(超长则续写拼接)
  3. 调用 LLM 生成章节摘要(写入 chapters.summary)
  4. 同步伏笔台账(比对正文实际出现/回收)
  5. 写入 chapters(事务提交),进度 +1,checkpoint 更新
  6. 失败 → 按 6.7 重试策略处理
  7. 每 N 章触发一致性审查(6.6)

7.4 断点续跑设计(重点需求)

  • 任务表:generation_tasks 记录步骤顺序、当前步骤、当前索引、checkpoint;每章/每步骤事务提交
  • 应用重启:启动时扫描未完成任务 → 弹窗"检测到未完成创作《XX》,是否继续?"
  • 续跑:跳过硬完成步骤,从 current_step/current_index 继续;幂等保证((novel_id, index) 唯一,重跑不产生脏数据)
  • 手动控制:生成页提供暂停 / 继续 / 取消按钮;取消后进度保留,可随时重新启动
  • 单章重写:以"上一章摘要 + 本章大纲 + 原章节前 N 字"为上下文重写,覆盖时 revision+1(保留旧内容到历史记录,可选)

7.5 人工编辑(所有信息可改)

  • 大纲、章节大纲、章节正文、角色卡片/详情、物品、地图、伏笔、封面词、小说介绍、书名标签——全部支持编辑保存
  • 编辑章节大纲后:该章标记"已修订",可选"重新生成本章正文"
  • 编辑角色/物品/地图后:设定包更新,后续章节生成自动采用新设定

8. 前端设计与页面(小说风格 UI)

8.1 主题系统(黑白双风格 + 顶部标题栏)

  • 双主题:墨黑(暗色,星空/水墨意境)/ 素白(亮色,羊皮纸/宣纸质感)
  • 全部视觉走 CSS 变量(--bg-primary / --bg-paper / --ink / --accent / --border 等),一处切换全应用生效
  • 窗口顶部标题栏随主题切换:采用 Wails 无边框窗口 + Vue 自绘标题栏(最小化/最大化/关闭按钮同样换肤)
  • 主题切换动画:墨迹扩散 / 纸张翻页过渡(可配置开关,默认开启)
  • 小说风格元素:衬线标题、纸张纹理、毛边阴影、印章式 Logo、书脊元素
  • 动效清单:页面转场(翻页/淡入)、生成时"打字机 + 研墨"光标、章节解锁动画、水墨流动进度条、卡片 hover 微交互(浮起 + 墨晕)、阅读器翻页动画

8.2 页面清单(路由)

路由页面功能
/generate新建创作参数表单(7.1)+ 高级选项折叠
/progress/:novelId生成进度实时进度、流水线步骤状态、日志、暂停/继续/取消、断点提示
/library我的书架小说列表(封面/进度/状态徽标)、搜索、排序、历史
/novel/:id小说详情介绍、封面、元数据、全部资产入口
/novel/:id/outline故事大纲大纲查看/编辑(卷结构树)
/novel/:id/chapters章节列表分页列表、状态、字数、单章重写/编辑
/novel/:id/reader阅读器分页阅读、目录抽屉、字号/行距/背景/字体、翻页动画、伏笔高亮
/novel/:id/characters角色图谱ECharts 关系网(可拖拽、筛选、点击看卡片)
/novel/:id/characters/:cid角色详情角色卡片 + 详情长文编辑
/novel/:id/items物品库物品卡网格 + 详情 + 编辑
/novel/:id/maps地图集地图卡 + 层级地图树 + 详情 + 编辑
/novel/:id/foreshadows伏笔管理时间线视图(埋设章→回收章连线)、状态筛选、编辑
/novel/:id/cover封面工坊封面描述词展示/重新生成、上传本地封面图
/settings/models模型设置预设列表、自定义接入、密钥掩码、测试连通
/settings/general通用设置主题切换、默认导出路径、一致性审查间隔
/settings/about关于版本、数据目录、日志、备份入口、合规提示

8.3 阅读器设计

  • 数据源为本地章节,无网络依赖
  • 分页模式:按字数/屏宽自动分页;上下章滑动/淡入翻页动画
  • 目录抽屉:章节树 + 当前进度 + 跳转
  • 阅读设置:字号、行距、字体(衬线/黑体)、背景(宣纸/墨绿护眼/纯黑/纯白)、翻页方式
  • 伏笔高亮:正文中伏笔关键词高亮(可开关),点击弹出伏笔详情卡

8.4 角色图谱

  • ECharts 力导向图:节点 = 角色(头像/阵营配色),边 = 关系(类型标签 + 强度)
  • 支持:按阵营/类型筛选、拖拽布局、点击节点打开角色卡片、编辑关系(新增/修改/删除)、布局保存
  • 数据来源:characters + character_relations

9. API / Binding 设计

采用 Wails v2 Binding:前端直接调用 Go 方法(JSON 序列化),并配合 Wails Events 做进度推送。接口分组如下(方法名示意,可微调):

9.1 模型配置

  • ListModelConfigs() []ModelConfig
  • SaveModelConfig(cfg ModelConfig) (id int64, err error)
  • TestModelConnection(cfg ModelConfig) TestResult
  • DeleteModelConfig(id int64) error
  • SetDefaultModel(id int64) error

9.2 创作(生成控制)

  • CreateNovel(req CreateNovelReq) (novelID int64, err error)
  • StartGeneration(novelID int64, opts GenOptions) error
  • PauseGeneration(novelID int64) error
  • ResumeGeneration(novelID int64) error
  • CancelGeneration(novelID int64) error
  • GetGenerationStatus(novelID int64) GenStatus(含 current_step / progress / logs)
  • GetPendingTasks() []GenTask(启动时断点扫描)

9.3 小说与资产查询/编辑

  • ListNovels(page, size, filter) Page[NovelSummary]
  • GetNovel(id) Novel / UpdateNovelMeta(id, patch) error / DeleteNovel(id) error
  • GetOutline(novelID) Outline / SaveOutline(novelID, content) error
  • ListChapterOutlines(novelID, start, end) []ChapterOutline / SaveChapterOutline(id, patch) error
  • ListChapters(novelID, page, size, filter) Page[ChapterSummary]
  • GetChapter(id) Chapter / SaveChapter(id, patch) error / RegenerateChapter(id) error / RegenerateFromChapter(id) error
  • ListCharacters(novelID) []Character / GetCharacter(id) Character / SaveCharacter(id, patch) error / CreateCharacter(...) / DeleteCharacter(id) error
  • ListRelations(novelID) []Relation / SaveRelation(...) / DeleteRelation(id) error
  • ListItems(novelID) / GetItem / SaveItem / DeleteItem
  • ListMaps(novelID) / GetMap / SaveMap / DeleteMap
  • ListForeshadows(novelID, status?) []Foreshadow / SaveForeshadow(...) / ResolveForeshadow(id, chapterIndex) error
  • GetCoverInfo(novelID) CoverInfo / RegenerateCover(novelID) error / SetCoverImage(novelID, path) error

9.4 导出与阅读

  • ExportTXT(novelID int64, opts ExportOptions) (filePath string, err error)(opts:是否含简介/大纲、编码 UTF-8/GBK、输出目录)
  • GetChapterContent(id) string(阅读器按章拉取)
  • OpenDataDir() error

9.5 通用

  • GetSettings(key)/SetSettings(key, value) / GetTheme()/SetTheme(name)
  • GetAppVersion() / GetDataDir()

9.6 事件推送(进度实时性)

  • Wails Events:Emit("generation_progress", payload):每完成一章、每切换步骤时推送 {novelID, step, currentIndex, totalSteps, chapterIndex, status}
  • 前端订阅后实时刷新进度页与书架状态

10. TXT 导出规范

  • 默认结构:书名 + 简介 + 目录 + 正文(卷标题 → 章标题 → 正文)
  • 选项:是否包含简介/大纲、编码(UTF-8 默认 / GBK 可选)、单文件或按卷分文件
  • 文件命名:书名.txt 或 书名_第X卷.txt
  • 大文件处理:2000 章 × 3000 字 ≈ 600 万字符,必须流式写入,避免内存峰值;导出显示进度
  • 默认导出目录:文档/AI小说工坊/导出/(可配置)
  • 导出后弹窗提示路径 + "打开所在文件夹"

11. 打包与发布(EXE 安装包)

  • Wails v2 打包:wails build -nsis 产出安装包(NSIS)
  • 安装默认目录:%LOCALAPPDATA%\Programs\AI小说工坊(免管理员权限);创建桌面快捷方式
  • 数据目录:%USERPROFILE%\Documents\AI小说工坊\(novels.db + media/ 封面图等),迁移 = 拷贝整个目录
  • 应用图标:书本 + 墨水瓶元素;安装引导图与产品名一致
  • 兼容性:Windows 10/11 x64;无 GPU 依赖
  • 提供 --version 与日志目录:%LOCALAPPDATA%\AI小说工坊\logs\(滚动保留 7 天)

12. 非功能需求

12.1 性能

  • 2000 章规模:书架/章节列表查询 < 1s(分页 + 索引);阅读器章节拉取 < 200ms
  • 生成并发 1–3;单章 3000 字生成时间取决于模型(预计 10–60s),生成全程不卡 UI(异步 + 事件推送)
  • 常驻内存 < 300MB

12.2 可靠性

  • 每章写入事务;生成中途崩溃不丢已完成章节
  • 统一错误码与中文提示(如"API 密钥无效,请到设置页检查")
  • 备份入口:一键导出 zip(novels.db + media/)

12.3 安全与隐私

  • 除用户主动调用所选模型 API 外,应用不联网、不上传任何数据
  • API 密钥 DPAPI 加密存储;日志不记录密钥与正文
  • 关于页提供合规提示:"AI 生成内容请遵守平台规则,商用前请自查版权与内容合规"

12.4 易用性

  • 首次启动引导:选择模型 → 测试连通 → 示例生成(预置演示参数)
  • 书架空状态:引导创建第一部小说
  • 所有生成类操作均有进度反馈与可取消按钮

13. 验收标准(开发方交付自查)

#验收项标准
1安装包双击安装包完成安装,启动即用,无需安装额外环境(Node/Go/Python 均不需要)
2模型接入预设模型 ≥ 6 家可用;自定义 base_url 可连通;密钥不回显、日志无密钥
3参数生成8 项参数均有预设可选;章节数 10 与 2000 边界可用
4产出完整一部 10 章小说生成后:介绍/大纲/章节大纲/正文/角色+图谱/物品/地图/伏笔/封面词全部存在且可查看
5一致性生成 30 章以上抽查:无明显跑题、重复情节、人名/设定前后矛盾;伏笔可正常回收
6断点续跑生成至第 8 章强制退出,重启后提示继续,从第 9 章续写且不重复不丢章
7人工编辑所有资产生成后可在对应页面修改并保存生效
8TXT 导出导出成功、编码正确、章节数抽样核对一致、大文件不卡死
9阅读器目录/翻页/字号设置可用;伏笔高亮可用
10主题黑白切换覆盖全部页面(含顶部自绘标题栏),动画流畅可关闭
11性能2000 章规模列表与阅读流畅;生成过程 UI 不卡顿
12历史已生成小说列表历史完整,可再次打开查看/编辑/续生成

14. 开发计划(建议里程碑)

里程碑内容验收
M1 骨架Wails 初始化、Vue 工程、主题系统、路由、自绘标题栏应用可启动,黑白主题切换生效
M2 数据层GORM 模型、迁移、全量 CRUD service数据结构与 5.2 一致
M3 LLM 层Provider 接口、预设模型、密钥加密、结构化输出6 家以上可连通测试
M4 生成流水线介绍→大纲→章节大纲→正文→摘要→伏笔;任务队列 + 断点续跑验收项 4/5/6 通过
M5 资产页面角色/图谱/物品/地图/伏笔/封面页 + 编辑验收项 7 通过
M6 阅读器与导出分页阅读器、TXT 导出验收项 8/9 通过
M7 打磨动画、空状态、错误提示、日志、备份、首次引导验收项 10/11/12 通过
M8 打包发布NSIS 安装包、图标、引导图验收项 1 通过

15. 风险与对策

风险对策
长文一致性不足摘要滚动窗口、设定注入、伏笔台账、滚动一致性审查 Agent(见 6.6)
模型限流/失败队列重试 + 指数退避 + 自动暂停人工续跑
Token 成本高上下文预算分级、摘要压缩、可选小模型生成摘要
SQLite 并发写生成流水线串行写入(单写连接),读走独立连接
Wails 打包/环境坑M1 提前验证打包链路;SQLite 用纯 Go 驱动避免 CGO
2000 章数据量分页索引齐全、正文按需拉取、导出流式写入

16. 附录:提示词模板与 JSON Schema 示例(开发可直接复用)

16.1 章节大纲输出 Schema

{
  "chapter_index": 12,
  "title": "初入宗门",
  "purpose": "主角通过入门考核并结识第一位同伴",
  "summary": "本章一句话概括",
  "events": ["主角通过入门考核", "与林小婉相识", "发现藏书阁密道"],
  "characters": [
    {"name": "沈夜", "role": "主角", "state": "通过考核"},
    {"name": "林小婉", "role": "重要配角", "state": "首次登场"}
  ],
  "foreshadow_set": [
    {"title": "藏书阁密道", "importance": "支线", "resolve_hint": "第三卷揭晓"}
  ],
  "foreshadow_resolve": [
    {"title": "入门考核的神秘考官", "resolve_chapter": 12}
  ],
  "ending_hook": "密道深处传来低语声",
  "continuity_from": "承接第 11 章结尾的考核结果揭晓"
}

16.2 角色卡片 Schema

{
  "name": "沈夜",
  "role_type": "主角",
  "gender": "男",
  "age": 17,
  "identity": "青云宗杂役弟子",
  "personality": "冷静、坚韧、轻微社恐",
  "appearance": "黑发、左眼下方泪痣、常年洗白的灰袍",
  "background": "孤儿,被守门人收养",
  "motivation": "寻找父母失踪的真相",
  "arc": "自卑逃避 → 承担责任 → 守护所爱",
  "faction": "青云宗",
  "status": "存活",
  "key_relations": [{"name": "林小婉", "relation": "同伴/暧昧"}]
}

16.3 正文生成 System Prompt 模板

你是资深网络小说作家。请严格按以下要求创作:

【文风】{{style}} 【视角】{{perspective}}
【硬性禁令】
1. 不得重复前文情节,不得偏离本章大纲事件;
2. 不得改变已冻结的角色/物品/地图设定;
3. 只允许设置大纲中已登记的伏笔,必须回收大纲要求回收的伏笔;
4. 本章结尾必须呼应 ending_hook;开篇必须承接上一章结尾。

【世界观设定】
{{world_setting}}

【本章大纲】{{current_outline}}
【上一章大纲】{{prev_outline}} 【下一章大纲】{{next_outline}}

【角色状态快照】{{character_snapshot}}
【伏笔台账(未回收)】{{foreshadow_open}}
【本章应回收】{{foreshadow_resolve_now}}

【前文摘要】{{recent_summaries}}
【上一章结尾】{{last_chapter_tail}}

【本章要求】事件:{{events}};目标字数:{{word_count}};结尾钩子:{{ending_hook}}
只输出正文,不要输出标题、大纲或解释。

16.4 章节摘要 Schema

{
  "chapter_index": 12,
  "summary": "2-3 句话概括本章剧情",
  "new_events": ["事件A", "事件B"],
  "character_state_changes": [{"name": "沈夜", "from": "杂役弟子", "to": "外门弟子"}],
  "foreshadow_planted": ["藏书阁密道"],
  "foreshadow_resolved": ["神秘考官"],
  "location_changes": {"沈夜": "青云宗 → 藏书阁"}
}

16.5 一致性审查输出 Schema

{
  "conflicts": [
    {
      "type": "设定冲突",
      "chapter": 45,
      "issue": "林小婉第 12 章已离宗,第 45 章又出现在宗门内",
      "suggestion": "改为两人在宗外小镇相遇"
    }
  ],
  "continuity_ok": true,
  "recommendations": ["第 50 章建议回收伏笔「藏书阁密道」"]
}

16.6 封面描述词输出 Schema(商业性质)

{
  "prompt": "完整的英文/中文文生图提示词:主角半身像、国漫厚涂、高饱和、强光影、泪痣灰袍少年、宗门剪影背景、动态光效、3:4 竖版……",
  "style_tags": ["国漫厚涂", "高饱和", "光影对比"],
  "composition": "主角半身像居中偏右,身后宗门剪影,视觉焦点在眼睛",
  "aspect_ratio": "3:4",
  "commercial_points": ["主角视觉记忆点:泪痣 + 灰袍", "市场风格:起点/番茄热血少年向封面"],
  "negative_prompt": "低质量、模糊、多余手指、文字、水印"
}

17. 给开发方(WorkBuddy)的实施要点清单

  • [ ] 确认桌面框架选型(默认 Wails v2,如需变更先说明)
  • [ ] 确认 UI 组件库(默认 Naive UI)与产品名
  • [ ] 实现优先级:生成流水线 + 断点续跑 + 一致性机制 为最高优先级
  • [ ] 所有"生成资产"一律走 JSON 结构化输出 + 解析修复
  • [ ] 密钥加密、日志脱敏、数据本地化三项安全基线不可妥协
  • [ ] 交付时附:安装包、源码、数据库初始化脚本、M1–M8 里程碑自测记录

本文档为 AI 小说工坊的完整开发依据;可视化附图见同目录 HTML 文件。

相关推荐