# 雾鸦岛 · 节奏与认知重构设计 v1

> 状态:设计定稿 · 待开工
> 时间:2026-06-14
> 来源:一场关于「多 agent 主线推不动 / agent 变成任务机器人」的设计长谈,与林动逐点拍板。
> 关系:本文是「节奏 + 认知」这一专题的单一事实来源;总设计仍以 `docs/island-design-v3.md` 为准,问题清单见 `docs/ravenisle-current-issues.md`。

---

## 0. 问题与诊断

### 0.1 症状(用户原话)
- 游戏节奏不明确,agent 之间漫无目的对话,主线剧情推不动。
- 凶手傻乎乎只想完成任务清单,忘了「完成任务是为了什么」;其他角色随机应变能力也差。
- 结论:凶手和 agent 都变成了**只会完成任务的傻子 NPC**。

### 0.2 根因(精确到代码)
两条根,认知是更底层的那条:

**根因 A — agent 是「任务执行器」而非「目的驱动的谋划者」**(`src/genesis/runtime/cognition.py`)
- 终极目的从没被真正说出来:`ACTION_DOC`(L34)只抽象地提「你有一个终极目的(由秘密决定)」,从不写出那句话是什么。每个 tick 摆在 agent 面前唯一具体、编号的东西,是 `goals_block`(L177-186)那张 `1.[todo] 2.[doing]` 清单。模型只会去优化那个具体可打勾的东西。**「为什么」被降格成脚注,「做什么」被供成中心。**
- `_bootstrap_goals`(L161-175)开局把 `secret` 一次性压成 2-4 条任务,此后 WHY 再也回不来。
- `KILLER_DOC`(L51-67)通篇是「怎么 lure→跟过去→kill」的操作手册,零策略、零动机——把「复仇」教成了「执行一个 kill 动作」。
- `goals_replan` 只在「局势剧变」时触发,是异常处理,不是**持续盘算**。

**根因 B — 系统是「反应式」,没有「导演」**(`src/genesis/runtime/engine.py`)
- 唯一带节奏压力的是凶手(`_killer_pressure` L418-439 按钟点催他动手);**其余六人没有任何「幕」概念**,从 21:00 到天亮行为曲线是平的,自然漫游、闲聊、等夜话。
- `beats.json` 是「一次性扔事件」,不是节奏管制;`world_goal` 是「一句话环境框」,太弱。
- 没有任何东西在管「现在是第几幕、这一幕全场该聚焦什么」。

### 0.3 设计哲学(用户定调)
- **导演不下命令、不写剧本、不强制结果,它只调环境。** 幕是潜在目标态,导演通过注入世界状态 / 改环境,让「剧情往前」成为聪明 agent 自然会做的事——真正推剧情的还是 agent。否则多 agent 涌现就没意义了。
- **但要兜底**:不能让剧情一直打转。软推无效时,允许罕见的、较重的手(仍尽量是环境而非脚本)。

---

## 1. 核心架构:三层目标 + 一根注入管 + 软导演

### 1.1 三层目标(全员统一)
```
① 终极目的（静·写死在 manifest drive 字段）   ——永远在 prompt 最顶,是锚,永不变
② 阶段聚焦 / 导演意图（动·按幕注入 stage_directive）  ——随幕替换,是导演层↔认知层的接口
③ 当前打算 / 任务清单（agent 自有·可改）        ——降格成「我目前打算怎么走的假设」
```

**关键洞察**:`stage_directive`(②)是**导演层和认知层共享的同一根管子**。导演每进一幕,就往每个 agent 的 prompt 里换一段「此刻的处境与你该聚焦什么」。终极目的(①)在顶上压着,agent 就不会忘记「为什么」。

