第 09 期 | 多轮对话与复杂任务分解

更新于 2026/4/15

好的,作为技术教育专家,我将为你撰写这篇关于 Hermes Agent 复杂任务分解的深度教程。


副标题:学会引导 Agent 思考,掌握 /plan 命令和任务树管理,分而治之完成超难需求。

在之前的课程中,我们已经掌握了 Hermes Agent 的基础架构、技能扩展和记忆系统。这些功能使 Agent 能够响应单轮或简单的多轮请求。然而,现实世界中的任务往往是复杂的、多步骤的,需要周密的规划、执行和验证。例如,“调研市面上主流的 AI Agent 框架,对比它们的优缺点,并为我写一份摘要报告”,这样的需求无法通过一次简单的 Prompt 调用完成。

本期,我们将深入 Hermes Agent 的高级认知核心——规划器 (Planner) 与任务树 (Task Tree) 系统。你将学会如何将一个宏大的目标分解为一系列可执行的子任务,并像项目经理一样监督、调整和驱动 Agent 完成整个流程。这是从“聊天机器人”迈向“自主智能体”最关键的一步。

学习目标

完成本期课程后,你将能够:

  1. 理解任务分解的必要性:明白为何复杂任务必须被拆解成更小的步骤,以及这对 LLM 的重要性。
  2. 掌握核心概念:深入理解规划器 (Planner)、任务树 (Task Tree) 以及任务状态 (Task Status) 的概念。
  3. 精通 /plan 命令:学会使用 /plan 命令启动 Agent 的规划模式,将高层级目标转化为具体的执行计划。
  4. 管理任务树:学会使用 /task 系列命令查看、审批、执行和监控任务树的整个生命周期。
  5. 实践复杂任务:通过一个真实世界的场景,完整地走一遍从提出需求到获得最终成果的全过程,体验“人机协作”(Human-in-the-Loop) 的强大之处。

核心概念讲解

在深入实战之前,我们必须理解支撑复杂任务执行的几个核心概念。

1. 从单次调用到多步规划 (From Single-turn to Multi-step Planning)

传统的 LLM 交互模式类似于一个“函数调用”:输入一个 Prompt,得到一个输出。这种模式在处理信息查询、文本生成等原子性任务时非常高效。但面对一个需要“调研、分析、总结”的复杂任务时,它的局限性就暴露无遗:

  • 上下文窗口限制:复杂的任务链可能需要处理海量信息,远超单个 LLM 的上下文窗口大小。
  • “一步错,步步错”:在一个长链条的思考中,如果中间某个环节出错,整个结果都可能被污染,且难以追溯和修正。
  • 工具使用的僵化:无法动态地决定在哪个步骤应该使用哪个 Skill (例如,先用 web_search,再用 file_io 写文件)。

Hermes Agent 的 规划器 (Planner) 正是为了解决这些问题而设计的。当你使用 /plan 命令时,你不再是要求 Agent “立即回答”,而是要求它“为我制定一个计划”。Agent 会调用一个专门用于规划的 LLM (或者使用特定的规划算法),将你的宏大目标分解成一个由多个子任务组成的、具有依赖关系的结构。

2. 任务树 (Task Tree):行动的蓝图

Planner 生成的计划并非一个简单的列表,而是一个任务树 (Task Tree)。这是一个层级结构,完美地表达了任务之间的关系。

  • 根节点 (Root Task):代表你的原始、高层级的目标。
  • 子节点 (Sub-tasks):代表为完成父任务而必须执行的具体步骤。一个子任务本身也可以有更下一级的子任务,形成嵌套。
  • 依赖关系 (Dependencies):任务树隐含了执行顺序。通常,一个父任务的完成依赖于其所有子任务的成功完成。某些子任务之间也可能存在顺序关系(例如,必须先获取数据,然后才能分析数据)。
  • 任务状态 (Task Status):每个任务节点都有一个状态,用于追踪整个计划的执行进度。常见的状态包括:
    • PENDING:待处理。计划已生成,但尚未被批准或执行。
    • APPROVED: 已批准。用户已经确认计划,等待执行。
    • RUNNING:执行中。Agent 正在处理这个任务。
    • COMPLETED:已完成。任务成功执行,其结果 (output) 可被其他任务使用。
    • FAILED:已失败。任务执行过程中遇到错误。

