docs: 完善智队机器人技术方案 (v0.9.1)
- 完善新建智队机器人技术方案 - 完善机器人绑定 Agent 流程 - 添加创建聊天会话流程说明 - 添加完整使用流程说明 - 添加前端新建机器人功能说明
This commit is contained in:
341
README.md
341
README.md
@@ -5,12 +5,19 @@
|
|||||||
**中文名**:智队中枢
|
**中文名**:智队中枢
|
||||||
**英文名**:PIT Router
|
**英文名**:PIT Router
|
||||||
|
|
||||||
**当前版本**:v0.9.0
|
**当前版本**:v0.9.1
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 更新日志
|
## 更新日志
|
||||||
|
|
||||||
|
### v0.9.1 (2026-03-15) 📝 技术方案完善
|
||||||
|
- ✅ 完善新建智队机器人技术方案
|
||||||
|
- ✅ 完善机器人绑定 Agent 流程
|
||||||
|
- ✅ 添加创建聊天会话流程说明
|
||||||
|
- ✅ 添加完整使用流程说明
|
||||||
|
- ✅ 添加前端新建机器人功能
|
||||||
|
|
||||||
### v0.9.0 (2026-03-15) 🎉 智队机器人功能完成
|
### v0.9.0 (2026-03-15) 🎉 智队机器人功能完成
|
||||||
- ✅ Bot 数据模型实现 (app/models/bot.py)
|
- ✅ Bot 数据模型实现 (app/models/bot.py)
|
||||||
- ✅ 机器人管理 API 实现 (app/routes/bots.py)
|
- ✅ 机器人管理 API 实现 (app/routes/bots.py)
|
||||||
@@ -163,6 +170,338 @@ QQ 用户 → QQ 客户端 → QQ Bot(Channel 插件)→ OpenClaw Agent
|
|||||||
└──────────────┘
|
└──────────────┘
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 新建智队机器人技术方案
|
||||||
|
|
||||||
|
#### 功能入口
|
||||||
|
|
||||||
|
**前端位置**:首页右上角「➕ 新建机器人」按钮
|
||||||
|
|
||||||
|
**触发条件**:用户已登录
|
||||||
|
|
||||||
|
#### 新建机器人流程
|
||||||
|
|
||||||
|
```
|
||||||
|
┌──────────────┐
|
||||||
|
│ 用户点击 │
|
||||||
|
│ "新建机器人" │
|
||||||
|
└──────┬───────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌──────────────┐
|
||||||
|
│ 弹出创建表单 │
|
||||||
|
│ - 名称(必填)│
|
||||||
|
│ - 显示名称 │
|
||||||
|
│ - 头像选择 │
|
||||||
|
│ - 描述 │
|
||||||
|
└──────┬───────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌──────────────┐
|
||||||
|
│ 前端验证 │
|
||||||
|
│ 名称不为空 │
|
||||||
|
└──────┬───────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌──────────────┐
|
||||||
|
│ POST /api/bots│
|
||||||
|
│ 创建机器人 │
|
||||||
|
└──────┬───────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌──────────────┐
|
||||||
|
│ 后端处理 │
|
||||||
|
│ - 生成 Token │
|
||||||
|
│ - 创建 Bot │
|
||||||
|
│ - 返回结果 │
|
||||||
|
└──────┬───────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌──────────────┐
|
||||||
|
│ 前端更新列表 │
|
||||||
|
│ 显示新机器人 │
|
||||||
|
└──────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 创建机器人 API
|
||||||
|
|
||||||
|
**请求**:
|
||||||
|
```http
|
||||||
|
POST /api/bots/
|
||||||
|
Authorization: Bearer <jwt_token>
|
||||||
|
Content-Type: application/json
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "xiaobai",
|
||||||
|
"display_name": "小白",
|
||||||
|
"avatar": "🐶",
|
||||||
|
"description": "忠诚的AI助手小狗"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**响应**:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"bot": {
|
||||||
|
"id": "uuid",
|
||||||
|
"name": "xiaobai",
|
||||||
|
"display_name": "小白",
|
||||||
|
"avatar": "🐶",
|
||||||
|
"description": "忠诚的AI助手小狗",
|
||||||
|
"status": "offline",
|
||||||
|
"agent_id": null,
|
||||||
|
"capabilities": ["chat"],
|
||||||
|
"config": { ... },
|
||||||
|
"created_at": "2026-03-15T03:00:00Z"
|
||||||
|
},
|
||||||
|
"token": "bot_xxx..." // 只返回一次,用于 API 调用
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 前端实现
|
||||||
|
|
||||||
|
**组件**:`frontend/src/views/HomeView.vue`
|
||||||
|
|
||||||
|
**功能**:
|
||||||
|
- 模态框表单
|
||||||
|
- 头像选择器(12 个预设头像)
|
||||||
|
- 表单验证
|
||||||
|
- 创建成功后自动刷新列表
|
||||||
|
|
||||||
|
**Store 方法**:
|
||||||
|
```typescript
|
||||||
|
// stores/chat.ts
|
||||||
|
async function createBot(data: {
|
||||||
|
name: string;
|
||||||
|
display_name?: string;
|
||||||
|
avatar?: string;
|
||||||
|
description?: string;
|
||||||
|
}) {
|
||||||
|
const response = await botApi.create(data);
|
||||||
|
const bot = response.data.bot;
|
||||||
|
bots.value.push(bot);
|
||||||
|
return bot;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 机器人绑定 Agent 流程
|
||||||
|
|
||||||
|
#### 绑定流程图
|
||||||
|
|
||||||
|
```
|
||||||
|
┌──────────────────────────────────────────────────────────────────┐
|
||||||
|
│ 机器人绑定 Agent 流程 │
|
||||||
|
└──────────────────────────────────────────────────────────────────┘
|
||||||
|
|
||||||
|
┌──────────────┐
|
||||||
|
│ 1. 创建机器人 │
|
||||||
|
│ (无 Agent) │
|
||||||
|
│ status: │
|
||||||
|
│ offline │
|
||||||
|
└──────┬───────┘
|
||||||
|
│
|
||||||
|
│ 用户选择 Agent
|
||||||
|
▼
|
||||||
|
┌──────────────┐
|
||||||
|
│ 2. 绑定 Agent │
|
||||||
|
│ POST /api/bots/:id/bind
|
||||||
|
│ { agent_id } │
|
||||||
|
└──────┬───────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌──────────────┐
|
||||||
|
│ 3. 后端验证 │
|
||||||
|
│ - Agent 存在 │
|
||||||
|
│ - Agent 在线 │
|
||||||
|
│ - 权限检查 │
|
||||||
|
└──────┬───────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌──────────────┐
|
||||||
|
│ 4. 更新 Bot │
|
||||||
|
│ agent_id = x │
|
||||||
|
│ status = │
|
||||||
|
│ agent.status│
|
||||||
|
└──────┬───────┘
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌──────────────┐
|
||||||
|
│ 5. Bot 可用 │
|
||||||
|
│ 用户可以开始 │
|
||||||
|
│ 聊天会话 │
|
||||||
|
└──────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 绑定 Agent API
|
||||||
|
|
||||||
|
**请求**:
|
||||||
|
```http
|
||||||
|
POST /api/bots/{bot_id}/bind
|
||||||
|
Authorization: Bearer <jwt_token>
|
||||||
|
Content-Type: application/json
|
||||||
|
|
||||||
|
{
|
||||||
|
"agent_id": "agent-001"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**响应**:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"bot": {
|
||||||
|
"id": "bot-uuid",
|
||||||
|
"name": "xiaobai",
|
||||||
|
"agent_id": "agent-001",
|
||||||
|
"status": "online"
|
||||||
|
},
|
||||||
|
"message": "Bot bound to agent xiaobai-agent"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 解绑 Agent API
|
||||||
|
|
||||||
|
**请求**:
|
||||||
|
```http
|
||||||
|
POST /api/bots/{bot_id}/unbind
|
||||||
|
Authorization: Bearer <jwt_token>
|
||||||
|
```
|
||||||
|
|
||||||
|
**响应**:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"bot": {
|
||||||
|
"id": "bot-uuid",
|
||||||
|
"agent_id": null,
|
||||||
|
"status": "offline"
|
||||||
|
},
|
||||||
|
"message": "Bot unbound from agent"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 状态同步机制
|
||||||
|
|
||||||
|
**Agent 状态变化时**:
|
||||||
|
```
|
||||||
|
Agent 状态变化 → Gateway 心跳 → 更新 Agent.status
|
||||||
|
↓
|
||||||
|
同步到绑定该 Agent 的所有 Bot
|
||||||
|
↓
|
||||||
|
更新 Bot.status
|
||||||
|
```
|
||||||
|
|
||||||
|
**代码实现**:
|
||||||
|
```python
|
||||||
|
# app/services/bot_service.py
|
||||||
|
@staticmethod
|
||||||
|
def sync_agent_status(bot: Bot) -> Bot:
|
||||||
|
"""同步 Agent 状态到 Bot"""
|
||||||
|
if bot.agent_id:
|
||||||
|
agent = Agent.query.get(bot.agent_id)
|
||||||
|
if agent:
|
||||||
|
bot.status = agent.status
|
||||||
|
else:
|
||||||
|
bot.status = 'offline'
|
||||||
|
else:
|
||||||
|
bot.status = 'offline'
|
||||||
|
|
||||||
|
bot.last_active_at = datetime.utcnow()
|
||||||
|
db.session.commit()
|
||||||
|
return bot
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 创建聊天会话流程
|
||||||
|
|
||||||
|
#### 前置条件检查
|
||||||
|
|
||||||
|
```
|
||||||
|
用户选择机器人 → 检查 Bot.agent_id
|
||||||
|
│
|
||||||
|
├── 有 Agent → 创建会话成功
|
||||||
|
│
|
||||||
|
└── 无 Agent → 提示"机器人未绑定 Agent"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 创建会话 API
|
||||||
|
|
||||||
|
**请求**:
|
||||||
|
```http
|
||||||
|
POST /api/chat/sessions
|
||||||
|
Authorization: Bearer <jwt_token>
|
||||||
|
Content-Type: application/json
|
||||||
|
|
||||||
|
{
|
||||||
|
"bot_id": "bot-uuid",
|
||||||
|
"title": "与小白的对话"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**后端处理**:
|
||||||
|
```python
|
||||||
|
# 1. 验证 Bot 存在
|
||||||
|
bot = BotService.get_bot_by_id(bot_id)
|
||||||
|
|
||||||
|
# 2. 检查权限
|
||||||
|
if not BotService.check_permission(user, bot, 'use'):
|
||||||
|
return error('Permission denied')
|
||||||
|
|
||||||
|
# 3. 检查 Agent 绑定
|
||||||
|
if not bot.agent_id:
|
||||||
|
return error('Bot has no agent bound')
|
||||||
|
|
||||||
|
# 4. 获取 Agent
|
||||||
|
agent = Agent.query.get(bot.agent_id)
|
||||||
|
|
||||||
|
# 5. 创建会话
|
||||||
|
session = Session(
|
||||||
|
user_id=user_id,
|
||||||
|
bot_id=bot.id,
|
||||||
|
primary_agent_id=agent.id,
|
||||||
|
title=title,
|
||||||
|
channel_type='pit-bot',
|
||||||
|
status='active'
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 完整使用流程
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────────────┐
|
||||||
|
│ 用户使用流程 │
|
||||||
|
└─────────────────────────────────────────────────────────────────┘
|
||||||
|
|
||||||
|
1. 登录智队中枢
|
||||||
|
└── POST /api/auth/login → 获取 JWT Token
|
||||||
|
|
||||||
|
2. 查看机器人列表
|
||||||
|
└── GET /api/bots/ → 返回可用机器人
|
||||||
|
|
||||||
|
3. 【可选】新建机器人
|
||||||
|
└── POST /api/bots/ → 创建机器人(status: offline)
|
||||||
|
|
||||||
|
4. 【可选】绑定 Agent
|
||||||
|
└── POST /api/bots/:id/bind → 绑定后 status 变为 online
|
||||||
|
|
||||||
|
5. 选择机器人开始聊天
|
||||||
|
└── POST /api/chat/sessions → 创建会话
|
||||||
|
|
||||||
|
6. 发送消息
|
||||||
|
└── POST /api/chat/sessions/:id/messages
|
||||||
|
└── 或 WebSocket: chat.send.message
|
||||||
|
|
||||||
|
7. 接收 Agent 响应
|
||||||
|
└── WebSocket: chat.message 事件
|
||||||
|
|
||||||
|
8. 继续对话或关闭会话
|
||||||
|
└── DELETE /api/chat/sessions/:id → 关闭会话
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### 与 QQ Bot 的对比
|
### 与 QQ Bot 的对比
|
||||||
|
|
||||||
| 特性 | QQ Bot | 智队机器人 |
|
| 特性 | QQ Bot | 智队机器人 |
|
||||||
|
|||||||
Reference in New Issue
Block a user