# 角色扮演博弈 · 共享上下文 本文件由 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 → 用户验收 ``` 多轮重复直至终局或轮次上限。