Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc [SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
10 KiB
10 KiB
📡 铸渊指令|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 同步执行
三、后端核 · 四大引擎
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_scores(8维当前分数)
│ ├── 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