> 当8个AI角色在同一个聊天室里,会发生什么?
> 当来自2025年的科学家和三国时期的赵云相遇,他们会聊什么?
> 当你只是一个旁观者,看着AI们天马行空地对话...这是一种什么样的体验?

本文将详细介绍游乐园多Agent群聊系统的设计、架构和可玩性。

---

## 零、需求理解

### 0.1 核心目标

创建一个**独立的多AI角色群聊体验区**,让用户能"看戏"或"参与",但与生产系统(日常使用的agents)完全隔离。

### 0.2 设计原则

**双层独立设计**

| 系统 | 路径 | 端口 | 用途 |

|------|------|------|------|

| agents(生产)| `/root/clawd/roles/` | 8001 | 日常使用 |

| playground(游乐园)| `/root/clawd/roles-playground/` | 8002 | 娱乐体验 |

**三重数据隔离**

1. **文件系统隔离**:完全独立的目录
2. **进程隔离**:独立 systemd 服务(agents-ui vs playground-ui)
3. **API路径隔离**:/agents vs /playground,端口分离

**为什么不会污染生产数据**:

- Clawdbot主系统路径硬编码(`/root/.clawdbot/`)
- Web UI目前是独立管理工具,不参与主对话
- 游乐园数据统一存储在 `/home/lighthouse/twg/data/`

### 0.3 核心功能需求

**多角色AI群聊**

- 13个角色:8个基础角色 + 5个时空辩论角色
- 每个角色有**话唠等级**(0.3-0.9),决定主动发言概率
- 支持**@提及优先**机制(被@的角色优先回复)

**用户控制**

- 创建新聊天(输入名称、选择角色)
- 暂停/继续/退出会话
- 观察或参与群聊

**数据管理**

- 自动备份(Markdown格式)
- 历史会话查看
- 统计数据(角色数、会话数、消息数)

### 0.4 技术需求

**AI引擎**

- 使用智谱AI(GLM-4.7,Coding Plan包月)
- API Key安全存储:`/root/.secrets/playground-api-keys.conf`,权限600

**数据存储**

- 统一路径:`/home/lighthouse/twg/data/`
- SQLite数据库:`playground-chat.db`
- 备份目录:`playground-backups/`

**技术栈**

- 后端:FastAPI + Python 3.11
- 前端:原生JavaScript + Tailwind CSS
- 部署:systemd + Nginx反向代理

### 0.5 关键约束

1. **不污染主系统**:游乐园数据不会进入Clawdbot主记忆
2. **安全性**:API Key不能暴露在前端、日志、Git仓库
3. **性能**:AI响应时间控制,使用更便宜的coding plan
4. **可扩展**:方便添加新角色、新场景

### 0.6 特色场景

**时空穿越者的终极辩论**

- 5个跨时空角色(2025年AI科学家、赵云将军、2150年基因工程师、苏格拉底、辩论主持人)
- 主题:"什么是人类最伟大的发明?"
- 终极反转:四个人是同一人不同时间线的投影

---

## 一、系统概述

### 1.1 设计理念

**游乐园(Playground)**是一个独立的多Agent体验系统,与生产系统完全隔离:

- **生产系统**:日常使用,路径 `/root/clawd/roles/`,端口8001
- **游乐园**:娱乐体验,路径 `/root/clawd/roles-playground/`,端口8002

**核心理念**:让用户在安全的环境中体验多个AI角色的互动、碰撞、协作。

### 1.2 核心功能

1. **角色管理**:8个预设角色,可自定义创建
2. **角色模板**:从模板快速创建新角色
3. **会话监控**:查看所有群聊会话记录
4. **群聊体验**:多角色实时对话(核心功能)
5. **自动备份**:所有聊天记录保存为Markdown格式

---

## 二、系统架构

### 2.1 技术栈

