W2 代码练习打卡清单
手写 Function Calling 与 ReAct 循环 · 周一至周日

规则:每个练习文件先自己填完 TODO,再运行末尾自测,全部 PASS 才勾选对应任务。勾选状态自动保存在本浏览器,换浏览器不同步。

配套目录:agent-learning-w2/预计每日 5–7 小时周日复盘 2–3 小时里程碑:M0 Minimal Agent
本周进度
0 / 0

M0 验收标准(周六完成)

周一Day1 · Function Calling 全流程手写调用真实 APIday1_function_calling.py

打卡任务(PASS 后勾选)

验收标准

  • 模型调用了 calculator 工具而非自己心算
  • 工具结果正确回灌,模型给出含 "491" 的最终回答
  • 能解释 tool_calls 和 tool_call_id 的对应关系

常见坑

  • 模型不调工具:检查 system prompt 是否强制要求
  • arguments 是 JSON 字符串,需 json.loads
  • tool 消息必须带 tool_call_id
  • assistant 消息也要带完整的 tool_calls 结构
周二Day2 · 两工具 + Pydantic 校验 + 错误自纠调用真实 APIday2_tools_and_self_heal.py

打卡任务

验收标准

  • calculator + search 两个工具均正常调用
  • 错误参数(非字符串、空 JSON)被 Pydantic 拦截
  • 错误信息结构化回灌,模型在下一轮修正

常见坑

  • model_json_schema() 生成的格式要包在 function 键里
  • 校验失败不要抛异常——返回错误字符串让模型自纠
  • 搜索工具的 mock 数据要覆盖足够场景
周三Day3 · 手写 ReAct 循环调用真实 APIday3_react_loop.py

打卡任务

验收标准

  • 计算任务在 2-3 步内完成
  • 搜索+计算组合在 4-5 步内完成
  • 每步都有 Thought / Action / Observation 输出

核心概念

  • ReAct = while not done: think → act → observe
  • messages 列表 = Agent 短期记忆
  • 不是新算法——就是带工具调用的 while 循环
周四Day4 · 故障实验:四类失败模式与三层防御调用真实 APIday4_failure_modes.py

打卡任务

四类故障 × 防御

  • 死循环 → RepetitionGuard(相同参数拦截)
  • 上下文爆炸 → max_steps
  • 早停 → 系统提示约束
  • 过度思考 → max_tokens

常见坑

  • 重复检测的 key 要包含工具名+参数
  • 拦截后要回灌原因给模型,不能静默丢弃
  • max_tokens 太小可能导致 JSON 被截断
周五Day5 · 并行工具调用 + Prompt Caching调用真实 APIday5_parallel_and_cache.py

打卡任务

验收标准

  • 能区分串行和并行执行路径
  • 能解释 Prompt Caching 的前提条件和限制
  • 给出延迟对比数字(理解网络波动影响)

常见坑

  • 部分模型不支持 parallel tool calls,属正常
  • DeepSeek 可能不返回 cached_tokens,重点在原理
  • 延迟受网络波动影响,多跑几次取平均
周六Day6 · 整合 Minimal Agent + 演示调用真实 APIday6_minimal_agent.py

打卡任务

验收命令

python day6_minimal_agent.py --demo
python day6_minimal_agent.py "算 17*23+100"
python day6_minimal_agent.py "搜索 ReAct 再算 18*37"

本周产出(M0 deliverable)

  • 无框架 Minimal Agent(~80 行)
  • 三层防御:max_steps / 重复检测 / max_tokens
  • Pydantic 工具入参校验 + self-healing
  • 可观测:每步打印 Thought/Action/Observation
周日Day7 · 复盘与自测(2–3 小时)

固定动作

进入 W3 的准入自测(全是 Yes 才开始)

  • 能脱稿画出 FC 闭环的消息流程?
  • 能说清 self-healing 和重试的区别?
  • 能默写四类 Agent 故障和对应防御?
  • 理解 Prompt Caching 的命中条件?
  • Minimal Agent --demo 能跑通?

有任一项 No

  • 周一上午先补对应 Day 的练习,再进入 W3 的 LangGraph。