这个任务树就是 Agent 执行复杂任务的“行动蓝图”。它清晰、透明,并且允许人类在执行前、执行中进行干预。

3. 人机协作 (Human-in-the-Loop):你是总指挥

Hermes Agent 的规划系统并非一个“黑盒”。它将计划的最终决定权交还给了用户。在 Planner 生成任务树后,它会暂停并等待你的批准。

这种“人在环路中”的设计至关重要:

  • 安全性:你可以审查 Agent 的计划,防止它执行有害或不符合预期的操作(例如,在不合适的网站上搜索,或删除重要文件)。
  • 正确性:你可以修正 Agent 的误解。如果 Agent 对你的意图理解有偏差,生成的计划也会是错误的。此时,你可以修改、删除或添加任务节点,以确保计划的正确性。
  • 灵活性:在任务执行过程中,如果遇到意外情况(例如,某个 API 不可用),你可以介入并调整后续的计划。

现在,让我们带着这些概念,进入激动人心的实战环节。

💻 实战演示

我们将模拟一个真实的研究任务:“分析过去三天关于 ‘Devin’ 这个 AI 软件工程师的最新新闻和技术社区讨论,总结其核心能力、争议点,并以 Markdown 格式生成一份简报。”

这个任务对于单轮 Prompt 来说几乎是不可能完成的。它需要:

  1. 在多个信息源(新闻网站、Hacker News、Reddit 等)进行搜索。
  2. 浏览和筛选搜索结果,识别高质量信息。
  3. 从多篇文章和讨论中提取关键信息。
  4. 对信息进行分类和综合(能力、争议点)。
  5. 将结果格式化为 Markdown 简报。

让我们看看 Hermes Agent 如何通过规划来解决它。

第一步:启动规划 (Initiating the Plan)

我们不用直接提问,而是使用 /plan 命令来陈述我们的目标。

/plan 分析过去三天关于 ‘Devin’ 这个 AI 软件工程师的最新新闻和技术社区讨论,总结其核心能力、争议点,并以 Markdown 格式生成一份简报。

提交后,Agent 不会立即给出答案。相反,它会告诉你它正在思考和制定计划。稍等片刻,你会收到 Planner 的初步响应。

> 好的,我已经理解了您的目标。正在为您制定一个详细的执行计划...
> ...
> 计划已生成!这是一个包含 5 个主要步骤的任务树。请您审查。
> 
> **任务树预览:**
> - **Task #1 (Root)**: 生成关于 'Devin' 的简报
>   - **Task #2**: [子任务] 搜索过去三天关于 'Devin' 的新闻和讨论
>   - **Task #3**: [子任务] 从搜索结果中筛选 5-7 篇最相关的文章/帖子链接
>   - **Task #4**: [子任务] 逐一访问链接,提取关于核心能力和争议点的关键信息
>   - **Task #5**: [子任务] 综合所有提取的信息,撰写 Markdown 格式的简报
> 
> 您可以使用 `/task list` 查看详细的任务树。
> 请问您是否批准此计划?(y/n)

第二步:审查与理解任务树 (Reviewing the Task Tree)

Agent 给出了一个清晰、合乎逻辑的计划。在批准之前,让我们使用 /task list 命令来查看更详细的任务树结构。

/task list

终端会返回一个格式化的树状结构,包含每个任务的 ID、父任务 ID、状态和简要描述。

