8133 字
41 分钟
LLM Agent 技术演化史:从 Prompt 到 Harness Engineering

LLM Agent 技术演化史:从 Prompt 到 Harness Engineering#

本文聚焦 LLM Agent 的工程演化史。Agent 概念早于 ChatGPT 很多年,符号规划、专家系统、BDI Agent、多智能体系统、强化学习、机器人控制、游戏 AI、RPA 都可以纳入更宽的 Agent 传统。2022 年之后真正爆发的,是以大语言模型为推理核心、以工具、上下文和运行时系统为外部身体的新一代 LLM Agent。

摘要#

过去几年里,“AI Agent”这个词经历了明显的含义迁移。

2022 年底,ChatGPT 让大语言模型第一次以大众产品形态进入日常使用。那时的 AI 更像一个强大的文本生成器:它能写、能解释、能总结、能聊天,但多数时候只能给出建议,不能真正执行任务。

随后,行业很快意识到:只会说话不够。模型需要知道最新信息,需要访问私有数据,需要调用工具,需要运行代码,需要操作浏览器,需要记住用户偏好,还需要在复杂任务中自我纠错。于是,Agent 的工程中心从“怎么写 Prompt”,转向“怎么组织 Context”,再转向“怎么搭建 Harness”。

这条历史可以概括为:

Prompt Engineering 解决“让模型听懂任务”;Context Engineering 解决“让模型拿到正确信息”;Harness Engineering 解决“让模型在真实系统里持续做对”。

真正的 Agent 是一个系统。模型只是推理核心,外面还需要工具、记忆、状态机、权限、评估、日志、回滚、人工确认和长期运行机制。

本文按“主导工程问题”划分阶段。各阶段会相互叠加:RAG、Tool Use、Workflow、MCP、Computer Use、Skills、Memory、Heartbeat 都会在今天的 Agent 系统中同时出现。


目录#


一、总览:Agent 的主线是可控地做事#

AI Agent 的演化,表面上看是模型越来越像一个“数字员工”:会聊天、会查资料、会调用工具、会操作电脑、会记住偏好、会后台跟进。但从工程角度看,它更准确的主线是:

人类逐步扩大对模型的信任边界,同时被迫补上越来越重的治理系统。

早期模型只能输出文本。它说错了,风险主要是误导用户。后来模型可以调用 API,错误就可能变成真实系统里的错误查询、错误写入、错误删除。再后来模型可以操作浏览器、文件系统和终端,风险半径进一步扩大。等到 Agent 可以后台常驻、跨会话保存记忆、定期唤醒并主动执行动作,它已经成为组织流程中的一个参与者。

flowchart LR
A["文本生成"] --> B["外部知识"]
B --> C["工具调用"]
C --> D["工作流编排"]
D --> E["标准化连接"]
E --> F["GUI 与代码环境"]
F --> G["长期运行"]
G --> H["Harness 治理"]

因此,Agent 的成熟标志要看以下能力是否稳定:

  • 能否拿到正确上下文;
  • 能否选择正确工具;
  • 能否处理工具失败;
  • 能否验证结果;
  • 能否在高风险动作前暂停;
  • 能否记录过程;
  • 能否恢复、回滚或交给人类。

从这个角度看,Agent 发展史是一部系统工程史。

二、前史:ChatGPT 之前的 Agent 传统#

如果从 AI 学术史看,Agent 不是新概念。早期 AI 里已经有“智能体”思想:一个系统感知环境、维护内部状态、选择动作、影响环境。

在 LLM 之前,至少有几条重要传统:

传统典型形式能力限制
符号规划STRIPS、PDDL、任务规划器在明确状态空间中生成行动序列依赖结构化世界模型,难处理开放语言任务
专家系统规则引擎、知识库在窄领域内执行推理规则维护成本高,泛化能力弱
BDI AgentBelief-Desire-Intention 架构把信念、目标、意图分层语义理解和现实环境连接有限
多智能体系统协商、博弈、群体决策多个 Agent 协作或竞争需要明确协议和环境假设
强化学习 Agent游戏、机器人、控制通过奖励学习策略需要环境、奖励和大量训练回合
RPA表单、后台系统、流程自动化能点击、填表、搬运数据不懂开放语言,界面变化后脆弱

