从 Agent Loop 看 AI Agent 到底是怎么工作的
很多人第一次接触 AI Agent 时,容易觉得它很“神秘”。
它好像不仅能聊天,还能自己读取文件、执行命令、搜索信息、修改代码,甚至可以连续完成一整套任务。
但如果把 Agent 的实现拆开来看,会发现它最核心的机制其实并不复杂。
从程序结构上看,一个 Agent 最重要的部分,往往就是一个不断循环的过程:
Agent Loop。
这篇文章就从 Agent Loop 出发,看看 AI Agent 到底是怎么工作的。
什么是 Agent Loop
普通的大语言模型调用其实非常简单。
流程通常是:
用户输入
↓
LLM
↓
模型输出
用户问一个问题,模型回答一次,这次调用就结束了。
但 Agent 不一样。
Agent 不一定能够一次完成任务。
例如用户说:
帮我看看这个项目为什么运行失败,并把问题修复掉。
模型首先可能需要查看项目文件。
然后运行程序。
接着根据报错查看某个配置文件。
之后修改代码。
最后再次运行程序验证结果。
也就是说,一个复杂任务通常需要很多步骤。
于是 Agent 的执行过程就变成了:
用户任务
↓
LLM 思考
↓
调用工具
↓
获得工具结果
↓
再次调用 LLM
↓
继续调用工具
↓
再次获得结果
↓
......
↓
任务完成
这个不断重复的过程,就是 Agent Loop。
Agent Loop 的核心结构
如果把一个 Agent 极度简化,它其实可以写成类似下面这样的逻辑:
while 任务没有完成:
调用 LLM
if LLM 决定调用工具:
执行 Tool
将 Tool Result 加入 Context
else:
返回最终答案
break
看起来非常简单。
但很多 Agent 框架最核心的运行逻辑,本质上就是在这个循环之上不断增加能力。
例如增加:
- 上下文管理
- Tool Calling
- Memory
- 权限控制
- 错误重试
- 多模型切换
- Token 管理
- 任务状态管理
这些功能最终还是围绕 Agent Loop 工作。
一轮 Agent Loop 到底发生了什么
假设我们给 Agent 一个任务:
请分析项目为什么启动失败。
第一轮循环开始。
模型首先读取当前 Context。
Context 里面可能包含:
System Prompt
User Message
可用 Tools
历史消息
模型看到任务之后,可能判断:
我需要先查看项目目录。
于是模型不会直接输出答案,而是返回一个 Tool Call:
list_files()
Agent Runtime 接收到 Tool Call 后,真正执行这个工具。
假设得到:
package.json
src/
README.md
config/
Runtime 会把这个执行结果重新加入 Context:
Tool Result:
package.json
src/
README.md
config/
然后进入下一轮 Agent Loop。
第二轮:模型根据新信息继续决策
现在模型看到的信息已经更多了。
它可能判断:
这是一个 Node.js 项目,我需要查看 package.json。
于是调用:
read_file("package.json")
工具返回:
{
"scripts": {
"start": "node src/index.js"
}
}
这些信息再次进入 Context。
然后 Agent 继续下一轮。
模型可能继续判断:
我需要运行 npm start 查看具体错误。
于是调用:
shell("npm start")
执行结果可能是:
Error: Cannot find module 'express'
模型终于知道问题是什么了。
接下来它可能执行:
shell("npm install")
然后再次运行:
shell("npm start")
最终程序正常启动。
这时模型才返回:
问题已经修复,原因是项目依赖没有安装。
Agent Loop 结束。
Agent 为什么能够“自主行动”
这里有一个很重要的问题。
为什么我们感觉 Agent 好像会自己做事情?
其实 Agent 本身并没有真正意义上的“自主意识”。
它之所以表现得像在自主执行任务,是因为:
每一轮循环中,模型都会根据当前 Context 决定下一步操作。
第一次:
需要看文件。
第二次:
需要运行程序。
第三次:
需要查看错误。
第四次:
需要修改代码。
第五次:
需要重新验证。
这些决策并不是开发者提前写死的。
开发者只是提供工具。
真正决定:
什么时候调用什么工具
的是 LLM。
这也是 Agent 和传统 Workflow 最大的区别之一。
Tools 为什么这么重要
大语言模型本身其实只能做一件事情:
生成 Token。
也就是说,如果没有工具,大模型只能“说”。
它不能真正读取你的硬盘。
不能运行 Shell。
不能访问数据库。
也不能修改代码。
Tools 的作用,就是把模型输出的“意图”转化为真正的操作。
例如:
LLM:
我要查看 config.yaml
如果没有 Tool,它只能告诉你:
请打开 config.yaml。
但是如果 Agent 有:
read_file
这个工具,就可以直接执行:
read_file("config.yaml")
于是 Agent 从:
会说
变成了:
会做
这也是 Tool Calling 成为现代 Agent 架构核心能力的重要原因。
Context 是 Agent 的“工作记忆”
Agent Loop 还有一个非常关键的东西:
Context。
每一次模型调用并不是完全独立的。
前面发生过什么,需要重新告诉模型。
例如:
User:
修复这个项目
Assistant:
我要查看文件
Tool:
返回项目目录
Assistant:
我要运行程序
Tool:
返回错误信息
这些内容都会被保存到 Context 中。
下一次调用 LLM 时,模型就可以看到整个过程。
所以从某种意义上来说:
Context = Agent 当前的工作记忆
Agent 为什么能够连续完成几十个步骤?
并不是因为模型真的一直在“运行”。
而是因为每一轮执行结束之后,状态都会被保存。
下一次调用时,再把之前的信息重新交给模型。
Agent 其实是一个状态机
如果从软件工程角度来看,Agent 其实很像一个动态状态机。
例如:
State 1
用户提出任务
State 2
读取文件
State 3
执行程序
State 4
发现错误
State 5
修改代码
State 6
重新运行
State 7
任务完成
不同的是,传统状态机的状态转换通常是程序员写死的:
if A:
go B
if B:
go C
而 Agent 的状态转换,很多时候是模型动态决定的。
可以理解为:
传统程序:
人设计路径
程序执行路径
而 Agent:
人提供目标
模型动态规划路径
工具执行路径
这也是为什么 Agent 在面对开放任务时,比传统固定 Workflow 更灵活。
Agent Loop 最难的地方是什么
虽然 Agent Loop 本身很简单,但真正做好一个 Agent 并不简单。
第一个问题是:
模型可能做错误决策。
例如应该先看日志,它却一直修改代码。
第二个问题是:
Agent 可能进入死循环。
例如:
运行程序
↓
失败
↓
修改
↓
运行程序
↓
失败
↓
继续修改
如果没有限制,Agent 可能一直执行下去。
所以实际系统通常会增加:
最大循环次数
最大 Token
最大 Tool Call 次数
执行超时
第三个问题是 Context 会越来越长。
随着 Agent Loop 不断执行:
Message
Tool Call
Tool Result
Message
Tool Call
Tool Result
会不断堆积。
Eventually Context 可能变得非常大。
这时就需要:
Context Compression
Summary
Memory
Message Truncation
来控制 Token 消耗。
一个 Agent 的本质
如果让我用一个公式总结 Agent,我更愿意写成:
Agent
=
LLM
+
Context
+
Tools
+
Loop
LLM 负责决策。
Context 保存当前状态。
Tools 提供行动能力。
Loop 让模型可以不断执行下一步。
这四个东西组合起来,就形成了一个最基础的 Agent。
很多复杂 Agent 框架,其实只是在这个结构上增加更多能力。
我的理解
理解 Agent Loop 之后,我觉得 Agent 就没有那么神秘了。
Agent 并不是一个一直运行着、不断思考的“大脑”。
它更像一个循环:
观察当前状态
↓
决定下一步操作
↓
执行操作
↓
获得新的信息
↓
再次观察
这个过程其实和人解决问题非常相似。
比如程序出错时,我们也会:
查看错误
↓
分析原因
↓
修改代码
↓
重新运行
↓
查看结果
Agent 只是把这个过程交给了 LLM。
因此,我认为理解 Agent 最重要的第一步,并不是先研究 Multi-Agent、Memory 或复杂 Workflow。
而是先理解一个最基本的问题:
模型是如何在一次又一次 Agent Loop 中,根据环境反馈决定下一步动作的。
只要把 Agent Loop 理解清楚,后面再看 Coding Agent、Browser Agent、Research Agent,甚至 Multi-Agent 系统,就会容易很多。
因为无论外面的系统看起来多复杂,最核心的逻辑往往还是那几个步骤:
Think
↓
Act
↓
Observe
↓
Think Again
而这,就是 AI Agent 能够一步一步完成复杂任务的基础。