ID   PARENT  STATUS   DESCRIPTION
--   ------  -------  ------------------------------------------------------------------
1    -       PENDING  (Root) Generate a briefing about the AI software engineer 'Devin'.
2    1       PENDING  Search for recent news and community discussions about 'Devin'.
3    1       PENDING  Filter and select 5-7 most relevant links from search results.
4.   1       PENDING  Visit each link and extract key points on capabilities and controversies.
5    1       PENDING  Synthesize all extracted information and write a Markdown brief.
  • ID: 每个任务的唯一标识符,我们后续操作任务时会用到它。
  • PARENT: 父任务的 ID。所有子任务的 PARENT 都是 1,即根任务。
  • STATUS: 当前所有任务都处于 PENDING 状态,等待我们批准。
  • DESCRIPTION: 任务的具体内容。

这个计划看起来非常合理。它遵循了“搜索 -> 筛选 -> 提取 -> 综合”的经典研究流程。

第三步:批准并启动任务 (Approving and Starting the Task)

我们对计划感到满意,现在可以批准它了。可以直接输入 yyes,也可以使用 /task start 命令来启动整个计划。

y

或者,更明确地:

/task start 1

启动根任务会自动按顺序驱动其子任务的执行。Agent 会开始执行第一个待处理的子任务,即 Task #2。

