Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

anying2055/PlotPilot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

1,492 Commits

Repository files navigation

PlotPilot(墨枢)

剧情引擎内核仍在高速演进中。欢迎提交 Issue / PR;涉及商业化封装、私有素材、未公开设定稿的内容请先脱敏。

PlotPilot 墨枢

开源剧情引擎内核

面向长篇 AI 创作的基础设施:持久记忆 · 知识图谱 · 自动推进流水线 · 质量治理闭环

Python Vue FastAPI Release Stars License


工作台 — 写作区与知识图谱 工作台 — 故事线 DAG 与人物设定


这是什么

PlotPilot 是一个剧情引擎内核(Narrative Engine Kernel),不是聊天式写作助手,也不是一组提示词模板。

大多数 AI 写作工具解决的是"生成一段文字"的问题。PlotPilot 解决的是一个更难的工程问题:

如何让 AI 系统在数十万字的叙事跨度里,维持人物一致性、因果链完整性、伏笔闭合率,并在无人值守的条件下持续推进?

这不是提示词优化问题,而是系统工程问题。PlotPilot 的答案是:构建一套完整的剧情状态管理基础设施,让 LLM 只做它最擅长的事——在结构化上下文中生成高质量叙事片段。

本仓库是这套基础设施的开源内核。上层生态(垂直应用、编辑器插件、云服务)均以此为基石构建。

项目边界很明确:

  • 不是 单轮续写器:核心目标是长篇连续生产,而不是回答一次写作请求。
  • 不是 大上下文堆料:世界观、人物、伏笔、故事线会被结构化为可追踪状态。
  • 不是 单一前端产品:官方工作台只是内核的一个使用界面,核心能力通过 REST API 暴露。

内核架构

PlotPilot 内核由五个相互协作的子系统构成:

1. 叙事状态机(Narrative State Machine)

引擎在任意时刻都持有完整的叙事快照,包含:

  • Story Bible:人物档案(含 POV 防火墙、登场频率调度)、地点图、世界设定三元组
  • 章级摘要链:每章生成后自动提炼的压缩摘要,构成跨章上下文骨架
  • 叙事事件流:关键事件的时序登记表,支持因果链追溯
  • 故事线 DAG:多故事线的有向无环图,可视化分支与汇合点
  • 伏笔注册表:钩子(Hook)的开启、悬置、消费状态完整追踪

任何一次章节生成,引擎都会从上述快照中动态装配上下文窗口,而非依赖模型自身的"记忆"。

2. 向量语义检索层(Vector Retrieval Layer)

引擎维护两条并行索引:

  • 章内容索引:基于 FAISS / ChromaDB 的本地向量库,对所有已写章节做语义切片索引
  • 三元组索引:从正文中自动抽取的 (主体, 关系, 客体) 三元组,支持结构化与语义混合查询

生成时,引擎通过当前场景语义自动召回相关历史内容,注入上下文,消除"模型失忆"问题。嵌入服务支持 OpenAI 兼容 API(轻量)和本地 sentence-transformers 模型(离线高性能)。

3. 剧情引擎运行时(Engine Runtime)

这是引擎最核心的系统组件。当前生产入口收敛在 engine/runtime/engine_daemon.py:由 EngineDaemon 承接守护进程生命周期,委托 StoryPipelineRunner 运行章节规划、写作、审计与状态推进;章节写作默认走 BaseStoryPipeline 十步管线。

宏观规划(部 / 卷 / 幕结构)
 └─▶ 幕级节拍规划(Beat Sheet 生成)
 └─▶ 章节生成循环
 ├─▶ 叙事治理预算
 ├─▶ 章节执行剧本准备
 ├─▶ 上下文装配(人物 / 世界观 / 记忆 / 伏笔)
 ├─▶ LLM 调用
 ├─▶ 内容策略验证
 ├─▶ 文风漂移检测
 ├─▶ 章末管线(摘要 / 事件 / 三元组 / 伏笔)
 ├─▶ 向量索引更新
 ├─▶ 张力评分
 └─▶ 状态落库 → 继续 / 重写 / 暂停

