🏛 架构平台 Arch.Platform

阶段 4 — 可配置剧情/游戏模式(狼人杀 / 军团竞争 / 吃鸡 等)

16c99532
✏️ 编辑
优先级 P2
类型 新功能
状态 草稿
负责人

📝 描述

阶段 4 — 可配置剧情/游戏模式。在阶段 3 (REQ-7cfc9696) 把「人 + 地」外部化之后, 进一步把「游戏规则」也外部化 — 同套 town 改一个剧本 YAML 就能跑狼人杀 / 军团竞 争 / 吃鸡 等不同模式,而不是写 Python。 【剧本 YAML 概念模型】 scenario.yaml: name: werewolf teams: [villagers, werewolves] roles: # 把 agent_id 绑到具体身份 li_si: {role: villager, faction: villagers, abilities: [vote]} zhang_wei: {role: werewolf, faction: werewolves, abilities: [kill, vote]} wang_wu: {role: seer, faction: villagers, abilities: [inspect]} li_na: {role: villager, faction: villagers, abilities: [vote]} chen_lei: {role: werewolf, faction: werewolves, abilities: [kill, vote]} win_condition: "all_werewolves_dead OR villagers_count <= werewolves_count" phases: [day_discuss, day_vote, night, night_resolve] custom_actions: # 扩展 action vocab inspect: {cooldown_hours: 24, target: agent_id} kill: {cooldown_hours: 24, target: agent_id} hooks: on_vote_complete: resolve on_phase_change: publish_event 【功能模块】 1. ScenarioManager (L2?):加载 scenario.yaml,作用于 town。读 world.agents, 注入 role/faction 到 agent_runtime 的 persona 字段(改写 LLM prompt)。 2. LLM prompt 改造:decision.py 注入 4 段 meta: - 当前 phase (day_discuss / day_vote / night) - role + faction + abilities (LLM 必须遵守) - win condition 摘要 - 上个 phase 公开事件(投票结果/夜间死亡) 3. CustomAction 注册:扩展 Action 枚举(LLM 输出),新增 inspect/kill 等, runner 提供实现 — 默认 fallback 是「事件 log + bus publish」, game-specific 逻辑挂在 hooks 里。 4. Game state machine:track 当前 phase,phase_change 时: - 切换 day/night 行为(dialogue 概率、reflect 触发条件等) - 触发 phase_change hook (publish director.phase) - 检测 win condition → 进入 game_over(同 town 继续 mock 出 winner, 不真停 town;web UI 显式提示) 【API 设计(待 brainstorming)】 - POST /api/scenario/load {name: werewolf} → 加载剧本,覆盖当前 personas role - GET /api/scenario/state → phase / 阵营存活 / 票数 / winner - POST /api/scenario/{action} (vote/kill/inspect) → 玩家手动注入动作(MVP) - GET /api/scenario/win_condition → 当前剧本胜利条件 + 进度 【验收标准(初版,待 brainstorming)】 1. 加载狼人杀剧本后,/api/scenario/state 返回 phase=day_discuss,5 agents 各有 role/faction,LLM 决策中体现「我隐藏身份,不能暴露自己是狼人」。 2. POST /api/scenario/vote {voter:zhangwei, target:wangwu} 后,投票计数 +1,触发 on_vote_complete hook → game state 进入 night。 3. 模拟狼人全部死亡 → game.over 事件 broadcast,前端显示「村民胜利」。 【复用资产】 - 阶段 3 (REQ-7cfc9696) 的 personas.yaml + locations.yaml:roles 直接复用 personas 的 id/name,只是加 role/faction/abilities 列。 - event-bus:加 Topic.PHASE_CHANGE / GAME_OVER 复用 event-bus publish/subscribe 机制。 - tick_loop 节奏器:phase 切换可复用 TickScheduler,但加入 phase interval (白天 60s / 夜晚 120s 等)。 - town main.py 加 scenario_state module-level dict + scenario router。 【MVP 不做 — YAGNI】 - 跨剧本热切换(玩家游戏中改剧本会重置) - 多剧本并行(单 town 一次只跑一个剧本) - 剧本编辑器 UI(纯 YAML 手写) - 反作弊鉴权 / 投票权限校验(信任 town owner) - 复杂博弈策略(AI 不学博弈论,只是 LLM 扮演) 【成本预估】 - LLM 上下文:每 tick 注入剧本 metadata ~200 tokens,5 agents × 0.2KB/tick × 1440 tick/天 ≈ 1.5MB/天 context,日增 ¥2(忽略) - CustomAction 实施:每剧本 ~5-10 个动作,每个 Python 实现 ~30 行, 3 个示例剧本(狼人/军团/吃鸡)~50 行场景逻辑 - 单测:fake scenario_manager 注入测试剧本,无需真实 LLM ## 关联 依赖 REQ-7cfc9696 (阶段 3 可配置空间与角色) — personas/locations YAML 已提供可 配置人地,本 REQ 在其上叠剧本维度。 引用 REQ-9d88acbf (阶段 1,complete 2026-06-29):基础 town + LLM 决策闭环 引用 REQ-378ef1e0 (阶段 2 导演控制台,P2 draft):导演维度与本 REQ 的「phase 切换」 可合并或互不重叠(评估时定)。

👤 用户故事

作为演示运营,我希望给同一套 town 加载不同剧本 YAML 就能跑不同游戏(狼人杀 / 大逃杀 / 团队战),改一个文件做一套新玩法,不必改 Python。

✅ 验收标准 (1 项)

  1. Given 加载 scenario.yaml=werewolf 后 5 agents 各绑定 role/faction
    When GET /api/scenario/state
    Then 返回 phase=day_discuss,5 个 role/faction 配对正确;LLM 决策 prompt 体现角色身份

🏷️ 标签

ai-agent-virtual-life stage4 game-mechanics scenario ext-of:7cfc9696 ext-of:9d88acbf

🔄 推进状态

新状态
负责人
描述(rejected/cancelled 必填)

创建于 2026-06-29 13:53