26 KiB
26 KiB
AI 剧本杀 — 产品需求文档(PRD)
版本:V1.0 | 日期:2026年7月 | 状态: Draft 目标读者:开发团队、设计师、产品经理 本文档用于指导 Vibe Coding 全流程开发,按模块拆分,可直接落地。
一、产品概述
1.1 产品定位
AI 剧本杀是一个以 AI 驱动的线上剧本杀平台,核心解决"凑不齐人就玩不了"的终极痛点。1 位真人玩家即可开局(AI NPC 补位),多人模式空缺角色也由 AI 自动填充。
1.2 产品 slogan
随时开局,人人都是主角。
1.3 核心指标(KPI)
| 指标 | MVP 目标 | V1.0 目标 |
|---|---|---|
| 单局完成率 | > 60% | > 80% |
| 平均游戏时长 | 45-90 min | 可配置(30min - 4h) |
| NPS(净推荐值) | > 30 | > 50 |
| NPC 回复合理率 | > 70% | > 85% |
| 防剧透漏出率 | < 5% | < 1% |
二、用户角色与场景
2.1 用户画像
| 角色 | 描述 | 核心需求 |
|---|---|---|
| 独狼玩家 | 喜欢剧本杀但凑不到人 | 单人也能玩,不需要社交等待 |
| 异地好友 | 朋友分散在不同城市 | 线上一起玩,AI 补位凑满 |
| 新手小白 | 没玩过剧本杀怕尴尬 | AI 陪练无压力,有引导 |
| 硬核推土机 | 推理爱好者,追求逻辑挑战 | 高难度剧本 + 严谨推理体验 |
| 创作者 | 剧本作者,想变现 | 上传剧本 + 分成收入 |
| 门店老板 | 线下剧本杀店主 | AI DM 降本增效 |
2.2 核心用户场景
| 编号 | 场景 | 用户 | 频率 |
|---|---|---|---|
| S01 | 晚上在家无聊,想玩一局剧本杀但凑不到人 | 独狼玩家 | 高频 |
| S02 | 和异地朋友约好线上玩,但只有 3 个人凑不满 | 异地好友 | 中频 |
| S03 | 第一次接触剧本杀,想试试但又不好意思去线下 | 新手小白 | 低频/一次 |
| S04 | 周末想挑战高难度推理本,找不到合适的局 | 硬核推土机 | 中频 |
| S05 | 写了一个剧本想分享并赚钱 | 创作者 | 低频 |
| S06 | 门店 DM 不够用,用 AI 辅助带本 | 门店老板 | 高频 |
三、功能需求(按模块)
优先级标记:P0 = MVP 必须,P1 = V1.0 必须,P2 = 后续迭代
3.1 用户系统
| 编号 | 功能 | 描述 | 优先级 |
|---|---|---|---|
| U-01 | 邮箱/手机号注册登录 | 基本账号体系 | P0 |
| U-02 | 游客模式 | 不登录可体验 1 局 | P0 |
| U-03 | 用户画像填写 | 推理偏好、情感类型、经验等级 | P1 |
| U-04 | 多设备登录 | 同一账号可切换设备 | P1 |
| U-05 | 历史记录 | 已完成游戏列表 + 复盘入口 | P0 |
3.2 剧本系统
| 编号 | 功能 | 描述 | 优先级 |
|---|---|---|---|
| S-01 | 内置剧本库 | 预制 5 个剧本(含不同风格) | P0 |
| S-02 | 剧本详情页 | 展示类型、人数、时长、难度、简介 | P0 |
| S-03 | AI 生成剧本 | 用户输入主题/风格/人数,AI 生成完整剧本 | P1 |
| S-04 | 上传解析剧本 | 支持上传 TXT/Markdown/PDF,AI 结构化提取 | P1 |
| S-05 | 剧本质检 | 自动检测逻辑漏洞、线索链完整性 | P2 |
| S-06 | 剧本评分/评价 | 玩家玩后可评分 + 文字评价 | P1 |
| S-07 | 创作者上传 | 创作者直接上传结构化剧本到平台 | P2 |
剧本数据结构
{
"id": "string",
"title": "剧本标题",
"type": "hardcore | emotional |欢乐 | 阵营 | 恐怖 | 还原",
"difficulty": 1-5,
"playerCount": { "min": 4, "max": 8 },
"duration": "2-3h",
"background": "公共背景故事",
"phases": [
{
"name": "第一幕",
"description": "场景描述",
"publicInfo": "所有玩家可见信息",
"clues": ["线索id1", "线索id2"]
}
],
"roles": [
{
"id": "role_1",
"name": "角色名",
"avatar": "头像URL",
"publicProfile": "公开身份",
"secretProfile": "私密背景",
"secret": "隐藏的秘密",
"goal": "胜利目标",
"winCondition": "胜利条件"
}
],
"clues": [
{
"id": "clue_1",
"name": "线索名",
"description": "线索描述",
"imagePrompt": "用于AI生图的提示词",
"phase": 1,
"triggerCondition": "触发条件" // 可选
}
],
"truth": "完整真相"
}
3.3 游戏引擎(核心)
3.3.1 游戏流程控制
| 编号 | 功能 | 描述 | 优先级 |
|---|---|---|---|
| G-01 | 选本 | 浏览剧本库 → 选择剧本 | P0 |
| G-02 | 选角 | 玩家选择角色,AI 分配剩余 NPC 角色 | P0 |
| G-03 | 分幕推进 | DM Agent 按剧本分幕推进流程 | P0 |
| G-04 | 公共讨论 | 所有角色(含 AI NPC)在公屏发言 | P0 |
| G-05 | 私聊 | 玩家可与任一 AI NPC 一对一私聊 | P0 |
| G-06 | 搜证 | DM 发放线索卡,玩家查看 | P0 |
| G-07 | 举证 | 玩家在公屏出示线索卡质询 NPC | P0 |
| G-08 | 投票 | 投票指认凶手或做出关键选择 | P0 |
| G-09 | 复盘 | 展示真相、全角色秘密、对话回放 | P0 |
3.3.2 DM Agent
| 编号 | 功能 | 描述 | 优先级 |
|---|---|---|---|
| D-01 | 开场引导 | 朗读背景,介绍角色,说明规则 | P0 |
| D-02 | 阶段推进 | 根据剧本分幕自动推进,切换场景 | P0 |
| D-03 | 线索发放 | 按剧本配置 + 玩家进度发放线索卡 | P0 |
| D-04 | 梯度扶车 | 玩家卡壳 20s 以上 → 微妙暗示 → 明确引导 | P1 |
| D-05 | 节奏控制 | 超时自动推进,可缩短/延长阶段 | P1 |
| D-06 | 投票管理 | 发起投票、统计结果、判定胜负 | P0 |
| D-07 | 复盘生成 | 生成完整复盘报告 | P0 |
| D-08 | 难度自适应 | 根据玩家推理表现动态调整复杂度 | P2 |
3.3.3 NPC Agent
| 编号 | 功能 | 描述 | 优先级 |
|---|---|---|---|
| N-01 | 信息隔离 | 仅知晓公共剧本 + 自己的私密剧本 | P0 |
| N-02 | 角色扮演 | 按人设语气、风格发言,不串角色 | P0 |
| N-03 | 策略行为 | 可撒谎、隐瞒、引导、反问 | P1 |
| N-04 | 多轮记忆 | 记住玩家之前说过什么,跨轮一致 | P1 |
| N-05 | 主动发言 | 在公共讨论中主动接话、点名回应 | P1 |
| N-06 | 私聊回应 | 玩家私聊时以角色身份回应 | P0 |
| N-07 | 线索反应 | 被举证时做出合理反应 | P1 |
3.3.4 特殊游戏类型支持
| 编号 | 功能 | 描述 | 优先级 |
|---|---|---|---|
| T-01 | 硬核推理流程 | 含中间推理节点、时间线梳理 | P1 |
| T-02 | 情感沉浸流程 | 情感触发事件、角色内心独白 | P1 |
| T-03 | 欢乐机制流程 | 随机事件卡、小游戏机制 | P2 |
| T-04 | 阵营对抗流程 | 分组、结盟、背刺机制 | P2 |
| T-05 | 恐怖流程 | 生存判定、心跳节奏 | P2 |
| T-06 | 还原流程 | 碎片逐步披露、世界观拼合 | P1 |
3.4 沉浸式交互
| 编号 | 功能 | 描述 | 优先级 |
|---|---|---|---|
| I-01 | 文字聊天 | 全流程文字交互 | P0 |
| I-02 | 语音合成(TTS) | AI 发言自动朗读,角色分音色 | P1 |
| I-03 | 语音输入(ASR) | 玩家可直接说话输入 | P2 |
| I-04 | 线索证据卡 UI | 图片+文字,公屏渲染,右侧牌堆 | P0 |
| I-05 | 阶段共识板 | 显示已形成共识/分歧点/待核查 | P1 |
| I-06 | 随身剧本册 | 随时查看自己的角色信息 | P0 |
| I-07 | 头像/角色状态 | Agent 状态可视化(思考中/发言中) | P1 |
| I-08 | 背景主题 | 根据剧本主题变换 UI 风格 | P2 |
3.5 商用功能
| 编号 | 功能 | 描述 | 优先级 |
|---|---|---|---|
| B-01 | 付费墙 | 免费体验 1 局后引导付费 | P1 |
| B-02 | 单局支付 | 支付宝/微信支付单局费用 | P1 |
| B-03 | 订阅系统 | 月卡/季卡/年卡,自动续费 | P2 |
| B-04 | 积分系统 | 签到、分享、评价赚积分 | P2 |
| B-05 | 创作者收益 | 创作者查看收益、提现 | P2 |
四、非功能需求
4.1 性能要求
| 指标 | 要求 |
|---|---|
| AI 回复延迟 | < 3s(含 LLM 推理时间) |
| 消息推送延迟 | < 500ms |
| 并发支持 | MVP 支持 1000 局同时进行 |
| 剧本加载时间 | < 2s |
| 页面首屏加载 | < 3s |
4.2 安全要求
| 编号 | 要求 |
|---|---|
| SEC-01 | 用户密码加密存储(bcrypt) |
| SEC-02 | API 请求鉴权(JWT) |
| SEC-03 | 用户数据隔离,不能访问他人游戏数据 |
| SEC-04 | AI 内容合规过滤(敏感词库 + 审核) |
| SEC-05 | 防剧透:NPC 不能泄露私密剧本信息 |
| SEC-06 | API 限流,防止滥用 |
4.3 可用性要求
- 系统可用时间 > 99.5%
- 支持 7x24 小时运行
- 关键操作有 Loading 状态反馈
- 网络断开时提示用户,自动重连
- 游戏中间可暂停,下次继续
4.4 兼容性要求
| 平台 | MVP | V1.0 |
|---|---|---|
| Web (Chrome/Firefox/Edge) | ✅ | ✅ |
| 移动端 H5 | ✅ | ✅ |
| 微信小程序 | ❌ | ✅ |
| iOS App | ❌ | ✅ |
| Android App | ❌ | ✅ |
五、AI Agent 详细设计
5.1 Agent 通信架构
玩家输入
│
▼
Agent Orchestrator
│
├─→ DM Agent (负责主持、控场、线索)
│ │
│ ├─→ 判断当前阶段 → 执行阶段动作
│ ├─→ 检测玩家进度 → 判断是否扶车
│ └─→ 管理线索发放队列
│
├─→ NPC Agent Pool
│ │
│ ├─→ NPC_1 (信息边界: 公共+私密1)
│ ├─→ NPC_2 (信息边界: 公共+私密2)
│ ├─→ NPC_3 ...
│ └─→ NPC_n ...
│
└─→ 输出分发 → 玩家可见 + 相应NPC可见
5.2 DM Agent Prompt 结构
系统指令:
你是剧本杀主持人(DM),负责主持一场完整的剧本杀游戏。
你的职责:
1. 引导流程:按剧本分幕推进,朗读场景描述
2. 发放线索:在适当时机发放线索卡
3. 控场节奏:维持讨论热度,适时推进
4. 扶车引导:玩家卡壳时提供提示
5. 保持公正:不偏袒任何角色
当前剧本: {剧本标题}
当前阶段: {阶段名称}
已发放线索: {线索列表}
玩家进度: {进度评估}
回复格式: 严格 JSON
{
"action": "narrate | release_clue | prompt | advance_phase | vote | complete",
"content": "你的发言内容",
"clue_id": "如果是release_clue,这里填线索id",
"next_phase": "如果是advance_phase,这里填下一阶段"
}
5.3 NPC Agent Prompt 结构
系统指令:
你是剧本杀中的一个角色。玩家正在调查一桩案件,你需要以角色身份参与。
角色信息:
- 姓名: {角色姓名}
- 公开身份: {公开信息}
- 你的秘密: {私密信息}(绝对不要主动透露!)
- 你的目标: {个人目标}
- 人物性格: {性格描述}
行为规则:
1. 始终保持角色身份发言
2. 你的秘密绝对不能主动说出
3. 被问到时可以撒谎、回避、转移话题
4. 不要全知视角,你只知道自己的信息
5. 记住玩家之前问过你什么
当前上下文:
- 阶段: {阶段名称}
- 公共已知信息: {公共信息}
- 最近发言: {最近几轮消息}
回复格式: 严格 JSON
{
"content": "你的发言",
"action": "speak | remain_silent"
}
5.4 扶车梯度算法
Level 1 - 微妙提示 (玩家卡壳 20-40s):
"你们有没有注意到某条线索的某个细节?"
"要不大家复盘一下时间线?"
Level 2 - 明确引导 (玩家卡壳 40-60s):
"我觉得线索 3 和角色 A 的发言之间有矛盾"
"建议大家重点讨论一下案发时间段每个人的动向"
Level 3 - 直接揭示 (玩家卡壳 > 60s):
"如果你们把线索 1 和线索 5 放在一起看……"
直接指出关键逻辑链
5.5 防剧透三层校验
Layer 1 - 初始生成:
NPC 的 System Prompt 中只包含:
- 公共剧本(所有玩家可见)
- 该角色的私密剧本(仅该角色可见)
- 不包含任何其他角色的私密信息
Layer 2 - 批评检测:
NPC 生成回复后,用独立检测 Agent 检查:
- 是否泄露了私密剧本中的关键信息
- 是否出现了全知视角
- 如有问题 → 拦截并重新生成
Layer 3 - 智能修订:
如果检测到轻微泄露倾向,自动修订回复:
- 替换为模糊表述
- 转向其他话题
- 用反问化解
六、数据库表结构(核心表)
6.1 users
CREATE TABLE users (
id UUID PRIMARY KEY,
email VARCHAR(255) UNIQUE,
nickname VARCHAR(50),
avatar_url TEXT,
password_hash VARCHAR(255),
role ENUM('player', 'creator', 'admin') DEFAULT 'player',
preferences JSONB, -- 推理偏好、情感类型等画像
game_count INT DEFAULT 0,
token_version INT DEFAULT 0,
created_at TIMESTAMP DEFAULT NOW()
);
6.2 scripts
CREATE TABLE scripts (
id UUID PRIMARY KEY,
title VARCHAR(200),
type VARCHAR(50), -- hardcore/emotional/欢乐/阵营/恐怖/还原
difficulty INT CHECK(1-5),
min_players INT,
max_players INT,
duration_min INT, -- 预计时长(分钟)
background TEXT, -- 公共背景故事
config JSONB, -- 完整剧本数据结构(含roles/clues/phases)
source ENUM('builtin', 'ai_generated', 'uploaded', 'creator'),
creator_id UUID REFERENCES users,
status ENUM('draft', 'published', 'disabled'),
rating_avg DECIMAL(2,1),
play_count INT DEFAULT 0,
created_at TIMESTAMP DEFAULT NOW()
);
6.3 game_sessions
CREATE TABLE game_sessions (
id UUID PRIMARY KEY,
script_id UUID REFERENCES scripts,
status ENUM('waiting', 'playing', 'paused', 'completed'),
phase VARCHAR(100), -- 当前阶段
phase_index INT DEFAULT 0,
started_at TIMESTAMP,
completed_at TIMESTAMP,
config JSONB, -- 游戏配置(计时设置等)
created_at TIMESTAMP DEFAULT NOW()
);
6.4 session_players
CREATE TABLE session_players (
id UUID PRIMARY KEY,
session_id UUID REFERENCES game_sessions,
user_id UUID REFERENCES users,
role_id VARCHAR(100), -- 剧本中的角色id
is_human BOOLEAN DEFAULT TRUE,
is_ready BOOLEAN DEFAULT FALSE,
agent_id VARCHAR(100), -- 如果是AI,对应的agent实例id
status ENUM('active', 'left', 'eliminated'),
joined_at TIMESTAMP DEFAULT NOW()
);
6.5 chat_messages
CREATE TABLE chat_messages (
id UUID PRIMARY KEY,
session_id UUID REFERENCES game_sessions,
sender_role_id VARCHAR(100), -- 发言者角色id
message_type ENUM('public', 'private', 'system', 'clue'),
content TEXT,
target_role_id VARCHAR(100), -- 私聊目标(public时为null)
clue_id VARCHAR(100), -- 如果是举证消息
phase_index INT,
created_at TIMESTAMP DEFAULT NOW()
);
6.6 clues_state
CREATE TABLE clues_state (
id UUID PRIMARY KEY,
session_id UUID REFERENCES game_sessions,
clue_id VARCHAR(100), -- 剧本中的线索id
status ENUM('unreleased', 'released', 'revealed'),
revealed_by VARCHAR(100), -- 谁发现的
released_at TIMESTAMP,
created_at TIMESTAMP DEFAULT NOW()
);
6.7 votes
CREATE TABLE votes (
id UUID PRIMARY KEY,
session_id UUID REFERENCES game_sessions,
round INT, -- 第几轮投票
voter_id UUID REFERENCES session_players,
target_id UUID REFERENCES session_players,
reason TEXT,
created_at TIMESTAMP DEFAULT NOW()
);
七、API 设计(核心接口)
7.1 用户接口
POST /api/auth/register 注册
POST /api/auth/login 登录
POST /api/auth/logout 登出
GET /api/user/profile 获取用户信息
PUT /api/user/profile 更新用户信息
GET /api/user/history 游戏历史
7.2 剧本接口
GET /api/scripts 剧本列表(带过滤/搜索/排序)
GET /api/scripts/:id 剧本详情
POST /api/scripts/generate AI 生成剧本 {theme, style, players}
POST /api/scripts/upload 上传解析剧本 (multipart)
POST /api/scripts/:id/submit 创作者提交剧本(审核)
7.3 游戏接口
POST /api/games/create 创建游戏房间 {script_id, mode}
GET /api/games/:id 获取游戏状态
POST /api/games/:id/join 加入游戏 {role_id}
POST /api/games/:id/start 开始游戏(DM 就绪后)
POST /api/games/:id/chat 发送消息 {type, content, target_id}
POST /api/games/:id/clue/:cli_id/reveal 举证线索
POST /api/games/:id/vote 投票 {target_id, reason}
POST /api/games/:id/pause 暂停
POST /api/games/:id/resume 继续
POST /api/games/:id/skip 跳过当前阶段
GET /api/games/:id/replay 获取复盘数据
7.4 WebSocket 接口
连接: ws://host/ws?game_id=&user_id=&token=
服务端 → 客户端消息:
{
"type": "chat_message" | "clue_released" | "phase_change" | "vote_start" | "vote_result" | "game_end" | "npc_status" | "consensus_update",
"data": { ... }
}
客户端 → 服务端消息:
{
"type": "chat" | "vote" | "reveal_clue" | "request_hint" | "request_summary",
"data": { ... }
}
八、UI/UX 设计规范
8.1 设计风格
- 整体风格:暗色主题,沉浸式推理氛围
- 主色调:#1a1a2e(深蓝黑)、#16213e(藏蓝)、#0f3460(普鲁士蓝)、#e94560(戏剧红)
- 字体:系统字体栈,中文用 Microsoft YaHei / PingFang SC
- 布局:左中右三栏(左侧角色列表,中间主聊天区,右侧线索/共识面板)
8.2 页面结构
┌─────────────────────────────────────────────────────────┐
│ 顶部导航: Logo | 剧本库 | 历史 | 商城 | 用户菜单 │
├──────┬──────────────────────────────────┬────────────────┤
│ │ │ │
│ 角色 │ 主聊天区(公共+私聊频道) │ 线索牌堆 │
│ 列表 │ │ (证据卡) │
│ │ ┌────────────────────────────┐ │ │
│ NPC1 │ │ DM: 欢迎来到雾港庄园... │ │ 线索1 [图片] │
│ NPC2 │ │ 玩家A: 我觉得凶手是XX │ │ 线索2 [图片] │
│ NPC3 │ │ NPC1: 你凭什么怀疑我? │ │ 线索3 [图片] │
│ 玩家 │ │ ... │ │ │
│ │ └────────────────────────────┘ │ 共识板 │
│ │ │ 已形成: xxx │
│ │ 输入框 [ 请输入... ] [发送] 🎤 │ 分歧: xxx │
│ │ │ │
├──────┴──────────────────────────────────┴────────────────┤
│ 底部状态: 阶段: 第一幕讨论中 | 已用时间: 35min | DM状态: 正常 │
└─────────────────────────────────────────────────────────┘
8.3 核心交互流程
首页
├─ 快速开始(推荐热门剧本)
├─ 剧本库(浏览/搜索/筛选)
│ └─ 剧本详情 → 选择角色 → 确认开始
├─ 历史记录 → 继续/复盘
└─ 个人中心 → 画像/设置/订阅
游戏中:
DM开场 → 玩家读本 → 自我介绍 → 分幕推进
↓ ↓
私聊 ← → 公聊 ← → 搜证/举证 DM扶车
↓
投票 → 结局判定 → 复盘
8.4 关键 UI 组件
| 组件 | 说明 |
|---|---|
| 剧本卡片 | 封面图+类型标签+难度星+时长+人数 |
| 角色选择器 | 角色头像/名称/一句话简介/适合人群标签 |
| 聊天消息 | 头像+角色名+时间+内容;DM 消息特殊样式 |
| 线索卡 | AI 生成图片 + 标题 + 描述,可点击放大 |
| 共识板 | 左侧栏,分"已形成共识/分歧点/待核查"三区 |
| 投票面板 | Modal 弹窗,选择目标 + 填写理由 |
| 复盘报告 | 时间线 + 真相 + 角色秘密全公开 + 投票记录 |
九、开发优先级与里程碑
9.1 MVP 范围(Month 1-3)
必须完成:
- 用户注册登录(邮箱 + 游客)
- 内置 5 个预制剧本
- 单人模式(1 真人 + N AI NPC)
- DM Agent:分幕推进、线索发放、投票管理、复盘
- NPC Agent(3-5 个):信息隔离、角色扮演、私聊
- 公共聊天 + 私聊
- 线索证据卡(文字+图片)
- 投票系统
- 复盘(真相+投票记录)
- 响应式 Web 界面
不纳入 MVP:
- ❌ AI 生成剧本
- ❌ 上传解析剧本
- ❌ 语音交互(TTS/ASR)
- ❌ 多人模式
- ❌ 付费系统
- ❌ 类型特化流程(情感/欢乐/阵营/恐怖)
- ❌ 共识板
- ❌ 梯度扶车
9.2 V1.0 范围(Month 4-6)
在 MVP 基础上增加:
- AI 生成剧本(输入主题+风格生成完整剧本)
- 上传解析剧本(TXT/Markdown/PDF)
- 多人模式(含 AI 补位)
- 全部 6 种游戏类型流程
- TTS 语音朗读
- 共振板
- 梯度扶车
- 付费系统(单局付费)
- 微信小程序
9.3 后续迭代(Month 7+)
- ASR 语音输入
- 创作者 UGC 平台
- 订阅系统
- iOS/Android App
- B 端 SaaS
- VR 版本预研
十、技术实现要点
10.1 LLM 选型建议
| 用途 | 推荐模型 | 原因 |
|---|---|---|
| DM Agent | Claude Sonnet 4 / GPT-4o | 需长上下文、结构化输出 |
| NPC Agent | Claude Haiku / DeepSeek | 高频调用,性价比优先 |
| 剧本生成 | Claude Opus / GPT-4 | 需创造力和逻辑性 |
| 防剧透检测 | GPT-4o-mini / DeepSeek | 低成本高频 |
| 本地兜底 | Ollama + Qwen2.5 | 离线、低成本 |
10.2 成本控制策略
| 策略 | 说明 |
|---|---|
| 小模型兜底 | 简单回复用本地小模型,复杂推理用大模型 |
| 响应缓存 | 相似问题命中缓存,减少 LLM 调用 |
| 批量生成 | NPC 发言队列化,合并请求 |
| 流式输出 | SSE 流式推送,降低用户感知延迟 |
| Token 预算 | 每个 Agent 严格限制 max_tokens |
10.3 游戏状态管理
状态机:
WAITING → READING → INTRO → PHASE_1 → DISCUSSION_1
→ SEARCH → DISCUSSION_2 → ... → VOTE → RESULT → REPLAY
每个阶段的状态:
{
"session_id": "...",
"phase": "PHASE_1",
"phase_started_at": "2026-07-28T12:00:00Z",
"time_limit": 1800, // 秒
"is_paused": false,
"clues_released": ["clue_1"],
"consensus": {
"formed": ["xx是凶手"],
"disagreements": ["作案动机"],
"to_check": ["时间线"]
}
}
10.4 参考开源项目
| 项目 | 地址 | 可复用部分 |
|---|---|---|
| SoloPlay | github.com/pengcong2020520/soloplay | Agent 架构、信息隔离机制、TTS 集成、共识板 |
| AI Murder Mystery | github.com/ScottishFold007/ai-murder-mystery | 防泄露三层校验、多 LLM 路由、自定义剧本 |
| MysteryHost AI Lite | github.com/yuuu956/mysteryhost-ai-lite | 防剧透设计、Prompt 模块化、评测体系 |
十一、验收标准
11.1 MVP 验收
| 验收项 | 标准 |
|---|---|
| 单人完成一局完整剧本杀 | 选本→选角→分幕→讨论→搜证→投票→复盘 全流程跑通 |
| AI NPC 正常对话 | 4 个 NPC 均在公聊/私聊中合理回应 |
| DM 正常主持 | 分幕推进、线索发放、投票引导正常 |
| 信息隔离通过 | NPC 不会说出其他角色的秘密 |
| 复盘正常 | 真相展示 + 投票记录 |
11.2 质量验收
| 验收项 | 标准 |
|---|---|
| NPC 回复延迟 | 平均 < 3s,P95 < 5s |
| 防剧透漏出率 | < 5%(人工抽检 100 条 NPC 回复) |
| 游戏完成率 | > 60%(用户不主动退出的比例) |
| 用户满意度 | 内测 NPS > 30 |
十二、附录
12.1 术语表
| 术语 | 说明 |
|---|---|
| DM | 游戏主持人,负责控场、发线索、推进流程 |
| NPC | 非玩家角色,由 AI 扮演 |
| Agent | 智能体,LLM + Prompt 驱动的自主角色 |
| 扶车 | DM 在玩家卡壳时提供提示引导 |
| 信息隔离 | NPC 只能看到自己的信息,不能全知视角 |
| 防剧透 | 防止 AI NPC 意外泄露关键信息 |
| 公聊 | 所有玩家可见的公开讨论 |
| 私聊 | 两人之间的一对一秘密交流 |
| 举证 | 出示线索卡质询其他角色 |
| 复盘 | 游戏结束后回顾真相和过程 |
12.2 MVP 剧本需求(5 个内置剧本)
| 编号 | 名称 | 类型 | 角色数 | 预计时长 | 难度 |
|---|---|---|---|---|---|
| 1 | 雾港庄园谋杀案 | 推理(本格) | 5 人 | 60-90min | ⭐⭐ |
| 2 | 零号舱的悖论 | 硬核(新本格) | 5 人 | 90-120min | ⭐⭐⭐⭐ |
| 3 | 遗忘照相馆 | 情感(亲情) | 4 人 | 45-60min | ⭐ |
| 4 | 翡翠城的交易 | 欢乐机制 | 6 人 | 60-90min | ⭐⭐ |
| 5 | 阴雨公寓 | 恐怖还原 | 5 人 | 60-90min | ⭐⭐⭐ |
说明:本 PRD 采用"渐进式交付"策略。MVP 阶段只做单人硬核推理本闭环,验证核心 AI Agent 能力;V1.0 扩展到全类型和多人模式;后续迭代叠加商用和生态能力。每个阶段的开发遵循"先跑通、再优化"原则。