# 多智能体模式总体架构 > 文档状态:设计草案 > 适用范围:宿主机模式(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/.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/ # 多智能体会话 │ └── / │ ├── metadata.json │ ├── messages.json # Team Leader 对话 │ └── agents/ │ └── / │ ├── 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`:现有代码分析