L01 练习
改
code.py里的代码,运行python agent-lessons/01_what_is_agent/code.py观察变化。 重点观察 Agent 的每一步决策(🤔)、工具执行(🔧)、最终回答(💬)。
练习 1:加一个新工具(热身)
在代码里加一个新工具 get_day_of_week,返回今天是星期几:
def get_day_of_week() -> str:
"""获取今天是星期几。"""
days = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
return days[datetime.now().weekday()]
别忘了在 TOOLS 里加上它的定义(参考 get_current_time 的格式),在 execute_function 里加上分支。
然后问 Agent:"今天是星期几?",看它会不会选你新加的工具。
观察重点:你写的 description 决定了 LLM 会不会选对工具。试试把 description 写得很模糊(比如只写"一个功能"),看 LLM 还能不能选对——这预示了 L04(工具设计)的重要性。
练习 2:让 Agent 连续调用多个工具
问一个需要多个工具配合的问题,比如:
"今天是几号?把这个日期的数字乘以 2 等于多少?"
观察:Agent 应该先调 get_current_time 拿到日期,再调 calculator 算乘法。看它能不能正确地"先查再算"。
思考:Agent 怎么知道要分两步、而不是一步到位?这就是"决策循环"的价值——它能根据上一步的结果决定下一步。
练习 3:观察"不调用工具"的情况
看问题 3(自我介绍)的输出。Agent 有没有调用工具?
思考:tool_choice="auto" 让 LLM 自己判断。如果问题不需要工具(比如"你是谁"),LLM 会跳过工具直接回答。这就是 Agent 的"智能"——不是无脑调用工具,而是按需调用。
试试把 tool_choice 改成 "none"(强制不调用工具),再问"现在几点",看 LLM 怎么回答(它应该说"我不知道")。
练习 4:故意给工具传错误的参数
问 Agent 一个有点刁钻的问题,看它怎么处理:
"帮我算一下 abc + 123"
观察:Agent 会调用 calculator 吗?如果调了,传的 expression 是什么?calculator 函数能处理这种非法输入吗?
思考:好的工具要有"错误兜底"——传了非法参数要返回友好的错误信息,而不是崩溃。这正是 L02(Function Calling 深入)要讲的"参数解析与错误处理"。
✅ 完成本课后,你应该能回答
- 大模型的根本局限是什么?Agent 怎么弥补这个局限?
- Agent 的三个要素是什么?(提示:大脑、手脚、循环)
- Chatbot、RAG、Agent 三者的核心区别是什么?
- Function Calling 里,谁负责"决定"调用工具?谁负责"执行"?为什么要这样分工?
- Agent 为什么要"循环"?能不能一次性给出答案?(提示:有些任务需要根据上一步结果决定下一步)