📖 Day 10 学习页:阶段二综合实战:多工具 Agent

Day 10:阶段二综合实战——多工具 Agent

🎯 今日目标:Day 1-9 所有组件的总装。产出一个有 4+ 工具、有记忆、有错误恢复、 有 Token 统计的完整 Agent。今天模板给得最少——因为所有零件你都亲手造过。

📚 本日资源:📝 练习模板 | 📋 手动验收清单

⏱ 今日安排(约 2 小时)

时间内容方式
20min总装图纸:组件关系与装配顺序阅读
90min总装 + 测试:完成 6 个 TODO 和 6 个测试场景编码
10min验收自查:对照清单逐项确认自查

📖 第一步:总装图纸(各天组件怎么拼)

                    ┌─────────────────────────────────────────┐
                    │            react_agent_with_memory       │
                    │                                          │
 用户输入 ─────────►│ ① memory.short_memory.get_recent()       │ ← Day 9 短期记忆
                    │ ② knowledge = memory.rag.retrieve(...)   │ ← Day 9 RAG 检索
                    │ ③ prompt = 记忆 + 知识 + 工具清单 + 问题  │ ← Day 6 prompt 构建
                    │ ④ for step in range(max_steps):          │ ← Day 1 异步 + 上限
                    │      llm 响应 → 解析 Action              │ ← Day 6 解析
                    │      execute_tool_with_recovery(...)     │ ← Day 8 超时 + 今天加重试
                    │      Observation 回填 → 下一轮           │
                    │ ⑤ metrics 统计 token / 耗时 / 调用次数    │ ← 今天新增
                    └─────────────────────────────────────────┘

错误恢复策略(今天的核心新知识点)

策略触发时机Agent 行为
RETRY瞬时错误(网络抖动)等 0.5s 重试 1-2 次
FALLBACK重试仍失败换备用方案(如换工具/用 LLM 直接回答)
SKIP非关键工具失败跳过该步骤,记录后继续
ABORT关键步骤失败/超步数带错误说明终止,返回已获得的部分结果

关键思想:工具失败不是异常,是给 LLM 的一条 Observation—— 把"计算器报错:除数不能为 0"喂回去,LLM 往往能自己换路子。程序崩溃才是失败,错误信息回传是纠错。

🛠 第二步:动手实操

  1. 打开模板:day10_practice_template.py:
    • TODO 2.1:再注册 2 个工具(read_file / search_web 模拟版),凑满 4 个
    • TODO 3.1:react_agent_with_memory() 主循环——按总装图纸把 ①-⑤ 串起来
    • TODO 4.1:print_metrics() 美化输出统计
    • TODO 5.1:execute_tool_with_recovery() —— 重试 2 次仍失败就把错误作为结果返回给 LLM,绝不抛异常打断循环
    • TODO 6.1:编写 main() 的 6 个测试场景
  2. 6 个测试场景(写进 main): 普通对话 / 单工具调用 / 多工具并发(asyncio.gather,Day 1)/ 多轮对话带记忆(Day 9)/ 工具失败后自动恢复(把一个工具故意改成会报错)/ Token 统计打印。
  3. 验收:python day10_practice_validator.py —— 验收会检查工具数量与错误恢复, 并用"间谍函数"拦截 calculator 调用,确认你的 Agent 真的执行了工具。
  4. 自测:跑 python day10_practice_template.py,6 个场景全部有真实输出(不是 print 占位)。

⚠️ 避坑

  • ❌ 一上来就拼全部组件——先把单工具 ReAct 跑通,再一个个往上挂,每挂一个测一次
  • ❌ 工具失败直接 raise → 整个 Agent 崩溃;错误要作为 Observation 回传给 LLM 自行纠正
  • ❌ Token 消耗不记录 → 成本失控时你毫无感知;每次 LLM 调用都记 prompt/completion tokens
  • ✅ 这是阶段二收官:做完回头把 Day 6 和今天的代码对比一下,你会直观看到'框架前 vs 总装后'的差距

🚀 下一站

阶段三(Day 11-15)将把这个 Agent 做成 FastAPI 服务 + Web 界面 + Docker 部署。 路线图见 主页,交付清单见 验收标准文档—— 从今天起没有模板了,按清单自主搭建,遇到问题回看对应天的学习页。