main
- 手机上章节列表与工作区分两屏,点章节进入工作区,左上角返回 - 列表页顶部提供「继续下一章」与流程说明;工作区顶栏使用紧凑版控制按钮 - 在列表页启动写作后自动进入即将处理的章节 - 精简标签页文字、正文留白与版本信息,避免小屏截断 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AI 小说工坊
用「主编 + 作家」多模型协作来写长篇小说的本地 Web 应用。
- 主编(例如 Claude):规划章节大纲,为每一章撰写「章节简报」(情节要点、出场人物、基调、文风、结尾钩子……),选派作家,审稿。主编只读每章的摘要,不读全文,长篇写作也不会撑爆上下文。
- 作家(例如 Gemini,可以有多位):按简报写正文,正文流式直接写入
data/下的章节文件,同时实时推送到前端显示。 - 摘要员:章节确认后提炼摘要,并更新人物状态、伏笔、时间线等「故事记忆」,保证后续章节连贯。
主编、作家、摘要员都可以单独设置最高优先级的自定义系统提示词。
功能
| 模块 | 说明 |
|---|---|
| 模型与 API | 一个弹窗完成配置:接口类型(OpenAI 兼容 / Anthropic 原生 / Gemini 原生)、Base URL、API Key,模型可从接口拉取后勾选或手动填写;适配中转站(漏写 /v1 自动补全);单模型测试与参数;API Key 用 AES-256-GCM 加密存储 |
| 故事设定 | 故事背景/世界观、故事大纲、写作要求(语言、文风、视角、叙述方式、字数、其他要求)、写作流程开关 |
| 角色与世界书 | 手动管理角色;导入酒馆角色卡(PNG 的 ccv3/chara 文本块,或 JSON;兼容 V1/V2/V3),自动替换 {{char}}/{{user}},内置世界书(character_book)转为项目世界书;世界书支持常驻条目和关键词/正则触发 |
| AI 团队 | 主编、摘要员、任意多位作家;每位成员可以选模型、设置自定义系统提示词;主编也可以用已配置的模型自行创建作家(可关闭) |
| 写作台 | 章节列表;简报查看/编辑;作家指派(手动指派会锁定,主编不会更换);实时写作显示;手动编辑正文;多版本切换;主编审稿;按意见修改或重写 |
| 写作流程 | 逐章模式(默认):每章写完就暂停,用户确认后再写下一章;自动模式:自动确认并连续写作,到达章节上限后暂停;可选「简报后暂停」;随时停止 |
| 故事记忆 | 人物当前状态、伏笔(未回收/已回收)、时间线,可以手动修正 |
| 任务日志 | 每次 AI 调用的状态、耗时、token 用量,以及完整提示词检视 |
| 导出 | TXT / Markdown,可选择全部章节或仅已确认章节 |
快速开始
需要 Node.js 22+ 和 pnpm。
pnpm install
pnpm dev # http://localhost:3000
- 打开「模型与 API」→「添加 API」,选择接口类型,填写 Base URL(中转站一般带
/v1)和 API Key,点「从接口拉取模型」勾选需要的模型(也可以手动输入模型名),保存后点「测试」。 - 新建作品,填写「故事设定」,在「角色与世界书」中新建角色或导入酒馆角色卡(请使用原始 PNG 文件:截图或经聊天软件压缩后,图片里的角色数据会丢失)。
- 在「AI 团队」中给主编、摘要员、作家分配模型(例如主编用 Claude,作家用 Gemini),按需填写自定义系统提示词。
- 回到「写作台」,点击右上角「继续下一章」。主编会先规划章节,再为第 1 章写简报并交给作家;写完后暂停,阅读后点击「确认并继续下一章」。
部署(单用户自托管)
pnpm build
NOVEL_DATA_DIR=/var/lib/novel HOST=127.0.0.1 PORT=3000 pnpm start
| 环境变量 | 说明 |
|---|---|
NOVEL_DATA_DIR |
数据目录,默认 ./data:包含 app.db、secret.key、projects/<id>/chapters/*.md、头像 |
NOVEL_SECRET_KEY |
可选,64 位十六进制的 API Key 加密密钥;不设置时自动生成 data/secret.key(请备份,丢失后需要重新填写 API Key) |
NOVEL_PASSWORD |
可选,设置后启用 HTTP Basic 访问密码(用户名任意)。部署到公网或局域网时务必设置 |
HOST / PORT |
监听地址和端口 |
应用需要在项目根目录启动(运行时会读取 server/db/migrations 执行数据库迁移)。
章节文件
每一个版本都是一个独立的 Markdown 文件,例如:
data/projects/<项目id>/chapters/0003-v2.md # 第 3 章第 2 版
作家输出时边生成边写入;中途停止或出错时,已写出的部分会保留在文件中,章节回退到之前的有效版本。
提示词分层
System:
<highest_priority_instructions> 用户自定义系统提示词 </highest_priority_instructions> ← 最高优先级
角色内置提示词(主编 / 作家 / 摘要员)
写作要求
Prompt:
世界观 → 相关角色 → 触发的世界书 → 故事大纲 → 章节规划 → 前情摘要 → 故事记忆
→ 上一章结尾原文 → 章节简报 →(修改意见 / 上一版草稿)→ 任务
每次调用实际发送的完整提示词都可以在「任务日志」中查看。
开发
pnpm typecheck # 类型检查(app + server)
pnpm db:generate # 修改 server/db/schema.ts 后生成迁移
pnpm mock:llm # 启动模拟的 OpenAI 兼容接口(不消耗 token)
pnpm test:e2e ./角色卡.png # 端到端测试(需先启动 pnpm dev 和 pnpm mock:llm;角色卡参数可选)
技术栈:Nuxt 4(Vue 3 + Vite)、Nuxt UI 4、Vercel AI SDK 7、Drizzle ORM + better-sqlite3、Zod 4。
app/ 前端(页面、组件、组合式函数)
server/api/ REST 接口
server/utils/ 核心逻辑:pipeline(主编/作家/摘要流程)、prompts(提示词)、card(角色卡解析)、llm(模型接入)
server/db/ 数据库表结构与迁移
shared/types/ 前后端共享类型
scripts/ 模拟 LLM 服务与端到端测试
Description
Languages
TypeScript
49.7%
Vue
42.3%
JavaScript
7.5%
CSS
0.5%