这些系统能做事,但多数不懂开放自然语言;LLM 懂语言,但一开始不能稳定做事。LLM Agent 的工程史,本质上就是把“懂语言的大脑”和“能行动的身体”重新接起来。

LLM Agent 的特殊性在于,大语言模型第一次提供了一个较通用的自然语言推理层。它可以读用户请求、读文档、读代码、生成计划、解释工具结果、写结构化参数。过去分散在搜索、脚本、RPA、数据库、浏览器自动化和规划器里的能力,开始被统一到自然语言接口之后。

flowchart TD
A["广义 Agent 传统"] --> A1["规划"]
A --> A2["规则推理"]
A --> A3["控制与行动"]
A --> A4["RPA 自动化"]
B["LLM"] --> B1["语言理解"]
B --> B2["文本生成"]
B --> B3["代码与结构化输出"]
A1 --> C["LLM Agent"]
A2 --> C
A3 --> C
A4 --> C
B1 --> C
B2 --> C
B3 --> C

三、第一阶段:对话与 Prompt,模型开始听懂任务#

1. 阶段背景#

2022 年末到 2023 年初,行业最关注的是如何让模型输出更好。ChatGPT 发布后,用户第一次感受到一个通用语言模型可以完成写作、总结、解释代码、翻译、头脑风暴、问答等大量任务。

但这一代系统主要运行在聊天窗口里。它的输入是用户文本,输出也是文本。它能告诉用户“应该怎么做”,但不能替用户完成真实动作。

用户任务这一阶段模型能做什么做不了什么
写代码生成代码片段不能进入项目、跑测试、修 Bug
查资料根据训练知识回答不能稳定访问最新网页或私有文档
安排旅行给出行程建议不能打开网站订票
数据分析写 Python 思路不能自动读取文件并运行分析
写报告生成文本草稿不能核验来源、更新数据、产出可交付文件

这一阶段的核心矛盾是:

模型能生成语言,但缺少外部世界。

它没有实时知识,没有企业内部数据,没有工具执行能力,也没有跨任务状态。

2. Prompt Engineering 的技术尝试#

Prompt Engineering 的本质,是用自然语言约束模型的输出空间。它并不会把模型参数中没有的事实直接变出来,但可以让模型更稳定地进入某种任务、角色、格式和推理路径。

Zero-shot Prompt#

最简单的方式是直接给任务:

请总结这篇文章。
请把这段话翻译成英文。
请写一个 Python 函数。

这种方式适合简单任务。问题是,复杂任务的任务边界、输出格式、评判标准都不清楚,模型容易跑偏。

Few-shot Prompt#

后来大家发现,给几个示例可以显著提高稳定性。比如先给三组“输入—输出”,再让模型模仿格式完成第四组。

Few-shot 解决的是“格式不稳定”和“任务定义不清”的问题。它本质上是在上下文里临时定义一个小型任务分布。

Role Prompt#

让模型扮演某种角色:

你是一名资深产品经理。
你是一名法律顾问。
你是一名代码审查专家。

Role Prompt 的价值在于压缩任务背景,让模型进入某种语域。但它也带来幻觉风险:模型会说得像专家,不代表它真的掌握专业事实。

Chain-of-Thought 与 Self-Consistency#

Chain-of-Thought 让模型显式展开中间推理步骤,Self-Consistency 则让模型采样多条推理路径,再选择更一致的答案。它们都说明一件事:Prompt 不只是“让模型回答”,还可以“塑造模型的思考过程”。

