16 KiB
16 KiB
星枢 Agent 任务解耦技术方案
基于 RabbitMQ 的分布式任务队列架构 版本: 2.1 (已更新) 最后更新: 2026-03-17
一、概述
背景
当前星枢(主 Agent)与其他 Agent 的通信方式:
| 方式 | 命令 | 局限 |
|---|---|---|
| 本地 | openclaw agent --agent xingyao --message "..." --deliver |
同步等待 |
| 远程 | ssh ubuntu2 "openclaw agent --agent yunce --message ..." |
串行阻塞 |
目标
- 异步执行:任务下发不等待结果
- 任务持久化:重启不丢失
- 可监控:实时查看任务状态
- 可扩展:支持多 Agent 并行
讨论结论
技术选型: RabbitMQ
Exchange 命名: task_exchange / result_exchange
二、星枢调度 Agent 列表
根据 星枢调度Agent列表.md,星枢需要调度的 Agent 包括:
Mac Mini(中央控制节点)
| Agent ID | 角色 | 职责 |
|---|---|---|
| xingyao | 星曜 | IT 管家 / 运维管理 |
| xinghui | 星辉 | 个人助理 / 日程管理 |
Ubuntu2(开发服务器)
| Agent ID | 角色 | 职责 |
|---|---|---|
| yunhan | 云瀚 | 监控官 / 系统监控 |
| yunce | 云策 | 架构师 / 技术方案 |
| yunjiang | 云匠 | 工匠 / 代码开发 |
| yunzhi | 云织 | 自动化师 / CI/CD |
Ubuntu1(准生产服务器)
| Agent ID | 角色 | 职责 |
|---|---|---|
| fengheng | 风衡 | 质检官 / QA测试 |
| fengchi | 风驰 | 执行者 / 业务流程 |
| fengji | 风纪 | 审计官 / 规则审计 |
总计: 9 个子 Agent
三、架构设计
3.1 整体架构
┌─────────────────────────────────────────────────────────────────────────┐
│ 用户 │
│ (Telegram/Discord) │
└─────────────────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ 星枢 (xingshu) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 意图理解 │ │ 任务分解 │ │ 队列管理 │ │ 结果聚合 │ │
│ │ intent_ │ │ message_ │ │ rabbitmq_ │ │ result_ │ │
│ │ parser.py │ │ builder.py │ │ sender.py │ │ receiver.py│ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────┬───────────────────────────────────────┘
│
┌─────────────┴─────────────┐
│ RabbitMQ 集群 │
│ (task_exchange) │
└─────────────┬─────────────┘
│
┌───────────┬───────────┼───────────┬───────────┐
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌──────────┐┌──────────┐┌──────────┐┌──────────┐┌──────────┐
│ tasks ││ tasks ││ tasks ││ tasks ││ tasks │
│ .xingyao ││ .xinghui ││ .yunhan ││ .yunce ││.yunjiang │
└────┬─────┘└────┬─────┘└────┬─────┘└────┬─────┘└────┬─────┘
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
[星曜] [星辉] [云瀚] [云策] [云匠]
│ │ │ │ │
└───────────┴───────────┼───────────┴───────────┘
│
┌────────────┴────────────┐
│ result_exchange │
│ (result.#) │
└────────────┬────────────┘
│
▼
┌─────────────────────┐
│ results.xingshu │ ← 星枢监听
└─────────────────────┘
3.2 消息流设计
┌──────────────────────────────────────────────────────────────────────────┐
│ 消息生命周期 │
└──────────────────────────────────────────────────────────────────────────┘
[1] 任务下发 [5] 结果处理
│ ▲
▼ │
┌────────┐ ┌────────────┐ ┌───────────┐ ┌───────────┐ │
│ 星枢 │───▶│ RabbitMQ │───▶│ Agent N │───▶│ RabbitMQ │──────┐
│创建任务 │ │ (持久化) │ │ 执行任务 │ │ (结果队列) │ │
└────────┘ └────────────┘ └───────────┘ └───────────┘ │
│ │ │
│ [4] ACK 确认 │
│ │ │
[2] 任务入队 │ │
(可选: 延迟队列) ▼ │
│ ┌───────────┐ │
└─────────────▶│ 状态变更 │ │
│ (处理中→完成) │
└───────────┘ │
[3] Agent 消费任务
四、Exchange & Queue 设计
4.1 Exchanges
| Exchange | 类型 | 用途 | Routing Key |
|---|---|---|---|
task_exchange |
topic | 任务下发 | task.{agent} |
result_exchange |
topic | 结果收集 | result.{agent} |
4.2 Queues
| Queue | 消费者 | Agent 角色 |
|---|---|---|
tasks.xingyao |
xingyao | 星曜 - IT管家 |
tasks.xinghui |
xinghui | 星辉 - 个人助理 |
tasks.yunhan |
yunhan | 云瀚 - 监控官 |
tasks.yunce |
yunce | 云策 - 架构师 |
tasks.yunjiang |
yunjiang | 云匠 - 工匠 |
tasks.yunzhi |
yunzhi | 云织 - 自动化师 |
tasks.fengheng |
fengheng | 风衡 - 质检官 |
tasks.fengchi |
fengchi | 风驰 - 执行者 |
tasks.fengji |
fengji | 风纪 - 审计官 |
results.xingshu |
xingshu | 星枢 - 结果聚合 |
4.3 Routing 规则
任务下发:
task_exchange
│
├─→ task.xingyao → tasks.xingyao
├─→ task.xinghui → tasks.xinghui
├─→ task.yunhan → tasks.yunhan
├─→ task.yunce → tasks.yunce
├─→ task.yunjiang → tasks.yunjiang
├─→ task.yunzhi → tasks.yunzhi
├─→ task.fengheng → tasks.fengheng
├─→ task.fengchi → tasks.fengchi
└─→ task.fengji → tasks.fengji
结果收集:
result_exchange
│
└─→ result.# → results.xingshu (星枢)
五、消息格式定义
5.1 任务消息 (Task Message)
{
"taskId": "task_20260317_001",
"type": "task",
"source": "xingshu",
"target": "yunce",
"priority": "high",
"content": {
"action": "code_review",
"params": {
"repo": "my-project",
"branch": "feature/login"
}
},
"metadata": {
"createdAt": "2026-03-17T10:30:00Z",
"expireAt": "2026-03-17T11:30:00Z",
"retryCount": 0,
"maxRetries": 3
}
}
5.2 结果消息 (Result Message)
{
"taskId": "task_20260317_001",
"type": "result",
"source": "yunce",
"target": "xingshu",
"status": "success",
"content": {
"summary": "代码审查完成",
"findings": [
{"severity": "warning", "message": "建议添加参数校验"}
],
"output": "/path/to/report.md"
},
"metadata": {
"completedAt": "2026-03-17T10:35:00Z",
"duration": 300
}
}
5.3 心跳消息 (Heartbeat Message)
{
"type": "heartbeat",
"agent": "yunce",
"status": "idle",
"currentTask": null,
"timestamp": "2026-03-17T10:30:00Z"
}
六、星枢指令解析
6.1 意图到 Agent 的映射
| 用户指令 | action | target | 执行 Agent |
|---|---|---|---|
| 运维/服务器管理 | ops | xingyao | 星曜 |
| 日程/个人事务 | personal | xinghui | 星辉 |
| 监控巡检 | monitor | yunhan | 云瀚 |
| 架构/方案 | architecture | yunce | 云策 |
| 代码开发 | coding | yunjiang | 云匠 |
| CI/CD/自动化 | automation | yunzhi | 云织 |
| QA测试 | qa_test | fengheng | 风衡 |
| 业务执行 | execute | fengchi | 风驰 |
| 审计/合规 | audit | fengji | 风纪 |
6.2 async-task-scheduling 支持的 action
| action | target | 说明 |
|---|---|---|
| ops | xingyao | IT 运维任务 |
| personal | xinghui | 个人事务 |
| monitor | yunhan | 系统监控 |
| architecture | yunce | 技术方案 |
| coding | yunjiang | 代码开发 |
| automation | yunzhi | 自动化 |
| qa_test | fengheng | QA 测试 |
| execute | fengchi | 业务执行 |
| audit | fengji | 审计检查 |
| code_review | yunce | 代码审查 (快捷) |
| deploy | yunzhi | 部署服务 |
七、RabbitMQ 初始化步骤
7.1 环境信息
| 项目 | 值 |
|---|---|
| IP 地址 | 192.168.3.189 |
| AMQP 端口 | 5672 |
| 管理界面 | http://192.168.3.189:15672/ |
| 用户名 | guest |
| 密码 | guest |
7.2 一键初始化命令
python3 << 'EOF'
import pika
connection = pika.BlockingConnection(
pika.ConnectionParameters(
host='192.168.3.189',
port=5672,
credentials=pika.PlainCredentials('guest', 'guest')
)
)
channel = connection.channel()
# ========== 1. 创建 Exchange ==========
channel.exchange_declare(exchange='task_exchange', exchange_type='topic', durable=True)
channel.exchange_declare(exchange='result_exchange', exchange_type='topic', durable=True)
print("✅ Exchanges: task_exchange, result_exchange")
# ========== 2. 创建任务队列 (9个子Agent) ==========
agents = [
'xingyao', # 星曜 - IT管家
'xinghui', # 星辉 - 个人助理
'yunhan', # 云瀚 - 监控官
'yunce', # 云策 - 架构师
'yunjiang', # 云匠 - 工匠
'yunzhi', # 云织 - 自动化师
'fengheng', # 风衡 - 质检官
'fengchi', # 风驰 - 执行者
'fengji', # 风纪 - 审计官
]
for agent in agents:
queue_name = f'tasks.{agent}'
channel.queue_declare(queue=queue_name, durable=True)
channel.queue_bind(
exchange='task_exchange',
queue=queue_name,
routing_key=f'task.{agent}'
)
print(f" 📬 {queue_name} -> task.{agent}")
# ========== 3. 创建结果聚合队列 ==========
channel.queue_declare(queue='results.xingshu', durable=True)
channel.queue_bind(
exchange='result_exchange',
queue='results.xingshu',
routing_key='result.#'
)
print(" 📬 results.xingshu -> result.#")
connection.close()
print("\n🎉 RabbitMQ 初始化完成!")
EOF
八、async-task-scheduling 技能
8.1 技能概述
技能名称: async-task-scheduling (异步任务调度)
用途: 星枢专用技能,用于解析用户指令并通过 RabbitMQ 异步调度子 Agent
技能位置:
~/Obsidian/shenwei/openclaw/yunce/async-task-scheduling/
8.2 文件结构
async-task-scheduling/
├── SKILL.md # 技能说明
└── scripts/
├── __init__.py
├── intent_parser.py # 意图解析 (action → target 映射)
├── message_builder.py # 消息构建 (JSON 格式)
├── rabbitmq_sender.py # RabbitMQ 发送
└── agent_listener.py # 子 Agent 监听 (可选)
8.3 使用方法
from scripts import IntentParser, MessageBuilder, RabbitMQSender
# 1. 解析用户指令
parser = IntentParser()
intent = parser.parse_intent("帮我审查 my-project 仓库")
# 2. 构建消息
builder = MessageBuilder(source="xingshu")
message = builder.build_task_message(intent)
# 3. 发送到 RabbitMQ
sender = RabbitMQSender()
task_id = sender.send_task(message)
sender.close()
return f"✅ 任务已下发: {task_id} → {intent['target']}"
8.4 配置
RabbitMQ 连接配置 (rabbitmq_sender.py):
DEFAULT_CONFIG = {
"host": "192.168.3.189",
"port": 5672,
"username": "guest",
"password": "guest",
"exchange": "task_exchange",
"result_exchange": "result_exchange"
}
九、待执行事项
- 确认设计后,初始化 RabbitMQ
- 为星枢 (xingshu) 加载 async-task-scheduling 技能
- 子 Agent 监听队列并消费任务
- 端到端测试
十、相关文件
| 文件 | 位置 |
|---|---|
| 星枢调度 Agent 列表 | ~/Obsidian/shenwei/openclaw/xingshu/星枢调度Agent列表.md |
| 异步任务调度技能 | ~/Obsidian/shenwei/openclaw/yunce/async-task-scheduling/ |
文档版本: 2.1 更新日期: 2026-03-17 作者: 云策