【墨枢】作者的领航员
剧情引擎内核准备重启,欢迎贡献者踊跃加入~
开源剧情引擎内核
面向长篇 AI 创作的基础设施:持久记忆 · 知识图谱 · 自动推进流水线 · 质量治理闭环
PlotPilot 是一个剧情引擎内核(Narrative Engine Kernel),不是聊天式写作助手,也不是一组提示词模板。
大多数 AI 写作工具解决的是"生成一段文字"的问题。PlotPilot 解决的是一个更难的工程问题:
如何让 AI 系统在数十万字的叙事跨度里,维持人物一致性、因果链完整性、伏笔闭合率,并在无人值守的条件下持续推进?
这不是提示词优化问题,而是系统工程问题。PlotPilot 的答案是:构建一套完整的剧情状态管理基础设施,让 LLM 只做它最擅长的事——在结构化上下文中生成高质量叙事片段。
本仓库是这套基础设施的开源内核。上层生态(垂直应用、编辑器插件、云服务)均以此为基石构建。
项目边界很明确:
PlotPilot 内核由五个相互协作的子系统构成:
引擎在任意时刻都持有完整的叙事快照,包含:
任何一次章节生成,引擎都会从上述快照中动态装配上下文窗口,而非依赖模型自身的"记忆"。
引擎维护两条并行索引:
(主体, 关系, 客体) 三元组,支持结构化与语义混合查询生成时,引擎通过当前场景语义自动召回相关历史内容,注入上下文,消除"模型失忆"问题。嵌入服务支持 OpenAI 兼容 API(轻量)和本地 sentence-transformers 模型(离线高性能)。
这是引擎最核心的系统组件。当前生产入口收敛在 engine/runtime/engine_daemon.py:由 EngineDaemon 承接守护进程生命周期,委托 StoryPipelineRunner 运行章节规划、写作、审计与状态推进;章节写作默认走 BaseStoryPipeline 十步管线。
宏观规划(部 / 卷 / 幕结构)
└─▶ 幕级节拍规划(Beat Sheet 生成)
└─▶ 章节生成循环
├─▶ 叙事治理预算
├─▶ 章节执行剧本准备
├─▶ 上下文装配(人物 / 世界观 / 记忆 / 伏笔)
├─▶ LLM 调用
├─▶ 内容策略验证
├─▶ 文风漂移检测
├─▶ 章末管线(摘要 / 事件 / 三元组 / 伏笔)
├─▶ 向量索引更新
├─▶ 张力评分
└─▶ 状态落库 → 继续 / 重写 / 暂停关键工程特性:
scripts/start_daemon.py 构造依赖并启动 EngineDaemonStoryPipeline 写作,PLOTPILOT_USE_STORY_PIPELINE=off/legacy 可临时回退引擎暴露 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)。切换任务类型(短篇 / 长篇 / 游戏剧本)不需要修改代码,只需切换提示包目录。
引擎内置叙事质量的量化监控,不依赖人工逐章审阅:
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%+,原生系统集成 |
python-3.14.5-embed-amd64.zip 放入 tools/ 目录(仅首次)tools/plotpilot.bat启动器自动完成:环境自检 → 创建虚拟环境 → 安装依赖(自动切换国内镜像源)→ 启动服务 → 打开浏览器。后续启动直接双击。
支持
tools\plotpilot.bat pack打包整个项目分享给他人,对方双击即用。当前启动器固定使用 Python 3.14 系列;如需使用系统 Python,可设置PLOTPILOT_PYTHON_EXE指向 Python 3.14 的python.exe。
前往 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_MODEL、ANTHROPIC_BASE_URL / ANTHROPIC_MODEL、OPENAI_BASE_URL / OPENAI_MODEL、GEMINI_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。
…完整设计与分层说明见 docs/ARCHITECTURE.md。
pytest tests/ -v
# 含覆盖率报告
pytest tests/ --cov=. --cov-report=term-missinggit checkout -b feat/your-feature架构与分层说明见 docs/ARCHITECTURE.md;其余文档索引见 docs/README.md。
请不要提交以下内容:
.env、API Key、模型网关地址中的私有凭证data/、logs/、SQLite 数据库、向量库、运行时缓存.docx、.pptx、.xlsx),尤其是未公开设定、商业计划、合同、客户资料如果必须提交示例资料,请放入脱敏后的 Markdown / JSON / YAML,并确认不包含真实密钥、真实用户数据或未公开作品内容。
PlotPilot 引擎仍在持续演进中,我们始终致力于用工程化手段解决复杂的创作状态管理问题。我们正在寻找对“叙事工程”与“大模型复杂系统架构”感兴趣的极客同行。
当前生态演进方向:内核引擎研发、生态应用构建、提示词工程、前端工作台。如果你有志于共建,欢迎通过以下方式参与:
本项目采用 Apache License 2.0,并附加 Commons Clause 条件限制。
详见 LICENSE。
暂无开放 Issues,或尚未同步最近议题。