### 1.2 为什么认知是地基
软导演(改环境、潜移默化)**只对会随机应变的聪明 agent 有用**。往世界注入「灯忽明忽暗、暴雨加剧」,任务机器人会无视;只有盘算着终极目的、读得懂环境的 agent 才会「感到不安→行为升温→自己把剧情演下去」。
- ⇒ 认知重构(Layer 0)是地基,软导演(Layer 1)是上层,顺序不能反。
- ⇒ 地基越好,「兜底」越罕见触发——傻 agent 才需要硬推。

---

## 2. Layer 0:认知重构(地基,先行)

改的是 `cognition.py` 的 prompt 结构 + 目标表示 + manifest 数据,**不动引擎主干,向前兼容**。

### 2.1 把目标表示「倒过来」
- **终极目的置顶**:`persona_card_from_manifest` 把新的 `drive` 字段放到人设卡**最顶**,永远第一眼可见。
- **任务清单降格**:`goals_block` 从「行动计划(看起来像教条)」改成「我目前打算怎么走(随时可改的假设)」,视觉与措辞都从属于 drive。
- **加一道「盘算」beat**:决策前强制「先盘算:为了你的终极目的,眼下这个局面最该做什么?(不必照原计划)」——把改进从 reactive replan 变成**每拍都在算计**。可在输出 JSON 加一个轻量 `scheme`(盘算)字段强制模型articulate手段-目的推理。

### 2.2 消费 `stage_directive`
- `ThinkInput` 已有 `private_note`/`lure_bait`,新增/复用一个 `stage_directive` 通道,L2 与 L1(对话)都注入。
- 凶手的 `stage_directive` = 这一幕的完整阶段任务(杀谁/在哪/什么掩护/用什么饵),取代现在 `_killer_pressure` 那句干巴巴的「过点了快 kill」。
- 幸存者的 `stage_directive` = 这一幕的处境帧 + 被推着聚焦的方向(服务于自己的终极目的)。

### 2.3 KILLER_DOC 拆成两半
- **固定那半(留 cognition / manifest role)**:你是谁、怎么盘算、嫁祸顾长风/邵铭轩、夜话怎么演、人性裂缝(对白聿下不去手)、lure/kill 的**手段细则**。
- **变动那半(按幕注入 stage_directive)**:这一幕杀谁、在哪、用什么掩护、对目标下什么饵。
- 凶手每幕看到的「当前聚焦」都不同,自然不再死磕一张固定清单。

### 2.4 凶手情报档(dossier)→ lure 真饵
凶手是把所有人骗上岛、亲手布局的人,**每个人的私罪物证藏在哪、软肋是什么,他本就知道**(canon:§3 各人秘密 + §6.6 藏点表)。给凶手一份**静态情报档**,下饵时精准命中目标的真实私欲——这同时补上了代码里一直是空壳的 `_lure_hook`。

| 目标 | 私欲(→拽向) | 软肋 | 诱饵话术 |
|---|---|---|---|
| 温言 wen | 抽走书房剪报册的黑稿原稿 / 独家大新闻 | 好奇心碾压恐惧、藏不住兴奋 | 「我在码头捞到一页剧本残页,你来看」 |
| 邵铭轩 shao | 烧掉保险柜账本 | 信交易、急于止损 | 「账本不止一份,另一份我知道在哪」 |
| 唐曼 tang | 进青之房拿日记 | 操纵欲、想灭口 | 「青之房的钥匙在我手上」 |
| 顾长风 gu | 暗房负片母带 | 控制欲、死不认错 | 「母带的下落,只有我清楚」 |
| 程亦深 cheng | 撕掉道具间通告单/酒水单 | 怕死、死也不肯独处 | (难单独引;用「我替你处理掉那张单子」) |
| 白聿 bai | 冰窖急救记录原件 | 验尸会被引去尸体旁 | (凶手对他下不去手——人性裂缝) |

**范围界定**:情报档是**静态 canon 知识**(软肋 + 物证位置 + 诱饵话术),**不是实时读取对方此刻的决策**——既符合「他了解每个人」,又不开天眼,保持公平。

