AI Agent 30天速成|Day4 教学笔记
·
今日总学习目标
- 理解Agent规划、任务拆解核心思想,掌握ReAct、Plan-Solve标准推理框架
- 基于前3天代码,实现自主任务拆解Agent(复杂问题自动拆分多子任务)
- 实现多工具串行/并行调度、任务状态管理、失败子任务重试机制
- 整合RAG知识库+Function Calling+任务规划,完成全能基础智能体
每日时长分配(全天8h)
- 理论笔记阅读+理解:2.5h
- 代码编写调试:4h
- 复盘+面试背诵:1.5h
一、核心理论教学笔记
1. Agent规划核心概念
1.1 什么是任务规划
当用户提出复合型复杂问题(多步骤、多工具、多知识库查询),大模型无法一次性给出答案,需要先拆解成多个可执行子任务,按顺序分步执行,最后汇总结果。
例:“帮我计算(125+36)*8,同时查询RAG定义,最后汇总成一段总结”
拆解子任务:
- 调用计算器计算125+36
- 调用计算器计算结果×8
- RAG检索RAG相关知识
- 整合全部结果输出总结
1.2 两大主流推理框架(面试必考)
(1)ReAct 推理+行动框架(最简单、入门首选)
核心逻辑:Thought→Action→Observation循环
- Thought:模型思考当前需要做什么、下一步执行什么工具/检索
- Action:输出标准化工具调用/检索指令
- Observation:拿到工具/知识库返回结果,作为观察输入下一轮思考
循环往复直到任务全部完成,输出最终答案。
优势:实现简单、天然适配Function Calling;缺点:复杂多步骤任务容易跳步、漏任务。
(2)Plan-Solve 先规划后执行框架
两步流程:
- Plan阶段:模型一次性输出完整任务清单(结构化JSON子任务列表),包含任务类型、执行顺序、依赖关系
- Solve阶段:程序按顺序逐个执行子任务,缓存每个子任务结果,全部完成后统一汇总
优势:任务清晰可控,便于监控、断点续跑、失败重试;缺点:一次性规划消耗更多Token,复杂依赖场景规划易出错。
1.3 子任务类型分类(统一抽象)
统一封装三类任务,一套调度器兼容所有任务:
calc:数学计算工具调用(复用Day2计算器)rag_search:知识库检索任务(复用Day3 RAG)llm_summary:纯文本推理总结任务(无需外部工具)
1.4 任务依赖规则
- 无依赖任务:可并行执行(多个独立RAG查询)
- 强依赖任务:必须等待前置子任务完成才能执行(先求和再相乘)
2. 任务调度与状态管理
2.1 任务状态枚举
pending:待执行
running:执行中
success:执行成功
failed:执行失败(支持重试)
finished:全部完成
2.2 核心调度能力
- 任务缓存:存储每个子任务ID、类型、入参、执行结果、状态
- 重试机制:单个子任务失败最多重试2次,仍失败标记任务异常
- 执行顺序控制:区分串行依赖、并行独立任务
- 终止条件:所有子任务success,或达到最大规划轮次强制汇总
3. 规划Agent上下文与Token优化
- 规划阶段仅传入用户原始问题,不携带冗余历史,减少规划开销
- 每个子任务执行结果精简压缩,避免大量文本累积超限
- 设置最大规划轮次(默认5轮),防止无限循环拆解任务
4. 完整全能Agent链路(Day1~Day4全能力整合)
用户复杂提问
→ Plan:模型拆解结构化子任务列表
→ 调度器循环执行每个子任务
- 子任务=计算:调用Function Calling计算器
- 子任务=知识库查询:执行RAG检索
- 子任务=文本推理:直接LLM生成
→ 缓存所有子任务执行结果
→ LLM汇总全部子任务输出,生成最终完整回答
二、今日学习重点
- 掌握ReAct与Plan-Solve两种Agent推理框架区别与适用场景
- 定义标准化子任务JSON Schema,强制模型输出任务清单
- 实现通用任务调度器,支持任务状态、重试、串行执行
- 整合LLM、RAG、Function Calling、任务规划一体化Agent
- 处理规划异常:任务格式错乱、子任务重复、依赖顺序错误
三、今日难点 & 解决方案
难点1:模型拆解任务格式混乱,无法解析子任务列表
解决方案:
- 使用Pydantic定义任务列表Schema,Prompt强制输出纯JSON
- temperature设为0,消除随机性
- 正则提取JSON、解析失败自动重新规划一次
- Few-shot给出标准任务拆解示例
难点2:子任务执行失败导致整体流程中断
解决方案:
- 单个任务捕获全部异常,标记failed,记录错误信息继续执行剩余任务
- 配置单任务最大重试次数,重试失败后在最终汇总中提示异常
- 汇总阶段告知用户哪些任务执行失败,给出失败原因
难点3:模型无限拆解、产生大量冗余子任务
解决方案:
- 全局限制最大规划轮次,到达上限停止拆解直接汇总已有结果
- Prompt约束:无需拆分的简单问题直接回答,禁止多余子任务
- 任务去重:调度器过滤重复类型、重复入参的子任务
难点4:多子任务结果过长,Token超限
解决方案:
- 每个子任务执行后自动精简输出文本,剔除换行、冗余描述
- 汇总前做滑动窗口裁剪,只保留关键任务结果
- 长结果分段摘要压缩
四、完整练习代码(基于Day1/2/3扩展)
前置依赖
沿用前几日所有依赖:aiohttp、pydantic、faiss-cpu、numpy、fastapi、uvicorn,最后总结提示词有bug需要提示词里加前置任务的结果
1. 任务规划核心模块 task_planner.py
更多推荐

所有评论(0)