文章信息

预计字数:4800 字 阅读时间:16 分钟 难度等级:⭐⭐(小白友好,无需技术基础)

核心价值:搞懂AI Agent背后的完整架构,明白"为什么你的AI不好用"


你有没有想过一个很离谱的事。

同一个Claude,有人拿来做了完整的创业项目。有人用来写周报。

同一个ChatGPT,有人让它在后台自动跑任务、搜资料、管文件。

有的人只是问它"今天穿什么"。

区别在哪?

不是谁更聪明。是有人给AI搭了架子,有人没有。


你跟AI聊的那些天,都浪费了

坦白说,我也是从"跟AI聊天"那个阶段过来的。

  • 第一次接触ChatGPT,觉得太神奇了,什么都能回答。

  • 第二次,开始让它帮忙写邮件、改文档

  • 第三次,发现它忘了上回聊了什么,得重新说一遍。

  • 第四次,让它帮我分析个数据,结果它编了个假数据糊弄我。

  • 第五次,我开始怀疑——这东西到底有没有用?

  • 怎么说呢……

不是AI不行。是你光丢一个裸模型在那,指望它自己搞定一切。

你以为你在用AI,其实你在用一块没装系统的CPU。


一句话搞懂:AI到底缺了什么

Agent Harness = 包裹在LLM外面的完整软件基础设施。

光有模型不行,就像光有CPU你啥也干不了。

你得给它装系统、装驱动、连硬盘、接外设

这套"配套设施",就是 Harness。

有人翻译成"驾驭框架"。

我更喜欢叫它——AI的操作系统

因为它的作用,跟操作系统一模一样:

让一块裸芯片变成一个能干活的完整系统。


先搞清楚三个词:LLM、Agent、Harness

这三个词天天看到,大部分人分不清。一分钟给你讲明白。

LLM 就是大语言模型本身。

Claude、GPT-4、DeepSeek……这些都是LLM。

它们干一件事

——根据你给的内容,预测下一个字。没了。

Agent 是AI表现出的一种行为。

当它能自己决定下一步做什么、自己调工具、自己检查结果、自己纠错

——这个状态叫Agent。

注意,Agent不是某个产品,是涌现出来的能力。

Harness 是产生这种能力的"机器"。

你搭好一套系统,让LLM在里面跑起来,它就表现出Agent行为。

一句话:LLM是发动机,Harness是整辆车。

你说你要开车,光拿个发动机有什么用?

相关阅读:Harness、LLM、Token、Agent、MCP…AI圈最烧脑的8个概念,一文彻底讲透

计算机的比喻:为什么这个类比是精确的

有个叫 Beren Millidge 的人,2023年写了一篇文章,把这个比喻讲到了极致。

他说:我们实际上重新发明了冯·诺依曼架构。

你想想一台电脑怎么工作的

CPU = LLM

计算能力很强,但没内存、没硬盘、没外设,啥也干不了。

内存RAM = 上下文窗口。速度极快,但容量有限。claude.ai 给你 200K token,听起来很多,聊着聊着就满了。

硬盘 = 记忆系统。跨会话保存信息。下次打开还能找到上次聊的内容。

外设驱动 = 工具层。让AI能操作文件、搜索网页、执行代码。没有驱动程序,CPU知道键盘在那也用不了。

操作系统 = Harness。把上面这些东西全部管起来,协调运行。

不是比喻。这是计算系统的自然抽象。

这点懂了,后面拆具体组件,你就全懂了。


一个生产级Agent,到底长什么样

原文拆了12个组件。

我不用术语,用大白话讲。你当我在拆一台电脑给你看。


## ① 编排循环——心脏

这是整个系统的心脏。

简单说就是一个循环:

组装指令 → 调用模型 → 解析结果 → 执行动作 → 把结果喂回去 → 再来一轮。

从代码角度看,就是一个 while 循环。没什么高深的。

但这个循环管的东西多了

- 管工具调用
- 管错误处理
- 管上下文更新
- 管什么时候该停

Anthropic 自己说他们的运行时就是一个"笨循环",所有智能都在模型里。

Harness 只负责管理轮次。

你交给AI一个任务,它要跑3轮还是30轮,全靠这个循环在后面默默转。

## ② 工具层——手和脚

AI没有手。

工具层就是给它装手。

每个工具都是一个"技能包":名称、描述、能接收什么参数。

AI看懂了这些描述,就知道什么时候该用哪个工具。

Claude Code 有六大类工具:

- 文件操作
- 搜索
- 执行命令
- 网页访问
- 代码理解
- 子Agent

但这里有个极其反直觉的事实

工具越多,AI表现得越差。

Vercel 从他们的产品里删掉了 80% 的工具,结果反而更好了。

为什么?因为工具描述也要占上下文窗口。

塞太多工具进去,AI反而不确定该用哪个。

Hermes 的做法是:120 个技能,按需加载。

当前任务需要什么,就只把相关的几个塞进上下文。

