层次化任务分解
顶层目标 -> 子目标 -> 子子目标——这是人类(以及代理)处理大型任务的唯一方法。
层次化任务分解 是 CoddyKit 上的免费 AI Agents 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Agents 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Agents 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
任务变大时
“重构身份验证模块”对于一个提示来说太大了。智能体必须将其拆分为更小、更易管理的部分。
层次化任务分解(HTD)就是人类和智能体处理这类问题的方式。
层次结构
- 目标 — 高层次的目标
- 子目标 — 主要阶段
- 任务 — 具体步骤
- 动作 — 单个工具调用
Example Decomposition
Goal: Refactor authentication module to use OAuth.
Sub-goal 1: Set up OAuth dependencies
Task: Add dependency to requirements.txt
Task: Configure OAuth client
Sub-goal 2: Replace existing auth flow
Task: Replace login endpoint
Task: Replace session middleware
Task: Update tests
Sub-goal 3: Migration and rollout
Task: Write migration script
Task: Update documentationLLM-Driven Decomposition
DECOMPOSE_PROMPT = '''
Decompose this goal into 3-6 sub-goals. For each sub-goal, list 2-5 concrete tasks.
Return JSON: {sub_goals: [{name, tasks: [str]}]}
Goal: {goal}
'''递归分解
如果任务仍然太大,就进一步分解 IT。当任务适合在单个 LLM 步骤中完成时(约 3-5 次工具调用),就停止分解。
何时停止分解
经验法则:
- 任务描述可以用一句话表达
- 任务具有明确的验收标准
- 任务涉及的文件数量较少
- 任务可以通过特定测试进行验证
树形结构
将分解结果表示为一棵树。每个节点都是一个任务,包含:描述、状态(待处理/运行中/已完成/失败)以及子节点:
@dataclass
class TaskNode:
description: str
status: Literal['pending', 'running', 'done', 'failed']
children: list['TaskNode']
result: str | None = Noneexecute 深度优先
按深度优先遍历这棵树。完成每个叶节点后,再继续处理下一个:
def execute(node):
if node.children:
for child in node.children:
execute(child)
else:
node.status = 'running'
try:
node.result = run_leaf(node)
node.status = 'done'
except Exception as e:
node.status = 'failed'聚合结果
子节点完成后,在父节点处进行 aggregate:
def aggregate(parent):
summaries = [c.result for c in parent.children if c.status == 'done']
parent.result = llm.invoke(f'Summarise these sub-task results: {summaries}').content向用户展示任务树
对于长时间运行的智能体,请向用户展示带有实时状态更新的任务树。这有助于建立信任并提高透明度:
[x] Add OAuth dependency
[x] Configure OAuth client
[~] Replace login endpoint <-- in progress
[ ] Replace session middleware
[ ] Update tests允许编辑任务树
高级用户可能希望跳过、添加或重新排列任务。请支持手动编辑规划树。
失败时重新规划
如果子任务反复失败,就返回父节点并重新进行分解:
if failed_count(node) > 2:
parent = node.parent
parent.children = llm_replan(parent, failure_context=node.last_error)分解成本
每次分解都需要一次 LLM call。缓存会有所帮助——相同目标 -> 相同的初始分解。
何时停止拆分
智能体应在什么时候停止分解任务?
回顾
目标 -> 子目标 -> 任务 -> 动作。构建一棵树,按深度优先执行,聚合结果,并在失败时重新规划。这是处理长时程工作的标准模式。
常见问题解答
「层次化任务分解」课时是免费的吗?
是的 — 「层次化任务分解」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Agents 课程的其余内容,请升级到 CoddyKit PRO。 AI Agents 课程共包含 4 节课。
「层次化任务分解」这节课中我会学到什么?
顶层目标 -> 子目标 -> 子子目标——这是人类(以及代理)处理大型任务的唯一方法。 你通过在浏览器中直接运行的动手代码来练习 AI Agents,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AI Agents 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AI Agents 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「层次化任务分解」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AI Agents 课中编写并运行代码吗?
能。每节 AI Agents 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。