165 lines
5.5 KiB
Markdown
165 lines
5.5 KiB
Markdown
# 角色扮演博弈 · 共享上下文
|
||
|
||
本文件由 Runtime 注入 **本包所有 worker**;总管不读。
|
||
|
||
设计方法见 `docs/skill-design-guide.md`(抽象循环 → 上下文分层 → 倒推标签)。
|
||
|
||
---
|
||
|
||
## 定位
|
||
|
||
**角色扮演博弈** = 在简单、类思想实验的博弈处境下,让多个 **有鲜明策略倾向的角色** 各自决策,观察互动结果。
|
||
|
||
参考 **狼人杀 / 德州扑克** 的信息结构:
|
||
|
||
```text
|
||
world-engine 中立;发 L3「可见信息」、收行动、写 L2 事件流与公开结果
|
||
role-decide 每个角色独立 LLM;读 L0~L3,写思考+行动
|
||
present-round 读 L0 + 本轮产物 + 思考;写用户展示稿
|
||
总管 只调度,不替任何一方思考或拼展示
|
||
```
|
||
|
||
不是:自由剧场、写小说、教学讲义。
|
||
是:结构化情境 + 明确规则 + **信息隔离** 的多角色决策模拟。
|
||
|
||
---
|
||
|
||
## 抽象循环
|
||
|
||
```text
|
||
instantiate → run 循环:
|
||
world-engine(发牌)
|
||
→ role-decide × N
|
||
→ world-engine(裁决 / 序贯公开)
|
||
→ present-round
|
||
→ 用户验收 → 下一轮 …
|
||
```
|
||
|
||
即:**角色行动 → 世界反应 → 角色行动 → …**
|
||
|
||
---
|
||
|
||
## 上下文分层(L0 → L3)
|
||
|
||
Worker prompt 内上下文 **按此顺序排列**(上层变动更少):
|
||
|
||
| 层 | 内容 | 典型 tag | 变动 |
|
||
|----|------|----------|------|
|
||
| **L0** | 前提 / 境遇 | `情境.实验.设定`、本 shared-context | 实例化后不变 |
|
||
| **L1** | 人设 | `角色.{id}.设定` | 极少改 |
|
||
| **L2** | 历史记忆 | `运行.事件流` | 每轮 **追加**,不整段重写 |
|
||
| **L3** | 本轮看见 | `角色.{id}.可见信息`、`场景.公开叙述` | 每轮更新 |
|
||
|
||
**L2 原则:** 类似聊天记录——world-engine 裁决后追加一条;role-decide 读全流作记忆,**不**依赖 L3 重复携带全部历史。
|
||
|
||
---
|
||
|
||
## 三实体 + 展示
|
||
|
||
| 实体 | worker | 读 | 写 |
|
||
|------|--------|-----|-----|
|
||
| 角色 A…N | role-decide | L0 情境、L1 本人设定、L2 事件流、L3 可见+公开、参数 | `.思考`(仅用户)、`.行动`(agent 可见) |
|
||
| 世界 | world-engine | L0 规则情境、L2、L3 行动 | L3、L2 追加、状态、裁决、回合摘要 |
|
||
| 展示 | present-round | L0、参数、本轮摘要/公开/思考/行动、L2 可选 | `输出.用户展示` |
|
||
| 总管 | — | tag 索引 | 调度 |
|
||
|
||
## 两层输出(角色)
|
||
|
||
| 层 | tag | 用户 | 其他 role-decide | world-engine |
|
||
|----|-----|------|------------------|--------------|
|
||
| **思考** | `角色.{id}.思考` | ✅ | ❌ | ❌ |
|
||
| **行动** | `角色.{id}.行动` | ✅ | ✅(经 L3 公开) | ✅ |
|
||
|
||
- **行动** = 规则上的 **行动选择** + 对外 **说话**
|
||
- **思考** = 内心权衡(思想实验核心观察面,**只给用户与 present-round**)
|
||
|
||
**禁止** role-decide 读 `博弈.规则.草稿` 全文(不对称信息由 world-engine 裁进 L3)。
|
||
**禁止** world-engine 读/写 `.思考` 或做剧情化推演。
|
||
**禁止** role-decide 读其他角色的 `.思考` 或 `.行动` 原文(仅 L3)。
|
||
|
||
---
|
||
|
||
## 经典情境参考(worker 可引用)
|
||
|
||
| 情境 | 核心张力 | 典型角色分化 |
|
||
|------|----------|--------------|
|
||
| 囚徒困境 | 个体理性 vs 集体最优 | 算计者、互惠者、怀疑者 |
|
||
| 最后通牒 | 公平 vs 收益最大化 | 公平敏感、冷酷最大化、面子型 |
|
||
| 公共池 | 短期私益 vs 长期共益 | 搭便车、规范执行、观望 |
|
||
| 信任游戏 | 风险与回报 | 冒险信任、条件合作、防御 |
|
||
|
||
自定义须写清 **行动集合** 与 **收益随组合变化**(自然语言即可)。
|
||
|
||
---
|
||
|
||
## 角色设定原则(L1)
|
||
|
||
每个 `角色.{id}.设定` 须含:称呼、策略倾向、信息立场、行为边界。
|
||
**禁止** 空泛人设而无决策含义。
|
||
|
||
---
|
||
|
||
## 规则表述原则
|
||
|
||
`博弈.规则.草稿` 须让 **world-engine** 能回答:决策时点、合法行动、收益映射、信息对称性、多轮衔接。
|
||
|
||
---
|
||
|
||
## 决策顺序
|
||
|
||
写入 `博弈.参数.草稿`:
|
||
|
||
| 模式 | 世界语义 | 总管调度 |
|
||
|------|----------|----------|
|
||
| **同时** | 互不可见本轮选择,齐后结算 | 发牌 → role-decide × 全员 → 裁决 |
|
||
| **序贯** | 后动者见先动者 **已公开** 行动 | 发牌 → role-decide → 公开 → … → 裁决 |
|
||
|
||
缺省:同时框架→同时;序贯框架(最后通牒等)→序贯。
|
||
|
||
---
|
||
|
||
## 输出风格
|
||
|
||
**world-engine 不受风格影响**——始终客观事实。
|
||
|
||
| 模式 | role-decide | present-round |
|
||
|------|-------------|---------------|
|
||
| 分析报告 | 思考简短 | 表格化、少戏剧 |
|
||
| 角色内心 | 完整 `.思考` | 思考段完整 |
|
||
| 戏剧化 | `.行动.说话` 可带台词 | 可润色 **已公开** 言行 |
|
||
|
||
默认:展示思考 + 简短客观摘要。
|
||
|
||
---
|
||
|
||
## Book
|
||
|
||
- **确认稿**(情境、规则、角色设定等)跨 Session 复用,见 orchestrator `loadFromBook`。
|
||
- **实例快照**(`kind: instance`):实例化完成后的 **对象**(情境、规则、角色设定),不含轮次进度;见 `docs/run-snapshot.md`。
|
||
- **运行存档**(`kind: run`):run 中某一时刻的完整进度。
|
||
|
||
---
|
||
|
||
## 单轮流程(run)
|
||
|
||
### 同时决策
|
||
|
||
```text
|
||
world-engine(发牌)→ L3
|
||
role-decide × 全员 → .思考 + .行动
|
||
world-engine(裁决)→ L2 追加、L3、摘要
|
||
present-round → 输出.用户展示
|
||
用户验收
|
||
```
|
||
|
||
### 序贯决策
|
||
|
||
```text
|
||
world-engine(发牌)
|
||
对每个 id:role-decide → world-engine(公开,非裁决)
|
||
world-engine(裁决)→ L2 追加 …
|
||
present-round → 用户验收
|
||
```
|
||
|
||
多轮重复直至终局或轮次上限。
|