### 2.5 manifest 新字段 `drive`(7 人初稿)
> 一句话「赢的定义 + 赌注」,短、punchy,作 prompt 顶部锚点(完整背景仍在 `secret`/`role`)。

- **江离 jiang(凶手)**:这不是完成任务,是复仇。赢=天亮前在取景地清算该清算的人、绝不被指认,最后回灯塔补完第七幕跟她走;每一个死亡都只是手段。
- **顾长风 gu**:赢=活到天亮,且至死无人知道"不用替身,再来一条"是你喊的;负片母带天亮前必须烧掉。
- **邵铭轩 shao**:赢=活到天亮,且保险柜那本封口账本绝不见光(一出全完,你最先完)——烧掉它。
- **程亦深 cheng**:赢=活到天亮,且撕掉道具间那张记着你醉态的单子;你死也不能落单。
- **唐曼 tang**:赢=活到天亮,且青之房的日记绝不落到别人手里——里面是你逼她"这一跳你就红了"的原话。
- **白聿 bai**:赢=活到天亮;冰窖那份真实急救记录,烧或公开,你还没想好。验尸是你的牌,也是你的刑。
- **温言 wen**:赢=挖到这桩十年一遇的大新闻 + 抢先抽走你那篇带真名的黑稿原稿;你会闯进所有危险的地方。

---

## 3. Layer 1:软导演(上层,后做)

### 3.1 幕状态机(离散命名幕,软边界)
- 保留命名幕(序幕/第一案/调查/对质/…/终局)作导演的**内部目标刻度 + 叙事锚点**,但对 agent 不可见、不强制。
- **双轨推进**:幕的退出 = 钟点到点 **OR** 关键事件发生(死人/指认/停电),谁先到谁触发。钟点是「兜底不空转」,事件是「允许涌现改写节奏」。现有 KILL_DEADLINES / NIGHT_COURT / ferry 全部收编成幕的退出条件。

### 3.2 感知(导演的眼睛)——优先纯计算,可升级 LLM
- 纯计算信号:距上个有意义事件多久 / 人群分布(挤在安全屋=在漫游)/ 说话量 vs 行动量 / 凶手有没有独处窗口。
- 由此算「戏剧落差」=(潜在弧线此刻想要的温度)−(观测温度)。落差越大,环境施压越重。
- **用户拍板:可以上 LLM 导演**(调用充足)。先纯计算 + 固定杠杆表跑通,再给导演 LLM 脑决定「下一步注入什么」。

### 3.3 施压(导演的手)——只调环境,分级递进
| 想要的方向 | 软杠杆(注入世界状态) | 复用现成件 |
|---|---|---|
| 升温 / 不安 | 暴雨加剧、灯忽明忽暗、挂钟异响、放映机自转 | `set_weather`/`inject_event`/device |
| 让人散开(腾作案窗口) | 停电、某处异响把聚堆的人引开 | `inject_event`(停电已有) |
| 让线索被看见 | 尸体气味飘散、残页被风吹落、道具掉地出声 | 地点级 `broadcast_event` |
| 把某人往某地拽 | 私密冲动 `whisper`(不是命令) | `whisper`/`private_note` |
| 给凶手机会 | 目标与凶手凑独处 + 停电掩护 + 机会提示 | `lure`+停电+`private_note` |

### 3.4 重合机制(给凶手机会)——凶手拉 + 导演调显著度
每幕取景地 ≈ 该幕目标的私罪物证地点附近(地图已埋好一半)。重合靠两股软力,都不强制:
1. **凶手主动拉**:用 §2.4 情报档下精准饵;
2. **导演调显著度**:这一幕悄悄把目标那条「routes 经过取景地」的私欲调亮一点。
> 用户拍板:不要纯凶手主导(节奏全压在凶手 LLM 够不够聪明上),也不要导演排座(太脚本);两股软力并用。

