自学 AI Agent 三个月:从收藏夹吃灰到跑通第一个 Agent 的完整复盘
摘要:自学 AI Agent 三个月,从囤了 40 多篇教程一个都没跑通,到用 90 天路径做出第一个能稳定完成任务的 Agent。本文记录我踩过的坑(含具体报错和修复方法)、走过的五个典型弯路,以及最后验证有效的四阶段学习路径和 90 天计划表。结论先行:光看教程学不会 Agent,能验证你学会的只有跑通的任务。
一、我先交个底:收藏夹里的 40 多篇教程,一篇都没跑通
先说结论:过去三个月,我是那个收藏夹里躺着 40 多篇 Agent 教程、买了两门课、关注了十几个公众号,但一行 Agent 代码都没跑通的人。直到第 7 周我才承认:收藏夹在变厚,能力没在变。
后来在技术社区混多了才发现,这种焦虑大家问得都差不多:「学习 AI Agent 有什么好方法能真正学到位」「怎样才能把 AI Agent 学好」「怎么学出成果」。你细看这些问题的共同点:问的都不是「学什么」,而是「怎么学才能见效」。说明缺的从来不是资料——恰恰相反,资料多到溢出来了才是问题。
另一类声音更值得注意。一些有 CS 背景的实践者开始形成共识:学 Agent 别上来就啃论文堆公式,先搞懂「怎么让代码跑通并解决问题」;把基础拆成能落地的模块逐个击破;盯着真实场景的痛点找方向,而不是死磕教科书案例;用快速迭代代替完美主义,先跑通一个准确率 60% 的最小版本,再慢慢优化。
这两类声音放在一起,其实指向同一个结论:AI Agent 学习的主要矛盾,已经从「信息获取」转移到了「学习路径与验证方法」。
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 教程过剩 │ --> │ 路径不清 │ --> │ 无法自证学会 │
└──────────────┘ └──────────────┘ └──────────────┘
│ │ │
v v v
收藏夹越来越满 在论文与框架间 学了三个月
动手次数为零 来回摇摆 不知道自己到哪了
二、为什么「看懂了」却「做不出来」
要搞明白这个问题,得先看看 Agent 到底是个什么东西。
一个 AI Agent 的核心是一个闭环:感知(接收任务与环境信息)→ 规划(拆解目标、选择工具)→ 行动(调用工具或模型执行)→ 观察(获取执行结果)→ 迭代。主流的 LLM Agent 通常以「模型 + 工具调用 + 循环」的形式实现,这一点在 Anthropic 的工程实践总结 Building Effective Agents 里讲得很清楚:大多数场景下,简单的组合模式(prompt + 检索 + 工具调用)比复杂的多 Agent 编排更有效。
┌─────────────────────────────┐
│ │
v │
┌─────────┐ ┌─────────┐ ┌─────────┐
│ 感知 │-->│ 规划 │-->│ 行动 │
└─────────┘ └─────────┘ └─────────┘
│ │
v v
┌─────────┐ ┌─────────┐
│ 观察 │<--│ 工具执行 │
└─────────┘ └─────────┘
这个结构决定了它的学习特性:Agent 是一个行为系统,不是知识系统。 你没法靠「阅读」掌握一个行为系统——就像没人能靠读游泳教程学会游泳。认知科学里管这叫「知识的错觉」:识别一段解释与会用一组能力之间,隔着大量的程序性知识(procedural knowledge),而程序性知识只能靠练出来。
这带来两个推论:
推论一:教程的价值密度会随阅读量递减。 前三篇教程帮你建立概念地图,之后的第 N 篇大概率是在重复你已知的内容,带来的只是「我在学习」的心理安慰。这也是为什么囤积式学习者的实际能力曲线,在最初两周后基本走平。
推论二:学习单元应该是「任务」而不是「知识点」。 传统技术学习(比如学一门语言)可以按知识点组织:变量、循环、函数、类。但 Agent 是跨知识点的组合体——一个最小的可用 Agent 同时涉及 prompt 设计、工具定义、函数调用、错误处理。只有以任务为单位组织学习,才能倒逼把这些知识点串起来。OpenAI 的 Function Calling 文档 之所以被大家推荐为入门材料,正是因为它围绕「让模型调用一个工具」这个最小任务组织内容,而不是围绕概念。
这两个推论我当时是不服的,直到自己验证了第二遍才认:看懂验证的是「知道」,做出来验证的是「会做」,本来就是两套度量体系。我能在评论区跟人辩论 ReAct 和 Function Calling 的区别,但我第一个 Agent 连「查个天气再翻译成英文」都跑不利索——这两件事同时为真,毫不矛盾。
三、我踩过的五个坑(几乎每个自学者都会中招)
下面五个坑,前四个我都亲自踩过,第五个最隐蔽,是后来做验证时才回过味来的。
坑一:论文优先,啃了两周什么都没留下
我第一个月把 ReAct、ToT、Reflection 三篇论文打印出来啃,笔记记了 20 多页。结果动手时发现一个尴尬的事:论文里的「推理-行动交织」落到代码里就是「把工具执行结果拼回消息列表再调一次模型」这么朴素的一行。我记的 20 页笔记里,没有一页能帮我写出这一行。论文的价值在解释「为什么这样设计有效」,但这个「为什么」只有踩过坑才能真懂。更合理的顺序是:先跑通一个最小 Agent,带着「我的 Agent 在哪一步总是失败」的具体问题再回头看论文——那时它才 readable。
坑二:框架焦虑,选型选了两个周末
LangChain、LlamaIndex、AutoGen、CrewAI……我在框架选型上花掉两个完整周末,看对比帖、画架构图,就是没写代码。后来想通了一件事:框架封装的正是我需要亲手理解的那个循环。 用框架入门,等于把学习对象外包了出去。裸 API 写一个 100 行以内的 Agent 循环(见第四节代码)之后再回头看 LangChain 文档,你能一眼看出它替你做了什么、哪些抽象是你不需要的——这个判断力只能从「写过」里来。
坑三:完美主义起步,架构图画了三版代码零行
想一口气设计出「正确的架构」再动手:先选模型、再选记忆方案、再研究多 Agent 通信协议……我第三版架构图画完的那天,代码行数还是零。实践者社区的经验出奇一致:先搭出能跑的最小版本,哪怕准确率只有 60%,然后用日志扒执行过程,逐段归因修复。Agent 开发的现实是,架构问题只有在运行中才会暴露,纸上谈兵式的架构设计是伪工程。
坑四:只做玩具,跑通了却什么都没学到
跟着教程做了「天气查询 Agent」,跑通那一刻成就感满满。但把它换成「查订单、判断能否退换、生成回复文案」这种两步任务,立刻翻车:模型在第二步忘了第一步查到了什么。玩具任务的单轮特性(一次工具调用即完成)跳过了 Agent 最核心的挑战:多步规划与失败恢复。学习必须在真实场景的痛点上发生——比如「如何降低人工转接率」这类具体问题,它天然包含多轮交互、工具选择、异常处理等完整复杂度。
坑五:轻信自我描述(这个最隐蔽)
这是最致命的坑:用「我学过」作为能力证明。我跟人说「会用 LangChain 做 Agent 了」,但被追问「你的 Agent 在什么任务上、达到什么成功率、和基线差多少」时,答不上来。这个坑在评估 Agent 本身时同样致命——一个 Agent 的自我报告(「我已完成任务」)与它的真实执行结果之间,可能有巨大鸿沟。Lilian Weng 在 LLM Powered Autonomous Agents 里对 Agent 能力边界的系统分析,出发点正是这种「声称的能力」与「验证的能力」之间的差距。
┌─────────────────────────┐ ┌─────────────────────────┐
│ 自我描述体系 │ │ 验证体系 │
├─────────────────────────┤ ├─────────────────────────┤
│ 我看完了 X 教程 │ │ 我在任务 T 上达到成功率 S │
│ 我用过 Y 框架 │ │ 失败案例归因于环节 E │
│ 我了解了 Z 概念 │ │ 与基线 B 相比提升 Δ │
├─────────────────────────┤ ├─────────────────────────┤
│ 不可复现 · 不可比较 │ │ 可复现 · 可比较 · 可迭代 │
└─────────────────────────┘ └─────────────────────────┘
四、最后跑通的路径:四阶段,每步都有验收标准
踩完坑后我重建了学习路径,设计原则只有一条:每一阶段都以上一阶段的可验证产出为输入,任何一步都不接受「我懂了」作为完成标志。
阶段一:裸写最小循环(第 1-2 周)
目标:不借助任何框架,用模型 API 手写一个工具调用循环。产出物:一个能多轮调用工具、并在工具失败时重试或降级的脚本。
我第一版代码有三个真实翻车点,都是写完才知道的:①工具 schema 的 description 写得太省,模型死活不调用工具;②工具返回了一大段 HTML,直接撑爆上下文,模型开始胡说;③忘了设步数上限,一个死循环烧了我一块多 token 费。这三个坑的解法全在下面这段代码的注释里:
import json
def run_agent(model_client, tools, task, max_steps=8):
"""最小 Agent 循环:规划 -> 调用工具 -> 观察 -> 迭代。
特点:无框架依赖,每个环节的行为都可以在日志中观察。
"""
messages = [{"role": "user", "content": task}]
for step in range(max_steps):
resp = model_client.chat(
messages=messages,
tools=[t["schema"] for t in tools],
)
if not resp.tool_calls: # 模型认为任务完成
return resp.content
for call in resp.tool_calls:
tool = tools.get(call.name)
try:
result = tool["fn"](**call.arguments)
except Exception as e: # 失败不终止,反馈给模型重试
result = json.dumps({"error": str(e)})
# 把执行结果作为观察喂回循环 —— 这一步是 Agent 的灵魂
messages.append({"role": "tool", "tool_call_id": call.id,
"content": str(result)})
return "MAX_STEPS_EXCEEDED" # 显式暴露失败,而非静默
这个不到 30 行的循环,把 Agent 的核心问题全部暴露在你面前:工具 schema 怎么写模型才理解得对?失败结果怎么反馈模型才能自纠?max_steps 怎么定?这些问题的答案,就是你的第一手程序性知识——也是教程永远不会告诉你的部分。
阶段二:建立验证 harness(第 3-4 周)
目标:为你的 Agent 构造一个固定的任务集和自动化评分脚本。产出物:10-20 个带预期输出的任务用例 + 一键回归脚本。
def evaluate(agent, cases):
"""验证 harness:Agent 能力必须经任务集度量,而非自我报告。"""
results = []
for c in cases:
actual = agent.run(c["task"])
passed = c["check"](actual) # 每个用例自带判分函数
results.append({"task": c["id"], "passed": passed})
rate = sum(r["passed"] for r in results) / len(results)
print(f"任务成功率: {rate:.0%}") # 这才是能力的度量
return results
从此,「我的 Agent 变好了」这句话有了唯一合法的表达方式:harness 成功率从 X% 提升到了 Y%。你改的每一版 prompt、加的每一个工具,都会被这个数字客观地奖励或惩罚。
阶段三:真实痛点项目(第 5-10 周)
目标:选一个真实、具体、有度量指标的任务做完整落地。选择标准建议参考社区实践:从「如何降低人工转接率」这类能定义基线和目标的问题切入,避免「做一个通用助手」这类无边界目标。强化学习方向的学习者,可以用 Gymnasium 从「避障」这种单一小目标起步,逐步增加任务复杂度——先让 Agent 在简化环境里学会一件小事,比在复杂环境里什么都不会强得多。
这一阶段的关键动作是把任务拆成可独立验证的模块:环境交互模块、决策逻辑模块、评估模块。每个模块有独立的测试,坏在哪儿一眼可见。
模块化拆分还有一个容易被低估的收益:它是归因效率的倍增器。 没有模块边界的 Agent 出了问题,你只能对着整条对话日志人肉排查;有了模块边界,你可以先跑一个 30 秒的模块级单测,把问题域压缩到三分之一,再看日志。随着项目变复杂,这个效率差距会指数级放大——很多「Agent 项目做到后期失控」的案例,复盘下来都是早期没有建立模块边界和模块级验证。
另外一个实践建议:为每个模块维护一份「失败样本库」。工具调用失败的真实输入输出、模型规划跑偏的完整对话、判分函数误判的边界用例——这些样本在两周后回看,价值远超当时的直觉判断,因为它们记录的是你所在的具体环境里最常发生的失败模式,而不是教科书里的典型失败。
阶段四:能力审计与扩展(第 11-12 周及以后)
目标:对阶段性成果做一次完整审计——你的 Agent 在哪些任务型别上稳定、哪些上脆弱、失败模式是什么。产出一份「能力清单」,它同时是你下一步学习的路线图:清单上最脆弱的那一项,就是下一个学习周期最值得投入的方向。
五、我的 90 天计划表(可直接抄)
把上述路径压缩成一个具体到周的示例(以「电商客服 Agent」为例,这是社区实践中被反复验证过入行性价比最高的方向之一):
| 阶段 | 时间 | 任务 | 验证标准 |
|---|---|---|---|
| 最小循环 | 第 1-2 周 | 裸 API 写客服问答 Agent,工具:查订单、查库存 | 人工抽测 10 单对话,≥6 单正确 |
| 验证 harness | 第 3-4 周 | 构造 20 个典型客诉用例 + 自动判分 | 一键回归跑通,得到基线成功率 |
| 真实项目 | 第 5-10 周 | 接入退换货流程(多轮、多工具) | harness 扩到 50 用例,成功率 ≥80% |
| 能力审计 | 第 11-12 周 | 失败案例归因,输出能力清单 | 每类失败有归因和改进方案 |
这个设计里有四个容易被忽视但决定成败的细节:
第一,基线要早定。 第 3 周产出的基线成功率,是后续所有改进的参照系。没有基线的优化是玄学。
第二,日志比指标重要。 成功率告诉你「好不好」,日志告诉你「为什么」。每个失败用例的完整对话日志都应该被保存——它们就是你的学习教材,比任何教程都贴合你的实际水平。
第三,警惕「成功率的假阳性」。 当你发现 Agent 在某类任务上成功率突然提升,先检查是不是用例泄露了答案(比如判分函数写松了),再归功于自己的改进。这个习惯的本质,仍然是「验证优先于相信」。
第四,控制任务复杂度的爬坡速率。 一个常见的节奏错误是在成功率刚过 60% 时就急着上多 Agent 协作、长期记忆这类高级特性。更稳健的做法是遵循「成功率 80% 再爬坡」原则:单 Agent 在当前任务档位稳定到 80% 以上,再引入下一个复杂度层级。这条经验与强化学习里「课程学习(curriculum learning)」的结论一致——在过难的任务上训练,学到的不是能力而是随机性。
六、总结:三个月教会我的一件事
回到开头的那些提问:「学习 AI Agent 有什么方法能真正学到位?」
我的答案可以压缩成三句话:以任务为学习单元,以可复现的验证为完成标准,以真实痛点为方向选择器。 围绕这三句话,教程从主粮变成了字典,框架从拐杖变成了放大器,论文从天书变成了答疑老师。
而这套学习哲学,恰好也是评估 Agent 工具本身该有的姿势。当你逐渐建立起「验证优先」的习惯,你自然会用同样的标准审视市面上的 Agent 工具链:一个工具说「我能帮你找到最好的 Skill」,你要问的是——它在什么任务集上、以什么成功率、和什么基线比?这种审视能力,恰恰是自学过程中最珍贵的副产品。
学习 Agent 的终点,不是「我知道 Agent 是什么」,而是「我能构建、度量并信任一个 Agent」。前一句是知识的错觉,后一句是能力的事实。
写在最后
如果你也在自学 AI Agent,或者正在某个坑里出不来,欢迎评论区交流你的卡点,我会逐条回复。后续我会把 90 天计划里每周的实测记录整理成系列文章,持续更新。
另外,我把这套「验证优先」的方法论整理成了一份按任务类型划分的 Agent 构建技巧和踩坑对照表,比收藏夹里的 40 篇教程更贴近实战。如果你在「不知道选什么方向」「不知道怎样算学完」「失败不知道归因到哪」这几个环节卡住,可以把它当作一份随时可查的实战索引,希望能帮你少走我走过的弯路。
更多推荐

所有评论(0)