AI Agent 开发实践阶段一:建立 agent 心智模型

0 阅读10分钟

这一阶段对应两篇文章:

  • Unrolling the Codex agent loop(2026-01-23)
  • From model to agent: Equipping the Responses API with a computer environment(2026-03-11)  

这一阶段的目标只有一个:

把“LLM 会回答问题”升级成“Agent 如何持续完成任务”的脑内模型。


第一阶段总览:先别急着谈“智能”,先看“闭环”

很多人第一次接触 agent,会下意识把它理解成:

大模型 + 工具 = agent

这个理解不算错,但太浅。更准确地说,agent 是一个持续闭环系统

接收任务 → 组织上下文 → 调模型推理 → 选择工具 → 执行工具 → 读取结果 → 更新上下文 → 继续推理 → 直到结束。  这正是 OpenAI 在 Unrolling the Codex agent loop 里强调的核心:agent 的本质是一个 loop,而不是一次回答。 

而 From model to agent 进一步补了一层:

光有 loop 还不够。要让它真的能做复杂任务,还必须给它一个可执行环境,包括隔离容器、文件系统、可选结构化存储、受控网络等。否则它只能“想”,不能“干”。 

所以第一阶段你要建立的不是“prompt 技巧”,而是下面这张心智图:

模型负责判断,agent 负责闭环,运行时负责落地。****


一、先把最小概念讲透:Model 和 Agent 到底差在哪

最简单的区分方式:

Model

像一个只会“看题作答”的大脑。你给它输入,它给你输出。

Agent

像一个能“接任务并执行”的系统。它不仅回答,还会:

  • 决定下一步干什么
  • 调用工具
  • 读写文件
  • 处理中间结果
  • 在多轮中保持任务连续性
  • 在必要时收束并交付最终结果

OpenAI 在文章里明确说,单靠 prompt,你只能调用模型已经训练好的智能;但如果给模型一个计算机环境,它就能处理更广泛的工作流,比如运行服务、调用 API、生成表格和报告。 

所以一句话:

模型解决“这一步怎么想”,agent 解决“整件事怎么做完”。


二、Agent loop 是什么:把它想成“带工具的迭代求解器”

OpenAI 对 agent loop 的描述非常清楚:

  1. agent 先把用户输入组织成 prompt

  2. 发起模型推理

  3. 模型有两种可能输出

    • 直接给最终答复
    • 请求调用某个工具
  4. 如果请求工具,agent 执行工具,把工具输出追加回上下文

  5. 再次调用模型

  6. 重复,直到模型不再请求工具,而是产出面向用户的 assistant message   这套机制可以压缩成一句话:

Agent = “模型决策器” + “工具执行器” + “状态累积器”****

你可以把它类比成一个程序员排查 bug:

  • 先读问题
  • 猜一个方向
  • 跑个命令看结果
  • 根据结果修正判断
  • 再跑下一个命令
  • 改代码
  • 测试
  • 最后汇报

这就是 agent loop,只不过“猜方向”的是模型,“跑命令”的是执行环境,“保存上下文”的是 agent runtime。


三、为什么单次调用模型不够:复杂任务天然需要中间状态

这一步是第一阶段里最关键的认知转折。

很多任务无法靠“一次推理”完成,因为中间状态太多。比如让 agent:

  • 看一个代码仓库
  • 找到架构入口
  • 生成架构文档
  • 跑测试验证
  • 修改失败点
  • 最后输出 README 更新说明

这里面每一步都会产生新信息。而这些信息不是预先全知道的,是执行后才知道的。

所以 agent 不是“更强的回答器”,而是“边做边获得信息的系统”。 OpenAI 在 Unrolling the Codex agent loop 里明确说,agent 的输出不仅是 assistant message,很多时候主要输出其实是它在本地环境里写下或修改的代码;assistant message 只是一个“本轮已完成”的终止信号。 

这句话很重要,因为它把 agent 从“聊天工具”拉回到了“任务执行系统”。


四、Prompt 不是一句话,而是一个“上下文装配结果”

很多人以为 prompt 就是用户输入的那句话。这在 agent 场景里通常是错的。

OpenAI 在 Unrolling the Codex agent loop 里解释得很具体:用户并不是直接指定最终 prompt,而是提交不同类型的信息,由 Responses API 把它们组织成模型真正消费的上下文。重点包括三类输入:

  • instructions
  • tools
  • input  

而且这些内容还按角色分层,至少包含 system、developer、user、assistant,优先级从高到低。 

这意味着,agent 的真实输入不是一句“帮我做 X”,而是一整套结构化上下文,例如:

  • 系统级规则
  • 开发者级规则
  • 工具清单
  • 权限说明
  • 当前工作目录
  • 可写目录
  • 网络限制
  • 用户消息
  • 历史消息
  • 历史工具调用结果

OpenAI 甚至展示了 Codex 会把本地环境信息加入上下文,比如当前工作目录和 shell 类型;也会加入权限说明,明确文件权限、网络访问和何时需要向用户请求授权。 

所以第一阶段你要建立一个很重要的感觉:

Agent 的质量,往往不是由“用户那一句话”决定,而是由“整套上下文装配质量”决定。


五、为什么工具是必需品:模型看见世界,工具改变世界

在 agent loop 里,模型本身并不直接执行动作。

模型做的是:提出动作请求

真正执行动作的是工具和运行时。

