Skip to content
This repository was archived by the owner on Jun 26, 2026. It is now read-only.

Latest commit

 

History

History
306 lines (244 loc) · 11.3 KB

File metadata and controls

306 lines (244 loc) · 11.3 KB

NarrativeOS v2 — 执行方案

新项目,从零开始。目标 T0 级叙事系统。 技术栈:TypeScript + PostgreSQL + DeepSeek。


一、项目定位

这不是什么

  • 不是旧 NarrativeOS 的改造
  • 不是 AI 自动写书机
  • 不是设定管理工具

这是什么

  • 一个"叙事操作系统"——作者提供构思,系统负责推演、代写、检测冲突
  • 作者做审美裁判,系统干体力活

技术栈

组件 选择
语言 TypeScript(整个项目统一)
图存储 PostgreSQL(先用 JSONB + 关系表模拟图,不上 Neo4j)
LLM DeepSeek
交互 CLI(终端内自然语言交互)
向量 pgvector(语义检索)

二、项目结构

用户输入(一句话构思 / 流派标签)
        │
        ▼
┌──────────────────┐
│  种子生成 Agent   │  ← LLM 根据梗概 + 标签,生成初始六维图谱
│  (LLM-native)    │    无预设模板,不依赖流派基因库
└────────┬─────────┘
         ▼
┌──────────────────┐
│  初始图谱         │  ← 15-30 个节点 + 关系(Reality + Information)
│  (六维快照)       │
└────────┬─────────┘
         ▼
┌──────────────────────────────────────────────────────┐
│                叙事可能性检测器                        │
│  (Narrative Possibility Detector)                    │
│                                                      │
│  Tier 1: 图拓扑扫描(常驻代码逻辑,零 LLM 成本)        │
│    - 扫描实体冲突边(空间撞车、敌对关系)                │
│    - 计算节点中心度,筛选高危能动者子图                 │
│                                                      │
│  Tier 2: 规则与伏笔密度审查(Drizzle Hook,低成本)     │
│    - 计算子图内未回收伏笔密度                          │
│    - 检查信息不对称(谁不知道什么)                     │
│    - 若未达阈值 → 保持巡航模式                         │
│                                                      │
│  Tier 3: LLM 流派审美终审(轻量模型,仅阈值触发)       │
│    - 注入流派 Prompt,评估戏剧势能                     │
│    - 若压力爆表 → 切入冲刺模式                         │
└──────────────────────────────────────────────────────┘
         │
         ▼
┌──────────────────────────────────────────────────────┐
│  双模态输出                                          │
│                                                      │
│  巡航模式(日常过渡段):                               │
│    - 用户输入一句构思,系统直接生成 2000 字正文          │
│    - 正文 → Parser Agent → 逆向萃取 → 沉淀/过滤       │
│                                                      │
│  冲刺模式(高压冲突段):                               │
│    - 系统弹出「叙事压力来源报告」                       │
│    - 展示:冲突来源、涉事实体、未回收伏笔                │
│    - 用户选择走向,或手动输入自定义事件                 │
└──────────────────────────────────────────────────────┘

三、六维图谱定义

所有引擎的输出统一落在一张图上,不再各自存表。

六维

维度 说明 例子
时空 空间位置 + 时间线 "贝克兰德"(城市)、"1349年"(时间)
实体 存在的一切"东西",带属性 克莱恩(人物)、0-08(封印物)
关系 实体之间的连接 克莱恩 ─属于→ 塔罗会
规则 控制变化的法则 序列7→序列6需要魔药+扮演+仪式
事件 已发生的事(一次规则执行) 克莱恩晋升序列6
信息 谁知道什么 / 不知道什么 克莱恩不知道阿蒙来了

核心原则

  • 不加第七维。叙事价值是信号的强度,不是新的数据类型。
  • 不加认知层(Belief Graph)。Phase 2 再考虑。
  • 元定义每个项目自己声明:诡秘之主项目定义"序列"是实体类型,"晋升"是关系类型。系统不硬编码。

四、三段式生命周期

撒种(项目初始化)
    │ 用户填:一句话梗概 + 流派标签
    │ Agent 理解确认 → 生成初始图谱
    ▼

发芽(图谱生长 + 检测器介入)
    │ 检测器扫描初始图谱,发现第一个叙事可能性
    │ CLI 展示:世界名片 + 牌局上的角色 + 弦已绷紧的冲突
    │ 用户选择走向 → 图谱更新
    ▼

写作(巡航 / 冲刺双模态循环)
    │ 巡航模式 → 系统代写 → Parser 萃取 → 沉淀过滤
    │ 冲刺模式 → 用户选走向 → 事件写入 → 图谱更新
    │ 循环直到完本

五、检测器漏斗的调用逻辑

每次图谱变更(新事件 / 新实体 / 关系更新)
         │
         ▼
Tier 1: 图拓扑连通性扫描
  - 纯代码逻辑,不调 LLM
  - 找出冲突边密集的子图
  - 筛掉 90% 无关节点
         │
         ▼   仅对高危子图继续
Tier 2: 规则与伏笔密度审查
  - Drizzle Hook 级别,低成本
  - 计算伏笔密度、信息不对称数量
  - 低于阈值 → 保持巡航,不打断用户
         │
         ▼   仅阈值突破时
Tier 3: LLM 流派审美终审
  - 调用轻量模型(如 DeepSeek Flash)
  - 评估戏剧势能,包装为文本选项
  - 压力爆表 → 切入冲刺模式

