☰
并行不阻塞:mercury-agent子代理多智能体模式完整教程(含文件锁与资源感知调度)
2026/9/29 21:45:52 网站建设 项目流程

并行不阻塞:mercury-agent子代理多智能体模式完整教程(含文件锁与资源感知调度)

【免费下载链接】mercury-agentSoul-driven AI agent with permission-hardened tools, token budgets, and multi-channel access. Runs 24/7 from CLI, Telegram or More.项目地址: https://gitcode.com/gh_mirrors/me/mercury-agent

mercury-agent 是一款灵魂驱动(Soul-driven)的 AI 智能体,除强化权限的工具与 Token 预算外,最亮眼的功能就是子代理(Sub-Agent)多智能体模式:主代理把复杂任务拆解后并行委派给多个后台智能体,你无需等待、可以继续对话。本文带你完整理解它的工作原理、文件锁机制与资源感知调度,附全部实用命令清单。

为什么需要多智能体模式

传统 AI 智能体是单线程的:一个上下文窗口、一次只干一件事。让它"调研 + 写代码 + 写测试",它只能顺序执行,每一步都在阻塞下一步。

子代理模式打破了这个瓶颈:

  • 并行执行—— 多个任务在各自独立的上下文窗口中同时推进
  • LLM 自主委派—— 主代理会根据任务复杂度自己决定何时拆解委派
  • 非阻塞—— 子代理在后台干活,你可以继续正常聊天
  • 文件锁—— 读写锁防止多个智能体同时写坏同一个文件
  • 资源感知—— 并发上限根据你机器的 CPU 和内存自动检测

工作原理:主代理是调度器

你的消息 → 主代理(编排者) ├─ delegate_task("调研 X") → 子代理 a1(独立上下文) ├─ delegate_task("实现 Y") → 子代理 a2(独立上下文) └─ 继续对话 → 即时回复你

每个子代理拥有独立的上下文窗口(不会被主对话污染)、独立的步数预算(默认 25 步)、与主代理相同的权限系统,并通过文件锁与队友协作。委派动作由 delegate-task.ts 中的delegate_task工具触发,完成后会自动推送通知到你的来源渠道(CLI 或 Telegram)。

子代理命令速查表

命令作用
/agents列出所有运行中和已完成的子代理
/agents stop <id\|all>停止指定或全部子代理
/agents pause <id>/resume <id>暂停 / 恢复子代理
/agents config查看资源分配(最大并发数、模式)
/agents set max <n>手动设置最大并发数
/code agent <task>立即把一个编码任务委派给子代理
/bg: <task>用自然语言在后台跑一个子代理任务
/bg list查看 shell 后台任务与子代理任务
/halt紧急停止所有子代理并清空队列
/stop全面停止:清队列、释放文件锁、清空任务板
/reset全量重置:/stop+ 清空会话上下文

💡 这些小斜杠命令走快速通道——即使主代理正忙也能即时生效,非常适合紧急干预。

文件锁:读写锁防止并发写冲突

多个智能体同时改代码,最怕的就是"你改一半我也改"。mercury-agent 用一套经典的读者-写者锁解决它,实现位于 file-lock.ts:

  • 读锁:多个智能体可同时读同一文件;但只要别的智能体持有写锁,读请求就会被拒绝
  • 写锁:排他锁。只要任何别的智能体持有该文件的任何锁,写锁就拿不到
  • 自动释放:智能体结束时自动releaseAll,不会遗留僵尸锁
  • 死锁检测:detectDeadlock()会周期性检查锁图,发现互锁就处理

在 sub-agent.ts 中可以看到锁的实际接入点:每次调用write_file/edit_file等工具前申请写锁,调用read_file/list_dir时申请读锁——拿不到锁就记录为"未能修改的文件",而不是硬写。

资源感知调度:并发上限是怎么算出来的

子代理运行在主进程内,共享同一块 V8 堆内存,所以并发不能无脑拉满。resource-manager.ts 的算法很务实:

  1. CPU 维度:max(1, 核心数 - 1)
  2. 可用内存维度:(可用内存 - 1024MB) ÷ 512MB
  3. 总内存维度:(总内存 ÷ 2) ÷ 512MB
  4. 取三者最小值,且硬上限为3(MAX_CONCURRENT_SUB_AGENTS)
  5. 可用内存不足 2GB 时,直接降为1

任务来了却满员怎么办?排队,而不是丢弃。调度器 supervisor.ts 会把它放进等待队列,任务板上显示 "Queued — waiting for slot",一旦有智能体完成,队列按顺序自动补位。

一步配置:启用子代理模式

在~/.mercury/mercury.yaml中加入:

subagents: enabled: true maxConcurrent: auto # auto 自动检测,或手动指定数字 mode: auto # auto(LLM 决定委派)或 manual(用户控制)

也可以用环境变量覆盖:SUBAGENTS_ENABLED、SUBAGENTS_MAX_CONCURRENT、SUBAGENTS_MODE。想临时调并发,直接对话里发/agents set max 2即可,无需重启。

安全护栏:预算、步数与内存三重保险

并行不等于失控,mercury-agent 给子代理装了三重保险:

  • 步数预算:默认 25 步用完后若任务没做完,状态置为paused(而非谎报完成),调度器最多自动续跑 3 次(supervisor.ts 中MAX_SUBAGENT_STEP_RESUMES),每次续跑会先检查磁盘上的进度、不重复劳动
  • 内存治理:每步前后都检查 V8 堆使用率(memory-governor.ts),超警戒线先中止该子代理,逼近上限则保护性退出,防止拖垮整个进程
  • Token 记账:每个子代理的输入/输出 Token 实时写入任务板,统一纳入全局 Token 预算;预算紧张时系统提示词会自动要求子代理"简洁作答"

任务板:所有进度的持久化快照

每个子代理都是任务板(Task Board)上的一张卡片:ID、任务描述、状态(pending/running/paused/completed/failed/halted)、进度、锁定的文件、Token 用量。卡片实时持久化到~/.mercury/memory/task-board.json(见 task-board.ts),重启也不丢,/agents随时可查全貌。

关键文件索引

模块路径
子代理执行核心src/core/sub-agent.ts
调度器与排队src/core/supervisor.ts
文件读写锁src/core/file-lock.ts
资源感知调度src/core/resource-manager.ts
任务板src/core/task-board.ts
委派工具src/capabilities/subagents/
官方文档website/docs/integrations/sub-agents.mdx

最佳实践清单

  1. 适合并行的任务才委派:"一边调研 X 一边实现 Y" 这类天然可拆分的任务收益最大
  2. 给独立工作目录:委派时可指定workingDirectory,物理隔离减少锁竞争
  3. 最小化工具面:通过allowedTools给子代理只发它需要的工具,更安全也更省 Token
  4. 善用/agents config:先看自动检测到的并发上限,再决定是否手动覆盖
  5. 定期/agents巡检:长任务跑起来后,一眼看清谁在跑、谁在排队、谁被暂停

用一句话总结:mercury-agent 的子代理模式 =独立上下文+读写文件锁+资源感知排队+预算护栏,让"多个 AI 同时干活"既快又稳。

【免费下载链接】mercury-agentSoul-driven AI agent with permission-hardened tools, token budgets, and multi-channel access. Runs 24/7 from CLI, Telegram or More.项目地址: https://gitcode.com/gh_mirrors/me/mercury-agent

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询