Files
matrix-show/FEATURES.md
T
2026-06-09 10:36:45 +08:00

157 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Hermes Live Show — 功能清单
## 一、剧本管理
| 功能 | 说明 |
|------|------|
| 自然语言剧本导入 | 粘贴文本,由 AI 自动解析为结构化数据(角色、线索、阶段) |
| JSON 剧本导入 | 精确导入 JSON 格式的剧本 |
| 剧本解析预览 | 上传后在确认导入前预览解析结果 |
| 剧本列表 | 查看所有已导入剧本,显示角色数量、创建时间 |
| 剧本选中 | 选择当前使用的剧本(高亮标记) |
| 剧本删除 | 删除不需要的剧本 |
| 解析降级兜底 | AI 解析失败时,用正则 fallback 提取角色名 |
---
## 二、AI 角色系统
| 功能 | 说明 |
|------|------|
| 自动角色生成 | 根据剧本中的角色名批量创建角色 |
| 随机凶手分配 | 自动随机指定 1 个 KILLER,其余为 SUSPECT |
| SOUL 人格配置 | 每个角色生成 `SOUL.md`(性格、说话风格、秘密、动机等) |
| Hermes Profile 管理 | 为每个角色创建独立的 AI persona(文件系统存储) |
| 角色 SOUL 编辑 | 手动更新角色的 SOUL 内容和知识库 |
| 角色状态管理 | 支持 ALIVE / DEAD / INACTIVE 三种状态切换 |
| 角色删除 | 删除角色及其 Hermes profile |
| 手动触发角色发言 | 输入提示词让指定角色即时回应 |
---
## 三、8 阶段游戏流程
```
intro → round1_speak → round1_search → round2_speak → round2_search → final_discuss → voting → reveal
```
| 阶段 | 说明 |
|------|------|
| intro | 开场介绍 |
| round1_speak | 第一轮发言 |
| round1_search | 第一轮搜证 |
| round2_speak | 第二轮发言 |
| round2_search | 第二轮搜证 |
| final_discuss | 最终讨论 |
| voting | 投票环节 |
| reveal | 揭晓真凶 |
- 前进 / 后退阶段
- 进度条百分比实时显示
---
## 四、AI 自动对话
| 功能 | 说明 |
|------|------|
| 自动轮流发言 | AI 角色按顺序依次发言,每人 2-4 句中文 |
| 上下文感知 | 基于最近 20 条消息构建上下文 |
| 可配置间隔 | 发言间隔默认 8 秒,可自定义 |
| 可配置轮数 | 支持多轮自动发言 |
| 随时启停 | 主播可随时开始/停止自动对话 |
| 自动投票 | 触发后所有 AI 角色根据讨论摘要投票选出凶手 |
| 投票 JSON 输出 | 每个角色返回 `{"target": "角色名", "reason": "理由"}` |
| 投票容错 | 解析失败时随机投给他人 |
---
## 五、主播控制台(ControlView)
| 功能 | 说明 |
|------|------|
| 阶段控制器 | 按钮式阶段切换、开始/暂停/恢复/重置游戏 |
| 手动注入消息 | 选择角色 → 输入提示词 → AI 即时回应 |
| 进度条 | 游戏进度可视化 |
| 角色列表面板 | 点击角色弹出详情弹窗(RoleModal) |
| 线索面板 | 查看所有线索及解锁状态 |
| 一键生成 Profiles | 为所有角色创建 AI 人格 |
| Socket 连接状态 | WebSocket 连接状态指示(绿点/红点) |
| 导航 | 可跳转到观众视角和剧本管理 |
---
## 六、观众视角(LiveView)
| 功能 | 说明 |
|------|------|
| 实时聊天日志 | 查看所有角色的实时发言 |
| LIVE 标识 | 游戏进行中有脉冲动画 LIVE 标识 |
| 阶段显示 | 当前阶段的中文标签(如"💬 第一轮发言") |
| 登场角色列表 | 侧边栏展示角色名及首字母头像 |
| 已死亡角色灰显 | DEAD 状态角色降低透明度 |
| 已解锁线索 | 实时展示已解锁的线索 |
| 待解锁线索计数 | 提示剩余未解锁线索数量 |
| 进度条 | 游戏整体进度 |
---
## 七、线索系统
| 功能 | 说明 |
|------|------|
| 5 种线索类型 | PHYSICAL(物证)、TESTIMONY(证词)、MOTIVE(动机)、ALIBI(不在场证明)、FORENSIC(法医) |
| 线索归属 | 可指定线索属于某个角色 |
| 按阶段分配 | 线索绑定到 round1_search 或 round2_search |
| 3 种可见性 | ALL(全员可见)、SPECIFIC(指定角色可见)、HIDDEN(隐藏) |
| 线索解锁 | 通过 Socket 实时解锁并广播 |
| 解锁记录 | 记录谁、何时解锁了线索 |
---
## 八、投票系统
| 功能 | 说明 |
|------|------|
| 手动投票 | API 创建投票记录 |
| AI 自动投票 | 所有 AI 角色自动投票(带理由) |
| 多轮投票 | 支持 round_number 区分轮次 |
| 投票实时广播 | Socket 广播 `vote_cast` 和 `voting_results` 事件 |
| 投票查询 | 按轮次查询投票结果 |
---
## 九、实时通信(Socket.IO)
| 事件 | 方向 | 用途 |
|------|------|------|
| `new_message` | S→C | 新消息广播 |
| `state_change` | S→C | 游戏阶段/进度变更 |
| `speaker_change` | S→C | 当前发言者变更 |
| `vote_cast` | S→C | 投票投出 |
| `voting_results` | S→C | 投票结果汇总 |
| `clue_unlocked` | S→C | 线索解锁通知 |
| `system` | S→C | 系统消息 |
| `send_message` | C→S | 发送消息 |
| `dm_command` | C→S | 主播命令(阶段切换/自动对话/触发投票) |
| `request_state` | C→S | 请求当前游戏状态 |
---
## 十、AI 退化容错
| 场景 | 处理方式 |
|------|----------|
| Hermes 超时 / 连接失败 | 显示「AI引擎暂时不可用,请稍后再试」 |
| Profile 列表获取失败 | 回退到上次成功获取的列表 |
| JSON 解析失败 | 自动 fallback 到正则解析 |
| 投票目标无效 | 随机选择他人投票 |
---
## 十一、部署
- Docker Compose 一键启动 4 个服务(Postgres + Hermes + Backend + Frontend)
- 开发环境热重载(volume 挂载)
- 健康检查(Postgres pg_isready / Hermes /models 端点)