从零开始学习 AI 代理:六阶段实践路线
从概念开始,亲手编写约 30 行代理循环,再学习工具、记忆、循环设计与安全。每个阶段都构建一个对象,并通过故意制造错误掌握核心机制。
六个阶段的学习路径
要从零开始学习 AI 代理,请按顺序完成六个阶段:概念、您的第一个循环、工具、记忆、循环设计和安全。每个阶段都要求您亲手构建一个对象。跳过前面的阶段是最常见的停滞原因,因为框架会隐藏您正需要了解的部分。
AI 代理是围绕语言模型运行的循环,并且允许该模型调用工具。这句话概括了全部主题。后续内容只是说明循环包含哪些部分、工具可以访问哪些对象,以及循环出错时如何停止它。如果您能向其他人解释这个循环,就说明您已经掌握了核心内容。如果您只能说出框架名称,就还没有掌握。
下面的计划假设您通过构建来学习。阅读一个阶段,构建其中的小型对象,故意让它出错,然后继续下一个阶段。只读过的阶段,不能算完成。
第 1 阶段之前实际需要掌握的内容
实际的前置要求很少,比大多数课程页面所说的更少。
- 您能够编写和阅读相当于 50 行脚本的 Python 或 TypeScript。
- 您熟悉 Linux shell:安装软件包、编辑文件、读取日志。
- 您拥有托管模型的 API key,或拥有一台能够运行本地模型的机器。
全部要求就是这些。您不需要机器学习理论,也不需要训练过模型。代理开发不涉及梯度或训练数据。只有在您决定自行运行模型时,显卡才有用。这属于另一项技能,您之后可以通过在 VPS 上托管 Ollama 以自行托管 LLM学习。
很多人低估了 shell 这一部分。代理会因权限、路径、环境变量以及静默退出的进程而失败。如果有关 PATH 的堆栈跟踪或文件模式会让您关闭终端,请先用一个周末学习 Linux 基础知识。这样可以在之后节省一个月的时间。
阶段 1:什么是代理,以及什么不是
先执行一次 API 调用,不使用循环。发送提示词,打印回复,查看响应中的令牌计数。现在,您已经了解了成本单位和延迟单位。
然后学习工具使用。这是整个领域中唯一真正的新概念。您将函数描述为名称、说明以及用于定义输入的 JSON(JavaScript 对象表示法)架构。模型不会运行任何内容。它会回复一个结构化请求:使用这些参数调用 run_command。您的代码运行该函数,将输出作为消息发回,然后再次请求模型。模型负责读取文本并生成文本,是一个规划器。真正能执行操作的是您的代码。
聊天机器人回复一次后就结束。代理会重复这一交互,直到模型不再请求工具。这种重复是两者的全部区别,也解释了它们为何具有不同的故障模式。聊天机器人可能只给出一次错误答案。代理可能会根据错误答案执行多次操作,直到有人发现问题。
阶段 2:自己编写循环,只写一次
不要先使用框架。用 Python 编写大约三十行代码,先掌握整体结构。
sudo apt update && sudo apt install -y python3-venv
python3 -m venv ~/agent
source ~/agent/bin/activate
pip install anthropic
export ANTHROPIC_API_KEY=your-key-hereimport subprocess
import anthropic
client = anthropic.Anthropic()
tools = [{
"name": "run_command",
"description": "Run a read only shell command and return its output.",
"input_schema": {
"type": "object",
"properties": {"command": {"type": "string"}},
"required": ["command"],
},
}]
messages = [{"role": "user", "content": "How much disk space is free here?"}]
while True:
response = client.messages.create(
model="claude-opus-5",
max_tokens=4096,
tools=tools,
messages=messages,
)
if response.stop_reason != "tool_use":
break
messages.append({"role": "assistant", "content": response.content})
results = []
for block in response.content:
if block.type == "tool_use":
done = subprocess.run(
block.input["command"], shell=True,
capture_output=True, text=True, timeout=10,
)
results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": done.stdout or done.stderr,
})
messages.append({"role": "user", "content": results})
print(next(b.text for b in response.content if b.type == "text"))使用 python3 agent.py 运行。正常运行时,会输出一个段落,列出文件系统及其可用空间。原因是模型请求了 df -h,代码执行了该命令,第二次处理又将该表格转换成了句子。如果没有输出,说明循环在收到文本块之前就结束了。在循环中加入 print(response.stop_reason),观察这些值如何变化。
现在故意制造错误。删除 tool_use_id 行并查看错误信息。工具结果如果没有匹配的 id,API 就会拒绝该结果。这是初学者最常见的错误。提出一个需要执行两个命令的问题,观察循环运行两次。提出一个无法完成的问题,观察它是放弃还是无限循环。
需要注意这个示例的一个问题。它使用 shell=True 将模型输出直接传递给 shell。在可以重建的临时机器上这样做尚可,但在其他环境中都不正确。阶段 6 会解决这个问题。循环背后的概念将在在 VPS 上构建自己的 AI 代理中进一步介绍。
阶段 3:代理尚未具备的工具
您的 run_command 工具可以正常工作,但真正的代理需要访问外部服务的工具:工单系统、数据库和代码仓库。为每项服务、每个代理分别编写专用封装无法扩展。
Model Context Protocol(MCP)是业界最终采用的方案。MCP 服务器通过标准传输协议公开一组工具,任何支持 MCP 的代理都可以直接使用,无需自定义连接代码。参考文件系统服务器只需运行一条命令:
npx -y @modelcontextprotocol/server-filesystem /home/you/projects这要求已安装 Node,并且目录参数是服务器唯一可以访问的路径。这就是该安全模型的简化说明:边界由服务器决定,而不是由模型决定。让客户端连接到该服务器后,您的代理即可获得文件读写能力,而这些功能无需由您自行编写。如何在服务账户下正确运行这些服务器,以及如何选择传输方式,请参阅在 VPS 上为 AI 编程代理运行 MCP 服务器。
本阶段的要点是,工具设计才是真正的工作。描述含糊时,模型会自行猜测。工具返回 40000 个字符时,会污染上下文窗口。能够删除内容的工具最终一定会删除内容。
阶段 4:内存,主要就是文件
初学者通常会在这里使用向量数据库。至少现在不要这样做。
Agent 在两次调用之间没有记忆。您每次都要重新发送完整对话,因此长会话的每轮成本高于短会话。内存因此分为两个问题。第一个问题是当前上下文窗口能容纳多少内容。您可以通过摘要、删减旧的工具输出,以及缓存提示词中稳定的前缀来管理它。这样,稳定前缀只需按原价的一小部分计费。第二个问题是重启后仍能保留什么,这属于存储问题。
对于第二个问题,在几乎所有第一个项目中,一个 Agent 可以读写的普通 markdown 文件都比向量数据库更合适。为它提供一个文件,说明文件格式,并要求它在开始前读取该文件,在学到新内容后更新该文件。这样可以获得大部分收益,而且您可以直接打开文件,查看 Agent 的认知。当笔记无法继续放入上下文窗口时,再使用 embeddings 和检索。不要提前使用。
阶段 5:循环才是产品
到这一步,您已经可以构建一个能在您观察时运行的 agent。阶段 5 要让它在您不观察时也能运行。
有 4 个问题决定了无人值守的 agent 是否可以安全地独立运行。什么会触发它,确保它不会无故运行。它运行在什么边界内,确保错误的影响范围有限。如何验证结果,因为让 agent 自己批改作业,它总会判定自己通过。什么预算会停止它,可以按 token 数量或实际运行时间计算。循环工程及其定义涵盖的内容介绍了如何有意识地设计这 4 项。
练习:使用您的阶段 2 agent,为它分配一个需要 4 或 5 个步骤的任务,并添加硬性迭代上限。然后移除上限,观察无界循环如何增加 token 费用。先使用较小的预算执行一次,避免以后在较大的预算下意外执行。
阶段 6:安全性、机密信息和成本
此阶段不是可选项。之所以最后介绍,只是因为在构建出可运行的系统之前,您无法切身体会其中的风险。
请让 agent 以专用的非特权用户运行,绝不要使用 root 或您自己的账户。这样即使发生问题,影响范围也只限于一个目录,而不是整台机器。请将凭据置于模型无法访问的位置,因为上下文窗口中的任何内容都可能通过工具调用被原样输出。解决方案是使用作用域受限且生命周期短的令牌,并通过辅助程序访问它们,具体方法请参阅避免将机密信息交给您的 AI agent。请为支出设置硬上限,因为无人值守的循环会在无人监控的情况下为每次迭代计费。用于控制成本的上限和批处理方法请参阅始终在线 VPS 上的 AI agent 成本控制。
成本需要一个具体数字。截至 2026 年 7 月,Claude Opus 5 的输入费用为每百万个令牌 $5,输出费用为每百万个令牌 $25。不断重新发送增长中对话内容的高交互 agent,可能在单个任务中处理数十万个令牌。提示缓存以及在常规步骤中使用更小的模型,对成本计算的影响远大于调整提示词。
提示注入也属于此阶段的内容。如果您的 agent 会读取网页、问题跟踪系统或收件箱,那么编写这些文本的人也在向您的 agent 编写指令。防御措施不是编写更巧妙的系统提示词,而是设置边界。因为无法删除存储库的 agent,就无法被诱导去删除存储库。
应该遵循哪张路线图?
选择一套课程并完成它,不要从六套课程中各取一点。Microsoft ai-agents-for-beginners 仓库是最完整的免费课程,包含十八课。截至 2026 年 7 月,该仓库已获得超过 70,000 个 stars,并且与上述阶段对应良好。热门 agent 仓库汇总有助于了解现有项目,但不适合作为课程大纲,因为按 stars 排序依据的是受欢迎程度,而不是教学顺序。
需要通过真实项目进行练习时,coding agent 是最佳起点:反馈即时,工具明确,错误也容易撤销。在 VPS 上运行 coding AI agent介绍了一个完整流程。如果您更希望研究现有系统,而不是从零开始构建,最佳自托管 AI agent中的比较展示了多个项目如何以不同方式实现相同的循环。
这需要多长时间?
对于已经具备编程经验的人,第 1 阶段和第 2 阶段需要一个晚上。第 3 阶段需要一个周末,其中大部分时间用于编写工具说明,而不是处理协议。第 4 阶段和第 5 阶段需要几周的实际使用,因为只有观察智能体遗忘,您才能了解它会忘记什么。第 6 阶段不会真正结束,因为您每授予一项新能力,都会重新引出相关问题。
持续利用晚上的时间学习和实践 2 个月,大多数人就能构建出一个可运行、边界明确且实用的智能体。花费 1 年的人,通常是因为他们一直阅读,而没有开始构建。
FAQ
构建 AI agent 需要了解机器学习吗?
不需要。构建 agent 的过程是通过 API 调用模型,并将模型的工具请求连接到实际函数。这属于常规应用程序开发。您不需要接触训练、梯度或数据集。决定 agent 能否正常工作的技能包括工具的 schema 设计、错误处理和 Linux 权限。只有在您继续微调模型时,机器学习理论才会变得相关,而那是另一项工作,前置要求也不同。
我应该从 LangChain 或 CrewAI 这样的框架开始吗?
先编写一个原始循环,再采用框架。框架会用一个配置对象替代第 2 阶段中的 30 行代码。了解它所替代的内容后,这种方式很方便;在此之前则容易造成困惑。agent 行为异常时,您需要直接分析消息列表和工具结果。如果您从未见过这些内容,排查会困难得多。自己编写过一个循环后,框架可以节省时间,而不是隐藏底层机制。
学习 AI agent 需要多少成本?
如果设置上限,成本低于大多数人的预期。一个托管 API 密钥和一台小型 VPS 就能覆盖这 6 个阶段。真正的风险不是每小时费率,而是无界循环在您睡觉时为每次迭代持续计费。第 1 天就为 API 账户设置严格的支出上限,为编写的每个循环添加迭代上限,并在常规步骤中使用成本更低的模型。在本地运行模型可以取消 token 费用,但会增加硬件要求。
AI agent 和聊天机器人有什么区别?
聊天机器人只回答一次。agent 会重复执行一个循环:模型请求工具,您的代码运行工具,结果返回给模型,然后模型决定下一步操作。正是这种重复过程,让 agent 能够通过多个步骤完成任务。这也是 agent 需要聊天机器人不需要的边界控制的原因。聊天机器人的错误回答是一段糟糕的文字。agent 的错误回答则是一段糟糕的文字,以及它据此执行的操作。