flowchart TD
A["用户任务"] --> B["Prompt 约束"]
B --> C["角色"]
B --> D["示例"]
B --> E["格式"]
B --> F["推理步骤"]
C --> G["模型输出"]
D --> G
E --> G
F --> G

3. 暴露的问题#

第一,Prompt 不能补事实。如果模型不知道最新信息,Prompt 写得再好也没有稳定依据。

第二,Prompt 不能执行动作。它可以让模型写代码,但不能保证代码运行;可以让模型写 SQL,但不能保证数据库查询正确;可以让模型生成计划,但不能真正执行计划。

第三,Prompt 很脆弱。同一个任务,换一种说法,结果可能不同。提示词模板看起来有效,但在不同模型、不同上下文、不同用户输入下容易失效。

第四,Prompt 工程出现泡沫。早期行业把很多模板技巧包装成长期壁垒。后来模型指令遵循能力增强,系统提示、产品交互、结构化输出和工具调用能力成熟,单纯“卖提示词模板”的价值迅速下降。

4. 这一阶段的历史意义#

Prompt 时代的意义不在于提示词模板本身,而在于它定义了 LLM Agent 的第一个工程问题:如何把人类意图稳定地传递给模型。

这一阶段留下的经验后来并未消失。系统提示、开发者消息、角色约束、输出格式、few-shot 示例、任务模板,今天仍然是 Agent 系统的重要组成部分。只是它们从“全部能力来源”,退回到了更合理的位置:语言控制层。

四、第二阶段:外部知识与工具,模型开始接触世界#

1. 阶段背景#

当模型具备较强语言能力后,行业很快遇到两个问题:

  • 模型不知道最新或私有信息;
  • 模型不能执行真实动作。

于是第二阶段的主导工程问题变成:如何让模型接触外部世界。

这个阶段包含两条并行路线:RAG 让模型获得外部知识,Tool Use 让模型执行外部动作。

2. RAG:把外部知识接入上下文#

RAG 的基本思路是:先把文档切块、向量化、存入检索系统;用户提问时,系统检索相关片段,把片段放入上下文,再让模型回答。

flowchart TD
A["外部文档"] --> B["切块"]
B --> C["向量化"]
C --> D["索引 / 向量库"]
Q["用户问题"] --> E["检索"]
D --> E
E --> F["相关片段"]
F --> G["注入上下文"]
G --> H["模型回答"]

RAG 解决了第一代对话模型的知识断裂问题。企业规章、产品文档、代码库说明、研究论文、客服知识库,都可以通过检索进入模型上下文。

但 RAG 也暴露出一批问题:

问题说明
切块粗糙文档被机械切碎,语义边界被破坏
检索不准向量相似不等于任务相关
召回片段孤立单个片段缺少前后文
仍会幻觉模型可能忽略证据或过度推断
权限复杂企业知识库需要严格控制可见范围

后续优化包括 hybrid search、rerank、结构化元数据、引用来源、source pointer、contextual retrieval、按权限过滤等。RAG 的本质没有过时,但它从“一个向量库方案”变成了更完整的数据与上下文工程。

3. Tool Use:从文本建议到真实动作#

Tool Use 的核心,是让模型输出结构化调用,由外部运行时执行真实动作。

从早期 Plugins、Function Calling,到 Toolformer、MRKL、后来的结构化输出和原生工具调用,行业逐步形成了一个基本范式:

sequenceDiagram
participant U as User
participant M as LLM
participant R as Runtime
participant T as Tool
U->>M: 提出任务
M->>R: 生成工具调用
R->>T: 执行工具
T-->>R: 返回结果
R-->>M: 注入观察结果
M-->>U: 继续推理或最终回答

工具调用让模型第一次从“建议者”变成“执行者”。模型可以查询天气、查数据库、调用企业 API、运行代码、读取文件、搜索网页。

