Hermes Agent 新增异步子代理功能,委托任务不再阻塞父聊天
Nous Research 为 Hermes Agent 推出了异步子代理功能。委托工具现在可以生成后台代理,不再阻塞父聊天。本文介绍了 async_delegation 工具集(issue #5586),包括如何生成、检查、引导和收集任务,并讨论了子代理隔离、同步与异步的权衡以及何时使用 ACP。
Nous Research 已为 Hermes Agent 发布了一项更新,其委托工具现在可以异步运行子代理。根据公告,委托工作不再阻塞父聊天。
Hermes Agent 是 Nous Research 开发的开源个人代理。父代理可以生成子代理(称为子代理)来分配工作。在此之前,这种委托需要等待子代理完成。
该更新由 Nous Research 和联合创始人 Teknium 在 X 上宣布。现有用户可以通过运行 hermes update 来启用。
什么是子代理?
委托工具是 delegate_task。它生成一个子代理,即一个隔离的子代理。每个子代理都有自己的对话、终端会话和工具集。只有最终摘要返回给父代理。父代理的上下文永远不会看到子代理的中间工具调用或推理过程。这保持了父代理上下文窗口的小巧。
隔离是严格的。子代理以全新的对话开始,对父代理的历史一无所知。父代理必须通过 goal 和 context 字段传递所有信息。子代理继承父代理的 API 密钥、提供者配置和凭据池。该凭据池支持在速率限制时进行密钥轮换。你可以通过 config.yaml 将子代理路由到更便宜的模型。
之前的问题与现在的变化
在源代码中,delegate_task 是同步的。父代理在工具调用内部阻塞,直到每个子代理完成。在此期间,你的聊天会冻结。
这种设计阻止了多种工作流程。你无法启动一个长时间运行的任务并继续工作,也无法中途检查或引导一个运行中的任务。
Nous 在开放环境中构建了非阻塞路径。Issue #5586 添加了 async_delegation 工具集。它生成一个后台代理并立即返回一个 task_id。公告确认异步子代理现已可用。
异步工具涵盖完整生命周期:
- delegate_task_async — 生成后台代理,返回 task_id
- check_task — 非阻塞检查状态和最新输出
- steer_task — 向运行中的任务注入消息
- collect_task — 阻塞直到完成,返回完整结果
- cancel_task — 停止运行中的任务
- list_tasks — 列出会话中的所有异步任务
后台代理作为进程内线程运行,重用与 delegate_task 相同的 AIAgent 机制、凭据和工具集。
同步与异步委托对比
| 维度 | 同步 delegate_task | 异步委托 (async_delegation, #5586) | |------|-------------------|-------------------------------------| | 父聊天 | 阻塞直到所有子任务完成 | 立即返回 task_id;聊天保持自由 | | 运行时控制 | 无——等待 | 每个任务可检查状态、引导、收集或取消 | | 执行方式 | 父代理在工具调用内部等待 | 后台进程内线程 | | 上下文成本 | 仅返回最终摘要 | 仅返回最终摘要 | | 隔离性 | 每个子任务独立对话 | 每个子任务独立对话 | | 最佳用途 | 快速并行任务,需要等待 | 长时间任务,可与聊天并行 | | 持久性 | 跨轮次不持久 | 单会话;ACP (#4949) 针对跨轮次 |
代码示例:生成与引导
同步方式批量生成子任务并等待,并发数由 delegation.max_concurrent_children 限制,默认为 3。
# 同步:父代理等待所有子任务完成
delegate_task(tasks=[
{"goal": "研究主题A", "toolsets": ["web"]},
{"goal": "修复构建", "toolsets": ["terminal", "file"]},
])来自 issue #5586 的异步工具集立即返回控制权。
# 异步 (async_delegation 工具集, issue #5586)
t1 = delegate_task_async(goal="研究主题A")
t2 = delegate_task_async(goal="研究主题B")
check_task(t1["task_id"]) # 检查状态,不阻塞
steer_task(t2["task_id"], "仅使用2024年后的来源")
results = [collect_task(t["task_id"]) for t in (t1, t2)]使用场景示例
- 长时间研究与并行工作:启动子代理进行市场扫描,同时在主聊天中继续写作。
- 并行方案评估:生成三个子代理分别测试三种搜索后端,每个隔离,避免交叉污染。
- 后台编码任务:将多文件重构委托给子代理,自己同时审查其他文件。
- 监控运行:TUI 提供了 /agents 覆盖层(别名 /tasks),显示运行中和已完成的子代理的实时树。
关键要点
Hermes Agent 现在支持异步子代理;委托工具不再阻塞父聊天。非阻塞委托通过 async_delegation 工具集实现,追踪于 issue #5586。异步工具涵盖完整生命周期:生成、检查、引导、收集、取消和列出任务。子代理保持隔离,仅返回最终摘要,使父上下文保持小巧。该功能运行在进程内且为单会话;现有用户通过 hermes update 启用。