Files
nexus/#recycle/星枢 Agent 任务解耦技术方案.md
2026-03-23 20:57:45 +08:00

447 lines
16 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.
# 星枢 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)
```json
{
"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)
```json
{
"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)
```json
{
"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 一键初始化命令
```bash
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 使用方法
```python
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):
```python
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*
*作者: 云策*