这叫最小工具集原则。

## ③ 记忆系统——硬盘

- 短期记忆:当前对话里的聊天记录。
- 长期记忆:跨会话保存的信息。

Claude Code 用项目文件和自动生成的 CLAUDE.md 来记东西。

LangGraph 用 JSON 数据库。OpenAI 用 SQLite。

Hermes 用的是P 链协议

——每次会话都记录 parent_session_id,形成一条完整的血缘链。

你聊了三个月,它顺着这条链子就能找到任何一次对话。

一个关键设计:Agent 把自己的记忆当成"提示"而不是"真理"。

感悟:AI把记忆当参考而不是真理——这个设计哲学值得所有做产品的人想想。我们有多少时候把自己的"经验"当成了不可推翻的真理?

每次行动前,它会对照实际状态验证一遍。就像你出门前看一眼备忘录——上面写的跟实际不一致,以实际为准。

相关阅读:https://mp.weixin.qq.com/s/jgHHb7Dt6P_n3Ev36gFVxg

## ④ 上下文管理——最容易翻车的地方

这是很多Agent悄悄翻车的地方。

核心问题叫上下文腐烂:当关键信息落在对话中间位置时,模型性能下降 30% 以上。

斯坦福有个研究叫"Lost in the Middle"

哪怕是百万 token 的窗口,聊久了也会出现指令遵循能力的退化。

生产级的解决方案有四种:

压缩:对话太长了就摘要。

Hermes 的压缩策略是 threshold:0.3,protect_last_n:10
也就是说,上下文用到 30% 的时候开始压缩,但最近 10 轮对话绝对不动,保证"刚刚说了什么"不会丢。

遮蔽:旧的工具输出藏起来,但保留"调用过什么工具"这个记录。

即时检索:不全加载,用的时候再去搜。

Claude Code 用 grep、glob、head、tail 而不是把整个文件塞进去。

子Agent委派:让子Agent去广泛探索,但只返回 1000-2000 token 的压缩摘要。

📍 Anthropic 的上下文工程目标:找到最小的、高信号 token 集合,最大化产生期望结果的概率。

翻译成人话:只给AI看最关键的信息,越少越好。


## ⑤ Prompt 组装——每次都在拼乐高

每一步,Harness 都要把这些东西拼在一起喂给模型:

系统指令 → 工具定义 → 记忆文件 → 对话历史 → 你当前的消息。

OpenAI 的 Codex 用的是严格优先级栈:

- 服务器控制的系统消息最高
- 工具定义第二
- 开发者指令第三
- 用户消息第四

对话历史垫底。

每一层都有优先级。

AI 先看什么后看什么,效果天差地别。

## ⑥ 输出解析——听懂AI在说什么

现代Agent用的是原生工具调用

模型直接返回结构化的 tool_calls 对象,不是一段需要你猜的自由文本。

Harness 的逻辑很简单:有工具调用?执行。没有?那就是最终答案。

但如果解析失败怎么办?有个绝招叫 RetryWithErrorOutputParser

把原始问题、AI的失败回答、报错信息一起丢回给AI,让它自己改。


## ⑦ 状态持久化——存档功能

Agent 干到一半挂了怎么办?

LangGraph 用检查点机制,在关键步骤存档,挂了可以从存档恢复。

OpenAI 有四种互斥策略来管理状态。

Claude Code 更绝——直接用 git commit 当检查点。

你想想这个设计多优雅:每次AI做完一个有意义的事,自动 commit。

出问题了,git reset 就能回退。

Hermes 也用类似思路。进度文件就是草稿区,会话数据库就是存档点。


## ⑧ 错误处理——容错率决定生死

说个很残酷的数学。

一个 10 步流程,每步 99% 的成功率。
端到端成功率是多少?90.4%。
20 步呢?81.8%。
50 步呢?60.5%。
错误会快速叠加。
这就是为什么你的Agent跑着跑着就歪了。

LangChain 区分四种错误:
- 瞬时错误(重试就行)
- 模型可恢复错误(把错误信息喂回去让AI自己调)
- 用户可修复错误(暂停等人来)
- 意外错误(直接报错)

我给 Hermes 设计了一个特别有的配置:密钥池轮询

4 个 API 密钥,round_robin 轮着用
一个密钥限额到了自动切下一个
这听起来不起眼,但在错误处理层,这是救命的。

半夜跑个长任务,不会因为一个密钥限额用完就整个挂掉。


## ⑨ 护栏与安全——给AI上锁

OpenAI 的SDK有三层护栏:输入检查、输出检查、工具调用检查。

Anthropic 更彻底

——他们把"AI想做什么"和"系统允许做什么"完全分开。

模型决定尝试什么动作,工具系统决定让不让你做。

Claude Code 控制着大约 40 项独立的工具权限。

高风险操作必须你手动确认。

没有护栏的Agent,就像没刹车的车。跑得越快,越危险。