但 Tool Use 也很快暴露出风险:

  • 工具选择错误;
  • 参数生成错误;
  • 工具结果解释错误;
  • 缺少权限边界;
  • 工具输出过长,污染上下文;
  • 工具失败后缺少恢复策略。

因此,工具调用必须逐步引入 JSON Schema、工具白名单、参数校验、权限分级、结果摘要、错误反馈和人类确认。

4. AutoGPT:第一次自主 Agent 狂热与幻灭#

RAG 和 Tool Use 让行业看到一个更激进的可能:既然模型能读资料、能调工具,能不能给它一个大目标,让它自己循环完成任务?

AutoGPT 代表了这波狂热。它尝试让模型自己生成任务队列,执行工具,写入文件,评估进展,再生成下一步行动。

flowchart TD
A["长期目标"] --> B["拆分任务"]
B --> C["选择工具"]
C --> D["执行动作"]
D --> E["观察结果"]
E --> F["更新记忆"]
F --> G{"认为完成了吗"}
G -- "否" --> B
G -- "是" --> H["输出结果"]

它的演示效果很强,但幻灭也很快。根本问题在于开环控制:缺少可靠状态约束、终止条件、任务预算、验证器和人机协作节点。模型可能在错误方向上不断循环,也可能为了简单任务消耗大量调用成本。

AutoGPT 的历史意义,是用失败证明了一个重要原则:

工具调用加循环,不等于生产级 Agent。

从这里开始,行业转向更工程化的工作流编排。

五、第三阶段:自主循环到工程编排,Agent 从演示走向工作流#

1. 阶段背景#

AutoGPT 之后,行业逐渐放弃“给模型一个目标,让它自由发挥”的天真假设。真正可用的 Agent 必须有状态管理、计划约束、工具边界、评估机制和人工介入。

这一阶段的核心工程问题是:

如何把模型的推理和行动放进可控流程里。

2. ReAct:推理与行动交替#

ReAct 代表了一个关键范式:Reasoning + Acting。模型先分析当前状态,再调用工具,读取观察结果后继续推理。

flowchart TD
A["任务"] --> B["Reason<br/>分析状态"]
B --> C["Act<br/>调用工具"]
C --> D["Observe<br/>读取结果"]
D --> E{"是否完成"}
E -- "否" --> B
E -- "是" --> F["交付"]

这比 AutoGPT 的自由循环更可控,因为每一步都围绕当前观察结果推进,也更容易插入日志、预算、检查点和人类确认。

3. Agentic Workflow 的几类模式#

工程实践中,Agentic Workflow 逐渐沉淀出几类模式。

模式核心思想适合任务
Prompt Chaining把复杂任务拆成连续步骤写作、分析、结构化转换
Routing根据输入类型分发到不同处理路径客服、工单、工具选择
Evaluator-Optimizer生成器和评估器循环迭代代码、文案、测试生成
Planner-Executor规划器拆任务,执行器逐步完成研究、开发、运维
Multi-agent Collaboration多个角色分工协作软件工程、复杂调研

这类工作流的共同点,是把模型放进人类设计的控制结构中。可靠性逐步转向依赖规划、执行、观察、评估和修正的闭环。

flowchart TD
A["复杂目标"] --> B["Planner"]
B --> C["Executor"]
C --> D["Tool / Environment"]
D --> E["Observation"]
E --> F["Evaluator"]
F --> G{"通过"}
G -- "否" --> B
G -- "是" --> H["交付"]

4. Context Engineering:信息组织成为核心能力#

随着工作流变长,Context Engineering 变成核心问题。

早期做法是把尽可能多的信息塞进上下文。后来大家发现,上下文窗口越长,成本、延迟和注意力稀释越明显;无关信息也会污染模型判断。Context Engineering 的目标,是在尽可能少的 token 中提供足够支撑期望输出的信息。

它解决四类问题:

  • 给什么信息;
  • 什么时候给;
  • 以什么结构给;
  • 旧信息如何压缩、保存和恢复。