六、正文生成 → 设定净化管道(防 LLM 污染)

Step 1: LLM 自由生成正文
  - 不打断创作流,不查图谱
  - 写出 2000 字

Step 2: Parser Agent 逆向萃取
  - 提取所有名词性实体
  - 与图谱已有节点比对
  - 标记未知实体为三类:
    类型 A:一次性氛围修饰词 → 随正文走,不入图谱
    类型 B:可能的重要实体 → 入临时缓冲区
    类型 C:明显幻觉/设定冲突 → 拦截报错

Step 3: 沉淀过滤
  - 类型 B 引用计数 ≥ 3 或用户显式提及 → 发起确权确认
  - 用户确认 → 正式写入永久图谱
  - 用户否决 → 留在临时缓冲区或丢弃

七、项目目录结构

narrative-os-v2/
├── package.json
├── tsconfig.json
├── packages/
│   ├── detector/          # 叙事可能性检测器(心脏)
│   │   ├── src/
│   │   │   ├── topology-scanner.ts    # Tier 1: 图算法
│   │   │   ├── tension-calculator.ts  # Tier 2: 伏笔/规则密度
│   │   │   ├── llm-evaluator.ts      # Tier 3: LLM 审美终审
│   │   │   ├── types.ts              # 图谱类型定义
│   │   │   └── index.ts
│   │   └── test/
│   │       └── test-context.json     # MVP 测试数据
│   │
│   ├── cli/               # CLI 交互层
│   │   ├── src/
│   │   │   ├── init.ts               # 项目初始化(种子生成)
│   │   │   ├── cruise.ts             # 巡航模式(代写正文)
│   │   │   ├── sprint.ts             # 冲刺模式(候选断点)
│   │   │   ├── parser.ts             # Parser Agent(逆向萃取)
│   │   │   ├── settings-sink.ts      # 设定沉淀(确权确认)
│   │   │   └── index.ts
│   │   └── ...
│   │
│   ├── graph/             # 六维图谱存储层
│   │   ├── src/
│   │   │   ├── schema.ts             # Drizzle 表定义
│   │   │   ├── queries.ts            # 图谱查询
│   │   │   ├── mutations.ts          # 图谱写入
│   │   │   └── index.ts
│   │   └── ...
│   │
│   ├── llm/               # LLM 客户端(封装 DeepSeek)
│   │   └── src/
│   │
│   └── shared/            # 共享类型定义
│       └── src/
│           ├── types.ts              # 六维图谱类型
│           ├── events.ts             # 事件类型
│           └── constants.ts          # 常量
│
├── docker-compose.yml     # PostgreSQL + pgvector
└── README.md

八、CLI 交互风格

$ narrative-os init
> 请输入一句话梗概:一个穿越到诡秘世界成为占卜家的故事
> 选择流派标签:[诡秘/克苏鲁, 穿越, 智斗]

[系统正在生成你的世界...]

你的世界:灰雾之城

廷根市笼罩在永不停歇的灰雾中。

牌局上的人:
  克莱恩 —— 占卜家,序列9,对未来隐隐不安
  老尼尔 —— 值夜者前辈,知道一些不该知道的事
  ??? —— 一个注视着他的存在

弦已绷紧:
  [1] 晋升材料短缺 —— 下一份魔药材料下落不明
  [2] 值夜者的怀疑 —— 老尼尔开始注意到异常
  [3] 灰雾的低语 —— 一个声音在重复一个名字

你想先处理哪个?(1-3):

---

日常写作时:

narrative-os> 写一章过渡,克莱恩坐火车去贝克兰德,路上复盘线索

[系统代写中... 2000 字已生成]
[检测到异常实体「红月草」,暂存缓冲区]
[图谱已更新:克莱恩位置 → 贝克兰德]

九、MVP(第一刀)

实现三个文件,不依赖任何现有代码:

1. packages/narrative-detector/test-context.json

伪造一个极简世界的六维图谱快照:

  • 5 个实体节点(2 个敌对势力 + 1 个主角 + 1 个中立角色 + 1 件物品)
  • 1 条冲突边(敌对关系)
  • 1 条未回收伏笔
  • 1 条信息不对称

2. packages/narrative-detector/src/topology-scanner.ts

TypeScript,不调 LLM:

  • 遍历节点,找到冲突边密集的子图
  • 标记高危子图
  • 输出冲突来源列表
  • 数据结构与后续 PostgreSQL 表结构保持 1:1 映射

3. packages/narrative-detector/src/cli-demo.ts

演示 CLI 输出:

  • 显示"弦已绷紧"格式的冲突报告
  • 模拟用户选择后,打印"已推进"信息

验证标准:npx tsx src/cli-demo.ts 后,终端能打印出类似「弦已绷紧」的三条冲突信息。这个验证通过,说明检测器逻辑成立。


十、排期(粗略)

阶段 内容 时间
Phase 1 检测器 MVP(test-context.json + topology-scanner + cli-demo) 1-2 周
Phase 2 CLI 框架 + 种子生成 Agent + 项目初始化流程 2-3 周
Phase 3 巡航模式(代写正文 + Parser 净化管道) 3-4 周
Phase 4 冲刺模式(候选断点 + 压力报告 + 图谱更新) 3-4 周
Phase 5 全流程串联测试 + 一个完整短篇验证 2-3 周

总计:约 3-4 个月完成可用的第一版。