OpenAI 的例子里,Codex 会把工具列表提供给模型,其中包括:

  • shell 工具
  • plan/update_plan 工具
  • web_search
  • 以及用户通过 MCP 接入的其他工具  

这说明一个本质问题:

模型负责选择动作,工具负责落地动作。****

这和传统软件里的“planner + executor”很像。

如果没有工具,模型最多只能描述“应该做什么”;

有了工具,它才能真正去:

  • 运行命令
  • 读取目录
  • 打开文件
  • 搜索资料
  • 访问数据库
  • 生成工件

所以做 agent 时,一个非常常见的误区是: 把精力都放在 prompt wording 上,却忽略了工具设计。 实际上,很多 agent 效果差,不是因为模型不够聪明,而是因为:

  • 可用工具太弱
  • 工具 schema 不清晰
  • 工具结果不可读
  • 权限模型混乱
  • 上下文反馈太噪

六、上下文窗口为什么会成为核心瓶颈

一旦 agent 进入循环,上下文就会不断变长:

  • 用户消息要保留
  • 历史 assistant 消息要保留
  • 工具调用记录要保留
  • 工具输出要保留
  • 新一轮决策还要再加进去

OpenAI 明确指出,随着对话增长,用来采样模型的 prompt 也会持续增长;而每个模型都有 context window 上限,并且这个上限同时包含输入和输出 token。一个 agent 在单轮里做上百次工具调用,是完全可能把上下文耗尽的。  这就是为什么: Agent 最大的工程问题之一,不是“会不会调用工具”,而是“能不能在长任务中不把自己撑爆”。****

这也是第一阶段必须理解的关键:

一旦做真实 agent,你就不能再把上下文当成“无限聊天记录”。


七、Compaction 是什么:不是简单摘要,而是上下文续命机制

OpenAI 在 From model to agent 里专门讲了 compaction。 当任务持续很久、上下文快满时,系统不能简单粗暴地丢掉旧内容,否则 agent 会失忆。于是他们加入了原生 compaction:让模型分析先前的对话状态,生成一个加密、token 更省、但保留关键信息的表示。之后新的上下文窗口由这个 compaction item 加上早期窗口里高价值部分组成,从而让长任务可以跨越窗口边界继续推进。 

这里最值得你抓住的是:

Compaction 的目标不是“更短”,而是“在更短的前提下尽量保住任务连续性”。****

所以它和普通摘要不一样。普通摘要面向人阅读,compaction 面向后续推理。它本质上是 agent 的“工作记忆压缩”。

你可以把它理解成:

  • 普通聊天摘要:给人回顾
  • compaction:给 agent 继续干活

这也是为什么 OpenAI 说它是原生能力,而不是让开发者自己维护一套手工 summarization/state-carrying 系统。 


八、为什么需要“计算机环境”:别把所有东西都塞进 prompt

这篇里非常实用的一点,是它把“真实 agent”会遇到的工程问题点得很透:

  • 中间文件放哪里
  • 大表格怎么处理,难道全贴进 prompt?
  • 工作流怎么安全访问网络
  • 长时任务的超时与重试怎么处理  

OpenAI 给出的答案是: 不要让开发者自己从头拼这些,而是给 Responses API 配一个受控的计算机环境,包括:

  • 隔离执行环境
  • 文件系统
  • 可选结构化存储(如 SQLite)
  • 受限网络访问  

这背后的第一性原理非常简单:

模型擅长理解和决策,计算机环境擅长存储、执行和与外部系统交互。

如果你把所有资源都塞进 prompt,会立刻遇到三个问题:

  1. token 太贵
  2. 上下文太乱
  3. 信息不可持续复用

因此,文件系统不是附属品,而是 agent 的长期外部记忆之一。

OpenAI 也明确说,容器不只是跑命令的地方,还是模型的工作上下文;模型可以在容器里读文件、查数据库、在网络策略控制下访问外部系统。 


九、为什么“bounded output”和“并发执行”很重要

一旦 agent 开始用 shell,就会产生大量终端输出。

如果原样把所有日志都回灌给模型,结果通常不是更聪明,而是更混乱。

OpenAI 提到两个关键机制:

  • 可以并发执行多个 shell 命令,分别在独立会话里流式返回
  • 可以对单个命令输出设定上限,只保留开头和结尾,并标记中间省略内容  

这两个机制解决的其实是同一个问题:

让模型看到“有用的结果”,而不是“海量的原始噪音”。

这件事非常关键。因为 agent 系统的瓶颈不只是推理能力,还包括信息带宽管理能力

工程上常见的错误是:

“既然模型上下文大,就把所有日志都喂回去。”

但正确做法通常是:

把原始信息保存在环境里,只把当前判断真正需要的那部分送回上下文。


十、总结

1. 用户不是在和“一个回答器”交互

而是在给“一个任务闭环系统”下达目标。  

2. Agent 的核心不是一次回答,而是循环

推理、调用工具、读结果、继续推理,直到结束。  

3. 真正的 prompt 不是一句话

而是系统把 instructions、tools、environment、history、user input 组装后的结构化上下文。  

4. 工具决定 agent 能不能“动手”

模型选择动作,工具执行动作。  

5. 长任务的核心难点是上下文管理

不是“会不会想”,而是“能不能不断推进又不失忆”。  

6. 运行时环境是 agent 的外部身体

文件系统、数据库、网络策略、隔离容器,都是让 agent 从“会说”变成“会做”的前提。