常见技术包括长上下文、RAG 2.0、上下文压缩、记忆分层、工具说明检索、源材料指针、对话 compaction。

flowchart TD
A["信息全集"] --> B["检索"]
A --> C["过滤"]
A --> D["排序"]
B --> E["候选上下文"]
C --> E
D --> E
E --> F["压缩"]
F --> G["当前上下文"]
G --> H["模型推理"]
H --> I{"值得保存"}
I -- "是" --> J["长期记忆"]
I -- "否" --> K["丢弃或保留在短期上下文"]

长期记忆更像硬盘,当前上下文更像内存。Agent 不能把所有历史都放进内存,只能在需要时从记忆、文件、日志和检索系统中恢复相关片段。

5. Reasoning Models:推理能力开始内化#

随着 reasoning models 出现,部分原先依赖 Prompt 技巧的推理能力开始内化到模型本身。模型可以花更多计算做复杂推理,也能更稳定地处理多步任务。

这并没有让 Agent 工程消失。原因很简单:推理能力增强,通常会让模型承担更复杂、更长链路、更高风险的任务。任务难度上升后,工具边界、上下文控制、里程碑检查、评估和回滚仍然必需。

Reasoning Models 对 Agent 的影响主要有三点:

  • 复杂规划能力提高;
  • 工具调用前的分析更细;
  • 任务成本、延迟和执行风险也随之上升。

因此,模型路由、预算控制、里程碑检查和人类确认变得更重要。

6. 这一阶段的历史意义#

这一阶段把 Agent 从“演示很惊艳”推进到“流程可管理”。它让行业认识到,Agent 的可靠性来自工程结构,而不是单纯来自模型自由发挥。

六、第四阶段:协议、界面与软件工程,Agent 进入真实工作环境#

1. 阶段背景#

当工作流编排逐渐成熟后,新的问题出现了:工具和环境太碎片化。

每个 Agent 都要接不同工具,每个工具都要适配不同 Agent。开发者还要面对浏览器、IDE、终端、文件系统、企业后台、没有 API 的网页和各种 GUI 软件。

这一阶段的核心工程问题是:

Agent 如何标准化连接外部工具,并进入真实工作环境。

2. MCP:从工具孤岛到协议层#

MCP 的目标是降低工具接入复杂度。过去是 M 个 Agent 客户端适配 N 个工具,复杂度接近 M 乘 N;协议化后,每个工具实现一次 MCP Server,支持 MCP 的客户端即可调用,复杂度向 M 加 N 收敛。

flowchart TD
subgraph Before["协议化之前"]
A1["Agent A"] --> T1["Tool 1"]
A1 --> T2["Tool 2"]
A2["Agent B"] --> T1
A2 --> T2
end
subgraph After["协议化之后"]
C1["Agent A"] --> MCP["MCP"]
C2["Agent B"] --> MCP
MCP --> S1["MCP Server 1"]
MCP --> S2["MCP Server 2"]
end

MCP 这类协议的意义不只是工具数量增加,更在于它把工具连接从产品私有能力推向生态基础设施。

但协议标准化不等于安全。MCP Server 质量、权限模型、数据泄露、供应链攻击、工具输出污染,仍然需要产品和运行时系统处理。

3. Computer Use:从 API 世界进入 GUI 世界#

Tool Use 主要连接 API,但现实世界里大量软件没有稳定 API。人类每天使用浏览器、表单、后台系统、IDE、网页按钮和桌面应用。Computer Use 的意义,是让 Agent 可以看屏幕、点击、输入、读取视觉反馈。

flowchart LR
A["API Tool Use"] --> B["结构化接口"]
C["Computer Use"] --> D["屏幕"]
D --> E["鼠标"]
D --> F["键盘"]
D --> G["浏览器 / GUI"]

这扩大了 Agent 的行动空间,也引入了新风险:

  • GUI 状态不稳定;
  • 坐标和元素识别脆弱;
  • 页面变化导致操作失效;
  • 模型可能误读视觉信息;
  • 高风险按钮需要确认;
  • 操作后的结果必须验证。

