在这里插入图片描述

🍃 予枫个人主页

📚 个人专栏: 《Java 从入门到起飞》《读研码农的干货日常》《Java 面试刷题指南

💻 Debug 这个世界,Return 更好的自己!

过去几年,“AI Agent”几乎成了一个被反复使用、也被反复误解的词。

有人说,Agent 就是一个会调用工具的大模型;有人说,Agent 是能够自主完成任务的系统;也有人认为,只要在 Prompt 里写了 ReAct 格式,让模型按“思考—行动—观察”循环执行,就可以叫 Agent。

这些说法都没有错,但都不够工程化。

如果只是说“Agent 能自主工作”,这个定义太宽泛,无法指导系统设计;如果只是说“Agent 会用工具”,这个定义又太窄,无法解释今天产品级 Agent 里那些复杂的权限、状态、沙箱、验证和调度机制。

我更倾向于从架构演进的角度理解 Agent:

Agent 不是某一个单点能力,而是一套围绕 LLM 构建起来的持续执行系统。

它的核心不是“大模型会不会思考”,而是:

系统如何让模型在正确的上下文中做决策,用安全的方式调用工具,在可控的循环里持续推进任务,并在合适的时候停止。
在这里插入图片描述

1. 第一阶段:LLM + Loop,让模型从“回答”变成“执行”

最早一批 Agent 原型给了我们一个非常重要的启发:

只要把 LLM 放进循环里,它就不再只是一个问答模型,而开始具备持续执行任务的形态。

以 BabyAGI 为代表,它的结构非常简单:

while True:
    task = task_queue.dequeue()
    result = llm.execute(task)
    new_tasks = llm.create(result)
    task_queue.add(new_tasks)

这套结构没有复杂工具,也没有权限控制,更没有持久化状态。它只有三个核心组件:

一个任务队列,一个 LLM 执行器,一个 LLM 任务生成器。

但它证明了一件事:

LLM + Loop = 一个可以持续推进任务的系统。

这是 Agent 的第一层工程定义:

Agent = LLM + Loop

Loop 很关键。

没有 Loop,LLM 只是一次性响应用户输入;有了 Loop,LLM 才能在完成当前任务后继续判断下一步该做什么。

但这种早期架构也非常脆弱。它容易无限循环,缺少验证机制,错误会在循环中不断放大。也就是说,它有了“自主性”的雏形,但还没有“可控性”。

2. 第二阶段:LLM + Tools + Loop,让 Agent 真正拥有“手”

接下来,LangChain Agent 将早期粗糙的循环封装成了更标准的“推理—行动—观察”结构。

典型流程是:

用户输入
  ↓
LLM 推理下一步
  ↓
选择工具并执行
  ↓
观察工具返回结果
  ↓
继续推理
  ↓
直到输出最终答案

这一阶段最重要的变化,是 Agent 开始拥有工具调用能力。

也就是说,模型不再只是“生成文本”,而是可以通过 Tool 接口访问外部系统,例如:

  • 搜索资料
  • 查询数据库
  • 调用 API
  • 执行代码
  • 操作文件
  • 发送请求

这时,Agent 的定义变成了:

Agent = LLM + Tools + Loop + Stop Conditions

这里多了两个关键点。

第一是 Tools

工具让 Agent 从“会说”变成“会做”。
如果没有工具,模型再聪明,也只能停留在文本层面;有了工具,模型才能真正改变外部世界。

第二是 Stop Conditions

停止条件让 Agent 从“无限循环的实验品”变成“可运行的工程系统”。
比如最大迭代次数、最大执行时间、提前停止策略等,都是为了防止 Agent 在错误路径上无限消耗资源。

但这个阶段的 Agent 仍然有明显限制:

它大多是一次会话里的线性循环,状态能力弱,崩溃后难以恢复,执行过程也不容易被人工干预。

这意味着,它可以做 Demo,可以做原型,但距离稳定生产系统还有距离。

3. 第三阶段:Stateful Graph,让 Agent 变得可控、可恢复

在这里插入图片描述

LangGraph 的出现,解决的是线性 AgentExecutor 的核心问题:

如果 Agent 的执行过程不可中断、不可回放、不可恢复,那么它就很难用于复杂任务。

线性循环的问题在于:

开始 → 推理 → 工具调用 → 观察 → 推理 → 工具调用 → 结束

这个过程一旦开始,外部很难介入。
一旦中途失败,状态也很容易丢失。

LangGraph 的思路是:不要把 Agent 看成一个简单的 while 循环,而要把它看成一个有状态执行图。

输入
 ↓
[推理节点] → [工具调用节点] → [验证节点]
     ↑              ↓
     └────── 重试决策节点
 ↓
[人工介入节点]
 ↓
输出

这带来了几个重要能力:

第一,执行结构从线性循环变成有向图。
Agent 可以分支、重试、并行,也可以根据不同结果进入不同路径。