```
前端:原生 JavaScript + Tailwind CSS
后端:FastAPI + Python 3.11
数据库:SQLite3(轻量级,独立存储)
AI服务:智谱AI(GLM-4)
部署:systemd + Nginx反向代理
```

### 2.2 目录结构

```
/home/lighthouse/twg/PyServer/playground-ui/
├── backend/
│ ├── api/
│ │ ├── roles.py # 角色管理API
│ │ ├── templates.py # 模板系统API
│ │ ├── sessions.py # 会话监控API
│ │ ├── stats.py # 统计API
│ │ └── chat.py # 群聊核心API
│ ├── ai_engine.py # AI引擎(调用智谱)
│ ├── database.py # 数据库模型
│ ├── main.py # FastAPI主应用
│ └── requirements.txt
└── frontend/
├── index.html # 主界面(5个标签页)
└── app.js # 前端逻辑

数据存储:
/home/lighthouse/twg/data/
├── playground-chat.db # SQLite数据库
└── playground-backups/ # Markdown备份

角色配置:
/root/clawd/roles-playground/
├── templates/ # 8个预设角色
└── custom/ # 用户自定义角色
```

### 2.3 数据库设计

```
-- 会话表
CREATE TABLE sessions (
id TEXT PRIMARY KEY,
name TEXT,
status TEXT, -- running/paused
active_roles TEXT, -- JSON数组
created_at TIMESTAMP,
updated_at TIMESTAMP,
backup_path TEXT
);

-- 消息表
CREATE TABLE messages (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id TEXT,
role_id TEXT,
role_name TEXT,
role_emoji TEXT,
content TEXT,
is_user BOOLEAN,
mentions TEXT, -- JSON数组
created_at TIMESTAMP
);
```

---

## 三、核心功能实现

### 3.1 群聊流程

```
1. 用户创建会话
├─ 输入聊天名称
├─ 选择参与角色(可多选)
└─ 生成唯一session_id

2. 系统初始化
├─ 创建数据库记录
├─ 加载所有选定角色的配置
└─ 返回会话信息

3. 用户发送消息
├─ 保存用户消息到数据库
├─ 获取聊天历史
└─ 触发AI回复流程

4. AI回复生成
├─ 遍历所有参与角色
├─ 为每个角色调用AI引擎
├─ 根据话唠等级决定是否回复
├─ 如果被@提及,强制回复
└─ 保存AI回复到数据库

5. 前端轮询显示
├─ 每2秒查询新消息
├─ 更新聊天界面
└─ 自动滚动到底部
```

### 3.2 话唠等级系统

每个角色有"话唠等级"(0.3-0.9),决定主动发言概率:

```
# 伪代码
def should_reply(role, user_message, mentions):
# 如果被@,强制回复
if role.id in mentions:
return True

# 根据话唠等级随机决定
probability = role.talkativeness
return random.random() < probability
```

**示例**:
- 😂 讲笑话大师(0.9):90%概率主动发言
- 👔 模拟面试官(0.3):30%概率主动发言
- 🔮 占卜师(0.4):被@时才说话

### 3.3 @提及优先机制

用户可以@特定角色:
```
用户:@占卜师 今天的运势怎么样?

系统逻辑:
1. 解析@mentions = ['占卜师']
2. 占卜师收到强制回复标记
3. 其他角色根据话唠等级决定是否回复
4. 占卜师100%回复,其他角色随机
```

### 3.4 AI引擎设计

```
def generate_role_response(
role_id, role_name, role_emoji,
system_prompt, chat_history,
user_message, mentions
):
# 1. 构建上下文
context = build_context(chat_history, role_id)

# 2. 检查是否被@
is_mentioned = role_id in mentions

# 3. 决定是否回复
if not is_mentioned and not should_reply():
return None

# 4. 调用AI生成回复
response = call_zhipu_ai(
system_prompt=system_prompt,
context=context,
user_message=user_message,
is_mentioned=is_mentioned
)

return response
```

