Guanghu Domestic Migration a27e87cb99 chore: import sanitized domestic snapshot for REPO-007
Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc

[SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
2026-07-17 15:59:55 +08:00

10 KiB
Raw Blame History

📡 铸渊指令M-PALACE · 动态人格宫廷生成系统 · Part B · 后端核 + 四大引擎 + 存档系统2026-03-11·曜冥签发

HoloLake Era · AGE OS · guanghulab 新模块指令

签发:曜冥 × 冰朔 · 2026-03-11 · 执行者:铸渊

仓库https://github.com/qinfendebingshuo/guanghulab(主仓库)

模块代号M-PALACE · Part B后端核 + 引擎 + 数据库)

优先级P0 · 与 Part A 同步执行

关联📡 铸渊指令persona-studio v1.1 升级索引2026-03-11·曜冥签发


三、后端核 · 四大引擎

3.1 人格分析引擎persona-analyzer.js

核心职责:实时分析玩家每一次输入,识别并量化人格侧面。

人格侧面词典persona-dict.json

{
  "dimensions": [
    {
      "id": "ambition",
      "name": "野心",
      "keywords": ["权力", "登上", "掌控", "不甘", "凭什么"],
      "behavior_signals": ["选择攻击性选项", "主动挑战权威", "拒绝退让"]
    },
    {
      "id": "warmth",
      "name": "温情",
      "keywords": ["保护", "心疼", "陪伴", "不忍", "算了"],
      "behavior_signals": ["选择和解", "保护弱势角色", "牺牲利益"]
    },
    {
      "id": "aggression",
      "name": "攻击性",
      "keywords": ["杀", "除掉", "报复", "不放过", "代价"],
      "behavior_signals": ["选择对抗", "设计陷阱", "直接冲突"]
    },
    {
      "id": "suspicion",
      "name": "多疑",
      "keywords": ["试探", "不对劲", "背后", "真的吗", "骗"],
      "behavior_signals": ["频繁试探", "不信任NPC", "选择观望"]
    },
    {
      "id": "vanity",
      "name": "虚荣",
      "keywords": ["面子", "配得上", "最好的", "羡慕", "风光"],
      "behavior_signals": ["追求地位象征", "在意他人评价", "选择炫耀"]
    },
    {
      "id": "cunning",
      "name": "心机",
      "keywords": ["计划", "利用", "棋子", "布局", "暗中"],
      "behavior_signals": ["迂回策略", "利用他人", "长线布局"]
    },
    {
      "id": "loyalty",
      "name": "忠义",
      "keywords": ["信任", "誓言", "守护", "不背叛", "承诺"],
      "behavior_signals": ["坚守阵营", "拒绝背叛", "为盟友冒险"]
    },
    {
      "id": "fear",
      "name": "恐惧",
      "keywords": ["害怕", "不敢", "万一", "小心", "退"],
      "behavior_signals": ["回避冲突", "选择保守", "犹豫不决"]
    }
  ]
}

分析逻辑

玩家输入(自由文本 or 选择选项)
  ↓
① 关键词匹配:扫描 persona-dict 的 keywords
② 行为信号匹配:判断选项类型对应的 behavior_signals
③ 上下文推断:结合对话历史,用模型分析语气/态度/策略倾向
  ↓
输出8维人格侧面分数0~100
  {
    "ambition": 72,
    "warmth": 35,
    "aggression": 58,
    "suspicion": 81,
    "vanity": 40,
    "cunning": 65,
    "loyalty": 50,
    "fear": 28
  }
  ↓
写入 saves/{SAVE-ID}/persona.json每次交互后更新

3.2 背景生成引擎background-gen.js

核心职责:接收锚点答案 + 人格侧面初始数据 → 从宫廷数据库匹配 → 生成逻辑自洽的专属背景

生成流程

锚点1世界观古代/架空)→ 选择 templates/ 中的基础世界模板
锚点2身份妃子/皇帝/重臣/奸臣/随机)→ 确定主角定位
  ↓
初始人格快照(从锚点选择推断):
  选皇帝 → ambition+20, vanity+15
  选妃子 → warmth+15, fear+10
  选重臣 → loyalty+20, cunning+10
  选奸臣 → cunning+25, aggression+15
  选随机 → 均匀分布
  ↓
查询 palace-db.json 的四大维度:
  ├── 权力维度 → 基于 ambition+cunning 生成权力格局
  ├── 后宫地位 → 基于 vanity+warmth 生成人物关系网
  ├── 情感关系 → 基于 warmth+loyalty 生成情感线索
  └── 矛盾冲突 → 基于 aggression+suspicion 生成初始冲突
  ↓
调用模型,综合以上数据,生成:
  - 王朝名称 + 年号 + 时代背景1段
  - 主角身份详述(家世·地位·处境)
  - 3~5个核心NPC每个NPC = 玩家某个人格侧面的映射)
  - 初始冲突引线(开局事件)
  ↓
写入 saves/{SAVE-ID}/state.json

NPC映射规则核心机密

每个NPC对应玩家的1~2个人格侧面

  玩家野心高 → 生成一个「同样野心勃勃的对手」(镜像冲突)
  玩家多疑高 → 生成一个「行为暧昧的盟友」(投射验证)
  玩家温情高 → 生成一个「需要被保护的弱势角色」(情感锚点)
  玩家恐惧高 → 生成一个「强大且不可预测的威胁」(放大恐惧)

  NPC的行为逻辑 = 玩家对应侧面的外化表现
  玩家在跟NPC博弈时本质上是在跟自己的某个侧面对话

  ⚠️ 这个映射关系永远不向玩家揭示