### 3.5 全员同步升温
「戏剧温度」标量同时调制:
- **人格 prompt**:在 MBTI 静态描述上叠一层情绪基线(高张力时更冲动、更不信任、说话更冲),**保留各自 MBTI 差异**(同是恐慌,ENTJ 顾长风变独裁、ESFP 程亦深变黄诸葛)。
- **对话预算**:张力越高,闲聊越短越尖锐(治「漫无目的对话」)。

### 3.6 兜底(罕见安全网)
- 默认软推。连续 N 次软推仍卡死(如过钟点+buffer 凶手仍无动作)→ 升一档更露骨的环境(停电+独处+强机会提示)。
- 地板是「把概率拉到最高」,尽量仍是环境而非脚本。地基(认知)越好越少触发。

---

## 3.7 焦点镜头(信息密度治理 · 观剧漏斗)— 2026-06-14 追加

**问题**:信息过载回归——左栏叙事(narrator 每 10 模拟分钟≈每 20 真实秒写 200–400 字、且 prompt 强制**全景调度**覆盖所有场景)+ 并行多 session 对话字幕,**两条全景流抢眼睛**,用户看不过来。根因:一切都是「全景」,没有焦点(漏斗一直绑在"附身"上没落地)。

**方案**:把全景改成**导演镜头单焦点漏斗**(同时落地 A 镜头漏斗 + B 叙事瘦身;也是附身的地基):
1. **导演选焦点(heat 打分,复用导演层)**:每个有人场景算热度——凶案/停电/指认/线索发现=顶格(强制切镜+弹通知);对质/质问/甩锅/结盟=高;凶手+目标同场=高;撬锁/烧证/搜查=中;闲聊/发呆=低。导演锁最热场景为 `focus_place`。**带迟滞**(最短停留时长,不到更高优先级不乱切,免镜头抽搐)。
2. **焦点场景=完整显示**:对话原文(保留"看他们撒谎"的社交推理质感)+ 该场景短叙述。
3. **非焦点场景=细环快讯条常驻**:塌缩成一行环境快讯("书房·邵铭轩撬开了保险柜"),廉价生成(不调 LLM),底/侧细滚动条,低存在感、一眼扫过。
4. **narrator 改造**:停止全景;只叙焦点场景、**60–120 字短节拍**;镜头切换写一句桥接("镜头转向书房——");**有实质变化才写**,不再每 10 分钟硬写。
5. **用户抢镜头**:点地图地点/角色→锁定该场景(手动模式);"回到导演视角"按钮回自动;手动时凶案仍弹通知可一键跳。
6. **前端布局**:地图焦点地点高亮/拉近;主面板从"长篇自动滚动小说"换成"焦点对话+短叙述";底/侧细环快讯条。

**决策记录(追加)**:
| # | 抉择 | 结论 | 理由 |
|---|---|---|---|
| D12 | 全景 vs 焦点 | 转焦点(导演镜头) | 同时只看一件事,治过载;附身地基 |
| D13 | 镜头控制 | 导演自动 + 用户可抢镜头 | 被动看戏+主动探索兼得 |
| D14 | 非焦点存在感 | 细环快讯条常驻 | 低限纵览又不抢眼 |
| D15 | 对话去留 | 焦点场景保留对话原文(不被叙事吸收) | 社交推理质感是核心,不可损 |

## 4. 数据产物