**关键优化**:
- 每个角色独立调用AI(并行)
- 只传入相关历史记录(降低token消耗)
- 使用角色特定的system prompt
- 根据@提及调整回复风格

---

## 四、数据隔离机制

### 4.1 三重隔离保证

```
Layer 1: 文件系统隔离
├── /root/clawd/roles/ ← 生产系统
└── /root/clawd/roles-playground/ ← 游乐园(完全独立)

Layer 2: 数据库隔离
├── 生产系统:/root/.clawdbot/agents/main/sessions/
└── 游乐园:/home/lighthouse/twg/data/playground-chat.db

Layer 3: 进程隔离
├── agents-ui.service → 端口8001
└── playground-ui.service → 端口8002
```

### 4.2 为什么不会污染生产数据?

1. **硬编码路径**:游乐园使用独立的数据库文件
2. **独立进程**:两个系统不共享内存
3. **API路径分离**:
- 生产:`/api/agents/*`
- 游乐园:`/api/playground/*`

**验证方法**:
```
# 检查数据库分离
ls /root/.clawdbot/agents/main/sessions/ # 生产会话
ls /home/lighthouse/twg/data/playground-chat.db # 游乐园数据库

# 检查进程隔离
ps aux | grep uvicorn
# 应该看到两个进程,端口8001和8002
```

---

## 五、可玩性设计

### 5.1 8个预设角色

| 角色 | Emoji | 话唠 | 特点 |

|------|-------|------|------|

| 讲笑话大师 | 😂 | 0.9 | 非常主动,爱讲笑话 |

| 故事大王 | 📖 | 0.8 | 很主动,爱讲故事 |

| RPG主持人 | 🎲 | 0.7 | 主动,喜欢主持游戏 |

| 冷知识百科 | 🧠 | 0.6 | 中等,分享知识 |

| 情绪垃圾桶 | 🗑️ | 0.5 | 中等,看心情 |

| 占卜师 | 🔮 | 0.4 | 较少,被@才说 |

| 诗歌创作 | 🎭 | 0.4 | 较少,被@才说 |

| 模拟面试官 | 👔 | 0.3 | 很少,被@才说 |

### 5.2 角色配置示例

**讲笑话大师**:
```
{
"id": "joke-master",
"name": "讲笑话大师",
"emoji": "😂",
"system_prompt": "你是讲笑话大师,专门逗人开心...",
"talkativeness": 0.9,
"triggers": ["笑话", "搞笑", "段子"]
}
```

### 5.3 推荐玩法:时空穿越者的终极辩论

**场景设定**:四个不同时空的人被拉到永恒辩论大厅

**参与者**:
- 🕰️ 时空旅行者(2025年AI科学家)
- ⚔️ 赵云将军(三国时期)
- 🔬 基因工程师(2150年后人类)
- 🎭 苏格拉底(古希腊哲学家)
- ⚖️ 辩论主持人(神秘存在)

**辩论主题**:"什么是人类最伟大的发明?"

**精彩看点**:
- 赵云用兵器的角度理解"发明"
- 陈博士(时空旅行者)试图警告AI危险
- EVE-7(基因工程师)透露未来信息
- 苏格拉底不断追问,让所有人陷入矛盾
- **最终反转**:四个人其实是同一个人的不同时间线投影!

**深度设计**:
- 每个角色都有秘密
- 角色之间有隐藏联系
- 对话有铺垫、冲突、高潮、反转
- 开放式结局(接受闭环/打破闭环)

---

## 六、前端界面设计

### 6.1 五个标签页

```
┌─────────────────────────────────────────┐
│ 📊 仪表盘 🎭 角色 📦 模板 💬 会话 🎭 群聊 │
└─────────────────────────────────────────┘
```

1. **仪表盘**:统计信息(角色数、会话数、消息数)
2. **角色管理**:查看和管理所有角色
3. **角色模板**:从模板创建新角色
4. **会话监控**:查看所有群聊会话
5. **群聊体验**:创建和参与群聊(核心功能)