第二,状态可以持久化。
通过 Checkpoint,Agent 即使中途失败,也可以从断点恢复,而不是从头再来。

第三,人工可以介入。
在关键节点上,人可以检查、批准、修改或终止任务,这让 Agent 更适合真实业务场景。

第四,调试能力增强。
当执行过程可以回放,问题就不再是黑盒,而是可以定位到具体节点。

这一阶段的 Agent 定义可以进一步升级为:

Agent = (LLM + Tools) × Stateful Execution Graph + HITL + Checkpoint

也就是:

Agent 不只是一个会循环调用工具的模型,而是一个可观测、可控制、可恢复的执行系统。

但这仍然主要解决的是“执行流程”的问题,还没有完全解决“执行环境”的问题。

例如:

  • 工具调用是否有权限边界?
  • 代码执行是否在沙箱中?
  • 上下文如何压缩和组织?
  • 每一步输出如何验证?
  • 敏感操作是否需要审批?
  • 失败后如何进行审计?

这些问题,引出了下一层架构:Harness。

4. 第四阶段:Harness,让 Agent 从“能跑”变成“能安全地跑”

如果说前几个阶段关注的是 Agent 如何执行任务,那么 Harness 关注的是:

Agent 在什么环境里执行任务。
在这里插入图片描述

一个非常有价值的定义是:

Agent = Model + Harness

也就是说,如果你不是模型本身,你就是 Harness 的一部分。

Harness 包括什么?

它几乎包括包裹在模型外部的一切工程设施:

  • 系统提示词
  • 工具注册表
  • 权限控制
  • 沙箱环境
  • 上下文管理
  • 验证机制
  • 钩子脚本
  • 子代理编排
  • 日志与可观测性

这也是为什么同一个模型,在不同 Agent 产品中的表现可能差异巨大。

很多时候,真正拉开差距的不是模型本身,而是 Harness 的设计。

一个好的 Harness 会回答这些问题:

模型能看到什么?
模型能调用什么?
模型不能做什么?
工具执行在哪里发生?
输出如何验证?
失败后如何回滚?
敏感操作如何审批?
整个过程如何审计?

因此,这一阶段的 Agent 定义可以写成:

Agent = LLM + Harness

进一步展开:

Agent = LLM + 工具 + 权限 + 上下文 + 验证 + 钩子 + 沙箱

这一步非常关键。

因为它让 Agent 不再是“裸奔的推理机器”,而是一个有边界、有规则、有保护层的系统。

对于生产环境来说,Agent 的问题从来不只是“能不能完成任务”,还包括:

  • 是否安全
  • 是否可控
  • 是否可审计
  • 是否可恢复
  • 是否能在错误发生时限制损失

这也是我认为很多 Agent Demo 和真实 Agent 产品之间最大的差距。

Demo 关注“模型能不能做成一件事”。
产品关注“模型在复杂环境里,能不能稳定、安全、可控地持续做事”。

5. 第五阶段:Loop Engineering,让 Agent 真正具备持续自主性

即使有了强大的 Harness,仍然有一个问题没有解决:

谁来启动下一次运行?

如果每次都需要用户手动输入,系统本质上仍然是“被动响应”。
它可以很强,但还不够自主。

Loop Engineering 关注的是 Harness 之上的一层:

Harness 负责让 Agent 安全执行;
Loop Engineering 负责让 Agent 持续运转。

这一层会引入更多系统级组件,例如:

  • Automations:定时或事件触发
  • Worktrees:隔离多个 Agent 的执行空间
  • Skills:将项目知识沉淀成可复用能力
  • Plugins / Connectors:连接工单系统、数据库、Slack、GitHub 等外部系统
  • Sub-agents:区分执行者和检查者
  • Memory:跨会话保存状态

这时的 Agent 已经不只是“用户问一句,它答一句”。

它可以:

  • 定时检查任务
  • 主动发现工作
  • 分派子任务
  • 在隔离环境中执行
  • 调用外部系统
  • 保存长期状态
  • 自我验证结果
  • 在满足条件时停止

因此,完整的工程定义可以写成:

Agent = (LLM + Harness) + Loop

进一步展开:

Agent =
LLM
+ 工具
+ 权限
+ 上下文
+ 验证
+ 钩子
+ 沙箱
+ 调度
+ 工作发现
+ 持久化状态
+ 子代理
+ 自验证
+ 停止条件

这才更接近今天产品级 Agent 的形态。

6. 一个更完整的工程定义

把前面的几层合起来,我会这样定义 AI Agent:

AI Agent 是一个在固定循环中运行的智能执行系统。它使用 LLM 进行推理和决策,通过 Harness 提供工具、权限、上下文、验证和沙箱环境来执行动作,并通过 Loop 层实现调度、状态持久化、任务发现、自我验证和停止控制。
在这里插入图片描述

用公式表达:

