Agent Engineering 课程阅读
首页/课程二 · Agent 手写/认识 Agent:从问答到行动

在 GitHub 查看原文

本页目录

L01 — 认识 Agent:从问答到行动

本课目标:跑通一个最小 Agent,建立"Agent = LLM + 工具 + 决策"的直观认知。先看到效果,理论细节后面课再深入。

学完 RAG 课程,你已经能让大模型"基于文档回答"。这课开始,我们要让大模型"会做事"——查时间、做计算、甚至上网搜索。


1. 大模型的根本局限:只会说,不会做

你已经很熟悉大模型了(RAG 课程用了 9 课)。但它有个根本局限:

它只会生成文本,不能真正"做事"。

试想这些场景:

你问的问题 大模型的回答 问题在哪
"现在几点了?" "我无法获取实时时间" 🚫 训练数据有截止日期,不知道"现在"
"123 × 456 等于多少?" "56088"(可能算对,也可能算错) 🚫 大模型不擅长精确计算,经常算错
"今天北京天气怎么样?" "我无法获取实时天气" 🚫 不能联网
"帮我建个待办事项" "建议你这样列..."(只给建议) 🚫 只能说不能做

RAG 解决了"不知道你的私有数据"的问题(让它能查文档)。但它还是只会"说",不会"做"——查不了时间、算不对数学、连不了网、改不了文件。

🎯 Agent 要解决的,就是让大模型从"只会说"变成"会做事"。


2. Agent 是什么?三个要素

Agent(智能体)= LLM(大脑)+ 工具(手脚)+ 自主决策循环(自己决定干嘛)

        ┌─────────────────────────────┐
        │         LLM(大脑)          │
        │  理解任务 → 决定用什么工具    │
        │  → 看工具返回的结果 → 再决策  │
        └──────────────┬──────────────┘
                       │ 决策:"我要调用 get_time"
        ┌──────────────▼──────────────┐
        │       工具(手脚)           │
        │  get_time / calculator /    │
        │  search / file_write ...    │
        └──────────────┬──────────────┘
                       │ 结果:"现在是 14:30"
                       │ 喂回给 LLM
                       ▼
                 (循环直到完成)

三个要素缺一不可: - LLM:负责理解、推理、决策("这个任务该用什么工具") - 工具:LLM 自己做不到的事,交给外部工具(查时间、计算、搜索、读写文件) - 决策循环:LLM 不是一次性给答案,而是"调用工具→看结果→再决定下一步"的循环

💡 一个类比:LLM 像一个聪明但被困在屋子里的顾问,什么都知道但碰不到外面的世界。Agent 就是给他配了电话、计算器、电脑——他能打电话问时间、用计算器算数、用电脑查资料,从而真正帮你解决问题。


3. 三种形态对比:Chatbot vs RAG vs Agent

Chatbot RAG Agent
能做什么 聊天、回答训练知识 基于你的文档回答 执行任务、调用工具
知识来源 训练数据 你的文档库 训练数据 + 文档 + 实时工具
能查实时信息吗 ✅(用工具)
能精确计算吗 ❌(经常算错) ✅(用计算器工具)
能"做事"吗 ✅(写文件、发请求…)
有决策循环吗 ❌(一问一答) ❌(检索一次) ✅(多轮决策)

可以看到 Agent 是能力最强的形态。而 RAG 和 Agent 不是对立的——后面 L07(Agentic RAG)你会学到,可以把 RAG 包装成 Agent 的一个工具,让 Agent 自主决定要不要检索。


4. Function Calling:让大模型"调用"工具的桥梁

Agent 是怎么让 LLM 调用工具的?核心机制叫 Function Calling(函数调用)

原理(先有个印象,L02 会深入):

1. 你告诉 LLM:"你有这些工具可用"
   tools = [get_time(获取时间), calculator(计算器)]

2. 用户问:"现在几点?"
   LLM 不是直接回答,而是输出:"我要调用 get_time,参数:无"

3. 你的代码执行真正的 get_time 函数,拿到 "14:30"

4. 把 "14:30" 喂回给 LLM

5. LLM 看到结果,组织成自然语言回答用户:"现在是下午 2 点 30 分"

关键点:LLM 自己不执行函数,它只是"说"要调用什么。真正执行的是你的代码。 LLM 像指挥官下命令,你的代码是执行命令的士兵。

🎯 这个设计很巧妙:LLM 负责智能决策(该用什么工具、传什么参数),代码负责安全执行(真正去查时间/算数)。各司其职。


5. 本课代码会做什么

code.py 会跑通一个最小 Agent,让你亲眼看到上面的过程:

给 Agent 配两个工具

  • get_current_time:获取当前时间
  • calculator:做数学计算

问它两个问题,看它怎么"行动"

  • 问题 1:"现在几点了?" → 看 Agent 决定调用 get_current_time
  • 问题 2:"现在是几点?距离今天 18:00 还有多少分钟?" → 看 Agent 连续调用两个工具(先查时间,再算差值)

重点观察

代码会打印 Agent 的每一步决策: - 🤔 Agent 决定调用什么工具、传什么参数 - 🔧 工具执行后返回什么 - 💬 Agent 最终怎么组织回答

你会看到 Agent 不是一次性回答,而是一个"决策→执行→再决策"的过程——这就是 Agent 的核心。


6. 跑起来

python agent-lessons/01_what_is_agent/code.py

💰 省钱提示:本课调用 GLM 的 function calling。把代码里 CHAT_MODEL = "glm-4" 改成 "glm-4-flash" 可以免费(flash 也支持 function calling)。


下一课 L02 — Function Calling 深入 会拆开讲:模型到底怎么"决定"调用工具、tools 怎么定义、参数怎么解析。