agent-Specialization/docs/multi_agent_mode/05_data_model.md

7.7 KiB
Raw Blame History

多智能体模式数据模型

所有数据存储在 ~/.astrion/astrion/host/mutiagents/ 下,与现有系统完全隔离。
子智能体对话记录的保存精度、时机、格式与主智能体对话记录一致。


1. 目录结构

~/.astrion/astrion/host/mutiagents/
├── agents/                              # 角色定义
│   ├── ui-operator.md
│   ├── full-stack-engineer.md
│   ├── code-reviewer.md
│   └── researcher.md
├── conversations/                       # 多智能体会话
│   └── <conv_id>/
│       ├── metadata.json                # 会话级元数据
│       ├── messages.json                # Team Leader 对话
│       └── agents/
│           └── <agent_id>/
│               ├── metadata.json        # 子智能体元数据
│               └── messages.json        # 子智能体完整对话
└── state.json                           # 全局状态

2. 角色定义Agent Role

文件路径:agents/<role_id>.md

格式YAML Frontmatter + 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

{
  "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

{
  "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 保存格式一致。

{
  "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<UI Operator_1>\n<Output>\n我完成了前端配色的设计...\n</Output>\n</UI Operator_1>",
      "message_id": "msg_auto_001",
      "metadata": {
        "message_source": "sub_agent",
        "visibility": "compact",
        "starts_work": false,
        "agent_id": 1
      }
    }
  ],
  "metadata": { ... },
  "token_statistics": { ... }
}

6. 子智能体元数据agents/<agent_id>/metadata.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/<agent_id>/messages.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<Team Leader>\n<Task>\n请为项目设计前端配色方案...\n</Task>\n</Team Leader>",
      "message_id": "msg_user_001"
    },
    {
      "role": "assistant",
      "content": "我先分析一下现有设计风格...",
      "message_id": "msg_assistant_001"
    },
    {
      "role": "user",
      "content": "来自 Team Leader 的消息\nid: msg_tl_001\n\n<Team Leader>\n<Message>\n先不要创建 API...\n</Message>\n</Team Leader>",
      "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

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 中维护会话列表:

{
  "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