feat: init project with PRD document
This commit is contained in:
+777
@@ -0,0 +1,777 @@
|
||||
# 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 |
|
||||
|
||||
#### 剧本数据结构
|
||||
|
||||
```json
|
||||
{
|
||||
"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
|
||||
|
||||
```sql
|
||||
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
|
||||
|
||||
```sql
|
||||
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
|
||||
|
||||
```sql
|
||||
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
|
||||
|
||||
```sql
|
||||
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
|
||||
|
||||
```sql
|
||||
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
|
||||
|
||||
```sql
|
||||
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
|
||||
|
||||
```sql
|
||||
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 扩展到全类型和多人模式;后续迭代叠加商用和生态能力。每个阶段的开发遵循"先跑通、再优化"原则。
|
||||
Reference in New Issue
Block a user