{"id":30910241,"url":"https://github.com/rhythmicwave/novelforge","last_synced_at":"2026-04-01T17:03:39.054Z","repository":{"id":312189727,"uuid":"1034940986","full_name":"RhythmicWave/NovelForge","owner":"RhythmicWave","description":"AI辅助长篇小说创作，卡片式创作，支持基于 JSON Schema的结构化 AI 生成与上下文引用，可扩展性强。","archived":false,"fork":false,"pushed_at":"2025-08-29T02:07:50.000Z","size":6733,"stargazers_count":28,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-29T06:13:15.056Z","etag":null,"topics":["ai-writing","ai-writing-assistant","creative-writing","creative-writing-ai","fiction","json-schema","llm","longform","novel-writing","outline","pydantic","structured-generation"],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RhythmicWave.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-09T10:04:25.000Z","updated_at":"2025-08-29T02:24:41.000Z","dependencies_parsed_at":"2025-08-29T06:13:21.591Z","dependency_job_id":"21ef284e-d5f5-4b8f-95cb-5d4b0600920b","html_url":"https://github.com/RhythmicWave/NovelForge","commit_stats":null,"previous_names":["rhythmicwave/novelforge"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/RhythmicWave/NovelForge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RhythmicWave%2FNovelForge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RhythmicWave%2FNovelForge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RhythmicWave%2FNovelForge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RhythmicWave%2FNovelForge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RhythmicWave","download_url":"https://codeload.github.com/RhythmicWave/NovelForge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RhythmicWave%2FNovelForge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274331060,"owners_count":25265615,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-09T02:00:10.223Z","response_time":80,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-writing","ai-writing-assistant","creative-writing","creative-writing-ai","fiction","json-schema","llm","longform","novel-writing","outline","pydantic","structured-generation"],"created_at":"2025-09-09T17:03:24.126Z","updated_at":"2026-04-01T17:03:39.042Z","avatar_url":"https://github.com/RhythmicWave.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# NovelForge\n\n\u003cp\u003e\u003cstrong\u003e新一代 AI 长篇小说创作引擎\u003c/strong\u003e\u003c/p\u003e\n\n\u003cp\u003e\n  \u003ca href=\"#目录\"\u003e目录\u003c/a\u003e •\n  \u003ca href=\"#核心特性\"\u003e核心特性\u003c/a\u003e •\n  \u003ca href=\"#更新日志\"\u003e更新日志\u003c/a\u003e •\n  \u003ca href=\"#运行指南\"\u003e运行指南\u003c/a\u003e •\n  \u003ca href=\"#创作流程\"\u003e创作流程\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp\u003e\n  \u003ca href=\"#高级功能与配置\"\u003e高级功能\u003c/a\u003e •\n  \u003ca href=\"#工作流系统代码式工作流--workflow-agent\"\u003e工作流系统\u003c/a\u003e •\n  \u003ca href=\"#项目结构\"\u003e项目结构\u003c/a\u003e •\n  \u003ca href=\"./贡献指南.md\"\u003e贡献指南\u003c/a\u003e •\n  \u003ca href=\"./后续规划.md\"\u003e后续规划\u003c/a\u003e •\n  \u003ca href=\"#交流群\"\u003e交流群\u003c/a\u003e\n\u003c/p\u003e\n\n\n\u003c/div\u003e\n\n**NovelForge** 是一款具备数百万字级长篇创作潜力的 AI 辅助写作工具。它不仅是编辑器，更是一套集世界观构建、结构化内容生成于一体的解决方案。\n\n长篇创作中，维持一致性、保证可控性、激发持续灵感是最大的挑战。为此，NovelForge 围绕四大核心理念构建：模块化的 **“卡片”**、可自定义的 **“动态输出模型”**、灵活的 **“上下文注入”** 与保证一致性的 **“知识图谱”**。\n\n---\n\n\u003ca id=\"目录\"\u003e\u003c/a\u003e\n## 📑 目录\n\n### 快速导航\n\n- [✨ 核心特性](#核心特性)\n- [📅 更新日志](#更新日志)\n- [🛠️ 技术栈](#技术栈)\n- [🚀 运行指南](#运行指南)\n- [✍️ 创作流程](#创作流程)\n- [⚙️ 高级功能与配置](#高级功能与配置)\n- [📂 项目结构](#项目结构)\n- [🔭 展望](#展望)\n\n### 按功能跳转\n\n- [Schema-first：类型/实例结构与参数](#schema-first)\n- [提示词工坊（Prompt Workshop）](#prompt-workshop)\n- [上下文注入（@DSL）详解](#context-dsl)\n- [工作流系统（代码式工作流 + Workflow Agent）](#workflow-system)\n  - [工作流工作室](#workflow-studio)\n  - [触发器配置](#workflow-triggers)\n  - [工作流状态栏（全局后台运行）](#workflow-status-bar)\n  - [节点级进度与中断恢复（Beta）](#workflow-progress-recovery)\n  - [持久化工作流 vs 临时工作流](#workflow-persistent-vs-temporary)\n  - [内置工作流模板](#workflow-builtins)\n  - [项目初始化工作流](#workflow-project-init)\n  - [工作流 Agent（自然语言编写工作流）](#workflow-agent)\n  - [工作流使用示例](#workflow-examples)\n\n### 协作与规划\n\n- [贡献指南](./贡献指南.md)\n- [后续规划](./后续规划.md)\n\n---\n\n\u003ca id=\"核心特性\"\u003e\u003c/a\u003e\n## ✨ 核心特性\n\n*   **📚 Schema 驱动的卡片创作**\n    *   每种卡片都可定义结构（Schema），AI 生成会按结构校验，减少“看起来能用、落地却混乱”的输出。\n\n*   **⚡ 指令流式 AI 卡片生成**\n    *   不再是“一次性整段生成”。现在是“输入要求 → 字段粒度流式填充 → 你确认或反馈继续生成”，更可控、更容易修正。生成过程更加丝滑，避免长时间等待生成结果。\n    *   该能力聚焦于“当前这张卡片”的生成与完善，关闭生成对话框后本次会话即结束。\n\n*   **📝 章节正文字数控制**\n    *   章节正文续写支持两种模式：`提示词约束` 与 `控制模式`。\n    *   `提示词约束` 更自然、成本更低；`控制模式` 会按目标总字数切分多轮预算，控制更稳，但会消耗更多 token。\n\n*   **✅ 通用审核与审核结果卡片**\n    *   审核统一采用“草稿预览 → 确认保存为审核结果卡片”的流程。\n    *   不同卡片类型可切换不同审核提示词，但结果卡片结构保持一致，便于统一查看与引用。\n\n*   **🧠 上下文注入 + 知识图谱一致性**\n    *   通过 `@DSL` 精准引用项目数据；结合 关系图谱与动态信息，让后续生成更贴近已写内容与角色关系。\n\n*   **🔮 灵感助手（Agent）**\n    *   可持续对话、引用卡片、调用工具修改内容。你可以像和搭档协作一样打磨设定，而不是反复整卡重生成。\n\n*   **🧩 代码式工作流系统**\n    *   已重构为代码式工作流主线（去掉旧 DAG 方案），支持可视化编辑、触发执行与复用，适合把常用创作流程自动化。\n\n*   **🤖 工作流 Agent**\n    *   你可以直接用自然语言描述需求，让 Agent 帮你写/改工作流代码、做校验并应用变更。\n\n*   **💡 灵感工作台 (Ideas Workbench)**\n    *   支持自由卡片、跨项目引用、移动/复制回正式项目，适合专门做脑暴和素材沉淀。\n\n---\n\n\u003ca id=\"更新日志\"\u003e\u003c/a\u003e\n\n## 📅 更新日志\n\u003cdetails\u003e\n\u003csummary\u003ev0.9.4\u003c/summary\u003e\n\n- **记忆层信息增强(角色/关系/场景/组织/物品/概念)**\n  - 统一提取预览 / 确认写入流程\n    章节编辑器中，以下能力已统一到“先预览、后确认”的流程：\n\n    - 角色动态信息\n    - 关系提取入图\n    - 场景状态\n    - 组织状态\n    - 物品状态\n    - 概念掌握\n  - 统一交互方式为：\n    - 基于当前章节正文发起提取\n    - 先展示预览结果\n    - 支持用户在预览中手动调整\n    - 确认后再写回卡片或图谱\n  - 本次新增并补齐了以下实体类型的轻量状态 / 记忆能力 （按需使用，不一定全部都要用上，避免增加上下文复杂度）：\n    - 场景卡\n    - 组织卡\n    - 物品卡\n    - 概念卡\n- 优化移动端css排版，增加左下角导航显隐功能\n\n- 其它优化、修复若干 bug\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ev0.9.3\u003c/summary\u003e\n\n- **章节正文字数控制重构**\n  - 章节正文续写的字数控制收敛为两种模式：\n    - `提示词约束`：只做提示词层面的字数约束，文本更自然，适合对字数要求不特别严格的场景\n    - `控制模式`：按目标总字数切分为多轮并分配预算，字数控制更稳，但会消耗更多 token\n  - 控制模式当前采用固定多轮预算策略，提升长章节续写时的稳定性与可控性\n\n- **审核功能重构**\n  - 审核流程统一为“先生成审核草稿，再确认创建/更新审核结果卡片”\n  - 审核结果不再依赖旧记录模型，统一沉淀为 `内容审核卡片`\n  - 审核结果卡片会自动归档到根级 `审核结果` 文件夹，便于集中查看与复用\n  - 章节正文与通用卡片编辑器的审核入口统一为“审核按钮 + 提示词切换”\n\n- **其它优化**\n  - 对 LLM 配置、Responses 模式兼容（灵感助手仍不兼容）、导出排序、章节编辑器与若干 UI 细节进行了优化\n  - 修复若干 bug，提升整体稳定性\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ev0.9.2\u003c/summary\u003e\n\n- 增加章节审核、阶段审核，查看审核历史\n  - 点击阶段/章节正文卡片顶部的审核按钮即可，审核完成后会弹出审核结果。\n  - 在右栏中可以查看审核历史记录\n- 新增卡片搜索、文件夹类型卡片及前后端一键启动，修复树状结构保存折叠问题 \n- 自动检查模型元数据与数据库现有表结构的差异检测并补齐“可安全追加”的缺失列\n- 其它优化\n  \n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ev0.9.1\u003c/summary\u003e\n\n- **关系图支持 SQLite 存储**\n  - 关系图存储新增 SQLite 支持（并兼容 Neo4j）\n  - 增加关系图管理能力：筛选、批量修改、导入导出等操作\n\n- **优化章节正文生成与润色相关提示词**\n  - 优化“内容生成/润色/扩写”等提示词表现，提升输出稳定性与可用性\n  - 将文风约束相关内容拆分为知识库注入，便于独立维护与快速调整\n\n- **增加章节正文润色/修改后的接受/拒绝功能**\n  - 润色替换支持“接受并替换 / 拒绝并还原”操作，降低误替换风险\n- 增加复制 LLM 配置功能：可基于现有配置快速复制并微调，减少重复配置成本\n- 修复若干bug，提升整体稳定性与交互体验\n  \n  \n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ev0.9.0\u003c/summary\u003e\n\n- 🚀 **重大更新：0.9.0**\n\n- ✨ **重构AI 卡片生成流程**\n  - 从“点击后等待整段结果”升级为“输入要求 → 对话框内字段粒度生成 → 确认/反馈继续生成”，显著增强可用性，更加丝滑~\n  - 生成过程更可控，修改成本更低。\n\n- 🧱 **工作流系统重构（探索性）**\n  - 我们探索性地将工作流从旧的 **DAG 式编辑器** 迁移到新的 **代码式工作流（Python 风格语句 + 特殊标记 DSL）**，并逐步移除了旧的 DAG 方案。\n  - 目前更多是基于对可维护性与 AI 友好程度的综合权衡。\n  - **代码式工作流的优点（当前体感）：**\n    - 逻辑更线性、更清晰：顺序、等待（`Logic.Wait`）、异步（`async=true`）等语义更贴近真实执行过程。\n    - 进度处理与异步操作更自然：执行器可按语句计划调度，不需要在图上绕来绕去。\n    - 对 AI 更友好：同一个功能，代码式往往几十行就能表达；而 DAG 配置经常需要几百行的节点与连线描述。\n  - **代码式工作流的缺点（需要持续打磨）：**\n    - 不如 DAG 直观\n    - 对字符串/代码格式更敏感：参数序列化、字典字段类型、变量引用等细节更容易引发校验或运行错误，需要更强的校验与提示词约束。\n\n- 🤖 **新增工作流 Agent**\n  - 可通过自然语言描述目标，由 Agent 生成/修改工作流代码并做校验。\n  - 支持“先预览再应用”的安全变更体验。\n  - 可能还有些bug\n\n- 📚 **内置工作流增强**\n  - 增加“拆书工作流”等实用流程模板，便于开箱使用和二次改造。\n\n- 🎨 **灵感助手 UI 与交互优化**\n  - 对话渲染、输入区交互、工具调用显示等体验优化。\n\n- 🧹 **工程重构与稳定性提升**\n  - 前后端目录结构和模块边界大幅改动、整理，代码可维护性提升。\n  - 修复一批工作流、可视化参数编辑、Agent 交互相关问题。\n\n- ⚠️ 由于该版本更新变动较大，旧版本数据库可能无法直接使用，请尝试用发布的迁移脚本进行迁移（不保证成功，建议提前做好数据库db文件备份！）\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ev0.8.6\u003c/summary\u003e\n\n- 增加了版本更新检测功能，默认自动检测（当有新版本时会在设置-关于处出现小红点）\n- 优化了LLM配置界面，增加了获取可用模型列表功能\n- 增加了Web版本适配\n- 代码优化与修复bug\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ev0.8.5\u003c/summary\u003e\n\n- 使用新的agent框架进行了全面替换；优化灵感助手功能、UI\n- 增加了灵感助手相关设置\n- 重新实现了React模式来为模型实现文本格式工具调用，适用工具调用能力不强的模型。可在设置-灵感助手处开启（默认关闭）\n- 兼容了推理模型，增加了thinking模式\n- 建议将DeepSeek、Qwen之类的模型选择/修改提供商为OpenAI兼容，而OpenAI则仅设置为GPT 5等官方模型。\n- 其它若干优化\n- 代码优化与修复bug\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ev0.8.3\u003c/summary\u003e\n\n- 灵感助手功能增强\n  - 新增 ReAct 模式：兼容更多 LLM 模型（文本格式工具调用），可在设置中切换标准/ReAct 模式  \n    (注意：由于时间关系，ReAct 模式实现较为粗糙，可能存在些bug，还是建议优先使用原生工具调用支持比较好的模型)\n  - 上下文智能增强：工具返回值增加父卡片信息，AI 可更准确理解卡片层级关系\n\n- UI 与体验优化\n  - 引用卡片区域重构：固定布局、始终可见的 `...(N)` 按钮，使用 Popover 替代 Modal\n  - 优化工具调用结果展示：显示成功/失败状态、支持跳转卡片、可折叠查看完整 JSON\n  - 修复引用卡片与模型选择重叠问题，调整输入框高度\n- 代码优化与修复bug\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003ev0.8.2\u003c/summary\u003e\n\n- 优化灵感助手工具调用，增加自动重试功能。可通过.env文件配置最大重试次数\n- 增强卡片拖拽功能，可自由排序\n- 优化灵感助手UI、支持markdown显示\n- 修复bug、清理代码\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003ev0.8.0\u003c/summary\u003e\n\n- 章节编辑器重构\n  - 从独立窗口迁移到主编辑器中栏，统一编辑体验\n  - 新增右键快速编辑：选中文本后右键，可输入要求进行润色/扩写\n  - 优化上下文组装：润色/扩写时自动包含上下文，衔接更自然\n  - 动态高亮显示 AI 生成内容\n\n- 灵感助手增强\n  - 新增工具调用能力（实验性）：可直接在对话中创建/修改卡片，支持搜索、查看类型结构等操作\n  - 历史对话管理：按项目存储对话历史，支持新增/加载/删除会话\n  - 实时工具调用反馈：显示\"正在调用工具...\"，完成后自动刷新卡片树\n  - 优化上下文构建：自动注入项目结构树、统计信息、操作历史\n\n- 工作流系统优化\n  - 节点自动注册机制：新增节点只需一行装饰器，前端自动同步\n  - 动态节点库：从后端动态加载节点列表，零配置扩展\n\n- UI 与体验优化\n  - 修复暗黑模式下多处显示问题\n  - 优化卡片编辑器布局与交互细节\n  - 改进流式输出的视觉反馈\n\n注意：如果之前选择本地开发，则当前版本更新需重新安装一下后端requirements\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003ev0.7.8\u003c/summary\u003e\n\n- 工作流系统（实验性）继续推进\n  - 新增“项目创建时触发（onprojectcreate）”，用工作流替代旧项目模板\n  - 画布交互优化：拖拽创建节点、删除连接线、坐标定位更准确\n  - 工作流工作室与节点参数面板的若干易用性优化\n  - 注：工作流仍处于实验阶段，当前主要用于逐步替换原有硬编码逻辑，扩展新能力仍有较大提升空间\n\n- 优化代码\n  - 清理旧项目模板相关代码与界面，统一到工作流体系\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003ev0.7.7\u003c/summary\u003e\n\n- 优化作品标签卡片\n  - 增加标签项、选项数据\n  - 将标签项类别数据抽离出来，设置为知识库文件存储，可在设置-知识库中编辑作品标签，自由的修改标签项类别\n- 增加卡片AI生成时中断功能  \n- 优化代码、修复bug，可通过.env配置是否在启动时重置知识库、提示词等内容\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003ev0.7.6\u003c/summary\u003e\n\n- 增强LLM 管理\n  - LLM 配置支持“测试连接”。\n  - 支持用量设置：可设定 Token 上限、调用次数上限（-1 表示不限）。\n  - 列表展示“已用（输入/输出/调用）”，并提供“一键重置统计”。（目前统计的token用量是粗略统计，不同模型计算方式可能不同，仅供参考）\n  \n- 优化代码、体验\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ev0.7.5\u003c/summary\u003e\n\n- 优化：灵感助手\n  - 支持自由引用多个卡片数据（跨项目、去重与来源标记）。\n  - 可在对话中选择 LLM 模型（可覆盖卡片配置）。\n  - 对话历史按项目保存与恢复，重载不丢失。\n  - 若干 UI 与交互细节优化。\n\n- 初步：工作流（实验性）\n  - 新增“工作流工作室”：画布（Vue Flow）、参数侧栏、节点库与触发器基础 CRUD。\n  - 运行与事件：支持 SSE，`run_completed` 携带 `affected_card_ids`，前端按卡片粒度精确刷新。\n  - 重要说明：当前为实验性功能，UI交互/DSL/校验/Runner/触发器等功能仍在完善。\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ev0.7.0\u003c/summary\u003e\n\n- 新增：灵感助手（Inspiration Assistant）\n  - 右侧面板中的对话式协作工具，支持实时讨论和迭代优化卡片内容。\n  - 跨项目卡片引用功能，可将任意项目的卡片数据注入对话，激发创意碰撞。\n  - 自动引用当前选中卡片，实现无缝上下文切换。\n  - 一键“定稿生成”，将对话成果直接应用到卡片内容。\n  - 重置对话功能，便于开启新的创意讨论。\n\n- 新增：灵感工作台（Ideas Workbench）\n  - 独立窗口模式，提供专注的创意探索环境。\n  - 自由卡片系统，不受项目结构约束。\n  - 跨项目引用与创意融合能力。\n  - 一键将自由卡片移动/复制到正式项目。\n\n- 优化：导入卡片功能\n  - 将“导入自由卡”升级为“导入卡片”，支持从任意项目导入。\n  - 改进卡片选择器，按类型分组并支持折叠/展开。\n  - 优化引用数据缓存，提升性能与响应速度。\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ev0.6.5\u003c/summary\u003e\n\n- 新增：项目模板（Project Templates）- 已在 v0.7.8 中迁移至工作流系统\n  - 设置页新增\"项目模板\"管理，支持配置新建项目时自动创建的卡片类型与顺序，形成可复用的创作管线；可维护多个模板。\n  - 新建项目支持选择模板。\n  - 后端新增模板数据模型与 CRUD 接口，应用启动自动写默认项目模板。\n\n\u003c/details\u003e\n\n---  \n\n\u003ca id=\"技术栈\"\u003e\u003c/a\u003e\n## 🛠️ 技术栈\n\n*   **前端 (Frontend):** Electron, Vue 3, TypeScript, Pinia, Element Plus\n*   **后端 (Backend):** FastAPI, SQLModel (Pydantic + SQLAlchemy), Uvicorn\n*   **数据库 (Database):** SQLite (核心数据), Neo4j (知识图谱)\n\n---\n\n\u003ca id=\"运行指南\"\u003e\u003c/a\u003e\n## 🚀 运行指南\n\n无论你是想直接体验，还是参与开发，都可以轻松开始。\n\n### 0. Neo4j Desktop（可选，非必须）\n\n项目已默认使用sqlite代替实现关系图谱存储，但也可以切换为neo4j来存储，步骤如下\n\n*   请下载并安装 **Neo4j Desktop**，推荐版本 **5.16** 或更高。\n*   下载地址: [Neo4j Desktop](https://neo4j.com/download/)\n*   安装后，创建一个本地数据库实例，并确保其处于**运行状态**。默认连接信息可在 `.env` 文件中配置。\n![alt text](docImgs/README/image-6.png)\n\n### 方式一：从源码运行 (开发者/最新功能)（非开发者建议用方式二）\n\n**1. 后端 (Python / FastAPI)**\n```bash\n# 克隆仓库\ngit clone https://github.com/RhythmicWave/NovelForge.git\ncd NovelForge/backend\n\nconda create -n NovelForge python=3.11\nconda activate NovelForge\n\n# 安装依赖\npip install -r requirements.txt\n\n将backend/.env.example文件修改为.env\n\n# 运行后端服务\npython main.py\n```\n\n**2. 前端 (Node.js / Electron)**\n```bash\n# 进入前端目录\ncd ../frontend\n\n# 安装依赖\nnpm install\n\n# 启动开发服务器\nnpm run dev\n# 也可以用下面命令启动web页面\n// npm run dev:web\n```\n\n**3. 一行命令同时启动前后端（npm）**\n```bash\nnpm run dev\n```\n\n#### 重要：.env 的 BOOTSTRAP_OVERWRITE\n\n\u003e 启动后端时，系统会按需初始化/更新内置资源（知识库、提示词、工作流等）。是否覆盖更新由 `.env` 中的 `BOOTSTRAP_OVERWRITE` 控制。\n\n- 建议设置：\n  - 如果你没有直接修改过内置资源，建议设置为：\n    ```ini\n    BOOTSTRAP_OVERWRITE=true\n    ```\n    这样可以在升级版本或重启时自动同步最新的内置知识库/提示词/工作流。\n  - 如果你曾直接修改过“内置”资源，建议设置为 `false`，以避免被覆盖。\n\n- 建议（避免被覆盖）：\n  - 不要直接编辑“内置”资源。\n  - 如需定制，请新建一个副本（复制知识库/提示词/工作流后重命名），在副本上修改。这样即使将来设置 `BOOTSTRAP_OVERWRITE=true`，你的自定义副本也不会被更新逻辑覆盖。\n\n\n### 方式二：使用发行版 (快速上手)\n\n不定期打包发布版本，无需配置开发环境，开箱即用。\n\n1.  前往项目的 **Releases** 页面下载最新的便携版压缩包 (`.zip` 或 `.7z`)。\n2.  解压到任意位置。\n3.  **（重要）** 运行前，请先确保 Neo4j Desktop 中的数据库实例已启动。\n4.  进入解压后的文件夹，找到 `backend` 目录，按需编辑 `.env` 文件以配置数据库连接。\n5.  运行 `backend/NovelForgeBackend.exe` 启动后端服务。\n6.  返回上一级，运行 `NovelForge.exe` 启动主程序。\n\n\u003e 大部分数据都存储在backend/novelforge.db数据库中，当版本更新/迁移时，将该数据库文件复制到对应位置即可。\n---\n\n## ✍️ 创作流程\n\n1.  **配置大语言模型 (LLM)**\n    *   首次启动后，在设置中添加你的 AI 模型配置，如 API Key、Base URL 等。\n    ![alt text](docImgs/README/image.png)\n    推荐使用Gemini 2.5Pro级别以上的LLM进行创作\n\n2.  **创建项目与初始化工作流**\n    *   新建项目时，可以选择一个初始化工作流（通常是 `onprojectcreate` 类型）来自动创建预设卡片。系统内置了\"项目创建·雪花创作法\"工作流，会按照雪花创作法自动创建一套完整的卡片树。\n    ![alt text](docImgs/README/image-1.png)\n\n3.  **自顶向下，填充核心设定**\n    *   从最高层卡片开始逐步推进（一句话梗概 → 故事大纲 → 世界观 → 核心蓝图）。\n    *   每张卡片都可以打开 AI 生成对话框，输入本次要求，系统会按字段粒度流式生成。\n    *   你可以在生成后选择“确认”直接落库，或提交反馈意见继续迭代，不满意不必整卡重来。\n    完成核心蓝图卡片创作后，点击保存，会自动根据分卷数量创建对应分卷卡片。\n    继续完成分卷大纲创作即可，从第1卷开始。\n    完成之后，会自动根据阶段数创建阶段大纲子卡片、写作指南卡片。建议先生成写作指南卡片，生成写作指导信息，再进行阶段大纲卡片创作。\n    ![alt text](docImgs/README/image-2.png)\n    AI生成卡片示例流程：\n    ![alt text](docImgs/README/image-28.png)\n    ![alt text](docImgs/README/image-29.png)\n    生成完成后点击完成，再保存卡片即可。或者对某些字段不满意，则输入指导意见进行反馈。\n  \n\n4.  **借助灵感助手完善内容**\n    *   在写作过程中，如果你想进一步打磨或优化卡片内容，可以随时使用右侧的灵感助手。\n    *   选中任意卡片后，灵感助手会自动读取该卡片的内容，方便你参考和思考。\n    *   你可以直接向助手提出具体问题，比如“这个角色的动机是否合理？”、“怎样让这个场景更有张力？”等。\n    *   灵感助手会结合当前卡片内容，给出针对性的建议，你可以与助手反复交流，逐步完善想法。\n    *   通过“添加引用”按钮，还能把当前项目或其他项目的相关卡片内容加入对话，激发更多创意火花。\n    *   灵感助手具备感知上下文、调用工具修改/创建卡片内容的能力（实验性）\n    ![Alt text](docImgs/README/image-20.png)\n\n#### AI 生成对话框 vs 灵感助手（如何选择）\n\n- **AI 生成对话框**：聚焦当前单张卡片，用于快速生成与迭代该卡片内容；会话仅持续到本次生成流程结束，关闭对话框后会话清空。\n- **灵感助手**：用于跨卡片、跨项目的持续对话与创作；可引用多个卡片进行分析与联动创作，并且对话历史可持久保存。\n- **建议用法**：\n  - 目标是“把这张卡片写好” → 用 AI 生成对话框。\n  - 目标是“跨设定联动思考/长期讨论/多卡片协作” → 用灵感助手。\n\n5.  **完成阶段大纲创作后，自动生成章节大纲、章节正文卡片，并自动注入每章需要参与的实体。**\n    ![alt text](docImgs/README/image-3.png)\n\n6.  **进入章节创作**\n    *   完成上述步骤后，点击对应的章节正文卡片，打开章节编辑器，进入核心的写作界面。右侧的上下文面板会自动为你准备好当前章节所需的全部背景资料。\n    ![Alt text](docImgs/README/image-27.png)\n    \n    *    可点击续写进行AI生成（如果没有任何内容，则自动从头开始写）。\n    *    续写时可选择两种字数控制模式：\n         - **提示词约束**：只做提示词层面的字数约束，文本更自然，也更省 token。\n         - **控制模式**：按目标总字数切分为多轮预算，适合对章节总字数要求更严格的情况，但会消耗更多 token。\n    *    若对生成内容不满意，可选中内容点击右键进行快速编辑，然后输入要求，点击润色/扩写，可以重写这部分内容。\n    ![Alt text](docImgs/README/image-8.png)\n\n    *    章节正文也支持直接审核：\n         - 点击顶部 **审核** 按钮即可运行审核\n         - 可通过按钮右侧下拉切换审核提示词\n         - 审核会先返回草稿，确认后再保存为审核结果卡片\n         - 保存后的结果会自动放入根级 **审核结果** 文件夹，并可在右侧面板中查看\n\n    *   内容创作完成后，点击入图关系，解析出角色之间的关系存入知识图谱，供后续写作时参考。\n    ![Alt text](docImgs/README/image-7.png)\n    提取完成后，点击确认即可存入neo4j数据库。\n    ![alt text](docImgs/README/image-5.png)\n\n    *    建议再提取角色动态信息，可用成本更低的模型进行提取。\n  \n\n    *    以上步骤完成后，进行下一章创作时，自动注入相关参与实体的信息\n    ![alt text](docImgs/README/image-9.png)\n\n7.  **灵感工作台：捕捉创意火花**\n    *   有了新点子却一时不知道归属哪个项目？点击页面顶部的“灵感”按钮，即可打开独立的灵感工作台窗口。\n    *   在这里，你可以随手记录各种想法，自由创建不同类型的卡片，无需考虑项目结构，专注于把灵感落到实处。\n    *   右侧的灵感助手支持引用任意项目的卡片内容，方便你跨项目查阅、对比和组合，激发更多创意。\n    *   当某个想法逐渐成型，只需用顶部的“移动/复制到项目”功能，就能把自由卡片一键归入正式项目，创意自然衔接到后续创作中。\n    ![Alt text](docImgs/README/image-21.png)\n    ![Alt text](docImgs/README/image-22.png)\n---\n\n## ⚙️ 高级功能与配置\n\n虽然 NovelForge 提供了一套推荐的创作流程，但其真正的强大之处在于高度的灵活性。你可以完全抛开预设，利用以下工具，组合出专属于你自己的创作体系。\n\n\u003ca id=\"schema-first\"\u003e\u003c/a\u003e\n### Schema-first：类型/实例结构与参数\n\n*   在 `设置 -\u003e 卡片类型` 中，使用结构构建器为类型定义 `json_schema`（支持基础类型、relation(embed)、tuple 等）。类型 Schema 将作为该类型卡片的默认结构。\n    ![alt text](docImgs/README/image-10.png)\n    ![alt text](docImgs/README/image-11.png)\n\n*   在具体卡片中，可打开 `结构`（Schema Studio）对该卡片实例的结构进行覆写，或一键\"应用到类型\"。\n    ![alt text](docImgs/README/image-12.png)\n\n    ![alt text](docImgs/README/image-13.png)\n\n    应用到类型之后，后续再创建该类型卡片将使用新的结构。\n\n*   卡片 AI 参数：通过编辑器工具栏设置模型、提示词与温度等参数（`llm_config_id`、`prompt_name`、`temperature`、`max_tokens`、`timeout`）。\n    ![alt text](docImgs/README/image-14.png)\n\n*  完成以上设置后，即可在项目中创建该类型卡片并进行 AI 生成。系统会将该卡片的\"有效 Schema\"一并用于结构化校验与输出。\n    ![alt text](docImgs/README/image-15.png)\n    新建卡片时也可以直接从已有卡片中拖动到下方，自动创建\n    ![alt text](docImgs/README/image-16.png)\n\n    ![alt text](docImgs/README/image-17.png)\n\n*  Schema 支持嵌入（`$ref` 到类型 `$defs`），可以组合复用已有结构，便于复合能力搭建。\n\n    ![alt text](docImgs/README/image-18.png)\n    \n注意，尽量新增模型而不是修改已存在模型结构，避免和已有数据冲突。\n\n### 章节审核与通用审核\n\n除章节正文外，其它卡片（例如阶段大纲、通用文本等）也可以直接使用顶部的 **审核** 按钮。\n\n- 审核入口统一为一个按钮，按钮右侧可切换审核提示词\n- 阶段大纲默认使用 `阶段审核` 提示词\n- 普通卡片默认使用 `通用审核` 提示词\n- 审核结果统一保存为 `内容审核卡片`\n\n这样你既可以为不同卡片类型配置不同审核标准，又能保持统一的审核结果结构和查看方式。\n\n\n\u003ca id=\"prompt-workshop\"\u003e\u003c/a\u003e\n### 提示词工坊 (Prompt Workshop)\n\n*   所有 AI 功能的背后都是可编辑的提示词模板。你可以在这里修改预设模板，或创建全新的模板。\n*   **知识库注入**: 支持通过 `@KB{name=知识库名称}` 语法，在提示词中动态引用\"知识库\"内容，为 AI 提供更丰富的背景信息。\n\n\u003ca id=\"context-dsl\"\u003e\u003c/a\u003e\n### 上下文注入 (@DSL) 详解\n\n这是 NovelForge 的特色。它允许你在提示词模板中，用 `@` 符号精确地引用项目中的任何数据注入为上下文。\n\n*   **按标题引用**: `@卡片标题` 或 `@卡片标题.content.某个字段`\n*   **按类型引用**: `@type:角色卡` (所有角色卡)\n*   **特殊引用**: `@self` (当前卡片), `@parent` (父卡片)\n*   **强大的过滤器**:\n    *   `[previous]`: 获取同级的前一个卡片。\n    *   `[previous:global:n]`: 获取全局顺序（树状先序）中最近的n个同类型卡片。\n    *   `[sibling]`: 获取所有同级兄弟卡片。\n    *   `[index=...]`: 按序号获取，支持表达式，如 `$self.content.volume_number - 1`。\n    *   `[filter:...]`: 按条件过滤，如 `[filter:content.level \u003e 5]` 或 `[filter:content.name in $self.content.entity_list]`。\n*   **字段级别选中**: 可选中整个卡片数据，也可以单独选中卡片的字段。\n\n例如，引用最近3章的章节标题及原文:\n![Alt text](docImgs/README/image-23.png)\n\n\u003ca id=\"workflow-system\"\u003e\u003c/a\u003e\n### 工作流系统（代码式工作流 + Workflow Agent）\n\n工作流系统用于把常见创作动作（初始化项目、保存后自动生成子卡、批量处理内容等）编排成可复用流程，并在合适时机自动执行。\n\n当前已完成代码式主线重构，旧 DAG 式工作流方案已移除。\n\n\u003ca id=\"workflow-studio\"\u003e\u003c/a\u003e\n#### 工作流系统\n\n- 访问“工作流”页面，可在可视化与代码视图中编辑工作流。\n- 可通过节点库快速搭建流程，也可以直接编写/修改代码。\n- 参数面板支持实时编辑与校验，修改后可安全应用到工作流代码。\n- 支持查看运行记录、执行结果与错误信息，便于迭代调试。\n\n![alt text](docImgs/README/image-30.png)\n\n\u003ca id=\"workflow-triggers\"\u003e\u003c/a\u003e\n#### 触发器配置\n\n每个工作流可以配置一个或多个触发器，定义何时自动执行：\n\n- **保存时触发**：当指定类型卡片保存时自动执行\n- **创建项目时触发**：新建项目后自动执行（常用于项目初始化）\n\n\n\u003ca id=\"workflow-status-bar\"\u003e\u003c/a\u003e\n#### 工作流状态栏（全局后台运行）\n\n- 工作流运行后，状态会显示在全局工作流状态栏中（不局限于工作流页面）。\n- 你可以切换到其它页面继续创作，工作流在后台执行。\n- 状态栏会显示运行中数量、当前节点、总体进度与完成状态。\n\n![alt text](docImgs/README/image-25.png)\n\n\u003ca id=\"workflow-progress-recovery\"\u003e\u003c/a\u003e\n#### 节点级进度与中断恢复（Beta）\n\n- 系统支持节点级进度上报，可看到“当前执行到哪个节点”。\n- 支持暂停/恢复执行，并保留运行状态用于续跑。\n- 支持运行记录持久化与查看。\n- 说明：这部分能力已可用，复杂流程下可能存在少量边界问题（如个别恢复场景）。\n\n\u003ca id=\"workflow-persistent-vs-temporary\"\u003e\u003c/a\u003e\n#### 持久化工作流 vs 临时工作流\n\n- **临时工作流（默认）**：运行记录用于当前查看与调试，后续会被自动清理。\n- **持久化工作流**：开启“持久化保存”后，运行记录会长期保留（受系统保留策略影响）。\n\n\n\u003ca id=\"workflow-builtins\"\u003e\u003c/a\u003e\n#### 内置工作流模板\n\n系统预置了多个常用工作流，可直接使用或作为参考：\n\n- **项目创建·雪花创作法**: 新建项目时按照雪花创作法自动创建初始卡片结构\n- **世界观·转组织**: 从世界观设定的势力列表自动生成组织卡\n- **核心蓝图·落子卡**: 根据蓝图内容自动创建角色卡、场景卡和分卷卡片\n- **分卷大纲·落子卡**: 根据分卷大纲自动创建阶段大纲和写作指南\n- **阶段大纲·落章节卡**: 根据阶段大纲的章节列表自动创建章节大纲和正文卡片\n- **拆书工作流**: 用于拆解既有文本结构并落地到卡片体系\n\n\u003ca id=\"workflow-project-init\"\u003e\u003c/a\u003e\n#### 项目初始化工作流\n\n新建项目时，可以选择一个 `onprojectcreate` 触发器的工作流作为项目模板：\n\n- 默认选择\"项目创建·雪花创作法\"，自动创建作品标签、金手指、一句话梗概、故事大纲、世界观设定、核心蓝图等卡片\n- 也可以在工作流工作室中创建自己的项目初始化工作流，完全自定义项目起始结构\n- 支持复杂的初始化逻辑，如根据条件创建不同的卡片结构\n\n![Alt text](docImgs/README/image-26.png)\n\n\u003ca id=\"workflow-agent\"\u003e\u003c/a\u003e\n#### 工作流 Agent（自然语言编写工作流）\n\n- 在工作流页面打开工作流 Agent，对它说出你的目标，例如“创建一个多 AI 辩论流程并输出到指定项目”。\n- Agent 会自动读取当前工作流、生成修改方案、校验后给出可应用结果。\n- 使用这种方式，无需自己搭建工作流，可以快速实现复杂流程。\n- 目前可能还存在一些bug\n\n![alt text](docImgs/README/image-31.png)\n![alt text](docImgs/README/image-32.png)\n![alt text](docImgs/README/image-33.png)\n![alt text](docImgs/README/image-34.png)\n![alt text](docImgs/README/image-35.png)\n（右边执行界面是详细进度显示，工作流状态栏是简单的进度展示）\n一些长时间任务执行可以切换到其它界面，无需一直在工作流界面等待。执行完成后工作流状态栏会闪烁提示。\n\n\u003ca id=\"workflow-examples\"\u003e\u003c/a\u003e\n#### 工作流使用示例\n拆书工作流\n先建一个空项目\n![alt text](docImgs/README/image-36.png)\n\n进入工作流界面，选择拆书工作流\n\n![alt text](docImgs/README/image-37.png)\n\n设置目标项目、模型名、小说章节目录\n\n![alt text](docImgs/README/image-38.png)\n\n点击执行即可\n\n\n拆书结果：\n![alt text](docImgs/README/image-39.png)\n\n提取章节大纲→划分阶段故事线→根据所有阶段故事性进行全局分析\n\n---\n\n## 许可证协议\n本项目采用双许可证授权模式：\n\n- 默认情况下，本项目基于 GNU Affero General Public License v3.0 (AGPLv3) 授权协议\n- 提供服务型商用：将本项目（或其修改版本）作为后端以 SaaS、托管或其他形式向第三方提供服务，须通过作者获取商业授权许可。\n\n请遵守开源协议条款，并在适用场景下取得相应授权。\n\n---\n\n## 📂 项目结构\n\n```\nNovelForge/\n  ├── backend/        # FastAPI 后端\n  │   ├── app/\n  │   │   ├── api/        # API 路由\n  │   │   ├── db/         # 数据库模型与会话\n  │   │   ├── schemas/    # Pydantic 数据模型\n  │   │   └── services/   # 核心业务逻辑\n  │   └── main.py       # 入口\n  │\n  └── frontend/       # Electron + Vue3 前端\n      └── src/\n          ├── main/       # Electron 主进程\n          ├── preload/    # 预加载脚本\n          └── renderer/   # Vue 渲染进程\n              └── src/\n                  ├── components/ # Vue 组件\n                  ├── services/   # 前端服务\n                  ├── stores/     # Pinia 状态管理\n                  └── views/      # 页面视图\n```\n\n---\n\n\u003ca id=\"展望\"\u003e\u003c/a\u003e\n## 展望\n\nNovelForge 目前仍处于迭代的早期阶段，作者深知该项目在创作流程、一致性维持、 UI 设计、交互体验等方面还有巨大的改进空间。\n\n最好的工具源于社区的智慧。无论你是创作者还是开发者，都真诚地欢迎你：\n\n*   在 **Issues** 中提出宝贵的功能建议或反馈问题。\n*   分享你对创作流程的独到见解。\n\n\n\n\u003ca id=\"交流群\"\u003e\u003c/a\u003e\n## 交流群\n\n![alt text](docImgs/README/image-40.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frhythmicwave%2Fnovelforge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frhythmicwave%2Fnovelforge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frhythmicwave%2Fnovelforge/lists"}