关键工程特性:

  • 单一生产入口:scripts/start_daemon.py 构造依赖并启动 EngineDaemon
  • 可回退写作路径:默认 StoryPipeline 写作,PLOTPILOT_USE_STORY_PIPELINE=off/legacy 可临时回退
  • 熔断保护:连续失败超过阈值自动暂停,附带诊断信息
  • 单写者路由(Write Dispatch):所有 SQLite 写操作经由统一调度器串行执行,消除并发写冲突
  • SSE 实时推流:生成进度、Token 消耗、当前阶段、错误信息全部通过 Server-Sent Events 实时推送到前端
  • 检查点快照:阶段推进前自动存档,支持从任意检查点恢复

4. 提示词策略层(Prompt Strategy Layer)

引擎暴露 20+ 独立提示接点,每个接点均可通过 prompt_packages/ 下的 YAML 配置文件独立覆写:

接点类型 包含接点
规划类 planning-main-plot-suggest · planning-quick-macro
生成类 scene-director · chapter-narrative-sync
知识类 bible-all · bible-characters · bible-locations · bible-worldbuilding
分析类 style-analysis · tension-analysis-diagnosis

每个提示包支持独立配置:系统提示、声线锚点、节拍约束、字数层级、记忆铁律、模型参数(temperature / top_p / max_tokens)。切换任务类型(短篇 / 长篇 / 游戏剧本)不需要修改代码,只需切换提示包目录。

5. 质量监控子系统(Quality Monitor)

引擎内置叙事质量的量化监控,不依赖人工逐章审阅:

  • 张力心电图:每章生成后计算张力评分(0–10),历史曲线持久化,低谷自动触发诊断
  • 文风相似度检测:基于向量余弦相似度计算当前章节与风格基准的偏离程度
  • 漂移告警 + 定向修写:偏离超过阈值时,引擎不回滚章节,而是触发定向修写任务,保留已有进度
  • 陈词滥调扫描:规则库 + 语义相似度双重检测,标记高频套路表达

内核与生态

PlotPilot 内核(本仓库)
 │
 ├── 叙事状态机
 ├── 向量语义检索层
 ├── 剧情引擎运行时
 ├── 提示词策略层(20+ 接点)
 └── 质量监控子系统
 │
 ▼
 REST API(FastAPI · v1 · 版本化)
 │
 ┌───────┴──────────────────────┐
 │ │
 官方工作台前端 生态扩展层(基于内核)
 Vue 3 · TypeScript ├── 垂直领域工具
 Naive UI · ECharts │ (剧本/游戏剧情/IP 衍生......)
 Tauri 桌面客户端 ├── 第三方前端 / 编辑器插件
 ├── 自定义提示词包
 └── 云服务 / SaaS(需遵守许可证)

内核提供稳定的 REST API 边界;所有生态扩展均通过提示词包、工作流插件或上层应用的方式叠加能力,内核本身不感知。如果你在用内核做二创,建议从提示词包和工作流层开始,而非修改内核代码。


技术选型说明

技术 选型理由
后端框架 FastAPI + uvicorn 原生异步 + 自动 OpenAPI 文档,SSE 支持开箱即用
架构范式 DDD 分层 + 独立 engine/ 运行内核 领域逻辑、用例编排、生产写作管线与技术实现分离,生态扩展不污染内核
AI 接入 OpenAI 兼容协议 / Anthropic Claude / 火山方舟 Doubao 统一接口抽象,模型切换不改业务代码
向量存储 ChromaDB(默认)/ FAISS 本地部署,零外部依赖,冷启动快
嵌入模型 OpenAI 兼容 API / 本地 bge-small-zh-v1.5 在线轻量与离线高性能双模式
主数据库 SQLite + Write Dispatch 单写者路由 嵌入式零依赖,并发写冲突由调度层解决
前端 Vue 3 + TypeScript + Vite + Naive UI + ECharts 组件类型安全,知识图谱与 DAG 可视化由 ECharts 驱动
桌面客户端 Tauri(Rust) 比 Electron 内存占用低 80%+,原生系统集成

快速开始

方式一:一键启动(Windows,无需安装 Python)

  1. python-3.14.5-embed-amd64.zip 放入 tools/ 目录(仅首次)
  2. 双击 tools/plotpilot.bat

启动器自动完成:环境自检 → 创建虚拟环境 → 安装依赖(自动切换国内镜像源)→ 启动服务 → 打开浏览器。后续启动直接双击。

支持 tools\plotpilot.bat pack 打包整个项目分享给他人,对方双击即用。当前启动器固定使用 Python 3.14 系列;如需使用系统 Python,可设置 PLOTPILOT_PYTHON_EXE 指向 Python 3.14 的 python.exe