> 计划已批准。开始执行任务树...
> 
> **[Task #2: RUNNING]** 正在执行搜索...
>   - 使用 Skill: `web_search`
>   - 参数: `{"query": "AI software engineer Devin news and discussion last 3 days", "sources": ["google_news", "hacker_news", "reddit"]}`
> ...

Agent 会实时播报它的进展,包括正在执行哪个任务、调用了哪个 Skill 以及使用了什么参数。这是透明度的绝佳体现。

第四步:监控执行过程 (Monitoring the Execution)

几分钟后,Task #2 完成了。我们可以再次使用 /task list 查看进度。

/task list

输出现在会更新:

ID   PARENT  STATUS     DESCRIPTION
--   ------  ---------  ------------------------------------------------------------------
1    -       RUNNING    (Root) Generate a briefing about the AI software engineer 'Devin'.
2    1       COMPLETED  Search for recent news and community discussions about 'Devin'.
3    1       RUNNING    Filter and select 5-7 most relevant links from search results.
4    1       PENDING    Visit each link and extract key points on capabilities and controversies.
5    1       PENDING    Synthesize all extracted information and write a Markdown brief.

可以看到,Task #2 的状态已经变为 COMPLETED,而 Task #3 自动进入了 RUNNING 状态。根任务 #1 的状态也变成了 RUNNING,因为它下面的子任务正在被执行。

我们还可以查看某个已完成任务的结果。使用 /task show <ID>

/task show 2

这会显示 Task #2 的详细信息,包括它的输入、输出、状态和执行日志。

{
  "id": 2,
  "parent": 1,
  "status": "COMPLETED",
  "description": "Search for recent news and community discussions about 'Devin'.",
  "input": null,
  "output": {
    "type": "search_results",
    "data": [
      { "title": "Cognition AI launches Devin, the first AI software engineer", "url": "...", "source": "techcrunch.com" },
      { "title": "Hacker News Discussion: Devin AI", "url": "...", "source": "news.ycombinator.com" },
      { "title": "My thoughts on Devin after trying it for a day - r/programming", "url": "...", "source": "reddit.com" },
      ...
    ]
  },
  "logs": [
    "Starting task...",
    "Executing skill 'web_search'...",
    "Skill execution successful.",
    "Task completed."
  ]
}

注意 output 字段。Task #2 的输出(搜索结果列表)将自动成为 Task #3 的输入。这就是任务链如何串联起来的。

第五步:人机交互与计划调整 (Handling Exceptions and Adjustments)

假设在执行 Task #4 时,其中一个链接访问失败了(例如,网站宕机或需要登录)。Agent 不会卡死,它会将该任务标记为 FAILED 并暂停,等待你的指示。

> **[Task #4.2: FAILED]** 访问链接 `http://example.com/paywall-article` 失败。原因: HTTP 403 Forbidden.
> 
> 任务树执行已暂停。请检查问题并决定下一步操作。
> 您可以使用 `/task retry 4.2` 重试,或使用 `/task modify 4` 修改父任务的指令。

这是“人机协作”的魅力所在。我们发现这是一个付费墙文章,无法访问。我们可以决定跳过它,并稍微修改一下计划。比如,我们告诉 Agent 忽略失败的链接,继续处理其余的。

/task modify 4 "逐一访问【剩余的】链接,提取关于核心能力和争议点的关键信息。如果某个链接失败,请记录并跳过。"

修改后,我们可以重新启动任务。

/task start 4

Agent 会根据我们的新指令继续执行,从而展现出强大的鲁棒性和适应性。

第六步:获取最终成果 (Retrieving the Final Result)

当所有子任务都成功完成后,最后的 Task #5 会被执行。它会综合之前所有步骤收集到的信息,生成我们最终想要的 Markdown 简报。

当根任务 #1 的状态也变为 COMPLETED 时,整个工作流就结束了。

> **[Task #1: COMPLETED]** 所有任务已成功完成!
> 
> 最终结果已生成。您可以使用 `/task show 1` 查看。

我们执行 /task show 1,并在其 output 字段中找到最终的报告。

/task show 1
{
  "id": 1,
  "status": "COMPLETED",
  ...
  "output": {
    "type": "markdown_report",
    "content": "# AI 软件工程师 'Devin' 简报 (过去三天动态)\n\n## 核心能力\n\n- **端到端任务执行**: Devin 能够独立完成从需求理解、编码、调试到部署的整个软件开发流程。\n- **自主学习**: 能够通过阅读文档和API来学习新技术。\n- **强大的工具集**: 集成了 Shell、代码编辑器和浏览器,使其能模拟人类开发者的工作环境。\n\n## 主要争议点\n\n- **演示的真实性**: 社区有讨论质疑其公开演示视频可能经过剪辑,实际成功率未知。\n- **对开发者的替代性**: 引发了关于 AI 是否会大规模替代初级软件工程师的激烈讨论。\n- **泛化能力**: 目前尚不清楚其在复杂、真实世界项目中的表现如何。\n..."
  }
}

任务圆满完成!我们通过引导 Agent 思考和规划,成功地完成了一个原本极其耗时耗力的研究任务。

涉及命令

命令 别名 功能
/plan <your goal> /p 告诉 Agent 你的高层级目标,并让它生成一个任务计划。
/task list /tl 显示当前会话中的任务树结构、状态和ID。
/task show <id> /ts <id> 显示指定 ID 任务的详细信息,包括输入、输出和日志。
/task start <id> /ts <id> 启动一个处于 PENDINGAPPROVED 状态的任务。
/task approve <id> /ta <id> 批准一个或多个任务,但不立即执行。
/task modify <id> <new desc> /tm <id> 修改一个尚未执行的任务的描述或指令。
/task retry <id> /tr <id> 重试一个 FAILED 的任务。
/task cancel <id> /tc <id> 取消一个正在执行或待处理的任务。

要点回顾

  1. 分而治之 (Divide and Conquer):复杂任务的核心解决思路是将其分解为简单、可管理的子任务。这是 Agent 智能的体现。
  2. /plan 是入口:对于任何需要多个步骤才能完成的需求,都应该首先使用 /plan 命令,而不是直接提问。
  3. 任务树是蓝图:任务树清晰地展示了 Agent 的思考路径和执行计划。学会阅读和理解任务树是使用高级功能的关键。
  4. 你是监督者:Hermes Agent 赋予了用户审查、批准和修改计划的权力。这种“人机协作”模式确保了任务执行的安全、可控和高效。
  5. 状态驱动执行:任务的状态 (PENDING, RUNNING, COMPLETED, FAILED) 驱动着整个工作流的前进。监控任务状态可以让你随时了解项目进展。

通过掌握 Planner 和 Task Tree,你已经将 Hermes Agent 从一个简单的问答助手,升级为了一个能够规划和执行复杂项目的强大智能体。在下一期中,我们将探讨如何自定义 Agent 的行为和个性,让它更符合你的工作风格。

参考资料