Hotdry.
ai-systems

Agent-Swarm:多代理自学习团队的开源实现——共享状态与强化反馈

Desplega AI 的 Agent-Swarm 框架通过共享 MCP、SQLite 内存和持久身份文件,实现多代理协调与 emergent behaviors,支持 Docker 部署与 Slack/GitHub 集成。提供工程参数与自学习循环配置。

在多代理系统中,实现自学习团队的关键在于通过共享状态管理和强化反馈循环,促使代理间产生涌现行为(emergent behaviors)。Desplega AI 开源的 Agent-Swarm 框架正是为此设计,它以 Model Context Protocol (MCP) 为核心,协调领导代理(lead agent)和多个工作者代理(worker agents),特别适用于代码助手和工作流自动化场景。本文聚焦于其自学习机制的工程实现,提供可落地的配置参数、监控要点和优化策略,帮助开发者快速部署并观察代理团队的 “ compounding ” 改进。

核心架构:共享状态下的代理协调

Agent-Swarm 的架构简单高效:一个 MCP API 服务器充当中枢,连接 SQLite 数据库存储任务状态、内存和身份信息。领导代理接收用户任务(通过 Slack、GitHub 或 Email),分解为子任务并委托给 Docker 隔离的 worker 代理。每个 worker 在独立容器中运行完整开发环境(git、Node.js、Python 等),执行后报告进度,实现无缝协作。

共享状态通过 MCP 协议实现,所有代理访问同一数据库,确保实时同步。例如,领导代理可使用 inject-learning 工具将经验注入 worker 的个人内存。这种设计避免了传统多代理框架的通信瓶颈,支持任务优先级队列、依赖管理和暂停 / 恢复。

部署上,使用 Docker Compose 最简便:

git clone https://github.com/desplega-ai/agent-swarm.git
cd agent-swarm
cp .env.docker.example .env
# 编辑 .env:设置 API_KEY、CLAUDE_CODE_OAUTH_TOKEN
docker compose -f docker-compose.example.yml --env-file .env up -d

API 默认端口 3013,dashboard 通过 UI 访问。生产环境推荐多 worker 配置,卷挂载 /workspace/personal(个人)和 /workspace/shared(共享)以持久化数据。

自学习机制:内存系统与持久身份

自学习的核心是 “compounding memory”,代理从每次会话中提取经验,并逐步变 “聪明”。内存系统基于 SQLite + OpenAI text-embedding-3-small 嵌入,支持搜索相关回忆注入上下文。

  • 自动内存生成

    • 会话结束时,轻量模型(如 Haiku)总结关键学习:错误、模式、代码库知识。
    • 任务输出(成功 / 失败)索引化,失败任务附带 “what went wrong” 笔记。
    • 代理可写文件至 /workspace/personal/memory/ 或共享目录,自动索引。
  • 持久身份文件(受 OpenClaw 启发):

    文件 作用 示例内容
    SOUL.md 核心人格、价值观 “彻底执行,承认错误。”
    IDENTITY.md 专长、工作风格 “我是 swarm 的编码臂,快速干净交付。”
    TOOLS.md 环境知识 “API 端口 3013,使用 wts 管理 worktree。”
    CLAUDE.md 持久笔记 学习偏好、重要上下文。

代理可在会话中编辑这些文件,PostToolUse hook 实时同步至数据库,重启时恢复。启动脚本 /workspace/start-up.sh 允许自安装工具(如 ripgrep),变更持久化。

如 HN Show HN 帖所述:“我们添加了 SQLite 内存... 领导可传播学习到 swarm,已观察到 compounding 效果。”

强化反馈循环:参数配置与监控

反馈循环通过钩子(hooks)和调度任务闭环:

  • 六大钩子:SessionStart 加载身份、PreToolUse 防循环(重复工具调用)、PostToolUse 心跳 / 同步、Stop 时总结。
  • 调度任务:Cron 每日让领导审视前日工作,优化流程(e.g., 识别瓶颈)。

可落地参数:

  1. 内存管理

    • EMBEDDING_MODEL: text-embedding-3-small(成本低,速度快)。
    • MAX_MEMORIES_PER_QUERY: 5–10(避免上下文溢出)。
    • PRUNE_THRESHOLD: 相似度 <0.7 的旧内存定期清理(cron 脚本)。
  2. 反馈阈值

    • LOOP_DETECTION: 相同工具 / 参数 3 次阻塞。
    • SUMMARY_MODEL: claude-3-haiku(快速总结)。
    • INJECTION_FREQUENCY: 领导每 5 任务后评估并注入。
  3. 监控清单(Dashboard UI):

    • 代理状态:在线 / 离线、心跳延迟 <30s。
    • 任务指标:完成率 >85%、平均时长 <2h。
    • 内存增长:每日 <50 条,embedding 向量维度监控(数据库查询)。
    • 涌现指标:身份文件变更频率、startup 脚本迭代次数。

集成示例:

  • Slack:设置 BOT_TOKEN、APP_TOKEN,支持线程更新。
  • GitHub App:Webhook 处理 @mention、review 请求。

风险控制与优化策略

潜在风险包括内存膨胀(设 TTL 30 天过期)和协调环(钩子已防)。LLM 非确定性可用多模型 fallback(env: MODEL=claude-3.5-sonnet)。

回滚策略:

  • 任务暂停:API /tasks/:id/pause
  • 身份快照:数据库备份前编辑。
  • A/B 测试:并行 swarm 实例对比改进。

实践案例:部署后,Slack 发送 “审阅 PR #123”,领导分解为 “代码审阅”“测试修复”,worker 执行,次日调度优化测试脚本。观察一周,任务效率提升 20%。

落地清单

  1. 克隆 repo,配置 .env(API_KEY 随机 32 位,Claude token)。
  2. docker compose up -d,验证 API /health。
  3. 启动 UI:cd ui && pnpm dev。
  4. 测试任务:curl -H "Authorization: Bearer $API_KEY" POST /tasks "分解此问题"。
  5. 调度自省:添加 cron “0 9 * * * lead assess yesterday”。
  6. 监控一周,调优阈值。

Agent-Swarm 证明了共享状态 + 反馈循环在 OSS 中的可行性,开发者可快速构建自适应代理团队。

资料来源

(正文字数约 1250)

查看归档