方式二:桌面安装版(Windows · Tauri)

前往 GitHub Releases 下载最新安装包,内含冻结后端,无需单独安装 Python。

构建流程见 docs/BUILD_INSTALLER.md


开发者文档

环境要求:Python 3.14.x、Node.js 18+

# 后端 — Windows
py -3.14 -m venv .venv && .venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .env # 填写 LLM 凭证
uvicorn interfaces.main:app --host 127.0.0.1 --port 8005 --reload
# 后端 — Linux / macOS
python3.14 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
uvicorn interfaces.main:app --host 127.0.0.1 --port 8005 --reload
# 前端(另开终端)
cd frontend && npm install && npm run dev
地址 说明
http://127.0.0.1:8005 后端 API
http://127.0.0.1:8005/docs OpenAPI 交互文档
http://localhost:3000 前端开发服务器

生产构建后前端由 FastAPI 静态托管(frontend/dist),也可独立部署。


环境变量

变量 说明
LLM_PROVIDER 可选;指定默认 LLM 提供方
ANTHROPIC_API_KEY / ARK_API_KEY / OPENAI_API_KEY / GEMINI_API_KEY 至少配置一个 LLM 凭证
ARK_BASE_URL / ARK_MODELANTHROPIC_BASE_URL / ANTHROPIC_MODELOPENAI_BASE_URL / OPENAI_MODELGEMINI_BASE_URL / GEMINI_MODEL 对应提供方的接口地址与模型名
EMBEDDING_SERVICE openai(.env.example 默认)或 local(需额外安装模型,见 requirements-local.txt)
EMBEDDING_API_KEY / EMBEDDING_BASE_URL / EMBEDDING_MODEL 云端嵌入服务配置;EMBEDDING_API_KEY 为空时可回退读取 OPENAI_API_KEY
EMBEDDING_MODEL_PATH / EMBEDDING_USE_GPU 本地嵌入模型路径与 GPU 开关
VECTOR_STORE_ENABLED / VECTOR_STORE_TYPE / VECTOR_STORE_PATH 向量索引开关、类型与持久化目录
CORS_ORIGINS 生产环境前端域名,逗号分隔
DISABLE_AUTO_DAEMON 设为 1 禁止启动时自动拉起守护进程
LOG_LEVEL / LOG_FILE 日志级别与路径

完整说明见 .env.example


架构目录

