# 多智能体模式数据模型 > 所有数据存储在 `~/.astrion/astrion/host/mutiagents/` 下,与现有系统完全隔离。 > 子智能体对话记录的保存精度、时机、格式与主智能体对话记录一致。 --- ## 1. 目录结构 ``` ~/.astrion/astrion/host/mutiagents/ ├── agents/ # 角色定义 │ ├── ui-operator.md │ ├── full-stack-engineer.md │ ├── code-reviewer.md │ └── researcher.md ├── conversations/ # 多智能体会话 │ └── / │ ├── metadata.json # 会话级元数据 │ ├── messages.json # Team Leader 对话 │ └── agents/ │ └── / │ ├── metadata.json # 子智能体元数据 │ └── messages.json # 子智能体完整对话 └── state.json # 全局状态 ``` --- ## 2. 角色定义(Agent Role) 文件路径:`agents/.md` 格式:YAML Frontmatter + Markdown 正文 ```markdown --- id: ui-operator name: UI Operator description: 负责前端设计、UI 还原、配色方案 model: qwen3-max thinking_mode: fast --- 你是团队的前端设计专家... ``` ### Frontmatter 字段 | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | `id` | string | 是 | 角色唯一标识,文件名也使用此 id | | `name` | string | 是 | 角色显示名 | | `description` | string | 是 | 角色简短描述 | | `model` | string | 否 | 默认模型 key | | `thinking_mode` | string | 否 | fast / thinking | ### 正文 正文部分为角色专属 prompt,会拼接在基础 prompt 之后。 --- ## 3. 全局状态(state.json) ```json { "version": "1.0", "last_conversation_id": "conv_xxx", "agent_id_counter": 5, "created_at": "2026-07-11T21:00:00", "updated_at": "2026-07-11T21:30:00" } ``` | 字段 | 说明 | |------|------| | `version` | 数据格式版本 | | `last_conversation_id` | 最近一次会话 id | | `agent_id_counter` | 全局实例编号计数器(可选) | --- ## 4. 会话元数据(metadata.json) ```json { "id": "conv_20260711_210000_001", "title": "多智能体任务:设计前端", "created_at": "2026-07-11T21:00:00", "updated_at": "2026-07-11T21:30:00", "project_path": "/Users/jojo/project", "model_key": "qwen3-max", "thinking_mode": true, "run_mode": "thinking", "status": "active", "agent_count": 3, "agent_ids": [1, 2, 3] } ``` | 字段 | 说明 | |------|------| | `id` | 会话 id | | `title` | 会话标题 | | `created_at` | 创建时间 | | `updated_at` | 更新时间 | | `project_path` | 关联项目路径 | | `model_key` | Team Leader 使用的模型 | | `thinking_mode` | 是否思考模式 | | `run_mode` | fast / thinking / deep | | `status` | active / archived | | `agent_count` | 当前子智能体数量 | | `agent_ids` | 当前子智能体 agent_id 列表 | --- ## 5. 主智能体对话(messages.json) 与现有 `ConversationManager` 保存格式一致。 ```json { "id": "conv_20260711_210000_001", "title": "多智能体任务:设计前端", "created_at": "2026-07-11T21:00:00", "updated_at": "2026-07-11T21:30:00", "messages": [ { "role": "user", "content": "帮我设计一个前端页面", "message_id": "msg_user_001", "metadata": { "message_source": "user", "visibility": "chat", "starts_work": true } }, { "role": "assistant", "content": "我来安排 UI Operator 处理这个任务...", "message_id": "msg_assistant_001", "tool_calls": [...] }, { "role": "user", "content": "来自 UI Operator_1 的任务完成汇报\nid: out_uio_001\n\n\n\n我完成了前端配色的设计...\n\n", "message_id": "msg_auto_001", "metadata": { "message_source": "sub_agent", "visibility": "compact", "starts_work": false, "agent_id": 1 } } ], "metadata": { ... }, "token_statistics": { ... } } ``` --- ## 6. 子智能体元数据(agents//metadata.json) ```json { "agent_id": 1, "role_id": "ui-operator", "display_name": "UI Operator_1", "status": "running", "created_at": "2026-07-11T21:05:00", "updated_at": "2026-07-11T21:15:00", "task_summary": "设计前端配色方案", "model_key": "qwen3-max", "thinking_mode": "fast", "pending_messages": [ { "id": "msg_tl_001", "source_display_name": "Team Leader", "source_agent_id": null, "message_type": "message", "content": "先不要创建 API...", "created_at": 1752251700.0 } ], "pending_tool_calls": [ { "tool_call_id": "tc_ask_001", "tool_name": "ask_master", "question_id": "ask_uio_001", "created_at": 1752251800.0 } ] } ``` | 字段 | 说明 | |------|------| | `agent_id` | 实例编号 | | `role_id` | 角色 id | | `display_name` | 显示名 | | `status` | running / waiting / idle / completed / terminated | | `task_summary` | 当前任务摘要 | | `pending_messages` | 待处理消息队列 | | `pending_tool_calls` | 正在等待回答的工具调用 | --- ## 7. 子智能体对话(agents//messages.json) 保存精度、时机、格式与主智能体对话完全一致。 ```json { "agent_id": 1, "role_id": "ui-operator", "display_name": "UI Operator_1", "created_at": "2026-07-11T21:05:00", "updated_at": "2026-07-11T21:15:00", "messages": [ { "role": "system", "content": "你是智能体集群团队的一员..." }, { "role": "user", "content": "来自 Team Leader 的任务发布\nid: task_001\n\n\n\n请为项目设计前端配色方案...\n\n", "message_id": "msg_user_001" }, { "role": "assistant", "content": "我先分析一下现有设计风格...", "message_id": "msg_assistant_001" }, { "role": "user", "content": "来自 Team Leader 的消息\nid: msg_tl_001\n\n\n\n先不要创建 API...\n\n", "message_id": "msg_user_002" }, { "role": "assistant", "content": "好的,我先确认现有 auth 模块...", "message_id": "msg_assistant_002" } ] } ``` --- ## 8. 持久化策略 ### 8.1 保存时机 - 每次模型调用前保存子智能体 metadata 和 messages - 每次工具调用后保存 - 每次状态变更时保存 - 每次收到外部消息并处理后保存 ### 8.2 原子写入 参考 `ConversationManager._atomic_write_json`,使用临时文件 + replace: ```python def _atomic_write_json(path: Path, data: dict): tmp = path.with_suffix(path.suffix + ".tmp") tmp.write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8") tmp.replace(path) ``` ### 8.3 索引 参考 `ConversationManager` 的索引机制,在 `conversations/index.json` 中维护会话列表: ```json { "conv_20260711_210000_001": { "title": "多智能体任务:设计前端", "created_at": "2026-07-11T21:00:00", "updated_at": "2026-07-11T21:30:00", "agent_count": 3 } } ``` --- ## 9. 与现有 ConversationManager 的关系 多智能体模式实现自己的 `MultiAgentConversationStore`,但: - 数据格式与 `ConversationManager` 保持一致 - 文件结构与 `ConversationManager` 类似 - 不修改 `utils/conversation_manager/` 任何文件 - 可以复制 `ConversationManager` 的 CRUD 代码到 `MultiAgentConversationStore` --- ## 10. 实现位置 - 角色存储:`modules/multi_agent/agent_store.py` - 会话存储:`modules/multi_agent/conversation_store.py` - 全局状态:`modules/multi_agent/manager.py`