1. **manifest `drive` 字段** ×7(§2.5,可选字段,向前兼容)。
2. **新 `worlds/ravenisle/acts.json`**:幕菜单 + 处境帧。两段结构草样:
   ```jsonc
   {
     "phases": [   // 全员处境帧 + 张力档(按 death-count/事件推进)
       {"id":"prologue","name":"序幕·杀青宴","tension":"unease",
        "frame":"暴雨封岛,摄制组没来,放映机自己放完了十年前的素材。还没人死,但每个人都听出:邀请者知道一切。",
        "enter":"start","exit":"death>=1 or clock>=22.5"}
       // first_blood / investigation / court / panic / finale ...
     ],
     "kill_acts": [  // 凶手菜单:一夜挑 2-3 幕(KILL_DEADLINES 三窗口)
       {"act":1,"name":"夜泊","place":["码头","船屋"],"method":"溺毙",
        "target":"wen","cover":"密道(储藏室⇄船屋)给不在场证明",
        "bait":"温言好奇压过恐惧——用『码头捞到一页剧本残页』把她引去码头/船屋"}
       // 二 晚宴→shao / 三 断弦→tang / 四 忏悔→bai(裂缝) / 五 灭灯→cheng / 六 雾径机动 / 七 鸦坠→gu(压轴)
     ]
   }
   ```
3. **凶手情报档**:可内联进 `kill_acts[].bait` + 一张 per-target 软肋表,凶手 cognition 读取。

> ⚠️ 待理顺:设计 §2 表里顾长风=**幕七(灯塔压轴)**,但 jiang manifest relationships 写「顾长风第一个该清算」——两者矛盾。**建议从 §2**(喊"再来一条"的人,死在她坠落的灯塔,压轴,最戏剧),写 acts.json 时一并修 manifest 那行。

---

## 5. 落地顺序与验收(自底向上,每层必测)

| 序 | 层 | 改动 | 验收 |
|---|---|---|---|
| 1 | 数据 | 7×`drive` 字段 + `acts.json` 初稿 + 修 gu 排序矛盾 | WorldBuilder 校验通过;通读 |
| 2 | Layer 0 认知 | drive 置顶 / stage_directive 消费 / 清单降格 / 盘算 beat / KILLER_DOC 拆分 / 情报档 lure 真饵 | simline 结构回归(prompt 结构断言);**手动设幕**跑凶手单角色,看是否从「死磕清单」→「会嫁祸、会应变、会下精准饵」 |
| 3 | Layer 1 导演 | 幕状态机 + 双轨推进 + 感知信号 + 杠杆表 + 全员升温 | simline 仿真回归;真实 LLM 跑一整局,看主线被推着走 / 行为随幕升温 / 闲聊收住 |
| 4 | 兜底 | 卡死检测 + 罕见硬手 | 构造「凶手一直不动手」用例,验证兜底触发且仍体面 |

**接口先行**:Layer 0 建成「能消费 stage_directive」的样子,用手动设定的幕来测(先无导演);跑通后 Layer 1 再动态驱动这根管子。两层解耦、分别可测。

---

## 6. 决策记录(本次拍板)

| # | 抉择 | 结论 | 理由 |
|---|---|---|---|
| D1 | 主线推进 | 软导演(改环境)为主,不规则化硬推 | 否则多 agent 涌现无意义 |
| D2 | 是否兜底 | 要,但软推优先,硬手罕见 | 不能一直打转;地基好则少触发 |
| D3 | 幕形态 | 离散命名幕 + 软边界 | 导演内部刻度 + 叙事锚点,对 agent 不可见 |
| D4 | 推进触发 | 双轨:钟点 OR 事件,谁先到 | 保节奏 + 允涌现 |
| D5 | 升温范围 | 全员同步升温,保留 MBTI 差异 | 治平直行为曲线 |
| D6 | 导演的眼睛 | 可用 LLM(调用充足);先纯计算跑通再升级 | 分层,先打通便宜的 |
| D7 | 开工顺序 | 认知重构先行(地基) | 软导演只对聪明 agent 有用 |
| D8 | 终极目的落地 | 逐角色手写进 manifest `drive` | 最可控、质量最高 |
| D9 | 三层目标接口 | `stage_directive` 注入管(全员) | 焊接导演层↔认知层 |
| D10 | 凶手知情范围 | 静态 canon 情报档(部分),非实时读心 | 符合「布局者了解所有人」又不开天眼 |
| D11 | 重合机制 | 凶手拉 + 导演调显著度 | 节奏稳又不脚本 |