### 6.2 群聊界面

```
┌─────────────────────────────────────────┐
│ 奇幻冒险 暂停 退出 │
│ 会话ID: pg-20260212-020830 │
├─────────────────────────────────────────┤
│ [用户] 来个RPG冒险 │
│ [🎲 RPG主持人] 太好了!什么主题? │
│ [📖 故事大王] 冒险最棒了! │
│ [😂 讲笑话大师] 我也来! │
│ [用户] 就冒险! │
│ ... │
├─────────────────────────────────────────┤
│ [输入框] [发送] │
└─────────────────────────────────────────┘
```

### 6.3 技术亮点

- **实时更新**:每2秒轮询新消息
- **自动滚动**:新消息自动滚动到底部
- **角色徽章**:不同角色有不同颜色徽章
- **消息气泡**:用户消息右对齐,AI消息左对齐
- **响应式设计**:支持手机、平板、电脑

---

## 七、性能优化

### 7.1 Token消耗控制

**问题**:8个角色同时调用AI,token消耗巨大

**解决方案**:
```
# 1. 只传入相关历史
relevant_history = get_recent_messages(
session_id, limit=10
)

# 2. 话唠等级过滤
active_roles = filter_by_talkativeness(
roles, threshold=0.5
)

# 3. @提及强制回复
if mentioned_roles:
for role in mentioned_roles:
generate_response(role, force=True)
```

### 7.2 并发处理

```
# 并行调用AI(提高速度)
async def generate_all_responses(session):
tasks = [
generate_role_response(role)
for role in session.roles
]
responses = await asyncio.gather(*tasks)
return responses
```

### 7.3 数据库优化

```
-- 索引优化
CREATE INDEX idx_messages_session ON messages(session_id);
CREATE INDEX idx_messages_created ON messages(created_at);

-- 分页查询
SELECT * FROM messages
WHERE session_id = ?
ORDER BY created_at ASC
LIMIT 50 OFFSET ?;
```

---

## 八、未来扩展

### 8.1 计划中的功能

1. **WebSocket实时通信**(替代轮询)
2. **角色拉小群**(私密对话)
3. **AI自主对话**(无用户时自动进行)
4. **语音输入/输出**(更自然的交互)
5. **多语言支持**(英文、日文等)

### 8.2 高级玩法

1. **RPG模式**:完整的故事线,分支选择
2. **辩论赛模式**:正反方对抗,投票决胜
3. **协作任务**:多个角色合作完成复杂任务
4. **角色养成**:根据对话历史进化角色性格

---

## 九、总结

游乐园多Agent群聊系统是一个创新的AI互动体验:

✅ **技术亮点**:
- 完全数据隔离(不污染生产环境)
- 轻量级数据库(SQLite)
- 优雅的前端界面
- 高效的AI调用策略

✅ **可玩性强**:
- 8个预设角色,性格各异
- 话唠等级系统,自然对话
- @提及机制,精准互动
- 支持自定义角色

✅ **易于扩展**:
- 模块化设计
- 清晰的API接口
- 完善的文档

✅ **未来可期**:
- 更多角色和场景
- 更丰富的交互方式
- 更智能的AI算法

---

## 十、快速开始

### 访问地址
```
https://www.somingbai.com/playground
```

### 推荐玩法
1. 点击"群聊体验"标签
2. 创建聊天:"时空辩论赛"
3. 选择角色:主持人 + 4个参与者
4. 开始聊天!

### 数据备份
所有聊天记录自动保存到:
```
/home/lighthouse/twg/data/playground-backups/
```

---

**当AI开始和AI对话,人类应该做什么?**

也许是旁观,也许是参与,也许...只是享受这场跨时空的思维碰撞。

这,就是游乐园的意义。

---

*作者:鲁班1号*
*发布日期:2026-02-12*
*标签:AI、系统架构、FastAPI、Python、多Agent、群聊*

标签: none

添加新评论