Agent: 思考-行动-观察循环
Agent 是一种能够基于目标进行"思考-行动-观察"循环、能够自主调用工具来完成复杂任务的智能系统。Agent 本质上是对人类的模拟。
Agent 的核心定义
什么是真正的 Agent?
提示词 + LLM + Tools ≠ Agent
**三个本质差异:
简单问答 → 单次交互,任务完成
真正的 Agent:
- 🧠 有目标导向
- 🔄 有自主循环
- 🛠️ 能自主决策调用工具
- 📝 能从结果中学习调整
Agent 的本质:像实习生一样工作
理解 Agent 最直观的方式,是把它和一个刚入职的实习生对比。做一个类比:
假设你把实习生叫过来,丢一个明确的目标和所有需要的材料给他,就期望他自己 run 起来——可能吗?
实习生会怎么做:
- 拿到任务目标 → 自己想办法做计划
- 结合手上工具和资源 → 边做边推进
- 过程中可能遇到:环境跑不通、接口报错、不会配置……
- 遇到问题会去看错误信息 → 调整 → 继续
- 这是一个循环:目标 → 行动 → 观察 → 调整 → 继续
Agent 模拟的正是这个循环:
这本质上是人类在思考自己的任务目标、再根据目标进行行动、在观察自己的行动的结果,在这个不断与环境进行交互的过程中去逐步达成你的计划。
这也是为什么 ReAct 论文是 Agent 领域的奠基之作——"思考-行动-观察"的循环定义了一切的起点。后面所有的多 agent、设计模式、workflow 框架,万变不离其宗。
Agent 的三个核心特征:
| 特征 | 说明 |
|---|---|
| 自主性 | 不需要人一步步引导,自己决定下一步做什么 |
| 目标导向 | 始终朝着最终目标前进,不会跑偏了会调整 |
| 适应性 | 根据环境反馈动态调整策略,遇到问题会尝试不同方法 |
Agent Loop:思考-行动-观察循环
经典 ReAct 框架
【论文】ReAct:Reasoning与Acting协同,让Agent边想边做的奠基之作
把 Thought → Action → Observation 三元组循环落到同一段 prompt 里,是 Agent Loop 最早也最经典的范式(arXiv 2210.03629)
ReAct(Reason + Act)是最经典的 Agent 工作模式:

用户问题
↓
🔍 **思考(Thought):
分析当前状态,决定下一步做什么
↓
⚡ **行动(Action):
选择并执行具体操作
↓
👁️ **观察(Observation):
获取行动的结果
↓
回到思考 → 行动 → 观察 ...
↓ (循环直到目标达成)
最终回答
ReAct工作原理
ReAct的工作流程可分为“初始化-循环迭代-终止输出”三个阶段,每个阶段的核心操作与逻辑衔接如下,完整展现TAO闭环的动态执行过程:

完整循环示例
用户:帮我看看这个项目的测试覆盖率怎么样
🔍 思考:用户想了解项目测试覆盖 率。首先我需要找到测试相关的配置文件,然后运行测试生成覆盖率报告。
⚡ 行动:
Action: find_files
Action Input: pattern: package.json | pyproject.toml | requirements.txt
👁️ 观察:找到 package.json,里面有 test:coverage 脚本
🔍 思考:好的,有覆盖率脚本。让我运行它来获取覆盖率数据。
⚡ 行动:
Action: run_command
Action Input: command: npm run test:coverage
👁️ 观察:测试覆盖率报告生成,总体覆盖率 68%,其中:
- utils.js: 95% ✓
- auth.js: 45% ✗
- api.js: 30% ✗
🔍 思考:覆盖率偏低,特别是 auth 和 api 模块覆盖率很低。让我看看这两个文件没覆盖的部分是什么。
⚡ 行动:
Action: read_file
Action Input: path: coverage/lcov-report/index.html
👁️ 观察:auth.js 中登录验证逻辑没测试;api.js 中错误处理没测试。
🔍 思考:我现在有足够信息了。总结一下给用户。
【最终回答】
你的项目测试覆盖率情况:68%
主要问题:
1. auth.js 登录验证逻辑完全没测试
2. api.js 错误处理分支没测试
建议优先补充这两部分的测试用例。
循环的四个关键环节
1. 思考阶段(Reasoning)
**核心任务:
- 评估当前距离目标还有多远
- 分析已经获取到的信息够不够
- 决定下一步应该做什么
- 预判可能遇到的问题
优秀思考的特征:
- ✅ 具体,不是空泛的
- ✅ 有明确的下一步计划
- ✅ 会反思之前的行动是否有效
- ✅ 会考虑有没有更好的方案
2. 行动阶段(Acting)
核心任务:
- 选择最合适的工具
- 生成正确的调用参数
- 执行具体操作
行动设计原则:
- 一次只做一件事
- 操作要具体可验证
- 失败要有备选方案
3. 观察阶段(Observing)
核心任务:
- 准确获取行动结果
- 提取关键信息
- 过滤噪声
观察的技巧:
- 结果太长时做摘要
- 失败时记录错误信息
- 注意隐含的信息也要捕捉
Agent 循环的终止条件
正常终止
✅ 目标达成
当 Agent 判断已经获取足够信息,可以完成任务了。
判断依据:
- 所有子任务都已完成
- 所需信息都已收集
- 可以给出最终答案
异常终止
❌ 无法继续
**达到最大步数限制
防止无限循环,通常设置 10-50 步的上限。
常见卡住场景:
- 反复调用同一个工具没有进展
- 工具持续失败,没有其他方案
- 进入死循环:A→B→A→B...
改进版 Agent Loop
加入反思环节
在每次循环中加入自我审查:
思考 → 行动 → 观察 → **反思** → 下一轮
↓
这个方向对吗?
有没有更好的方法?
是不是走错路了?
加入记忆 系统
短期记忆:当前任务的历史记录
长期记忆:从过去任务中学到的经验
加入规划能力
大目标
↓ 分解
子目标 1 → 子目标 2 → 子目标 3
↓
逐个完成
最简单的 Agent 实现
纯 Python 实现(50 行代码:
from openai import OpenAI
client = OpenAI()
def simple_agent(question: str, max_steps: int = 10):
messages = [{"role": "user", "content": question}]
for step in range(max_steps):
# 思考 + 行动
response = client.chat.completions.create(
model="gpt-4",
messages=messages,
tools=AVAILABLE_TOOLS
)
message = response.choices[0].message
if not message.tool_calls:
# 没有工具调用,任务完成
return message.content
# 执行工具
for tool_call in message.tool_calls:
result = execute_tool(tool_call)
# 观察:把结果加回上下文
messages.append(message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": result
})
return "达到最大步数限制"
Agent Loop 是智能的"发动机"。一次问答是"条件反射,循环才是"思考"。