## ⑩ 验证循环——从玩具到产品的分水岭

这是我觉得最容易被忽视的一个组件。

Claude Code 的创建者 Boris Cherny 说了一句话:给模型一种验证自己工作的方法,质量可以提升 2 到 3 倍。

三种验证方式:

- 基于规则的——跑测试、跑 lint、做类型检查。确定性最高。
- 视觉反馈——截图对比,UI 任务必备。
- LLM 当裁判——另一个独立的AI来评估输出,能捕获语义问题。

方法论提醒:如果你的Agent只能"做"不能"查",它就是个半成品。


## ⑪ 多Agent架构——该拆的时候拆

一个人干不了所有事,AI也一样。

Claude Code 支持三种模式:

- Fork(复制一份上下文)
- Teammate(独立Agent通过文件通信)
- Worktree(每个Agent一个独立分支)

但 Anthropic 和 OpenAI 都说了一句话——先最大化单Agent。

多Agent不是银弹。

它会带来额外开销:路由需要额外的LLM调用,交接时会丢失上下文。

什么时候才该拆?工具超过 10 个重叠的时候。或者任务领域明显不同的时候。

Hermes 目前走的就是单Agent路线,但通过子Agent委派来处理复杂子任务。

拆不拆不重要,重要的是拆得值不值得。


## ⑫ 生命周期管理——从启动到结束

Agent 不是点一下就开始、关一下就结束那么简单。

- 初始化:读配置、加载记忆、注册工具、设置权限。
- 运行中:编排循环、状态管理、错误恢复。
- 结束后:保存进度、更新记忆、释放资源。

Claude Code 的做法是:

一个初始化Agent先搭好环境(脚本、进度文件、功能列表、初始 git commit)

之后的每个会话,Agent 先读 git 日志和进度文件来"定位自己"。

像不像你每天早上到工位,先看一眼昨天的笔记,再开始干活?

看看这些组件是怎么协同运转的

先别被12个组件吓到。

它们跑起来其实就是一个循环:

  • 第一步:组装。系统指令 + 工具描述 + 记忆 + 对话历史 + 你的消息,全部拼好。

  • 第二步:调用。发给模型,等它回答。

  • 第三步:判断。回答里有没有工具调用?有,执行。没有,就是最终答案,结束。

  • 第四步:执行。验证参数、检查权限、沙盒执行、捕获结果。

  • 第五步:打包。把结果格式化成模型能看懂的消息。

  • 第六步:更新。结果追加到对话历史。上下文快满了?触发压缩。

  • 第七步:循环。回到第一步。

什么时候停?

  • 模型说不需要工具了。

  • 超过最大轮次了。

  • token 预算用完了。

  • 触发了安全护栏。

  • 你手动中断了。

  • 简单的问题 1-2 轮就搞定。

  • 复杂的任务可能链式执行几十轮。

  • 一个循环。

就这么简单。

12个组件全在上面默默运转


说句可能有点伤人的话

现在你知道了Agent Harness是什么。

但我觉得大部分读这篇文章的人,听完也就听完了。

不会有任何改变。

因为知道和做到之间,隔着一条巨大的鸿沟。

你当然可以继续用Claude聊天、用ChatGPT写周报。

也没人规定你必须搭一个Agent。

但我想让你记住一个数据。

LangChain 只改了包裹LLM的基础设施

同样的模型、同样的权重

就从 TerminalBench 的前 30 名之外跃升到了第 5 名。

模型没变,变的只是架子。

这就好比你买了一台顶配的Mac Pro,拿它当菜板用。不是Mac不行,是你没装软件。


所以,该怎么做?

如果你是一个普通用户,不用急着搭什么Agent。

但下次你用AI的时候,至少知道一件事:它不好用,不是因为模型笨,是因为没人给它搭架子

这就够了。

如果你是开发者,或者想往这个方向走

先别想着搞多Agent。先把单Agent做到极致。

先别想着装一堆工具。先想想当前任务真正需要哪几个

先别想着写完美的prompt。先把上下文管理做好。

这不是我说的。

这是 Anthropic、OpenAI、LangChain 这些最头部的团队,用实践验证出来的结论。


最后

原文最后一句话我特别喜欢:

下次你的Agent出了问题,别怪模型。看看Harness。

我说得更直白一点:

你嫌AI不好用的时候,先想想——你给它装系统了吗?

没装操作系统就想让CPU跑程序。这锅,CPU不背


标签:#AI Agent #Harness #Claude #Hermes Agent架构

作者:大象

相关链接

  • 原文:LLM 怎么变成 Agent:Harness 全景拆解:https://mp.weixin.qq.com/s/8EeCcSElqICRBtN2Zj0bFg

  • Hermes Agent 官方文档:https://github.com/NousResearch/hermes-agent

  • Claude Code SDK 文档:https://docs.anthropic.com/en/docs/claude-code/sdk

  • LangChain Deep Agents:https://blog.langchain.dev/deep-agents/

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