所以 Computer Use 必须配合虚拟浏览器、沙箱、截图审查、DOM 辅助信息、动作确认和状态验证。

4. Coding Agent:软件工程最先落地#

Coding Agent 是 Agent 最先大规模落地的场景之一。原因很明确:

  • 代码是文本,适合 LLM 处理;
  • 开发环境有文件、终端、测试、git、CI 等可观测工具;
  • 成功与失败相对容易验证;
  • 开发者能审查 diff;
  • 工程任务天然适合规划、执行、测试和回滚。

从 Copilot 式补全,到 IDE Agent、CLI Agent、PR Agent,Agentic Coding 的形态逐渐变化:

形态特征典型能力
补全助手人写代码,模型补局部自动补全、解释代码
Chat in IDE用户提问,模型回答查询文件、生成片段
Edit Agent模型修改项目文件多文件编辑、重构
CLI Agent模型操作终端和仓库跑测试、修 Bug、提交变更
PR Agent模型参与代码审查和修复评审、修复 CI、生成说明

但 Coding Agent 也暴露出典型问题:代码能跑不代表架构正确;测试覆盖不足会放大幻觉;Agent 可能破坏安全边界;大型仓库上下文巨大;生成速度带来的主观提速可能掩盖真实交付成本。

因此,Coding Agent 的成熟依赖测试、diff review、sandbox、权限控制、上下文检索、CI 验证和人工审查。

5. 这一阶段的历史意义#

这一阶段让 Agent 真正进入工作环境。协议层解决工具连接问题,Computer Use 解决 GUI 操作问题,Coding Agent 证明 Agent 可以在一个可观测、可验证、可回滚的专业场景中产生真实生产力。

它也说明一件事:Agent 越接近真实工作,越需要治理。

七、第五阶段:长期运行与 Harness,Agent 走向可治理系统#

1. 阶段背景#

前几个阶段让 Agent 会说、会查、会调工具、会编排工作流、会进入软件环境。下一步的问题是:如何让 Agent 长期存在、持续跟进目标,并在风险可控的条件下运行。

这一阶段包含 Skills、Memory、Tasks、Heartbeat、Background Agent 和 Harness Engineering。它们解决的是同一个更大的问题:

如何把概率模型包装成可运行、可治理、可审计、可恢复的系统。

2. Skills:从会用工具到会按组织方法做事#

Tool Use 解决“能调用什么工具”。Skills 解决“如何专业地使用工具”。

一个 Skill 通常不只是 API 描述,还可以包含:

  • 领域知识;
  • 操作流程;
  • 脚本;
  • 模板;
  • 示例;
  • 注意事项;
  • 验证方法;
  • 输出规范。

例如,处理 Excel 是一个 Skill,制作 PPT 是一个 Skill,前端视觉审查是一个 Skill,安全代码审查也是一个 Skill。Agent 可以按任务加载专业方法,减少从零推理的成本。

Skills 的关键工程思想是渐进式披露:

flowchart TD
A["任务"] --> B["技能索引"]
B --> C{"命中技能"}
C -- "否" --> D["普通推理"]
C -- "是" --> E["加载技能说明"]
E --> F{"需要资源"}
F -- "是" --> G["加载脚本 / 模板 / 示例"]
F -- "否" --> H["执行"]
G --> H

这样可以避免把全部工具说明、领域文档、脚本模板一次性塞进上下文。

Skills 也带来供应链风险。Skill 是 Agent 会阅读并遵循的文本和脚本,因此恶意 Skill 可以通过提示注入、脚本执行、数据外传改变 Agent 行为。未来 Skills 需要版本管理、签名、权限声明、来源审查和运行隔离。

3. Memory、Tasks 与 Heartbeat:Agent 获得长期存在感#