(项目根目录)/
├── domain/ # 领域层 — 纯业务模型和值对象
│ ├── novel/ # 小说、章节、故事线、伏笔、因果、张力
│ ├── bible/ # 设定库、人物档案、地点、时间线
│ ├── character/ # 人物实体、人物状态、关系能力
│ ├── cast/ # 卡司与人物关系图
│ ├── knowledge/ # 知识三元组、故事知识图
│ ├── memory/ # 长期记忆与上下文状态
│ ├── prop/ # 道具生命周期与道具事件
│ ├── worldbuilding/ # 世界观领域模型
│ ├── structure/ # 故事结构节点
│ ├── evolution/ # 世界线 / 演化相关模型
│ ├── ai/ # AI 领域契约与值对象
│ └── shared/ # 共享基类、异常、事件、ID
│
├── application/ # 应用层 — 用例编排,协调领域、引擎与基础设施
│ ├── core/ # 小说 / 章节 / 导出等基础用例
│ ├── onboarding/ # 新书向导、前置设定生成
│ ├── blueprint/ # 宏观规划、连续规划、Beat Sheet、故事结构
│ ├── engine/ # 上下文构建、章后管线、治理预算、AI 调用编排
│ ├── governance/ # 叙事治理、质量约束、章节预算
│ ├── audit/ # 章节审阅、宏观重构、章节元素分析
│ ├── analyst/ # 文风、张力、伏笔账本、叙事状态分析
│ ├── world/ # Bible、知识图谱、世界观与人物关系服务
│ ├── ai/ # LLM / embedding 应用服务
│ ├── ai_invocation/ # AI 调用记录与审阅
│ ├── checkpoint/ # 检查点与快照用例
│ ├── memory/ # 记忆编排用例
│ ├── narrative/ # 叙事投影与状态同步
│ ├── narrative_engine/ # 叙事引擎应用服务
│ ├── manuscript/ # 正文实体索引与手稿服务
│ ├── prop/ # 道具应用服务
│ ├── reader/ # 读者模拟 / 阅读侧能力
│ ├── snapshot/ # 快照应用服务
│ ├── workbench/ # 工作台编排
│ └── workflows/ # 自动生成工作流、兼容编排与后台任务
│
├── engine/ # 剧情引擎内核 — 生产运行时、章节写作管线与题材扩展
│ ├── runtime/ # EngineDaemon、StoryPipelineRunner、守护进程委托、质量守门
│ ├── pipeline/ # BaseStoryPipeline 十步章节生成管线
│ ├── pipelines/ # 题材 Pipeline 注册与扩展(如武侠、通用题材桥接)
│ ├── core/ # 引擎侧实体、端口、服务契约
│ └── infrastructure/ # 引擎事件、记忆编排、checkpoint 适配
│
├── infrastructure/ # 基础设施层 — 技术实现,可替换
│ ├── ai/ # LLM Provider、Prompt Packages、向量存储、嵌入服务
│ ├── persistence/ # SQLite 仓储、迁移、Write Dispatch 单写者调度器
│ ├── export/ # DOCX / EPUB / PDF 导出
│ └── runtime/ # 数据目录、日志环境与进程级运行配置
│
├── interfaces/ # 接口层 — FastAPI、依赖注入、运行状态与外部边界
│ ├── main.py # FastAPI 应用入口
│ ├── daemon_manager.py # 后端内自动驾驶进程管理
│ └── api/v1/ # REST API(core / world / blueprint / engine / audit / analyst 等)
│
├── frontend/ # 官方工作台 — Vue 3 + TypeScript + Tauri 桌面壳
│ ├── src/ # 工作台、自动驾驶、知识图谱、设置、API client
│ └── src-tauri/ # Tauri 桌面客户端与后端 sidecar
│
├── shared/ # 跨端共享配置与分类体系资源
├── config/ # 本地配置与默认配置
├── scripts/ # 启动、安装、迁移、评估与维护脚本
├── tests/ # 单元、集成、E2E 与 DAG 测试
└── tools/ # Windows 启动器与内嵌 Python 包

完整设计与分层说明见 docs/ARCHITECTURE.md


测试

pytest tests/ -v
# 含覆盖率报告
pytest tests/ --cov=. --cov-report=term-missing

贡献指南

  1. Fork 本仓库
  2. 新建分支:git checkout -b feat/your-feature
  3. 提交信息建议遵循 Conventional Commits
  4. 推送并发起 Pull Request

架构与分层说明见 docs/ARCHITECTURE.md;其余文档索引见 docs/README.md


提交安全边界

请不要提交以下内容:

  • .env、API Key、模型网关地址中的私有凭证
  • data/logs/、SQLite 数据库、向量库、运行时缓存
  • Word / PPT / Excel 等办公文档(如 .docx.pptx.xlsx),尤其是未公开设定、商业计划、合同、客户资料
  • 打包产物、安装包、Tauri / PyInstaller 输出目录

如果必须提交示例资料,请放入脱敏后的 Markdown / JSON / YAML,并确认不包含真实密钥、真实用户数据或未公开作品内容。


加入我们

引擎在持续演进,我们也在寻找对叙事工程感兴趣的同行。

当前关注方向:内核引擎研发、生态应用构建、提示词工程、前端工作台

如果你对"用工程化手段解决创作问题"这件事感兴趣,欢迎来直播间转一圈,大概就能判断这个项目的调性:

  • 抖音:搜索直播间 91472902104(每晚约 21:00 随缘开播)
  • 联系方式:直播间私信附简历即可

许可证

本项目采用 Apache License 2.0,并附加 Commons Clause 条件限制。

  • 允许:学习、修改、非商业内部部署、基于内核的生态扩展(非营利)
  • 禁止:将本项目(含修改版)封装为收费 SaaS、打包售卖源码或作为收费产品的增值服务

详见 LICENSE


Star History

Star History Chart

About

【墨枢】作者的领航员

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages

  • Python 76.0%
  • Vue 17.3%
  • TypeScript 4.9%
  • HTML 0.7%
  • Rust 0.4%
  • CSS 0.4%
  • Other 0.3%

AltStyle によって変換されたページ (->オリジナル) /