AI 小说工坊

用「主编 + 作家」多模型协作来写长篇小说的本地 Web 应用。

  • 主编(例如 Claude):规划章节大纲,为每一章撰写「章节简报」(情节要点、出场人物、基调、文风、结尾钩子……),选派作家,审稿。主编只读每章的摘要,不读全文,长篇写作也不会撑爆上下文。
  • 作家(例如 Gemini,可以有多位):按简报写正文,正文流式直接写入 data/ 下的章节文件,同时实时推送到前端显示。
  • 摘要员:章节确认后提炼摘要,并更新人物状态、伏笔、时间线等「故事记忆」,保证后续章节连贯。

主编、作家、摘要员都可以单独设置最高优先级的自定义系统提示词。

功能

模块 说明
模型与 API OpenAI 兼容(OpenAI / DeepSeek / OpenRouter / 硅基流动 / Ollama…)、Anthropic、Google Gemini;拉取模型列表、连接测试;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
  1. 打开「模型与 API」,添加提供方(可以用快速填写),再在提供方下添加模型并点击「测试」。
  2. 新建作品,填写「故事设定」,在「角色与世界书」中新建角色或导入酒馆角色卡(请使用原始 PNG 文件:截图或经聊天软件压缩后,图片里的角色数据会丢失)。
  3. 在「AI 团队」中给主编、摘要员、作家分配模型(例如主编用 Claude,作家用 Gemini),按需填写自定义系统提示词。
  4. 回到「写作台」,点击右上角「继续下一章」。主编会先规划章节,再为第 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 服务与端到端测试
S
Description
No description provided
Readme 265 KiB
Languages
TypeScript 49.7%
Vue 42.3%
JavaScript 7.5%
CSS 0.5%