Agent = LLM(Reasoning) + H(T, P, C, V, S) + L(A, W, M, Sub, Stop)

其中:

T = Tools,工具注册表与工具 Schema
P = Permissions,权限系统与审批边界
C = Context,上下文管理与压缩
V = Verification,验证信号、测试与检查
S = Sandbox,隔离执行环境

A = Automations,调度与事件触发
W = Worktrees,并行隔离执行空间
M = Memory,跨会话状态持久化
Sub = Sub-agents,子代理与 Maker/Checker 分离
Stop = Stop Conditions,停止条件与收敛判断

这个定义的好处是,它不是抽象概念,而是可以直接指导系统设计。

当我们评估一个 Agent 系统时,可以逐项拆解:

它有没有工具?
工具有没有 Schema?
有没有权限边界?
上下文是否可控?
执行是否在沙箱里?
结果是否经过验证?
失败后能不能恢复?
能不能跨会话记忆?
能不能自动触发?
什么时候停止?

如果这些问题回答不清楚,那么这个系统可能只是一个“会调用工具的聊天机器人”,还不能算完整意义上的产品级 Agent。

7. 为什么这个视角更适合工程实践?

过去关于 Agent 的讨论,经常陷入几个抽象争论:

  • LLM 到底会不会规划?
  • Agent 是否真的自主?
  • ReAct 是否等于 Agent?
  • Tool Calling 是否足够?
  • 多 Agent 是否一定更强?

这些问题当然重要,但如果从工程视角看,会更清晰。

LLM 提供的是推理和决策能力。
Harness 提供的是执行环境和安全边界。
Loop 提供的是持续运行和自主调度能力。

三者缺一不可。

没有 LLM,系统没有智能决策能力。
没有 Harness,Agent 就是不安全的裸奔系统。
没有 Loop,Agent 就只是等待用户启动的工具。

所以,一个成熟的 Agent 不应该只看模型能力,也不应该只看是否支持工具调用,而应该看整体系统设计。

真正有价值的问题不是:

这个 Agent 用了什么模型?

而是:

这个 Agent 的 Harness 怎么设计?
它的权限边界在哪里?
它如何管理上下文?
它如何验证结果?
它如何恢复失败?
它的 Loop 如何触发?
它什么时候停止?

这些问题,才决定 Agent 能不能从 Demo 走向生产。

8. 对开发者的启发

如果我要设计一个 Agent 系统,我不会一开始就追求“多智能体”“完全自主”或“复杂规划”。

我会优先搭好四个基础层:

第一,明确工具边界。
每个工具都要有清晰的 name、description、args_schema 和返回结构。模型不应该猜工具怎么用,而应该在明确接口中做选择。

第二,建立权限系统。
读操作、写操作、危险操作要分级。涉及外部副作用的操作,例如发邮件、提交代码、删除数据、支付订单,必须有审批或回滚机制。

第三,加入验证闭环。
Agent 的输出不能只靠模型自信。代码要跑测试,数据要校验,文档要检查格式,关键结论要有来源。

第四,设计停止条件。
一个 Agent 是否可靠,很大程度取决于它是否知道什么时候停。没有停止条件的 Agent,最终会变成资源黑洞。

在这些基础上,再逐步增加状态持久化、调度触发、子代理协作和长期记忆。

也就是说,Agent 的建设路线不应该是:

先追求自主,再补安全

而应该是:

先建立边界,再扩大自主性

这是我认为 Agent 工程化最重要的一条原则。

结语:Agent 的本质是“带边界的自主执行系统”

回过头看,Agent 的演化其实是一层一层补全能力的过程:

LLM + Loop:能持续执行
LLM + Tools + Loop:能调用外部能力
Stateful Graph:可控、可恢复
Harness:安全、有边界、可审计
Loop Engineering:可调度、可持续、自主运行

所以,Agent 不是一个 Prompt 技巧,也不是一个简单的 Tool Calling Demo。

它是一套围绕 LLM 构建的工程系统。

如果用一句话总结:

Agent = 用 LLM 做决策,用 Harness 管边界,用 Loop 给系统生命力。

一个没有 Harness 的 Agent,是裸奔的推理机器。
一个没有 Loop 的 Agent,是等待人按启动键的工具。
只有同时具备推理能力、执行边界和持续循环能力的系统,才更接近真正意义上的 AI Agent。

参考来源
Yohei Nakajima, “BabyAGI”, GitHub, March 2023
Harrison Chase, LangChain Agent / LangGraph, 2023-2025
Addy Osmani, “Agent Harness Engineering”, addyosmani.com, April 19, 2026
Addy Osmani, “Loop Engineering”, addyosmani.com, June 7, 2026
Anthropic, “Effective Harnesses for Long-Running Agents”, anthropic.com, November 26, 2025
Viv Trivedy, “Anatomy of an Agent Harness”, 2026

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