vibe-coding-cn/assets/documents/guides/playbook/AI蜂群协作-tmux多Agent协作系统.md

694 lines
17 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.

# AI 蜂群协作技术文档
> 基于 tmux 的多 AI Agent 协作系统设计与实现
---
## 目录
1. [核心思想](#1-核心思想)
2. [技术原理](#2-技术原理)
3. [命令参考](#3-命令参考)
4. [协作协议](#4-协作协议)
5. [架构模式](#5-架构模式)
6. [实战案例](#6-实战案例)
7. [提示词模板](#7-提示词模板)
8. [最佳实践](#8-最佳实践)
9. [风险与限制](#9-风险与限制)
10. [扩展方向](#10-扩展方向)
---
## 1. 核心思想
### 1.1 问题背景
传统 AI 编程助手的局限:
- 单一会话,无法感知其他任务
- 遇到等待/确认时需要人工干预
- 多任务并行时无法协调
- 重复工作,资源浪费
### 1.2 解决方案
利用 tmux 的终端复用能力,赋予 AI
| 能力 | 实现方式 | 效果 |
|:---|:---|:---|
| **感知** | `capture-pane` | 读取任意终端内容 |
| **控制** | `send-keys` | 向任意终端发送按键 |
| **协调** | 共享状态文件 | 任务同步与分工 |
### 1.3 核心洞察
```
传统模式: 人 ←→ AI₁, 人 ←→ AI₂, 人 ←→ AI₃ (人是瓶颈)
蜂群模式: 人 → AI₁ ←→ AI₂ ←→ AI₃ (AI 自主协作)
```
**关键突破**AI 不再是孤立的,而是可以互相感知、通讯、控制的集群。
---
## 2. 技术原理
### 2.1 tmux 架构
```
┌─────────────────────────────────────────────┐
│ tmux server │
├─────────────────────────────────────────────┤
│ Session 0 │
│ ├── Window 0:1 [AI-1] ◄──┐ │
│ ├── Window 0:2 [AI-2] ◄──┼── 互相可见/控制 │
│ ├── Window 0:3 [AI-3] ◄──┤ │
│ └── Window 0:4 [AI-4] ◄──┘ │
└─────────────────────────────────────────────┘
```
### 2.2 数据流
```
┌─────────┐ capture-pane ┌─────────┐
│ AI-1 │ ◄───────────────│ AI-4 │
│ (执行) │ │ (监控) │
└─────────┘ send-keys └─────────┘
▲ ───────────────► │
│ │
└───────── 控制流 ──────────┘
```
### 2.3 通信机制
| 机制 | 方向 | 延迟 | 用途 |
|:---|:---|:---|:---|
| `capture-pane` | 读取 | 即时 | 获取终端输出 |
| `send-keys` | 写入 | 即时 | 发送命令/按键 |
| 共享文件 | 双向 | 文件IO | 状态持久化 |
---
## 3. 命令参考
### 3.1 信息获取
```bash
# 列出所有会话
tmux list-sessions
# 列出所有窗口
tmux list-windows -a
# 列出所有窗格
tmux list-panes -a
# 获取当前窗口标识
echo $TMUX_PANE
```
### 3.2 内容读取
```bash
# 读取指定窗口内容(最近 N 行)
tmux capture-pane -t <session>:<window> -p -S -<N>
# 示例:读取会话 0 窗口 1 最近 100 行
tmux capture-pane -t 0:1 -p -S -100
# 读取并保存到文件
tmux capture-pane -t 0:1 -p -S -500 > /tmp/window1.log
# 批量读取所有窗口
for w in $(tmux list-windows -a -F '#{session_name}:#{window_index}'); do
echo "=== $w ==="
tmux capture-pane -t "$w" -p -S -30
done
```
### 3.3 发送控制
```bash
# 发送文本 + 回车
tmux send-keys -t 0:1 "ls -la" Enter
# 发送确认
tmux send-keys -t 0:1 "y" Enter
# 发送特殊按键
tmux send-keys -t 0:1 C-c # Ctrl+C
tmux send-keys -t 0:1 C-d # Ctrl+D
tmux send-keys -t 0:1 C-z # Ctrl+Z
tmux send-keys -t 0:1 Escape # ESC
tmux send-keys -t 0:1 Up # 上箭头
tmux send-keys -t 0:1 Down # 下箭头
tmux send-keys -t 0:1 Tab # Tab
# 组合操作
tmux send-keys -t 0:1 C-c # 先中断
tmux send-keys -t 0:1 "cd /tmp" Enter # 再执行新命令
```
### 3.4 窗口管理
```bash
# 创建新窗口
tmux new-window -n "ai-worker"
# 创建并执行命令
tmux new-window -n "ai-1" "kiro-cli chat"
# 关闭窗口
tmux kill-window -t 0:1
# 重命名窗口
tmux rename-window -t 0:1 "monitor"
```
---
## 4. 协作协议
### 4.1 状态定义
```bash
# 状态文件位置
/tmp/ai_swarm/
├── status.log # 全局状态日志
├── tasks.json # 任务队列
├── locks/ # 任务锁
│ ├── task_001.lock
│ └── task_002.lock
└── results/ # 结果存储
├── ai_1.json
└── ai_2.json
```
### 4.2 状态格式
```bash
# 状态日志格式
[HH:MM:SS] [窗口ID] [状态] 描述
# 示例
[08:15:30] [0:1] [START] 开始处理 data-service 代码审计
[08:16:45] [0:1] [DONE] 完成代码审计,发现 5 个问题
[08:16:50] [0:2] [WAIT] 等待 0:1 审计结果
[08:17:00] [0:2] [START] 开始修复问题
```
### 4.3 协作规则
| 规则 | 描述 | 实现 |
|:---|:---|:---|
| **先查后做** | 开始前扫描其他终端 | `capture-pane` 全扫 |
| **避免冲突** | 相同任务只做一次 | 检查 locks 目录 |
| **主动救援** | 发现卡住主动帮助 | 检测 `[y/n]` 等待 |
| **状态广播** | 完成后通知其他 AI | 写入 status.log |
### 4.4 冲突处理
```
场景AI-1 和 AI-2 同时要修改同一文件
解决方案:
1. 创建任务前先检查锁
2. 获取锁后才能执行
3. 完成后释放锁
# 获取锁
if [ ! -f /tmp/ai_swarm/locks/file_x.lock ]; then
echo "$TMUX_PANE" > /tmp/ai_swarm/locks/file_x.lock
# 执行任务
rm /tmp/ai_swarm/locks/file_x.lock
fi
```
---
## 5. 架构模式
### 5.1 对等模式 (P2P)
```
┌─────┐ ┌─────┐
│ AI₁ │◄───►│ AI₂ │
└──┬──┘ └──┬──┘
│ │
▼ ▼
┌─────┐ ┌─────┐
│ AI₃ │◄───►│ AI₄ │
└─────┘ └─────┘
特点:所有 AI 平等,互相监控
适用:简单任务,无明确依赖
```
### 5.2 主从模式 (Master-Worker)
```
┌──────────┐
│ AI-Master│
│ (指挥官) │
└────┬─────┘
│ 分发/监控
┌────────┼────────┐
▼ ▼ ▼
┌──────┐ ┌──────┐ ┌──────┐
│Worker│ │Worker│ │Worker│
│ AI-1 │ │ AI-2 │ │ AI-3 │
└──────┘ └──────┘ └──────┘
特点:一个指挥,多个执行
适用:复杂项目,需要统一协调
```
### 5.3 流水线模式 (Pipeline)
```
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
│ AI₁ │───►│ AI₂ │───►│ AI₃ │───►│ AI₄ │
│分析 │ │设计 │ │实现 │ │测试 │
└─────┘ └─────┘ └─────┘ └─────┘
特点:任务串行流转
适用:有明确阶段的工作流
```
### 5.4 混合模式
```
┌──────────┐
│ AI-Master│
└────┬─────┘
┌───────────┼───────────┐
▼ ▼ ▼
┌──────┐ ┌──────┐ ┌──────┐
│分析组 │ │开发组 │ │测试组 │
├──────┤ ├──────┤ ├──────┤
│AI-1 │ │AI-3 │ │AI-5 │
│AI-2 │ │AI-4 │ │AI-6 │
└──────┘ └──────┘ └──────┘
特点:分组协作 + 统一调度
适用:大型项目,多团队并行
```
---
## 6. 实战案例
### 6.1 案例:多服务并行开发
**场景**:同时开发 data-service、trading-service、telegram-service
**配置**
```bash
# 窗口分配
0:1 - AI-Master (指挥官)
0:2 - AI-Data (data-service)
0:3 - AI-Trading (trading-service)
0:4 - AI-Telegram (telegram-service)
```
**指挥官提示词**
```
你是项目指挥官,负责协调 3 个开发 AI。
每 2 分钟执行一次扫描:
for w in 2 3 4; do
echo "=== 窗口 0:$w ==="
tmux capture-pane -t "0:$w" -p -S -20
done
发现问题时:
- 卡住等待 → send-keys 确认
- 报错 → 分析并给出建议
- 完成 → 记录并分配下一任务
```
### 6.2 案例:代码审计 + 自动修复
**场景**AI-1 审计代码AI-2 实时修复
**流程**
```
AI-1 (审计):
1. 扫描代码,输出问题列表
2. 每发现一个问题,写入 /tmp/ai_swarm/issues.log
AI-2 (修复):
1. 监控 issues.log
2. 读取新问题
3. 自动修复
4. 标记完成
```
### 6.3 案例7x24 值守
**场景**AI 互相监控,自动救援
**配置**
```bash
# 每个 AI 的监控逻辑
while true; do
for w in $(tmux list-windows -a -F '#{window_index}'); do
output=$(tmux capture-pane -t "0:$w" -p -S -5)
# 检测卡住
if echo "$output" | grep -q "\[y/n\]"; then
tmux send-keys -t "0:$w" "y" Enter
echo "已帮助窗口 $w 确认"
fi
# 检测错误
if echo "$output" | grep -qi "error\|failed"; then
echo "窗口 $w 出现错误,需要关注"
fi
done
sleep 30
done
```
---
## 7. 提示词模板
### 7.1 基础版Worker
```markdown
## AI 蜂群协作模式
你在 tmux 环境中工作,可以感知和协助其他终端。
### 命令
# 扫描所有终端
tmux list-windows -a
# 读取终端内容
tmux capture-pane -t <session>:<window> -p -S -100
### 行为
- 开始任务前先扫描环境
- 发现相关任务主动协调
- 完成后广播状态
```
### 7.2 完整版Worker
```markdown
## 🐝 AI 蜂群协作协议 v2.0
你是 tmux 多终端 AI 集群中的一员。
### 感知能力
# 列出所有窗口
tmux list-windows -a
# 读取指定窗口(最近 100 行)
tmux capture-pane -t <session>:<window> -p -S -100
# 批量扫描
for w in $(tmux list-windows -a -F '#{session_name}:#{window_index}'); do
echo "=== $w ===" && tmux capture-pane -t "$w" -p -S -20
done
### 控制能力
# 发送命令
tmux send-keys -t <窗口> "<命令>" Enter
# 发送确认
tmux send-keys -t <窗口> "y" Enter
# 中断任务
tmux send-keys -t <窗口> C-c
### 协作规则
1. **主动感知**:任务开始前扫描其他终端
2. **避免冲突**:相同任务不重复执行
3. **主动救援**:发现等待/卡住主动帮助
4. **状态广播**:完成后写入共享日志
### 状态同步
# 广播
echo "[$(date +%H:%M:%S)] [$TMUX_PANE] [DONE] <描述>" >> /tmp/ai_swarm/status.log
# 读取
tail -20 /tmp/ai_swarm/status.log
### 检查时机
- 🚦 任务开始前
- ⏳ 等待依赖时
- ✅ 任务完成后
- ❌ 遇到错误时
```
### 7.3 指挥官版Master
```markdown
## 🎖️ AI 集群指挥官协议
你是 AI 蜂群的指挥官,负责监控和协调所有 Worker AI。
### 核心职责
1. **全局监控**:定期扫描所有终端状态
2. **任务分配**:根据能力分配任务
3. **冲突解决**:发现重复工作时协调
4. **故障救援**:发现卡住/错误时介入
5. **进度汇总**:汇总各终端成果
### 监控命令
# 全局扫描(每 2 分钟执行)
echo "========== $(date) 状态扫描 =========="
for w in $(tmux list-windows -a -F '#{session_name}:#{window_index}'); do
echo "--- $w ---"
tmux capture-pane -t "$w" -p -S -15
done
### 干预命令
# 帮助确认
tmux send-keys -t <窗口> "y" Enter
# 中断错误任务
tmux send-keys -t <窗口> C-c
# 发送新指令
tmux send-keys -t <窗口> "<指令>" Enter
### 状态判断
检测到以下模式时介入:
- `[y/n]` `[Y/n]` `确认` → 需要确认
- `Error` `Failed` `Exception` → 出现错误
- `Waiting` `Blocked` → 任务阻塞
- 长时间无输出 → 可能卡死
### 汇报格式
每次扫描后输出:
| 窗口 | 状态 | 当前任务 | 备注 |
|:---|:---|:---|:---|
| 0:1 | ✅ 正常 | 代码审计 | 进度 80% |
| 0:2 | ⏳ 等待 | 等待确认 | 已自动确认 |
| 0:3 | ❌ 错误 | 编译失败 | 需要关注 |
```
---
## 8. 最佳实践
### 8.1 初始化流程
```bash
# 1. 创建共享目录
mkdir -p /tmp/ai_swarm/{locks,results}
touch /tmp/ai_swarm/status.log
# 2. 开启 tmux 会话
tmux new-session -d -s ai
# 3. 创建多个窗口
tmux new-window -t ai -n "master"
tmux new-window -t ai -n "worker-1"
tmux new-window -t ai -n "worker-2"
tmux new-window -t ai -n "worker-3"
# 4. 在每个窗口启动 AI
tmux send-keys -t ai:master "kiro-cli chat" Enter
tmux send-keys -t ai:worker-1 "kiro-cli chat" Enter
# ...
# 5. 发送蜂群提示词
```
### 8.2 命名规范
```bash
# 会话命名
ai # AI 工作会话
dev # 开发会话
monitor # 监控会话
# 窗口命名
master # 指挥官
worker-N # 工作节点
data # data-service 专用
trading # trading-service 专用
```
### 8.3 日志规范
```bash
# 状态日志
[时间] [窗口] [状态] 描述
# 状态类型
[START] - 开始任务
[DONE] - 完成任务
[WAIT] - 等待中
[ERROR] - 出现错误
[HELP] - 请求帮助
[SKIP] - 跳过(已有人处理)
```
### 8.4 安全建议
1. **不要自动确认危险操作**rm -rf、DROP TABLE 等
2. **设置操作白名单**:只允许特定命令
3. **保留操作日志**:记录所有 send-keys 操作
4. **定期人工检查**:不要完全无人值守
---
## 9. 风险与限制
### 9.1 已知风险
| 风险 | 描述 | 缓解措施 |
|:---|:---|:---|
| 误操作 | AI 发送错误命令 | 设置命令白名单 |
| 死循环 | AI 互相触发 | 添加冷却时间 |
| 资源竞争 | 同时修改同一文件 | 使用锁机制 |
| 信息泄露 | 敏感信息被读取 | 隔离敏感会话 |
### 9.2 技术限制
- tmux 必须在同一服务器
- 无法跨机器协作(需要 SSH
- 终端输出有长度限制
- 无法读取密码输入(隐藏字符)
### 9.3 不适用场景
- 需要图形界面的操作
- 涉及敏感凭证的操作
- 需要实时交互的场景
- 跨网络的分布式协作
---
## 10. 扩展方向
### 10.1 跨机器协作
```bash
# 通过 SSH 读取远程 tmux
ssh user@remote "tmux capture-pane -t 0:1 -p"
# 通过 SSH 发送命令
ssh user@remote "tmux send-keys -t 0:1 'ls' Enter"
```
### 10.2 Web 监控面板
```python
# 简单的状态 API
from flask import Flask, jsonify
import subprocess
app = Flask(__name__)
@app.route('/status')
def status():
result = subprocess.run(
['tmux', 'list-windows', '-a', '-F', '#{window_name}:#{window_activity}'],
capture_output=True, text=True
)
return jsonify({'windows': result.stdout.split('\n')})
```
### 10.3 智能调度
```python
# 基于负载的任务分配
def assign_task(task):
windows = get_all_windows()
# 找到最空闲的窗口
idle_window = min(windows, key=lambda w: w.activity_time)
# 分配任务
send_keys(idle_window, f"处理任务: {task}")
```
### 10.4 与其他系统集成
- **Slack/Discord**:状态通知
- **Prometheus**:指标监控
- **Grafana**:可视化面板
- **GitHub Actions**CI/CD 触发
---
## 附录
### A. 快速参考卡片
```
┌─────────────────────────────────────────────────────┐
│ AI 蜂群命令速查 │
├─────────────────────────────────────────────────────┤
│ 列出窗口 tmux list-windows -a │
│ 读取内容 tmux capture-pane -t 0:1 -p -S -100 │
│ 发送命令 tmux send-keys -t 0:1 "cmd" Enter │
│ 发送确认 tmux send-keys -t 0:1 "y" Enter │
│ 中断任务 tmux send-keys -t 0:1 C-c │
│ 新建窗口 tmux new-window -n "name" │
└─────────────────────────────────────────────────────┘
```
### B. 故障排查
```bash
# tmux 不存在
which tmux || sudo apt install tmux
# 无法连接会话
tmux list-sessions # 检查会话是否存在
# capture-pane 无输出
tmux capture-pane -t 0:1 -p -S -1000 # 增加行数
# send-keys 无效
tmux display-message -t 0:1 -p '#{pane_mode}' # 检查模式
```
### C. 参考资料
- tmux 官方文档: https://github.com/tmux/tmux/wiki
- tmux 命令速查: `man tmux`
---
*文档版本: v1.0*
*最后更新: 2026-01-04*