最近学习了一些 AI Agent 的相关知识,顺手整理成一篇学习笔记。
我的阶段性理解是:Agent 的关键是它被放进了一个可以持续感知环境、调用工具、观察反馈、继续行动的循环系统里。
[!NOTE] 这是“AI Agent 学习笔记”系列的第 1 篇,主要整理 Agent Loop 的基本概念。第 2 篇会继续看一次真实的 Codex Desktop 会话 JSONL 记录。
什么是 AI Agent
我的理解是:
AI Agent 是一个能围绕目标持续做事的系统。它读取上下文,决定下一步,调用工具,观察结果,再根据新结果继续调整,直到完成任务或需要人类介入。
主要有几个部分:
- 目标:Agent 通常不是只回答一个孤立问题,而是围绕某个任务持续推进。
- 上下文:Agent 需要知道当前环境、规则、历史对话、项目文件、工具说明等信息。
- 工具:Agent 可以调用搜索、终端、文件读写、浏览器、数据库等外部能力。
- 反馈:工具调用后会返回结果,Agent 会根据结果修正下一步。
- 循环:Agent 的行为不是一次性输出,而是多轮迭代。
所以,普通聊天更像:
用户输入 -> 模型回答
而 Agent 更像:
目标 -> 读取上下文 -> 决策 -> 调用工具 -> 观察结果 -> 继续决策
ReAct:推理和行动交织
Agent 的一个经典理论基础是 ReAct,对应论文是:ReAct: Synergizing Reasoning and Acting in Language Models。
ReAct 可以理解为把两个动作交织起来:
- Reasoning:模型先判断现在知道什么、下一步应该做什么。
- Acting:模型把判断转化成真实行动,例如调用工具、搜索资料、读取文件、运行命令。
它的最小形态常被概括成 T-A-O 循环:
- Thought:我现在知道什么?下一步应该查什么或做什么?
- Action:调用搜索、读取、点击、运行命令、编辑文件等工具。
- Observation:工具或环境返回了什么?它是否支持我的判断?
Agent Loop:完整的运行循环
ReAct 描述的是推理和行动的基本单元。再往上看,就是完整的 Agent Loop,我觉得它增加了上下文组装、工具调度和停止条件等系统层面的东西。
一个 Agent Loop 通常包含 6 个环节:
- 目标输入:用户说要完成什么。
- 上下文组装:系统把任务、规则、历史、工具说明、相关文件、检索结果放进模型上下文。
- 模型决策:模型判断下一步应该做什么。
- 工具调用:模型通过工具读取文件、搜索资料、运行命令、修改内容。
- 观察结果:工具返回结果,模型读取这个结果。
- 继续或停止:模型决定继续下一轮,还是交付结果。
flowchart TD
A["任务输入"] --> B["组装上下文"]
B --> C["模型决定下一步"]
C --> D["调用工具或直接回答"]
D --> E["观察结果"]
E --> F{"是否完成?"}
F -- "否" --> B
F -- "是" --> G["输出结果与验证信息"]
Codex 中的 Agent Loop
为了加深理解,我又去看了 Codex 是如何实现 Agent Loop 的,因为平时用得比较多。下面这部分参考了 OpenAI 官方文章:深入解析 Codex 智能体循环。
当 Codex 向 Responses API 发送请求时,它发送的不是一段纯文本,而是一个结构化的 JSON Payload。这个 Payload 主要包含三类信息:
instructions:系统指令,用来设定模型的基础规则、行为边界和协作方式。tools:工具列表,告诉模型当前可以调用哪些外部能力。input:输入内容列表,包含用户消息、历史上下文、工具结果、图片、文件信息等。
可以把它理解成:
Payload
├── instructions:模型应该如何行动
├── tools:模型可以调用什么能力
└── input:模型这次决策能看到什么上下文
其中 tools 可能包括:
shell:允许模型在本地执行终端命令
update_plan:允许模型更新任务计划
web_search:允许模型检索公开网页信息
apply_patch:允许模型修改本地文件
如果说 instructions 决定了“应该怎么做”,input 决定了“当前知道什么”,那么 tools 就决定了“能对外部世界产生什么影响”。
这三部分在 prompt 里的组织结构如下:
图中的 Role 表示:在 Responses API 的输入里,每条信息都有自己的角色。模型并不是平等地看待所有文本,而是会按照角色优先级处理,我理解这种优先级应该是通过后训练实现的。
常见优先级从高到低大致是:
system:系统规则。developer:开发者指令。user:用户输入。assistant:模型之前的回复。
对于 Codex 来说,在用户的真实输入进入模型之前,系统通常已经自动塞入了几层背景信息:
- 沙盒和权限限制:告诉模型当前能不能改文件、能不能联网、什么时候需要用户授权。
- 开发者自定义指令:例如回复风格、工程习惯、验证要求等。
- 项目规范与技能:例如当前项目的
AGENTS.md、可用 Skills、代码风格、测试要求。 - 本地环境上下文:例如当前工作目录
cwd、终端类型、日期、时区等。
然后,用户的消息才被追加到输入列表后面,开启这一轮 Agent Loop。
也就是说,当我们在 Codex 里输入一句“帮我改这个功能”时,模型实际看到的并不只有这句话,而是一个已经被系统装配好的任务环境。
然后我去翻了翻自己某次 Codex 会话记录。
具体的上下文堆叠应该是这样的:

我的理解总结
学习到这里,我对 AI Agent 的理解可以总结成三句话:
- Agent = LLM + 上下文 + 工具 + 循环。
- ReAct 解决的是模型如何把推理和行动交织起来。
- Agent Loop 解决的是一个任务如何在环境反馈中持续推进。