Memory 让 Agent 跨会话保存用户偏好、项目约定、历史决策和失败经验。Tasks 让 Agent 可以管理待办事项。Heartbeat 让 Agent 可以按时间被唤醒,检查是否需要行动。

这三者组合后,Agent 从一次性响应工具,变成有长期状态的参与者。

flowchart TD
A["用户目标"] --> B["任务状态"]
B --> C["定期唤醒"]
C --> D["读取记忆"]
D --> E["检查环境"]
E --> F{"需要行动"}
F -- "否" --> G["保持安静"]
F -- "是" --> H["执行或提醒"]
H --> I["更新记忆和任务状态"]
I --> C

但长期存在也带来长期风险:

  • 长期权限风险;
  • 记忆污染;
  • 过期信息持续影响判断;
  • 频繁提醒造成打扰;
  • 背景任务失败后责任边界不清;
  • 用户忘记曾授权某个 Agent。

因此,长期运行 Agent 需要权限过期、记忆审查、通知策略、审计日志、任务取消、运行摘要和人工确认。

4. Harness Engineering:把概率模型变成稳定系统#

Harness Engineering 是这一阶段的最高层抽象。它是一组围绕模型建立的运行时、治理和恢复机制。

可以把 Agent 系统拆成几层:

flowchart TD
A["LLM 推理核心"] --> B["上下文管理"]
B --> C["工具系统"]
C --> D["工作流 / 状态机"]
D --> E["权限与安全"]
E --> F["评估与观测"]
F --> G["失败恢复"]
G --> H["长期运行"]

Harness 的目标是把随机生成系统变成稳定软件系统。它至少包含以下能力:

能力作用
工具注册定义 Agent 能调用什么
权限控制限制 Agent 能做什么
状态机限制任务如何推进
上下文管理控制模型看到什么
记忆系统控制哪些信息长期保存
评估系统判断结果是否正确
可观测性记录工具调用和决策过程
沙箱限制危险动作影响范围
回滚机制出错后恢复状态
Human-in-the-loop高风险动作交给人确认

5. Harness 的六层工程结构#

生产级 Agent 通常需要六层结构。

第一层是信息边界层。它决定哪些信息进入模型、以什么优先级进入、哪些内容是全局规则、哪些内容是用户偏好、哪些内容是项目级约束。

第二层是工具系统。工具需要统一规范,包括输入输出 Schema、读写属性、是否可并发、是否有破坏性、是否需要确认、失败时如何返回错误。

第三层是编排运行层。复杂任务需要规划、拆分、并发、子 Agent、状态机和中途转向能力。

第四层是状态与记忆层。Agent 需要区分短期上下文和长期记忆。短期上下文用于当前推理,长期记忆用于跨会话恢复。

第五层是评估与观测层。Agent 完成任务后需要自检,关键节点需要里程碑检查,最终交付需要测试、评估和审查。

第六层是约束与失败恢复层。失败后要能重试、注入错误原因、回滚状态、切换路径或请求人工介入。

flowchart TD
A["生产级 Agent"]
A --> L1["1. 信息边界"]
A --> L2["2. 工具系统"]
A --> L3["3. 编排运行"]
A --> L4["4. 状态与记忆"]
A --> L5["5. 评估与观测"]
A --> L6["6. 约束与失败恢复"]

6. OpenClaw / OpenCloud 类框架的案例意义#

以 OpenClaw、OpenCloud 这类 Agent 框架为例,可以看到 Harness 如何落地为一组具体机制:

  • 用本地文件系统保存身份、偏好、项目规则和安全边界;
  • 把长期记忆从上下文窗口里拆出去;
  • 用 Skill 和 MCP 分别解决专业方法与工具连接;
  • 对工具调用设置读写属性、破坏性确认和并发控制;
  • 对长上下文做压缩、折叠、摘要和回源;
  • 失败后通过重试、回滚、路线切换和人工确认恢复。
