WEEK 12 / 16 AI 应用 · Agent 基础与实战
PYTHON 程序设计 · V2 · 第 12 周(100 分钟 · L25–L26)

AI 自己决定
调什么工具、走几步

前面所有应用都是「你问它答」。Agent 不同:给它一个目标,它自己拆步骤、选工具、看结果、再决策—— 今天手写 ReAct 循环(一个 while + Function Calling),不用任何 Agent 框架。

所属模块 M5 AI 应用开发← → 翻页 · F 全屏

今日课表(100 分钟)

时间环节要点
0–8开场对比「123×456」普通对话可能算错;Agent 自己决定调计算器——精准
8–20ReAct 框架思考→行动→观察循环;做菜类比;人类也这么解决问题
20–34手写核心循环while + max_steps + 工具字典 + Function Calling——没有魔法
34–46动手练习运行场:人肉走一遍 ReAct(补全单位换算函数)
46–58实战工具设计搜索/计算器/自定义工具;description 是写给 AI 的说明书
58–70三种故障与防护无限循环(max_steps)/错误传播(try+ERROR标注)/选择不当(描述分明)
70–82实战 Agent 演示三步任务:搜面积→换算→计算——完整思考轨迹打印
82–92边界讨论什么任务交 Agent(路径未知)什么用确定代码(固定流程)
92–100小测随堂小测 3 题

手写循环是本课核心——理解它,Agent 框架就再无魔法。

开场对比:谁来做决定

普通对话 问「123 × 456 等于多少」→ 大模型「心算」——可能算错。
Agent 同一个问题 → Agent 自己决定调用计算器工具 → 返回精确结果。
区别不是「更聪明地回答」,而是「自己决定用什么工具解决问题」。 LangChain / CrewAI 那些 Agent 框架的底层,就是今天要手写的这个循环。

ReAct:思考 → 行动 → 观察

Thought
我该做什么
→
Action
调用工具
→
Observation
看到结果
↺
再思考…
直到完成

手写 Agent 核心循环

tools = {"calculator": calc_fn, "search": search_fn, "now": time_fn}
messages = [{"role": "user", "content": "中国面积能装下多少个足球场?"}]

for step in range(8):                          # max_steps:防无限循环!
    resp = llm(messages, tools=tool_schemas)    # 把工具说明书给模型

    if not resp.tool_calls:                     # 不再调工具 = 任务完成
        print("✓ 完成:", resp.text)
        break

    for call in resp.tool_calls:
        print(f"  思考→行动: {call.name}({call.args})")
        result = tools[call.name](**call.args)   # 执行永远是代码的事
        messages.append(tool_result(result))  # 结果喂回去,进入下一轮

整个 Agent = 一个循环 + 工具字典 + Function Calling。没有魔法。

动手:人肉走一遍 ReAct

交互 · 你来当 Agent 的「大脑」,走完这个循环

补完 to_square_km 再运行——你刚刚执行了 Agent 的第三个工具调用。

Agent 的三种典型故障与防护

① 无限循环——反复调用同一工具停不下来 防护:max_steps 上限 + 重复调用检测
② 错误传播——上一步结果错,越走越偏 防护:工具内部 try/except,错误信息明确标注「ERROR:」
③ 工具选择不当——两个工具功能重叠,AI 犹豫 防护:description 边界写清楚——说明书越分明,选择越果断

课堂讨论:什么任务交给 Agent?

适合 Agent
  • 步骤不确定:查资料→换算→再查(今天的示例)
  • 需要组合多个工具的开放式任务
适合确定性代码
  • 固定流程:每天定时导出报表
  • 要求 100% 可复现:一次写对 if 就够了,别绕 Agent
判断题:「把班里 60 个人的成绩排序输出」需要 Agent 吗? ——不需要。一个 sorted() 就是确定解;Agent 是给「路径未知」的任务准备的。

随堂小测(3 题)

交互 · 点击选项作答

课后与下周预告

本周课后
  • 练习:给你的 Agent 加一个「随机笑话生成器」工具,测试它选不选
下周:W13 FastAPI 前后端与方法论 把 AI 能力包装成网页服务(FastAPI 后端 + 前端聊天页 + 对话记忆),再学 AI 结对开发方法论——M5 收官。 提前看下周课件 →

深入阅读:M5 模块页 · FastAPI 实战续(异步/CORS)