Agent Engineering 课程阅读

在 GitHub 查看原文

本页目录

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 深入)要讲的"参数解析与错误处理"。


✅ 完成本课后,你应该能回答

  1. 大模型的根本局限是什么?Agent 怎么弥补这个局限?
  2. Agent 的三个要素是什么?(提示:大脑、手脚、循环)
  3. Chatbot、RAG、Agent 三者的核心区别是什么?
  4. Function Calling 里,谁负责"决定"调用工具?谁负责"执行"?为什么要这样分工?
  5. Agent 为什么要"循环"?能不能一次性给出答案?(提示:有些任务需要根据上一步结果决定下一步)