agent-Specialization/docs/multi_agent_mode/01_overview.md

228 lines
9.0 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.

# 多智能体模式总体架构
> 文档状态:设计草案
> 适用范围宿主机模式host mode不覆盖 docker/web 模式
> 隔离原则:与现有对话系统完全隔离,复用底层能力但上层独立
---
## 1. 设计目标
在 Astrion 中引入一个实验性的「多智能体模式」:
- 主智能体固定扮演 **Team Leader**,负责任务拆解、调度、协调、回答子智能体提问。
- 支持预置角色与自定义角色,每个角色可以有多个实例(`RoleName_1`、`RoleName_2`)。
- 子智能体之间、子智能体与主智能体之间可以双向通信。
- 所有通信遵循统一的消息格式与路由规则。
- 与现有单智能体模式完全隔离,不影响现有代码与用户体验。
---
## 2. 核心设计原则
### 2.1 完全隔离
- 数据目录隔离:`~/.astrion/astrion/host/mutiagents/`
- 页面隔离:新页面 `/multiagent/new`
- 入口隔离:登录页单独按钮「多智能体模式 beta」
- 代码隔离:所有新增代码放在 `modules/multi_agent/`、`docs/multi_agent_mode/`、`static/src/views/MultiAgentView.vue` 等独立位置
- 现有文件如需改造,优先复制一份再改,不直接修改
### 2.2 能复用则复用
- 模型调用:复用 `DeepSeekClient`
- 工具执行链路:复用 `WebTerminal.handle_tool_call` 的底层执行能力
- 文件/终端/搜索等工具:复用现有工具实现
- 对话持久化格式:复用 `ConversationManager` 的存储格式
- 沙箱/权限机制:复用现有 `evaluate_tool_permission` 与宿主机沙箱
### 2.3 子智能体即完整对话
每个子智能体是一个独立的、完整的对话上下文:
- 有自己的 `messages` 列表
- 有自己的系统提示词
- 有自己的工具列表
- 自然输出 assistant 消息
- 支持被主智能体/其他子智能体在运行中插入消息引导
- 任务结束 = 本轮自然停止输出,但上下文保留
---
## 3. 角色与实例
### 3.1 角色Role
角色由 Markdown + YAML Frontmatter 定义,存储在:
```
~/.astrion/astrion/host/mutiagents/agents/<role_id>.md
```
示例 `ui-operator.md`
```markdown
---
id: ui-operator
name: UI Operator
description: 负责前端设计、UI 还原、配色方案
model: qwen3-max
thinking_mode: fast
---
你是团队的前端设计专家。你擅长:
- 根据需求设计 UI 界面
- 制定配色方案
- 输出设计文档和前端代码
工作风格:
- 先分析需求,再给出设计方案
- 输出简洁明确的设计说明
```
### 3.2 实例Agent
- `role_id`:角色类型,如 `ui-operator`
- `agent_id`:这个角色的第几个实例,从 1 开始
- 显示名:`{Role Name}_{agent_id}`,如 `UI Operator_1`、`Full-Stack Engineer_1`
- 同一个 `role_id` 可以有多个实例UI Operator_1、UI Operator_2
- 不同 `role_id` 的实例序号独立Full-Stack Engineer_1 与 UI Operator_1 可以同时存在
- 主智能体固定显示名为 `Team Leader`,没有 agent_id
---
## 4. 总体架构图
```
┌─────────────────────────────────────────────────────────────┐
│ 用户Web 前端) │
│ /multiagent/new 页面 │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ MultiAgentTerminal │
│ (基于 MainTerminal 复制改造) │
│ - 工具列表:主工具 + 多智能体专用工具 │
│ - 子智能体管理器MultiAgentSubAgentManager │
│ - 对话存储:指向 mutiagents/conversations/ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────┼─────────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Agent 1 │ │ Agent 2 │ │ Agent 3 │
│UIOperator│ │ Full- │ │ Code │
│ 1 │ │ Stack │ │ Reviewer │
│ │ │Engineer1│ │ 1 │
└──────────┘ └──────────┘ └──────────┘
│ │ │
└─────────────────┴─────────────────┘
┌───────────────────────────────┐
│ MessageRouter │
│ 根据接收方状态决定: │
│ - inline 插入工具结果后 │
│ - 空闲时作为 user 消息触发新任务│
└───────────────────────────────┘
```
---
## 5. 主智能体职责
主智能体 = Team Leader其系统提示词中明确
- 除非任务极其简单或明确不需要,否则主动拆解任务并调用子智能体。
- 为每个子任务选择最合适的角色role_id
- 子智能体可以向你提问,你必须及时通过 `answer_sub_agent_question` 回答。
- 子智能体之间可以互相沟通,你负责监督整体进度。
- 如果子智能体的中间输出需要干预,使用 `send_message_to_sub_agent` 引导。
---
## 6. 子智能体职责
子智能体系统提示词由两部分组成:
1. **基础 prompt**:通用团队规则
2. **自定义 prompt**:角色专属设定
基础 prompt 中明确:
- 你是智能体集群团队的一员。
- 不要频繁输出内容,不重要内容会污染主智能体上下文。
- 只汇报关键步骤。
- 任务完成后给出详细结论。
- 需要主智能体决策时,使用 `ask_master`
- 需要与其他子智能体沟通时,使用 `ask_other_agent` / `answer_other_agent`
- 如果向其他子智能体提问,必须同时直接向主智能体输出汇报。
---
## 7. 与现有系统的边界
| 现有系统 | 多智能体模式处理方式 |
|---------|---------------------|
| 现有对话页面 | 不改动,新增 `/multiagent/new` |
| 现有 `MainTerminal` | 不改动,复制为 `MultiAgentTerminal` |
| 现有 `SubAgentManager` | 不改动,继承创建 `MultiAgentSubAgentManager` |
| 现有 `SubAgentTask` | 不改动,继承创建 `MultiAgentSubAgentTask` |
| 现有 `ConversationManager` | 不改动,多智能体模式用自己的存储目录 |
| 现有后台通知池机制 | 参考其设计,多智能体模式实现自己的消息路由 |
| 现有工具执行链路 | 复用 `execute_tool_for_sub_agent` |
| 现有沙箱/权限 | 复用,不额外限制子智能体工具参数 |
---
## 8. 入口与数据目录
### 8.1 入口
登录页面增加按钮:「多智能体模式 beta」。
点击后进入 `/multiagent/new` 页面,加载 `MultiAgentTerminal`
### 8.2 数据目录
```
~/.astrion/astrion/host/mutiagents/
├── agents/ # 角色定义
├── conversations/ # 多智能体会话
│ └── <conv_id>/
│ ├── metadata.json
│ ├── messages.json # Team Leader 对话
│ └── agents/
│ └── <agent_id>/
│ ├── metadata.json
│ └── messages.json # 子智能体完整对话记录
└── state.json # 全局状态
```
子智能体对话记录的保存精度、时机、格式与主智能体对话记录一致。
---
## 9. 实现顺序(非严格 phase
1. 创建独立目录与数据存储结构
2. 实现角色配置加载与预置角色
3. 实现 `MultiAgentSubAgentTask` / `MultiAgentSubAgentManager`
4. 实现 `MultiAgentTerminal` 与多智能体工具定义
5. 实现消息路由inline / idle / 通知池)
6. 实现前端 `/multiagent/new` 页面
7. 登录页加入口按钮
8. 联调测试
---
## 10. 相关文档
- `02_message_protocol.md`:统一消息格式
- `03_tool_definitions.md`:工具定义
- `04_message_routing.md`:消息路由机制
- `05_data_model.md`:数据模型
- `06_implementation_plan.md`:实现细节
- `07_existing_code_analysis.md`:现有代码分析