[项目Logo占位图 - 建议尺寸: 200x200px, PNG格式, 包含AI和书本元素的现代化图标]
English | 简体中文
AI驱动的智能小说创作协作平台
让AI成为你的写作伙伴,而不是替代品
AI Novel Assistant 是一个专为长篇小说创作设计的智能写作辅助平台,通过 AI 技术帮助作家提升创作效率和质量。
- 智能而不越界 - AI 提供建议但不替代创作,保持作者的创作主导权
- 全流程支持 - 从大纲规划到最终定稿,覆盖小说创作的完整生命周期
- 知识管理 - 系统化管理角色、世界观、情节线等复杂创作要素
- 一致性保障 - AI 自动检测并提示角色性格、世界设定、情节逻辑等方面的矛盾
- 专业编辑体验 - 基于 Tiptap Editor,提供接近 IDE 的强大编辑功能
- 灵活部署 - 支持本地部署和云端部署,数据完全可控
"传统写作工具只是记录文字,而 AI Novel Assistant 是一个真正理解你创作需求的智能伙伴。"
[系统架构图占位 - 建议尺寸: 800x600px, 展示前后端分离架构、数据库、AI服务集成]
┌─────────────────────────────────────────────────────────────┐
│ 客户端层 (Vue 3) │
│ ┌──────────┬──────────┬──────────┬──────────┬──────────┐ │
│ │项目管理 │角色管理 │世界设定 │章节编辑 │AI助手面板│ │
│ └──────────┴──────────┴──────────┴──────────┴──────────┘ │
└───────────────────────┬─────────────────────────────────────┘
│ HTTP/WebSocket
┌───────────────────────┴─────────────────────────────────────┐
│ API 网关层 (Express) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 认证中间件 │ 速率限制 │ CORS │ 日志记录 │ │
│ └──────────────────────────────────────────────────────┘ │
└───────────────────────┬─────────────────────────────────────┘
│
┌───────────────────────┴─────────────────────────────────────┐
│ 业务逻辑层 │
│ ┌──────────┬──────────┬──────────┬──────────┬──────────┐ │
│ │项目服务 │角色服务 │设定服务 │章节服务 │AI服务 │ │
│ └──────────┴──────────┴──────────┴──────────┴──────────┘ │
└───────┬───────────────────────────────────────┬─────────────┘
│ │
┌───────┴──────────┐ ┌─────────┴────────────┐
│ 数据持久层 │ │ 外部服务集成 │
│ ┌────────────┐ │ │ ┌────────────────┐ │
│ │ Prisma ORM│ │ │ │ OpenAI API │ │
│ └─────┬──────┘ │ │ ├────────────────┤ │
│ │ │ │ │ Mem0 AI │ │
│ ┌─────┴──────┐ │ │ ├────────────────┤ │
│ │SQLite/PG │ │ │ │ Cloudflare R2 │ │
│ └────────────┘ │ │ └────────────────┘ │
└──────────────────┘ └──────────────────────┘
| 组件 | 职责 | 关键技术 |
|---|---|---|
| 项目管理引擎 | 小说项目的CRUD操作、元数据管理、进度追踪 | Prisma ORM, SQLite/PostgreSQL |
| 知识库系统 | 角色档案、世界设定、情节线的结构化存储和检索 | 关系型数据库设计、全文搜索 |
| 智能编辑器 | 章节内容编辑、多标签管理、自动保存、版本控制 | Tiptap Editor, WebSocket |
| AI 协作引擎 | 对话模式、内容增强、一致性检查、情节建议 | OpenAI API, Mem0 AI, 提示工程 |
| 导出引擎 | EPUB、TXT等多格式导出,保留格式和元数据 | epub-gen, Archiver |
| 认证系统 | 用户身份验证、会话管理、权限控制 | JWT, Clerk (可选) |
以下是一个典型的小说创作工作流程:
| 步骤 | 操作 | 涉及模块 | AI辅助 |
|---|---|---|---|
| 1 | 创建小说项目,填写标题、简介、类型等元数据 | 项目管理 | - |
| 2 | 定义主要角色,包括外貌、性格、背景故事、关系网 | 角色管理 | AI生成角色建议、性格分析 |
| 3 | 构建世界观,添加地点、规则、文化、历史等设定 | 世界设定 | AI协助完善设定逻辑 |
| 4 | 创建章节大纲,规划情节发展 | 章节编辑 | AI提供情节建议和冲突点 |
| 5 | 编写章节内容,使用AI助手进行对话和增强 | 智能编辑器 + AI面板 | 对话式创作、文本润色、扩写 |
| 6 | 运行一致性检查,发现并修复矛盾 | AI协作引擎 | 自动检测角色、设定、情节矛盾 |
| 7 | 导出成品,生成EPUB或TXT格式 | 导出引擎 | - |
ai-novel-assistant/
├── client/ # 前端应用 (Vue 3 + TypeScript)
│ ├── public/ # 静态资源
│ │ └── favicon.ico
│ ├── src/
│ │ ├── assets/ # 样式和资源文件
│ │ │ ├── base.css # 基础样式
│ │ │ ├── main.css # Tailwind CSS 入口
│ │ │ └── logo.svg
│ │ ├── components/ # 可复用组件
│ │ │ ├── layout/ # 布局组件
│ │ │ │ ├── MainLayout.vue # 主布局框架
│ │ │ │ ├── HeaderBar.vue # 顶部导航栏
│ │ │ │ ├── Sidebar.vue # 左侧导航栏
│ │ │ │ └── StatusBar.vue # 底部状态栏
│ │ │ ├── project/ # 项目相关组件
│ │ │ │ ├── ProjectCard.vue
│ │ │ │ └── ProjectForm.vue
│ │ │ ├── character/ # 角色管理组件
│ │ │ │ ├── CharacterList.vue
│ │ │ │ ├── CharacterDetail.vue
│ │ │ │ └── CharacterFormModal.vue
│ │ │ ├── editor/ # 编辑器组件
│ │ │ │ ├── ChapterEditor.vue
│ │ │ │ ├── MonacoEditor.vue
│ │ │ │ └── EditorToolbar.vue
│ │ │ └── ai/ # AI 助手组件
│ │ │ ├── AIAssistantPanel.vue
│ │ │ ├── ChatInterface.vue
│ │ │ └── EnhancementPanel.vue
│ │ ├── views/ # 页面视图
│ │ │ ├── ProjectManagement.vue # 项目管理页
│ │ │ ├── CharacterManagement.vue # 角色管理页
│ │ │ ├── WorldSettingManagement.vue # 世界设定页
│ │ │ ├── ChapterEditor.vue # 章节编辑页
│ │ │ └── ProgressStats.vue # 进度统计页
│ │ ├── stores/ # Pinia 状态管理
│ │ │ ├── project.ts # 项目状态
│ │ │ ├── character.ts # 角色状态
│ │ │ ├── chapter.ts # 章节状态
│ │ │ └── ai.ts # AI 助手状态
│ │ ├── services/ # API 服务层
│ │ │ ├── api.ts # Axios 配置
│ │ │ ├── projectApi.ts # 项目 API
│ │ │ ├── characterApi.ts # 角色 API
│ │ │ └── aiApi.ts # AI API
│ │ ├── router/ # Vue Router 配置
│ │ │ └── index.ts
│ │ ├── types/ # TypeScript 类型定义
│ │ │ └── index.ts
│ │ ├── App.vue # 根组件
│ │ └── main.ts # 应用入口
│ ├── index.html
│ ├── vite.config.ts # Vite 配置
│ ├── tsconfig.json # TypeScript 配置
│ ├── tailwind.config.js # Tailwind CSS 配置
│ └── package.json
│
├── server/ # 后端应用 (Node.js + Express)
│ ├── routes/ # API 路由
│ │ ├── novels.js # 项目路由
│ │ ├── characters.js # 角色路由
│ │ ├── settings.js # 世界设定路由
│ │ ├── chapters.js # 章节路由
│ │ ├── ai.js # AI 服务路由
│ │ ├── export.js # 导出路由
│ │ └── auth.js # 认证路由
│ ├── middleware/ # Express 中间件
│ │ ├── auth.js # 认证中间件
│ │ ├── errorHandler.js # 错误处理
│ │ └── rateLimiter.js # 速率限制
│ ├── services/ # 业务逻辑层
│ │ ├── aiService.js # AI 服务集成
│ │ ├── exportService.js # 导出服务
│ │ └── consistencyService.js # 一致性检查
│ ├── prisma/ # Prisma ORM
│ │ ├── schema.prisma # 数据库 Schema
│ │ ├── migrations/ # 数据库迁移文件
│ │ └── seed.js # 种子数据
│ ├── utils/ # 工具函数
│ │ ├── logger.js # 日志工具
│ │ └── helpers.js
│ ├── config/ # 配置文件
│ │ └── database.js
│ ├── index.js # 服务器入口
│ ├── .env.example # 环境变量示例
│ └── package.json
│
├── scripts/ # 构建和部署脚本
│ ├── setup.sh # 自动化设置脚本
│ ├── deploy.sh # 部署脚本
│ ├── backup.sh # 数据备份脚本
│ └── pre-deploy-check.sh # 部署前检查
│
├── docs/ # 文档
│ ├── API.md # API 文档
│ ├── DEPLOYMENT.md # 部署指南
│ └── DEVELOPMENT.md # 开发指南
│
├── .env.example # 根环境变量示例
├── package.json # 根 package.json (Monorepo)
├── CLAUDE.md # Claude Code 开发指南
├── MONOREPO.md # Monorepo 架构说明
├── LICENSE # MIT 许可证
└── README.md # 项目说明文档
Docker 是最快速、最简单的部署方式,无需手动配置环境。
- Docker >= 20.10
- Docker Compose >= 2.0
# 1. 克隆项目
git clone https://github.com/yourusername/ai-novel-assistant.git
cd ai-novel-assistant
# 2. 配置环境变量
cp .env.example .env
# 编辑 .env 文件,填入你的 OpenAI API Key
# 3. 启动服务(一键启动)
docker compose up -d
# 4. 访问应用
# 前端: http://localhost:3000
# 后端 API: http://localhost:3001
# Prisma Studio: http://localhost:5555如果使用 PostgreSQL 作为生产数据库:
| 参数 | 说明 | 默认值 |
|---|---|---|
DATABASE_URL |
PostgreSQL 连接字符串 | postgresql://noveluser:changeme@localhost:5432/novel_db |
POSTGRES_USER |
数据库用户名 | noveluser |
POSTGRES_PASSWORD |
数据库密码 | changeme |
POSTGRES_DB |
数据库名称 | novel_db |
# 快速启动本地 PostgreSQL (Docker)
docker compose -f docker-compose.postgres.yml up -d postgres
# 应用数据库迁移
npm run db:push适合开发者和需要自定义配置的用户。
- Node.js >= 20.19.0
- npm >= 9.0.0
- SQLite 3 (开发) 或 PostgreSQL 14+ (生产)
# 1. 克隆项目
git clone https://github.com/yourusername/ai-novel-assistant.git
cd ai-novel-assistant
# 2. 安装依赖(Monorepo 统一管理)
npm install
# 3. 配置服务端环境变量
cp server/.env.example server/.env
# 编辑 server/.env,配置以下必需项:
# - OPENAI_API_KEY: 你的 OpenAI API 密钥
# - DATABASE_URL: 数据库连接字符串
# 4. 配置客户端环境变量
cp client/.env.example client/.env
# 编辑 client/.env,配置:
# - VITE_API_BASE_URL: 后端 API 地址(默认 http://localhost:3001)
# 5. 初始化数据库
npm run db:push
# 6. 启动开发服务器(前端+后端同时启动)
npm run dev
# 前端服务: http://localhost:5173
# 后端服务: http://localhost:3001如果需要单独启动前端或后端:
# 仅启动前端
npm run client:dev
# 仅启动后端
npm run server:dev
# 打开 Prisma Studio 数据库管理界面
npm run db:studio使用项目提供的自动化脚本:
# 运行自动设置脚本(会自动检测环境、安装依赖、配置数据库)
./scripts/setup.sh
# 脚本会执行:
# - 检查 Node.js 和 npm 版本
# - 安装所有依赖
# - 复制环境变量模板
# - 初始化数据库
# - 提示下一步操作# OpenAI API 配置(必需)
OPENAI_API_KEY=sk-proj-xxxxxxxxxxxxxxxxxxxxx
# 数据库配置
DATABASE_URL="file:./prisma/novels.db" # SQLite (开发环境)
# DATABASE_URL="postgresql://user:password@host:5432/dbname" # PostgreSQL (生产环境)
# 服务器配置
PORT=3001
NODE_ENV=development
# CORS 配置
ALLOWED_ORIGINS=http://localhost:5173,http://localhost:3000# API 配置(必需)
VITE_API_BASE_URL=http://localhost:3001# 客户端 (client/.env)
VITE_CLERK_PUBLISHABLE_KEY=pk_test_xxxxxxxxxxxxxxxxxxxxx
# 认证功能开关
VITE_ALLOW_AUTH_MODE_SWITCH=true # 允许切换认证模式
VITE_ENABLE_SOCIAL_LOGIN=true # 启用社交登录
VITE_ENABLE_EMAIL_VERIFICATION=true # 启用邮箱验证# 服务端 (server/.env)
R2_ACCOUNT_ID=your_r2_account_id
R2_ACCESS_KEY_ID=your_r2_access_key
R2_SECRET_ACCESS_KEY=your_r2_secret_key
R2_BUCKET_NAME=ai-novel-assistant
R2_PUBLIC_URL=https://your-bucket.r2.cloudflarestorage.com# 服务端 (server/.env)
TRUST_PROXY=loopback,linklocal,uniquelocal # 可信代理配置
RATE_LIMIT_WINDOW_MS=900000 # 速率限制时间窗口(15分钟)
RATE_LIMIT_MAX_REQUESTS=100 # 时间窗口内最大请求数📝 OpenAI API Key 获取指南
- 访问 OpenAI Platform
- 登录或注册账号
- 点击 "Create new secret key"
- 复制生成的密钥(格式:
sk-proj-...) - 将密钥填入
server/.env的OPENAI_API_KEY
注意事项:
- 密钥只显示一次,务必保存
- 建议设置使用限额避免意外费用
- 不要将密钥提交到版本控制系统
🔐 Clerk Publishable Key 获取指南
- 访问 Clerk Dashboard
- 创建新应用或选择现有应用
- 在 "API Keys" 页面找到 "Publishable Key"
- 复制密钥(格式:
pk_test_...或pk_live_...) - 将密钥填入
client/.env的VITE_CLERK_PUBLISHABLE_KEY
配置建议:
- 开发环境使用
pk_test_密钥 - 生产环境使用
pk_live_密钥 - 启用 Email 和 Social Login 提升用户体验
[项目管理界面截图占位 - 建议尺寸: 1200x800px, 展示项目列表、统计数据、筛选功能]
功能亮点:
- 📂 多项目管理,每个项目独立数据空间
- 📊 实时统计:总字数、章节数、角色数、完成度
- 🏷️ 项目分类和标签系统
- 🔍 快速搜索和筛选
- 📈 写作进度可视化
[角色管理界面截图占位 - 建议尺寸: 1200x800px, 展示角色卡片、详情面板、关系图谱]
功能亮点:
- 👤 详细角色档案:外貌、性格、背景、能力
- 🕸️ 角色关系网络可视化
- 📝 角色成长轨迹记录
- 🤖 AI 辅助生成角色建议
- 🔗 章节引用追踪
角色属性模板:
基本信息:姓名、年龄、性别、种族、职业
外貌特征:身高、体型、发色、眼色、标志性特征
性格特点:MBTI、核心性格、优点、缺点、恐惧
背景故事:出身、经历、转折点、动机、目标
能力系统:技能、特殊能力、装备、战力评估
社交关系:亲人、朋友、敌人、情感关系
[世界设定界面截图占位 - 建议尺寸: 1200x800px, 展示设定分类、详情编辑、关联标签]
功能亮点:
- 🌍 分类管理:地理、历史、文化、规则、组织、科技等
- 🗺️ 地点详情:描述、地图、相关事件
- ⚖️ 规则系统:魔法体系、修炼等级、社会制度
- 📅 时间线管理:历史事件、重大节点
- 🔗 设定关联和引用追踪
[编辑器界面截图占位 - 建议尺寸: 1400x900px, 展示Monaco编辑器、多标签、工具栏]
功能亮点:
- ✨ 专业编辑器:基于 Monaco Editor,提供代码级编辑体验
- 📑 多标签管理:同时打开多个章节,快速切换
- 💾 自动保存:实时保存草稿,永不丢失内容
- 📊 实时统计:字数、段落数、预计阅读时间
- 🎯 大纲模式:章节大纲、情节点、伏笔管理
- ⌨️ 快捷键支持:提升编辑效率
编辑器快捷键:
| 快捷键 | 功能 |
|---|---|
Ctrl+S |
保存章节 |
Ctrl+F |
查找 |
Ctrl+H |
替换 |
Ctrl+/ |
切换注释 |
Ctrl+K Ctrl+F |
格式化文本 |
Alt+↑/↓ |
移动行 |
[AI助手界面截图占位 - 建议尺寸: 800x1000px, 展示对话模式、增强模式、检查模式]
与 AI 进行创作讨论,获取灵感和建议。
使用场景:
- 💭 讨论情节发展方向
- 🎭 探讨角色性格和动机
- 🌈 头脑风暴创意点子
- ❓ 咨询写作技巧和建议
示例对话:
作者: 主角在这一章遇到了背叛,我该如何处理他的情绪反应?
AI: 考虑到主角之前建立的信任和性格特点,可以从以下几个方向展开...
选中文本,使用 AI 进行智能改写和优化。
增强功能:
- 📝 文本润色:优化语句流畅度和文采
- 📖 内容扩写:补充细节和场景描写
- 🎯 重点提炼:压缩冗余,突出核心
- 🎨 风格转换:改变叙述风格和语气
- 🌟 创意增强:添加修辞和意象
操作流程:
- 在编辑器中选中需要优化的文本
- 打开 AI 助手面板,切换到"增强"模式
- 选择增强类型(润色/扩写/提炼/转换)
- AI 生成建议版本
- 一键应用或继续调整
AI 自动扫描全文,检测并提示矛盾之处。
检查项目:
- 👤 角色一致性:性格前后矛盾、能力设定冲突
- 🌍 设定一致性:世界观规则违背、地理描述矛盾
- 📖 情节一致性:时间线错乱、因果逻辑问题
- 🗣️ 对话一致性:称呼错误、信息泄露
- 📅 时间一致性:日期计算错误、季节混乱
检查报告示例:
⚠️ 发现 3 处潜在问题:
1. 角色矛盾 (第12章 vs 第18章)
- 张三在第12章提到从未去过北方
- 第18章回忆中却出现在北方城市的场景
建议:调整第12章表述或删除第18章相关回忆
2. 时间线问题 (第5章)
- 故事发生在冬季,却出现荷花盛开的描写
建议:修改季节或更换景物描写
3. 设定冲突 (第22章)
- 违反了第3章建立的魔法规则:禁咒需要24小时准备
建议:增加准备时间描写或调整规则设定
[导出界面截图占位 - 建议尺寸: 800x600px, 展示导出选项、格式选择、预览]
支持格式:
- 📱 EPUB:电子书标准格式,支持封面、目录、元数据
- 📄 TXT:纯文本格式,保留章节结构
- 📋 Markdown:保留格式标记,便于后续编辑
- 🌐 HTML:网页格式,适合在线阅读
导出配置:
✅ 包含元数据(标题、作者、简介)
✅ 生成目录导航
✅ 嵌入封面图片
✅ 保留章节层级
✅ 自定义字体和排版
1. 点击"新建项目"按钮
2. 填写项目信息:
- 小说标题:《星际迷航:未知领域》
- 类型:科幻小说
- 简介:一群星际探险家的冒险故事...
- 目标字数:200,000
3. 点击"创建"
1. 进入"角色管理"
2. 创建主角:
- 姓名:艾琳·科尔
- 性格:理性、果断、富有同情心
- 背景:前军官,现探险队长
- 使用 AI 助手生成更多背景细节
3. 创建配角和反派
4. 建立角色关系网
1. 进入"世界设定"
2. 添加地理设定:
- 主要星球:泰拉星、诺瓦星
- 空间站:曙光站
3. 添加规则设定:
- 超光速航行原理
- 外星种族特征
4. 添加组织设定:
- 星际联盟
- 探险者协会
1. 进入"章节编辑器"
2. 创建章节:
- 第一章:启程
- 大纲:艾琳接受任务,组建队伍,准备出发
- 情节点:遇到老朋友、发现线索、意外事件
3. 使用 AI 对话模式讨论情节发展
1. 打开第一章编辑器
2. 根据大纲开始写作
3. 遇到困难时:
- 使用 AI 对话模式寻求建议
- 使用增强模式润色段落
4. 定期保存(自动保存已启用)
1. 完成若干章节后,运行一致性检查
2. 查看 AI 生成的检查报告
3. 逐项修复发现的问题
4. 重新检查确认
1. 进入"导出"功能
2. 选择格式:EPUB
3. 配置封面和元数据
4. 点击"导出"
5. 下载生成的电子书文件
- 先规划后创作:先完善角色和世界观,再开始写作正文
- 定期检查:每完成 5-10 章就运行一次一致性检查
- 善用大纲:在编辑器中使用大纲功能规划章节结构
- AI 辅助而非替代:将 AI 建议作为参考,保持自己的创作风格
- 备份数据:定期导出项目数据备份
- 过度依赖 AI:不要让 AI 直接生成大段内容
- 忽略一致性:不要等全书完成才检查矛盾
- 频繁切换模式:专注于当前创作任务
- 忽略元数据:角色和设定要及时记录,避免遗忘
生产环境推荐使用 PostgreSQL 替代 SQLite。
Supabase 提供免费的 PostgreSQL 数据库托管。
# 1. 访问 https://supabase.com 创建项目
# 2. 获取数据库连接字符串
# 3. 更新环境变量
# server/.env
DATABASE_URL="postgresql://postgres:[password]@db.[project-ref].supabase.co:5432/postgres"
# 4. 应用数据库 Schema
cd server
npx prisma generate
npx prisma db push
# 5. 测试连接
node test-db-connection.js# 1. 使用 Docker 启动本地 PostgreSQL
docker compose -f docker-compose.postgres.yml up -d postgres
# 2. 配置连接字符串
DATABASE_URL="postgresql://noveluser:changeme@localhost:5432/novel_db"
# 3. 应用迁移
npm run db:push
# 4. (可选) 迁移 SQLite 数据
node scripts/migrate-sqlite-to-postgres.js修改 AI 助手的行为和风格。
server/config/ai-prompts.js
// server/config/ai-prompts.js
module.exports = {
dialogue: {
systemPrompt: `你是一位经验丰富的小说创作顾问。
你的职责是帮助作者思考情节、角色、世界观等创作问题。
请遵循以下原则:
- 提供建议而非直接创作内容
- 鼓励作者发挥自己的创意
- 提出开放式问题引导思考
- 考虑作品的整体一致性
当前项目信息:
- 小说类型:{genre}
- 目标读者:{audience}
- 已有角色:{characters}
- 世界观设定:{worldSettings}`,
},
enhancement: {
polish: `优化以下文本的语言表达,使其更流畅、更有文采,但保持原意不变...`,
expand: `扩展以下文本,补充细节描写、场景氛围、人物动作等...`,
condense: `精简以下文本,保留核心信息,删除冗余内容...`,
},
consistency: {
systemPrompt: `分析以下内容,检测是否存在矛盾...`,
}
};项目支持集成多种 AI 服务。
// server/services/aiService.js
const Anthropic = require('@anthropic-ai/sdk');
const anthropic = new Anthropic({
apiKey: process.env.CLAUDE_API_KEY,
});
async function chatWithClaude(messages) {
const response = await anthropic.messages.create({
model: 'claude-3-5-sonnet-20241022',
max_tokens: 1024,
messages: messages,
});
return response.content[0].text;
}# server/.env
AI_PROVIDER=openai # openai | claude | azure | custom
OPENAI_API_KEY=sk-...
CLAUDE_API_KEY=sk-ant-...修改客户端界面样式。
// client/tailwind.config.js
export default {
theme: {
extend: {
colors: {
primary: {
50: '#f0f9ff',
100: '#e0f2fe',
// ... 自定义主色调
900: '#0c4a6e',
},
},
},
},
};/* client/src/assets/base.css */
:root {
--color-background: #ffffff;
--color-text: #213547;
--sidebar-width: 280px;
--header-height: 64px;
/* 自定义 CSS 变量 */
}Railway 提供简单的全栈应用部署。
# 1. 安装 Railway CLI
npm install -g @railway/cli
# 2. 登录 Railway
railway login
# 3. 初始化项目
railway init
# 4. 添加环境变量
railway variables set OPENAI_API_KEY=sk-...
railway variables set DATABASE_URL=postgresql://...
# 5. 部署
railway upRender 提供免费的 Web 服务托管。
# render.yaml
services:
- type: web
name: ai-novel-assistant
env: node
buildCommand: npm install && npm run build
startCommand: npm start
envVars:
- key: NODE_ENV
value: production
- key: OPENAI_API_KEY
sync: false
- key: DATABASE_URL
sync: false# 1. 连接 GitHub 仓库到 Render
# 2. 创建新的 Web Service
# 3. 选择仓库和分支
# 4. 配置环境变量
# 5. 点击 "Create Web Service"# 构建生产镜像
docker build -t ai-novel-assistant:latest .
# 运行容器
docker run -d \
-p 3000:3000 \
-p 3001:3001 \
-e OPENAI_API_KEY=sk-... \
-e DATABASE_URL=postgresql://... \
-v /data/novels:/app/server/prisma \
--name ai-novel-assistant \
ai-novel-assistant:latest# docker-compose.prod.yml
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
- "3001:3001"
environment:
NODE_ENV: production
OPENAI_API_KEY: ${OPENAI_API_KEY}
DATABASE_URL: ${DATABASE_URL}
volumes:
- novel-data:/app/server/prisma
restart: unless-stopped
postgres:
image: postgres:15-alpine
environment:
POSTGRES_USER: noveluser
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: novel_db
volumes:
- postgres-data:/var/lib/postgresql/data
restart: unless-stopped
volumes:
novel-data:
postgres-data:# /etc/nginx/sites-available/ai-novel-assistant
server {
listen 80;
server_name your-domain.com;
# 前端
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
# 后端 API
location /api {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# WebSocket 支持
location /ws {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
}我们欢迎所有形式的贡献!
- 🐛 报告 Bug:提交 Issue
- 💡 功能建议:提交 Feature Request
- 📖 改进文档:修正错误、补充说明、翻译文档
- 💻 贡献代码:修复 Bug、开发新功能
# 1. Fork 本仓库
# 2. 克隆你的 Fork
git clone https://github.com/stevendong/ai-novel-assistant.git
cd ai-novel-assistant
# 3. 创建功能分支
git checkout -b feature/amazing-feature
# 4. 进行开发
# 请遵循项目代码规范(见 CLAUDE.md)
# 5. 提交更改
git add .
git commit -m "feat: add amazing feature"
# 6. 推送到你的 Fork
git push origin feature/amazing-feature
# 7. 创建 Pull Request
# 访问 GitHub 页面,点击 "New Pull Request"在提交 PR 之前,请确保:
- ✅ 代码通过 TypeScript 类型检查
- ✅ 遵循 ESLint 规则(如已配置)
- ✅ 添加必要的注释说明
- ✅ 更新相关文档
- ✅ 测试功能正常工作
- ✅ Commit 信息遵循约定(见下方)
使用 Conventional Commits 规范:
feat: 添加新功能
fix: 修复 Bug
docs: 文档更新
style: 代码格式调整(不影响功能)
refactor: 代码重构
test: 添加测试
chore: 构建配置或辅助工具变更
示例:
git commit -m "feat: add character relationship visualization"
git commit -m "fix: resolve chapter auto-save issue"
git commit -m "docs: update deployment guide"详细的开发指南请参考:
- CLAUDE.md - Claude Code 开发指南
- MONOREPO.md - Monorepo 架构说明
- 核心项目管理功能
- 角色和世界设定系统
- 章节编辑器(Monaco Editor)
- AI 对话、增强、检查模式
- EPUB/TXT 导出功能
- 统一认证系统(Clerk + JWT)
- 基础权限管理
-
版本控制系统
- 章节历史版本管理
- 差异对比和回滚功能
- 多版本分支支持
-
协作功能
- 多人实时协作编辑
- 评论和批注系统
- 团队权限管理
-
智能分析
- 写作风格分析
- 可读性评分
- 情感曲线可视化
-
移动端支持
- 响应式界面优化
- 移动端专用编辑器
- PWA 支持
-
多 AI 模型支持
- Claude、Gemini、国产大模型集成
- 自定义模型切换
- 本地模型部署支持
-
高级导出功能
- PDF 带格式导出
- Word DOCX 格式
- 自定义模板系统
- 出版社格式预设
-
插件系统
- 开放插件 API
- 社区插件市场
- 自定义 AI 提示词插件
-
桌面应用
- Electron 打包
- 离线模式支持
- 本地 AI 模型集成
-
数据分析
- 写作习惯分析
- 生产力统计
- 创作热力图
-
社区功能
- 作品分享平台
- 社区评论和点赞
- 创作教程和模板库
欢迎在 Discussions 中提出你的功能需求和建议!
-
AI 生成内容:本工具使用第三方 AI 服务(OpenAI 等),生成的内容质量和准确性由 AI 服务提供商负责。请勿完全依赖 AI 生成的内容,务必进行人工审核。
-
数据隐私:
- 使用云端 AI 服务时,你的小说内容会被发送到 AI 服务提供商的服务器
- 请勿在小说中包含真实的个人敏感信息
- 建议使用自托管部署以获得更好的隐私保护
-
版权声明:
- 使用本工具创作的小说版权归作者本人所有
- AI 辅助生成的内容可能存在版权争议,请谨慎使用
- 禁止使用本工具创作侵权内容
-
服务可用性:
- 本项目依赖第三方 AI 服务,可能因服务商原因导致功能不可用
- 请定期备份你的小说数据
- 开发者不对数据丢失承担责任
-
使用限制:
- 请遵守当地法律法规
- 禁止使用本工具创作违法违规内容
- AI API 调用会产生费用,请注意成本控制
本项目采用 MIT License 开源协议。
MIT License
Copyright (c) 2025 AI Novel Assistant Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
感谢以下开源项目和服务:
- Vue.js - 渐进式 JavaScript 框架
- Ant Design Vue - 企业级 UI 组件库
- Monaco Editor - 强大的代码编辑器
- Prisma - 现代 TypeScript ORM
- Tailwind CSS - 实用优先的 CSS 框架
感谢所有为本项目做出贡献的开发者!
[贡献者头像墙占位 - 使用 GitHub Contributors 自动生成]
[赞助商 Logo 占位区域]
如果这个项目帮助到了你,欢迎赞助支持项目发展!
- 📧 Email: support@ai-novel-assistant.com
- 💬 Discussions: GitHub Discussions
- 🐛 Issues: GitHub Issues
- 📱 社交媒体: Twitter | 知乎