3.3 角色情节引擎plot-engine.js

核心职责:根据持续更新的人格侧面数据,在专属背景下动态生成宫斗角色与事件。

情节生成逻辑

每次玩家做出选择后:
  ↓
① 人格分析引擎更新侧面分数
② 检测分数变化幅度:
   - 某维度突变(单次+15以上→ 触发「关键事件」
   - 两维度交叉升高 → 触发「复合剧情线」
   - 整体趋于平稳 → 推进主线叙事
③ 查询 palace-db 匹配当前状态的剧情模板
④ 调用模型,结合:
   - 当前世界状态state.json
   - 玩家人格侧面persona.json
   - 剧情历史history.json
   - 宫廷数据库模板
   ↓
   生成:
   - 下一段叙事文本(古风文笔·有呼吸感)
   - 3个预设选项分别对应不同人格侧面倾向
   - 状态栏四维数值变化
   ↓
⑤ 更新 state.json + history.json
⑥ 返回前端渲染

选项生成规则

每次生成3个选项策略
  选项A顺应玩家当前最强侧面舒适区
  选项B挑战玩家当前最弱侧面成长区
  选项C中性/意外方向(探索区)
  + 自由输入:完全开放(最高数据价值)

例:玩家当前 ambition=80, fear=20
  选项A「直接向太后摊牌」顺应野心
  选项B「默默退让保全自身」挑战恐惧弱项
  选项C「派人去打听太后的真实意图」中性试探

3.4 存档系统save-manager.js

存档结构

data/saves/{SAVE-ID}/
├── state.json     ← 完整世界状态
│   ├── world王朝·年号·背景
│   ├── npcs[]所有NPC当前状态·关系·阵营
│   ├── player主角当前地位·持有资源·关系网
│   ├── chapter当前章节·段落
│   └── four_dimensions权力/地位/情感/冲突 数值)
│
├── persona.json   ← 玩家人格侧面数据
│   ├── current_scores8维当前分数
│   ├── history[](每次变化记录)
│   └── dominant_trait当前最突出特征
│
└── history.json   ← 剧情历史
    ├── chapters[](章节列表)
    ├── events[](关键事件记录)
    └── choices[](玩家所有选择记录)

存档编号规则

格式PAL-{YYYYMMDD}-{随机4位}
示例PAL-20260311-A3K9

加密:存档数据 JSON.stringify → AES加密 → Base64编码
防逆向:玩家拿到编号无法反推人格映射数据

存档/读档 API

POST /api/palace/save
  → 打包当前 state+persona+history → 加密 → 生成编号 → 返回

POST /api/palace/load
  body: { save_id: "PAL-20260311-A3K9" }
  → 查找存档 → 解密 → 恢复状态 → 返回完整世界数据

四、与现有架构复用

现有 guanghulab 能力 M-PALACE 复用方式
model-router.js模型路由 叙事生成/人格分析 共用模型路由
memory-injector.js记忆注入 长线剧情不断线·注入世界状态摘要
persona-engine.js人格引擎 改造为宫斗叙事引擎的基底
profile-learner.js画像学习 改造为人格分析引擎
通感语言风格 叙事文笔:古风+通感+呼吸节奏
编号登录体系 存档编号体系

五、宫廷数据库palace-db.json基础结构

{
  "power": {
    "positions": ["皇帝", "太后", "皇后", "贵妃", "丞相", "大将军", "太监总管"],
    "factions": ["太后党", "皇后党", "新贵派", "清流派", "孤臣"],
    "events": ["朝堂弹劾", "密谋政变", "联姻结盟", "战事告急"]
  },
  "status": {
    "ranks": ["答应", "常在", "贵人", "嫔", "妃", "贵妃", "皇贵妃", "皇后"],
    "events": ["晋封", "降位", "禁足", "受宠", "失宠", "怀孕", "小产"]
  },
  "emotion": {
    "types": ["暗恋", "深情", "嫉妒", "怨恨", "愧疚", "依赖", "背叛"],
    "triggers": ["偶遇旧人", "收到密信", "目睹真相", "被迫抉择"]
  },
  "conflict": {
    "types": ["争宠", "夺权", "报仇", "自保", "救人", "揭秘"],
    "escalation": ["暗示", "试探", "交锋", "撕破脸", "鱼死网破"]
  }
}

执行清单

  • 创建 data/palace-db.json 宫廷数据库
  • 创建 data/persona-dict.json 人格侧面词典
  • 创建 data/templates/ 世界观模板(古代+架空各一套)
  • 实现 persona-analyzer.js:关键词+行为信号+模型推断
  • 实现 background-gen.js:锚点+人格→查库→模型生成世界
  • 实现 plot-engine.js:持续人格分析→动态生成剧情+选项
  • 实现 save-manager.js:打包/加密/编号/解密/恢复
  • 路由对接:start.js / interact.js / save.js
  • 与现有 model-router + memory-injector 对接
  • 全流程测试:启动→对话→剧情推进→存档→读档→继续

💙 曜冥签发 · 2026-03-11