🎯 这一课要达成什么:补上一块关键的"过渡台阶"。前三课我们一行代码都没正式写过,但从下一课开始要读懂、修改真正的 Agent 代码了。这一课专门教你恰好够用的 Python——不多不少,刚好让你翻开第五课时每一行都看得懂。
⏱ 预计学习时间:6–10 小时(边读边在电脑上敲,比只看效果好十倍)
📌 难度:⭐⭐☆☆☆(零基础友好,但这一课务必动手敲,不能只用眼睛看)
🧩 前置要求:完成第一课(环境已配好)+ 第二、三课(理解 Agent 概念与提示工程)。
写在最前面:为什么突然插进来一节"学 Python"?
你可能发现了一个落差:
- • 第二、三课:全是概念和在网页上跟 AI 聊天,标注着"不需要编程基础",跟得很轻松。
- • 下一课(第五课):难度一下跳到 ⭐⭐⭐,开头就要你"实现第一个真正能运行的 ReAct Agent",满屏代码。
中间这道坎,如果没人扶一把,很多人就在这里放弃了——不是因为笨,而是没人把"从看不懂代码到看得懂代码"这一步铺平。
这一课就是那块台阶。我不会教你完整的 Python(那要几个月,也偏离我们的主线)。我只教后面几课 Agent 代码里真正会用到的那几样东西,而且每讲一个语法,都直接告诉你"它在 Agent 代码里长什么样、是干嘛的"。
💡 学习方式很重要:这一课一定要打开电脑、亲手敲。看代码就像看别人游泳,自己不下水永远学不会。用第一课建好的环境,新建一个 learn.py 文件,边读边把例子敲进去运行。
🗺 这一课在课程地图里的位置:第二课讲过 Agent 由"大脑/记忆/工具箱/规划"四件套组成。这一课不属于其中任何一件,它是实现这四件套的基本工具——就像盖房子前要先备好锤子、锯子、卷尺。备齐了它们,下一课才能动手开工。
目录
- 10. 回到"终点":现在我们逐行读懂下一课的代码
1. 先看一眼"终点":下一课的代码长什么样
我们先把第五课一开头会出现的真实代码摆出来。现在看不懂完全正常——这正是这一课要解决的。把它当成"通关目标",学完第 9 节再回来,你会发现每一行都懂了。
def search_web(query: str) -> str:
"""模拟网络搜索工具"""
mock_results = {
"北京天气": "北京今日:晴,气温 22°C,微风",
"python": "Python 是一种简单易学的编程语言",
}
for key, value in mock_results.items():
if key in query:
return value
return f"搜索结果:关于'{query}'找到了一些相关信息"
数一数,这短短几行就用到了:函数(def)、参数、字典、for 循环、if 判断、in、return、f-string。这一课我们就一个一个把它们拿下。
2. 变量:给数据起个名字
一句话理解:变量就是给一个数据贴个标签,方便以后反复用它。
name = "小明" # 把"小明"这段文字,贴上 name 这个标签
age = 25 # 把数字 25 贴上 age 标签
price = 19.9 # 小数也行
is_done = True # True / False 表示"是/否",叫布尔值
print(name) # 屏幕显示:小明
print(age + 1) # 屏幕显示:26(变量可以参与运算)
💡 它在 Agent 代码里:你会看到 client = Anthropic(...)、goal = "调研最流行的编程语言" 这样的写法,就是把"AI 客户端""任务目标"这些东西贴上标签,后面好反复使用。
三种最常见的数据类型
3. 字符串与 f-string:处理文字
AI 程序的本质就是"处理文字"——你发文字给 AI,AI 回文字给你。所以字符串是 Agent 代码里最常见的东西。
greeting = "你好"
target = "世界"
# 把两段文字拼起来(用加号)
message = greeting + "," + target # 结果:"你好,世界"
🌟 f-string:往文字里"塞变量"(重点中的重点)
经常你想说"你好,{某个名字}",这个名字是个变量。用 f-string 最方便——在引号前加个 f,然后把变量用 {} 包起来塞进去:
name = "小明"
score = 95
# 注意引号前的 f
result = f"同学 {name} 这次考了 {score} 分"
print(result) # 屏幕显示:同学 小明 这次考了 95 分
💡 它在 Agent 代码里随处可见:比如 return f"搜索结果:关于'{query}'找到了信息",就是把用户搜的关键词 query 塞进一句回复里。你在第一课的迷你 Agent 里也见过 f"第 {round_num} 轮思考"。f-string 是你必须形成肌肉记忆的语法。
4. 列表与字典:装东西的两种容器
当你有"一堆"数据要装,Python 给了两种最常用的容器。
📋 列表(list):一排带编号的格子
一句话理解:列表就是一排有顺序的格子,用方括号 [],靠"第几个"来取。
fruits = ["苹果", "香蕉", "橙子"] # 一个装了 3 样水果的列表
print(fruits[0]) # 苹果(注意!编号从 0 开始,不是 1)
print(fruits[1]) # 香蕉
print(len(fruits)) # 3(len 告诉你列表里有几个)
fruits.append("葡萄") # 在末尾再加一个
⚠️ 新手必踩的坑:编号(叫"索引")从 0 开始。第一个是 [0],第二个是 [1]。这就是为什么 Agent 代码里取 AI 回复要写 message.content[0]——取的是"第 0 个",也就是第一个。
💡 它在 Agent 代码里:messages=[{...}, {...}] 就是一个列表,里面按顺序装着你和 AI 的多轮对话。第一课让 AI 记住上文,靠的就是往这个列表里不断 append 新对话。
🗂 字典(dict):贴了标签的储物柜
一句话理解:字典用大括号 {},不靠"第几个",而靠"名字"(叫 key,键)来取东西。就像储物柜,你靠柜子上的名字找,而不是数第几个。
person = {
"name": "小明", # "name" 是键(key),"小明" 是值(value)
"age": 25,
"city": "北京"
}
print(person["name"]) # 小明(用键来取值,括号里写键的名字)
print(person["age"]) # 25
person["job"] = "程序员" # 新增一对
💡 它在 Agent 代码里极其重要:你发给 AI 的每条消息都是个字典——{"role": "user", "content": "你好"},role 这个键说明"谁说的",content 这个键放具体内容。下一课那个 mock_results 也是字典:键是"搜索词",值是"搜索结果"。
列表套字典:最常见的组合
Agent 代码里,"多轮对话"长这样——一个列表,里面装着多个字典:
messages = [
{"role": "user", "content": "世界最高峰是?"},
{"role": "assistant", "content": "珠穆朗玛峰"},
{"role": "user", "content": "那第二高呢?"}
]
# messages[0] 取出第一个字典;messages[0]["content"] 取出它的内容
看懂这个结构,你就看懂了 80% 的 Agent 对话代码。
5. 条件判断:让程序会"选择"
一句话理解:if 让程序根据情况走不同的路,就像"如果下雨就带伞,否则不带"。
score = 85
if score >= 90:
print("优秀")
elif score >= 60: # elif = else if,再判断一个条件
print("及格")
else:
print("不及格")
# 这段会输出:及格
⚠️ Python 靠"缩进"分组:if 下面那行前面的空格(通常 4 个)不是装饰,是语法!它表示"这行属于 if 管的"。缩进错了程序就报错。这是 Python 和别的语言很不一样的地方,新手一定要注意。
常用的判断符号
💡 它在 Agent 代码里:if key in query: 意思是"如果搜索词里包含这个关键字"。in 在 Agent 代码里很常用,用来检查"某个东西在不在某段文字 / 某个列表里"。
6. 循环:让程序会"重复"
还记得第二课讲的 Agent "感知-思考-行动-观察"循环吗?那个"循环"在代码里就是用 for 或 while 实现的。
🔁 for 循环:把一堆东西挨个处理一遍
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits: # 把 fruits 里的每个东西,轮流叫做 fruit
print(f"我喜欢吃{fruit}")
# 会依次输出:我喜欢吃苹果 / 我喜欢吃香蕉 / 我喜欢吃橙子
遍历字典(Agent 代码里常见)用 .items(),一次拿到键和值:
person = {"name": "小明", "age": 25}
for key, value in person.items():
print(f"{key} 是 {value}")
# 输出:name 是 小明 / age 是 25
💡 它在 Agent 代码里:下一课那段 for key, value in mock_results.items(): 就是"把模拟搜索结果里的每一对都翻一遍,看哪个匹配"。
🔢 想重复固定次数:range
for i in range(3): # range(3) 产生 0, 1, 2
print(f"第 {i} 次")
💡 你在第一课的迷你 Agent 里见过 for round_num in range(1, 4):,就是让它思考第 1、2、3 轮。
7. 函数:把一段本领打包命名
一句话理解:函数就是把"一段会做某件事的代码"打包,起个名字,以后想用直接喊名字,不用重写。就像把"泡面步骤"打包成"泡面"这个动作,以后说"泡面"就行。
# 定义一个函数:用 def 开头
def greet(name): # name 是"输入"(叫参数)
return f"你好,{name}!" # return 是"输出"(把结果交回去)
# 使用(调用)它
message = greet("小明") # 把"小明"作为输入传进去
print(message) # 你好,小明!
看懂带类型标注的函数(下一课的写法)
下一课的函数写得更"正式"一点,多了 : str 和 -> str:
def search_web(query: str) -> str:
return f"搜索了:{query}"
逐块翻译:
- •
def search_web → 定义一个叫 search_web 的函数 - •
(query: str) → 它需要一个输入 query,: str 是提示这个输入应该是字符串(提示而已,不强制) - •
-> str → 提示这个函数会返回一个字符串 - • 中间的
"""...""" → 三引号包起来的是文档字符串,给人看的说明,对程序运行无影响
💡 为什么要打类型标注? 纯粹是为了让代码更好读、工具能帮你检查。对你现在来说,看到 : str、-> str 知道"哦这是在说输入输出大概是什么类型"就够了,不用纠结。
🤯 一个会让新手震惊的点:在 Python 里,函数本身也能当数据存进字典。下一课会有个 TOOLS = {"search_web": {"function": search_web, ...}} 的写法,就是把 search_web 这个函数当成值存了起来(注意没加括号,加括号是"调用",不加是"把函数本身交出去")。这是 Agent 工具箱机制(回忆第二课四件套之一)的核心技巧,后面讲工具使用和函数调用时会反复用到。现在知道"函数能被存起来、传来传去"即可。
8. import:借用别人写好的工具
一句话理解:你不用什么都自己造。import 就是"把别人写好的工具搬进来用"。
import os # 搬进来整个 os 工具箱
from datetime import datetime # 只从 datetime 工具箱里拿 datetime 这一件
from anthropic import Anthropic # 从 anthropic 包里拿 Anthropic 这个工具
from openai import OpenAI # 从 openai 包里拿 OpenAI 这个工具(DeepSeek 用这个)
💡 它在 Agent 代码里:每个 Agent 文件开头那几行 import,就是在把要用的工具(读环境变量的 os、调用 AI 的 anthropic 或 openai、处理时间的 datetime 等)先搬上桌。你在第一课已经见过、也亲手用过了。
9. try/except:优雅地处理出错
一句话理解:有些操作可能会失败(比如算一个非法的式子、网络断了)。try/except 让程序"试一下,万一出错了别崩溃,改走另一条路"。
try:
result = 10 / 0 # 除以 0 会出错
print(result)
except Exception as e: # 万一出错,就跑到这里来
print(f"出错了:{e}")
# 程序不会崩溃,而是输出:出错了:division by zero
💡 它在 Agent 代码里很常见:调用 AI、调用工具、算表达式都可能失败。下一课的计算器工具会用 try/except 包住 eval(expression),就是"算一下,算不出来就返回一句友好的错误提示,而不是让整个 Agent 崩掉"。一个健壮的 Agent,必然到处是 try/except。
10. 回到"终点":现在我们逐行读懂下一课的代码
学完上面 8 样,我们回到第 1 节那段"看不懂"的代码。现在逐行拆,你会发现全懂了:
def search_web(query: str) -> str: # ① 定义函数,输入一个字符串 query,返回字符串
"""模拟网络搜索工具""" # ② 文档字符串,给人看的说明
mock_results = { # ③ 一个字典:键是搜索词,值是结果
"北京天气": "北京今日:晴,气温 22°C",
"python": "Python 是一种编程语言",
}
for key, value in mock_results.items():# ④ for 循环,把字典每一对都翻一遍
if key in query: # ⑤ if 判断:如果搜索词里包含这个键
return value # ⑥ 就返回对应的值,函数结束
return f"关于'{query}'没找到精确结果" # ⑦ 都没匹配上,返回一句 f-string 兜底
读懂了吗?这就是这一课的成果——你已经能看懂真实的 Agent 工具代码了。 下一课满屏的代码,骨架都是这八样东西的组合。
🎯 关键心态:你不需要能"凭空默写"出这些代码,能"读懂"和"照着改"就足够开始下一课了。写代码的熟练度是跟着后面几课敲出来的,不是这一课就要练成的。
11. 课后作业
这一课作业必须在电脑上实际运行,不能只看。新建一个 learn.py,把每题的代码敲进去跑。
✅ 必做任务
- •任务 1:创建一个字典,存你自己的信息(名字、年龄、城市),然后用 f-string 打印成一句话:"我叫 X,今年 X 岁,住在 X"
- •任务 2:创建一个列表,装 5 个你喜欢的食物,用 for 循环逐个打印"我喜欢吃 X"
- •任务 3:照着第 10 节的
search_web 函数,自己手敲一遍(不要复制),改成你自己的几个关键词和结果,然后调用它试几个不同的查询 - •任务 4:写一个函数
is_pass(score),输入分数,用 if/else 返回"及格"或"不及格"
📝 理解题(不用写代码,用自己的话回答)
- 1. 列表用
[]、靠编号取;字典用 {}、靠键取。各举一个"用列表更合适"和"用字典更合适"的生活例子。 - 2.
message.content[0] 里的 [0] 为什么是取"第一个"而不是"第零个"? - 3. 函数里的
return 和 print 有什么不一样?(提示:一个是"把结果交回去给程序继续用",一个是"显示给人看")
🌟 选做任务(想多练的同学)
- •
把第一课的 mini_agent.py 代码重新读一遍,这次试着说出每一行用到了这一课学的哪个知识点(变量?f-string?列表?字典?for?……)。这个练习能让你直观感受"概念→代码"是怎么一一对应的。
- •
写一个简单的"工具注册表"字典,仿照下一课会出现的 TOOLS 结构,把你任务 3、4 写的两个函数都登记进去(体会"把函数当值存进字典"):
TOOLS = { "search_web": {"function": search_web, "description": "模拟搜索"}, "is_pass": {"function": is_pass, "description": "判断及格"},}# 然后试试:TOOLS["is_pass"]["function"](85)
12. 常见问题解答(踩坑急救站)
Q:我必须把这些语法全背下来才能学下一课吗?
A:完全不用背!目标是能读懂、能照着改,不是默写。就像看菜谱做菜,你不需要背下菜谱,能看懂、能跟着做就行。语法的熟练度会在后面几课不断敲代码的过程里自然长出来。
Q:代码报错了,提示一堆英文,怎么办?
A:报错是学编程的日常,不是你做错了。三个办法:(1) 仔细看报错的最后一行,通常最关键;(2) 重点检查缩进(空格对齐)和引号、括号有没有配对,这是新手 90% 的错误来源;(3) 把报错信息直接复制给 AI(Claude/DeepSeek)问"这是什么意思、怎么改"——这其实是真实开发者每天都在做的事。
Q:为什么 Python 这么在意缩进(前面的空格)?
A:别的很多语言用大括号 {} 来分组,Python 选择用缩进来分组,让代码看起来更清爽。代价就是缩进变成了语法的一部分,不能随便加减空格。建议统一用 4 个空格(大多数编辑器按一下 Tab 键会自动变成 4 个空格)。
Q:我是文科生 / 数学不好,能学会编程吗?
A:能。编程和数学好不好关系不大,更像学一门"和电脑沟通的语言"——有它的语法规则,多用就熟。我们这门课用到的数学几乎为零。你已经走到这里,说明完全有能力继续。
Q:这一课学的够用吗?后面会不会还有看不懂的语法?
A:这一课覆盖了 Agent 代码 80% 以上的常见语法,足够你顺利进入第五课起的后续几课。偶尔遇到新语法(比如类 class、装饰器)时,相关课会现场讲解,或者你随手问 AI 即可。不用担心"没学全",编程本来就是用到再查、边做边学。
这一课小结
这一课拿下了(看懂 Agent 代码的最小必备):
✅ 变量 —— 给数据贴标签
✅ 字符串 & f-string —— 处理文字、往文字里塞变量
✅ 列表 [] & 字典 {} —— 两种装东西的容器(重点!对话就是"列表套字典")
✅ if 条件判断 —— 让程序会选择(注意缩进!)
✅ for/while 循环 —— 让程序会重复(Agent 循环的代码本体)
✅ 函数 def —— 把本领打包命名(还能当值存进字典!)
✅ import —— 借用别人写好的工具
✅ try/except —— 优雅地处理出错
最重要的收获:
🌟 你现在能"读懂并修改"真实的 Agent 代码了。
不求默写,但求看懂——这就足够迈进下一课。
下一课预告:
🔜 第五课:Agent 推理模式(ReAct)
—— 现在你能看懂代码了,我们来实现第一个
真正能运行、会"边想边做"的 ReAct Agent!
—— 第二课讲的"感知-思考-行动-观察"循环,
这一课终于要从概念变成你电脑上跑起来的真代码了。
📬 完成这一课作业后,把你手敲的 search_web 函数发我看看,再告诉我哪个语法点之前最绕、现在通了没——确认你真的站稳了这块台阶,我们再上第五课!