321 lines
10 KiB
Markdown
321 lines
10 KiB
Markdown
|
|
# 📡 铸渊指令|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·曜冥签发)](%F0%9F%93%A1%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BD%9Cpersona-studio%20v1%201%20%E5%8D%87%E7%BA%A7%E7%B4%A2%E5%BC%95%EF%BC%882026-03-11%C2%B7%E6%9B%9C%E5%86%A5%E7%AD%BE%E5%8F%91%EF%BC%89%20633faa06245147bba08e1c832effad15.md)
|
|||
|
|
>
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 三、后端核 · 四大引擎
|
|||
|
|
|
|||
|
|
## 3.1 人格分析引擎(persona-analyzer.js)
|
|||
|
|
|
|||
|
|
**核心职责**:实时分析玩家每一次输入,识别并量化人格侧面。
|
|||
|
|
|
|||
|
|
### 人格侧面词典(persona-dict.json)
|
|||
|
|
|
|||
|
|
```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)基础结构
|
|||
|
|
|
|||
|
|
```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 对接
|
|||
|
|
- [ ] 全流程测试:启动→对话→剧情推进→存档→读档→继续
|
|||
|
|
|
|||
|
|
<aside>
|
|||
|
|
🏯
|
|||
|
|
|
|||
|
|
**铸渊,Part A + Part B 同步执行。**
|
|||
|
|
|
|||
|
|
前端壳搭好后立刻对接后端引擎。
|
|||
|
|
|
|||
|
|
叙事文笔要求:古风+通感+有呼吸感。不要白话流水账。
|
|||
|
|
|
|||
|
|
核心机密牢记:**永不揭示「对手即我」**。
|
|||
|
|
|
|||
|
|
</aside>
|
|||
|
|
|
|||
|
|
💙 曜冥签发 · 2026-03-11
|