flowchart TD
U["用户目标"] --> I["意图捕获"]
I --> P["任务拆解"]
P --> C["上下文选择"]
C --> M["记忆检索"]
C --> S["Skill 加载"]
M --> T["工具选择"]
S --> T
T --> G{"安全门"}
G -- "低风险" --> X["自动执行"]
G -- "高风险" --> H["人工确认"]
H --> X
X --> O["观测结果"]
O --> E{"验证通过"}
E -- "否" --> R["重试 / 回滚 / 改路"]
R --> P
E -- "是" --> D["交付并更新状态"]

这类案例的价值,不在于某一个单点功能,而在于把长期运行 Agent 所需的多个工程部件组织到一起。

7. 这一阶段的历史意义#

Agent 成熟的标志,是从“会做”走向“可治理地做”。随着 Agent 获得长期记忆、工具权限、后台时间和执行能力,安全、审计、恢复、权限和责任边界变成系统中心。

八、总表:五个阶段的尝试、问题和优化#

阶段大致时间主导工程问题典型技术暴露问题后续优化
对话与 Prompt2022-2023如何让模型听懂任务Zero-shot、Few-shot、Role Prompt、CoT、Self-Consistency无外部事实、无行动能力、Prompt 脆弱系统提示、结构化输出、评估、工具调用
外部知识与工具2023如何让模型接触世界RAG、Plugins、Function Calling、Toolformer、MRKL、AutoGPT检索不准、工具错误、开环失控、权限弱rerank、JSON Schema、工具白名单、状态机、step budget
自主循环到工程编排2023-2025如何让多步任务可控ReAct、Prompt Chaining、Routing、Planner-Executor、Multi-agent、Context Engineering、Reasoning Models框架复杂、状态混乱、上下文污染、成本增加trace、checkpoint、compaction、模型路由、human-in-loop
协议、界面与软件工程2024-2026如何进入真实工作环境MCP、连接器、Computer Use、Coding Agent、IDE Agent、CLI Agent供应链风险、GUI 脆弱、误操作、代码质量风险Registry、最小权限、沙箱、DOM/截图验证、测试与 diff review
长期运行与 Harness2025-2026如何长期、可靠、可治理地运行Skills、Memory、Tasks、Heartbeat、Background Agent、Harness Engineering长期权限、记忆污染、Skill 注入、责任边界权限过期、审计日志、记忆治理、动作分级、回滚、人工确认

九、结论:Agent 成熟的标志是稳定#

LLM Agent 的发展,是一个工程系统逐步补齐能力的故事。

第一阶段,人们通过 Prompt 让模型更好地理解任务。第二阶段,人们通过 RAG 和 Tool Use 让模型获得外部知识并执行真实动作。第三阶段,人们通过 ReAct、Workflow 和 Context Engineering 让模型在多步任务中保持节奏。第四阶段,人们通过 MCP、Computer Use 和 Coding Agent 把 Agent 接入真实工作环境。第五阶段,人们通过 Skills、Memory、Heartbeat 和 Harness Engineering 把这些能力放进一个可控、可测、可审计、可恢复的运行时系统。

这条路线可以进一步压缩成一句话:

从生成文本,到调用工具;从调用工具,到编排任务;从编排任务,到管理上下文;从管理上下文,到长期运行;从长期运行,到可治理、可审计、可恢复。

Prompt 是语言控制,Context 是信息控制,Tool Use 是动作扩展,Workflow 是过程控制,MCP 是连接控制,Computer Use 是界面控制,Skills 是能力封装,Memory 与 Heartbeat 是时间控制,Harness 是这些控制机制的总和。

这才是 LLM Agent 的工程发展史。

LLM Agent 技术演化史:从 Prompt 到 Harness Engineering
https://blog.huangnv.online/posts/26526/1/llm-agent技术演化史_详细报告/
作者
huangnv
发布于
2026-05-26
许可协议
CC BY-NC-SA 4.0