# 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 : -p -S - # 示例:读取会话 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 : -p -S -100 ### 行为 - 开始任务前先扫描环境 - 发现相关任务主动协调 - 完成后广播状态 ``` ### 7.2 完整版(Worker) ```markdown ## 🐝 AI 蜂群协作协议 v2.0 你是 tmux 多终端 AI 集群中的一员。 ### 感知能力 # 列出所有窗口 tmux list-windows -a # 读取指定窗口(最近 100 行) tmux capture-pane -t : -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*