惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tenable Blog
WordPress大学
WordPress大学
小众软件
小众软件
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
大猫的无限游戏
大猫的无限游戏
T
The Exploit Database - CXSecurity.com
Attack and Defense Labs
Attack and Defense Labs
Simon Willison's Weblog
Simon Willison's Weblog
C
CXSECURITY Database RSS Feed - CXSecurity.com
量子位
有赞技术团队
有赞技术团队
C
Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
F
Fortinet All Blogs
S
Schneier on Security
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
Martin Fowler
Martin Fowler
Recent Announcements
Recent Announcements
Stack Overflow Blog
Stack Overflow Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
Spread Privacy
Spread Privacy
F
Full Disclosure
Scott Helme
Scott Helme
GbyAI
GbyAI
N
Netflix TechBlog - Medium
MyScale Blog
MyScale Blog
Cloudbric
Cloudbric
云风的 BLOG
云风的 BLOG
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
Hacker News - Newest:
Hacker News - Newest: "LLM"
Security Latest
Security Latest
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
The GitHub Blog
The GitHub Blog
The Register - Security
The Register - Security
L
Lohrmann on Cybersecurity
PCI Perspectives
PCI Perspectives
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
D
Docker
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Secure Thoughts
C
Check Point Blog

博客园 - 漫思

python使用.env构建开发和生产环境 python项目的构建 nodejs构建CICD时的思考  成为 AI 智能体工程师的 10 个步骤 es6的 yield python 中的 yield 笔记本的A壳 thinkpad 更换 reduce() in Python python的字段赋值和取值的操作 python的语法类似于lodash分组展开,合并分组操作 SelectMany C# lodash 数组的常用做法 lodash里面的常用方法 技术的边界 Reduce 和 Transduce 的含义 尤雨溪创办的 VoidZero 官宣加入 Cloudflare,前端 Vite 等保持开源 Ramda 函数库参考教程 ramda es 数组的方法 flatmap map object.entity的教程 Map与FlatMap:在数据处理中的区别与联系 flat、flatmap与map的用法区别1 flat、flatmap与map的用法区别 AI不是从天而降,它经历了七十年三起三落:读懂AI的第三课 Agent 17 种架构模式 分析 & 思考 只有踩过坑才懂:前端生成唯一 ID,别用 Date.now ()了!试试它crypto.randomUUID() FastAPI python并发 代码是 AI 写的,生产事故谁背锅? AI Agent 走出 Demo 幻觉的唯一解药:Harness Engineering 高管的 AI 精神病 小米开源可控视频音效生成模型 ControlFoley ​IBM 联合红帽投资 50 亿美元:帮助企业确保开源软件安全 国家大基金领投 DeepSeek,首轮融资投前估值 450 亿美元 SpaceX 自研 AI 训练栈 V1.0 接近完工:用 C 重写、适配 22 万块 GB300 GPU 高管的 AI 精神病 - 漫思 做一款企业真正敢用的AI测试应用,到底有多难?究竟难在哪? - 漫思 工良吐槽篇:万字长文细说 AI 落地之笑谈 koarouter的路由基本能力 7. 简单语句 class-validator class- @koa/router 分路由 这是我见过的最好的koa2 classvalidate typeorm的能力 HLS.js destroy时会取消请求吗 从入门到精通:2025年本体管理工具选型指南,8款工具助你驾驭语义网络 一文入门智能体:dify 超快速构建AI agent C# 15 类型系统改进:Union Types skill网站 应无所住,而生其心 process.stdin.isTTY 谷歌学术走过风雨十年 听创始人畅谈苦辣酸甜 - 漫思 process.stdin.isTTY 是false的具体情况 asyncio 较为复杂的demo asyncio 简单demo python Annotated 独家解读:淘宝使用 Node.js 的 TypeScript 多场景开发和实践 mac uv 使用 Python 包管理工具 uv 使用教程 Python依赖管理新标杆:UV工具安装与实战指南 python的uv lobehubui python的enum通过int进行初始化 python的枚举类型 LlamaIndex是什么?LlamaIndex综述!看这一篇就够了! python和langchain的简单教程 nodejs的顶尖开源项目 基础Pydantic+TypedDict+Annotated +Dataclass 深度解析Python结构化数据工具:dataclass、Pydantic Model与TypedDict 被 LangChain 全家桶搞晕了?LangGraph、LangSmith、LangFlow 一文读懂 - 漫思 谁才是企业级开源平台的优选?OpenCSG与Dify、Coze、Langflow、Ollama 的差异化之路 四大框架全景解析:LangChain、LangGraph、DeepAgent、LangFlow 测试数据管理方式对比:dict vs dataclass vs TypedDict 革命性的写作:MDX 让你的 Markdown 全面动起来 Python - pydantic 入门介绍与 Models 的简单使用 欢迎使用 Pydantic¶ python模块导入 Python 里通常说“数组切片”,大多数时候指的是列表切片。基本格式是: 自定义hook的写法 Python 遍历字典的8种方法 python基础教程 or的简单用法 C# 15 引入了 联合类型 asyncio的基础理论 flask配置热更新 Form.Item 无法直接绑定两个 name Form.Item 的双向翻译官:getValueFromEvent 与 getValueProps Knex.js入门指南:Node.js最强大的SQL查询构建器 knex.js1 Knex.js RFC 9535:JSONPath 的标准化之路 C#多线程Thread.Join()的详解 Pretext:值得关注的文本排版引擎 Flask入门(四):Flask静态文件及配置 【高并发】消息队列思路 为何高并发系统中都要使用消息队列?这次彻底懂了! Node.js 消息队列应用:RabbitMQ、Kafka 与处理高并发任务 大文件上传下载处理方案-断点续传,秒传,分片,合并 Node.js 缓存策略优化:Redis、Memcached 与本地缓存实现 .NET开发者的救星:8个让你告别996的高效库 别再吹牛了,100% Vibe Coding 存在无法自洽的逻辑漏洞!
深度拆解:AI 智能体 Harness 的构造【译】
漫思 · 2026-05-18 · via 博客园 - 漫思

本文将深入探讨 Anthropic、OpenAI、Perplexity 和 LangChain 究竟在开发什么。我们将聊聊编排循环、工具、记忆、上下文管理,以及那些将“无状态”的大语言模型(LLM)转变为全能智能体(Agent)的底层机制。

你可能已经开发过聊天机器人,甚至可能用一些工具搭建了一个 ReAct 循环 (ReAct:Reason + Act,一种让模型在行动前先进行推理的模式)。跑 Demo 的时候看着挺好,但一旦投入生产环境,系统就会开始掉链子:模型会忘记三步前做了什么,工具调用悄悄报错,上下文窗口(Context Window)里塞满了毫无意义的垃圾信息。

问题其实并不在模型本身,而在模型外围的基础设施。

LangChain 证明了这一点:他们仅仅通过改变包裹大语言模型的底层架构——模型没变,参数没变——就让系统在 TerminalBench 2.0 (一个衡量 AI 智能体处理命令行任务能力的权威基准测试) 上的排名从 30 名开外飙升到了第 5 名。另一项研究则通过让大语言模型自己去优化这套架构,实现了 76.4% 的通过率,甚至超过了人类精心设计的系统。

现在,这套基础设施有了一个正式的名字:AI 智能体 Harness

什么是 Agent Harness?

虽然这个术语在 2026 年初才正式确立,但其核心理念早已存在。Harness是包裹在大语言模型之外的完整软件架构:它包括编排循环、工具、记忆、上下文管理、状态持久化、错误处理和护栏(Guardrails)。Anthropic 在其 Claude Code 文档中直截了当地指出:SDK(软件开发工具包)就是“驱动 Claude Code 的智能体 Agent Harness”。OpenAI 的 Codex 团队也使用了同样的说法,明确将“智能体”和“Harness”等同,指代那些让大语言模型真正发挥作用的非模型架构。

我非常喜欢 LangChain 的 Vivek Trivedy 给出的定义公式:“如果你不是模型本身,那你就是 Harness。”

这里有一个经常让人搞混的区别:“AI 智能体”(Agent)是用户感知到的行为体现,它是一个有目标、会用工具、能自我纠错的实体;而“Harness”则是产生这种行为的背后机器。当有人说“我开发了一个智能体”时,他真正的意思是“我开发了一套 Harness,并把它接入了模型”。

图片

Beren Millidge 在其 2023 年的博文中做了一个精准的类比:原生大语言模型就像一个没有内存、没有硬盘、也没有输入输出设备的 CPU。此时,上下文窗口充当了内存(快但容量有限),外部数据库扮演了硬盘(大但速度慢),工具集成则是设备驱动程序。而Harness,就是那个操作系统。正如 Millidge 所写:“我们重新发明了冯·诺依曼架构(Von Neumann architecture)”,因为这是任何计算系统最自然的抽象方式。

工程化的三个层次

围绕模型,工程化可以分为三个同心圆层次:

  • 提示词工程 (Prompt engineering):精心设计模型接收到的指令。
  • 上下文工程 (Context engineering):管理模型在什么时间点能看到什么内容。
  • Harness 工程 (Harness engineering):涵盖了上述两者,再加上整个应用架构:包括工具编排、状态持久化、错误恢复、验证循环、安全执行以及生命周期管理。

Harness 不仅仅是一个包裹提示词的套壳(AI Wrapper),它是让智能体能够自主行动的完整系统。

生产级 Harness 的 12 个核心组件

综合 Anthropic、OpenAI、LangChain 以及广大从业者的实践经验,一个生产级的智能体 Harness 由 12 个不同的组件构成。让我们逐一拆解。

图片

1. 编排循环 (The Orchestration Loop)

这是系统的“心脏”。它实现了“思考 - 行动 - 观察”(Thought-Action-Observation,简称 TAO)循环,也被称为 ReAct 循环。这个循环不停运转:整合提示词 -> 调用大语言模型 -> 解析输出 -> 执行工具调用 -> 反馈结果 -> 重复,直到任务完成。

从技术实现上看,它通常只是一个 while 循环。但复杂的地方不在于循环本身,而在于循环所要处理的各种状态和逻辑。Anthropic 将他们的运行时描述为一个“笨循环”,所有的智慧都存在于模型之中,Harness 只负责管理回合的切换。

2. 工具 (Tools)

工具是智能体的“双手”。它们被定义为某种结构化模式(名称、描述、参数类型),并注入到模型的上下文中,让模型知道哪些工具可用。工具层负责注册、格式校验、参数提取、在沙箱(Sandbox)环境执行、结果捕获,并最终将结果格式化为模型可读的“观察结果”。

Claude Code 提供了六大类工具:文件操作、搜索、执行、网页访问、代码分析和子智能体创建。OpenAI 的 Agents SDK 则支持函数工具(通过 @function_tool 定义)、托管工具(如网页搜索、代码解释器、文件搜索)以及 MCP (Model Context Protocol,一种开放的工具接入标准) 服务器工具。

3. 记忆 (Memory)

记忆在不同的时间尺度上运作。短期记忆是单次会话中的对话历史。长期记忆则跨越多个会话持久存在:Anthropic 使用项目文件和自动生成的 memory.md 文件;LangGraph 使用按命名空间组织的 JSON 存储;OpenAI 则支持由 SQLite 或 Redis 驱动的会话存储。

Claude Code 实现了三层记忆架构:一个轻量级索引(每条约 150 字符,始终加载)、按需调用的详细主题文件,以及仅通过搜索访问的原始对话记录。一个核心设计原则是:智能体将自己的记忆视为一种“提示”,在行动前必须根据实际状态进行验证。

4. 上下文管理 (Context Management)

这是许多智能体容易暗中翻车的地方。核心问题在于上下文腐烂:当关键信息处于窗口中间位置时,模型表现会下降 30% 以上(这就是斯坦福大学发现的“迷失在中间”现象)。即便是支持百万级 Token (Token:模型处理文本的最小单位,大致相当于单词或汉字的部分) 的窗口,随着上下文的增长,指令遵循能力也会退化。

生产环境的应对策略包括:

  • 压缩 (Compaction):在接近限制时总结对话历史(Claude Code 会保留架构决策和未修复的 Bug,同时丢弃冗余的工具输出)。
  • 观察掩码 (Observation masking):隐藏旧的工具输出,但保留工具调用的记录。
  • 即时检索 (Just-in-time retrieval):只保留轻量级标识符,动态加载数据(Claude Code 倾向于使用 grephead 命令,而不是加载整个文件)。
  • 子智能体委托:让每个子智能体进行深度探索,但仅返回 1000 到 2000 Token 的浓缩摘要。

Anthropic 的上下文工程指南指出,目标是:找到能最大化达成目标概率的、信号最强的最小 Token 集合。

5. 提示词构建 (Prompt Construction)

这决定了模型在每一步具体能看到什么。它是层级化的:系统提示词、工具定义、记忆文件、对话历史,以及当前的用户消息。

OpenAI 的 Codex 使用严格的优先级栈:服务器控制的系统消息(最高优先级)、工具定义、开发者指令、用户指令,最后才是对话历史。

6. 输出解析 (Output Parsing)

现代 Harness 依赖于原生工具调用,即模型返回结构化的 tool_calls 对象,而不是需要费力解析的自由文本。Harness 会检查:是否有工具调用?如果有,执行并继续循环;如果没有,那当前的输出就是最终答案。

对于结构化输出,OpenAI 和 LangChain 都支持通过 Pydantic 模型 (Python 中用于数据校验和格式化的库) 进行模式约束。

7. 状态管理 (State Management)

LangGraph 将状态模拟为在图形节点中流动的类型化字典。系统会在关键步骤进行“存档”(Checkpointing),这样即使中断也能恢复,甚至可以进行“时间旅行”式的调试。OpenAI 则提供了四种策略:应用内存、SDK 会话、服务器端 API 或轻量级的响应 ID 链。Claude Code 采用了不同的思路:将 Git 提交作为存档点,将进度文件作为结构化的草稿纸。

8. 错误处理 (Error Handling)

为什么这很重要?一个包含 10 个步骤的过程,即使每一步的成功率高达 99%,最终全流程的成功率也只有约 90.4%。错误是会滚雪球的。

LangGraph 将错误分为四类:临时性的(带延迟的重试)、模型可恢复的(将错误作为工具消息返回,让模型自己调整)、用户可修复的(暂停等待人类干预)以及意外错误(上报调试)。

9. 护栏与安全 (Guardrails and Safety)

OpenAI 的 SDK 实现了三个层级:输入护栏(在第一个智能体运行时检查)、输出护栏(检查最终结果)以及工具护栏(每次调用工具前检查)。一旦触发“绊网”(Tripwire)机制,智能体将立即停止。

Anthropic 在架构上将“权限执行”与“模型推理”分离。模型决定想做什么,但 Harness 决定允许做什么。

10. 验证循环 (Verification Loops)

这是区分“玩具演示”和“生产级智能体”的关键。Anthropic 推荐三种方法:基于规则的反馈(测试、代码检查)、视觉反馈(通过 Playwright 截取 UI 截图)以及以大语言模型为裁判 (LLM-as-judge)(由另一个子智能体评估输出)。

Claude Code 的创造者 Boris Cherny 指出,让模型能够验证自己的工作,能让产出质量提升 2 到 3 倍。

11. 子智能体编排 (Subagent Orchestration)

Claude Code 支持三种模式:克隆 (Fork)(复制父级上下文)、队友 (Teammate)(通过文件邮箱通信的独立窗口)和 工作树 (Worktree)(独立的 Git 分支)。OpenAI 则支持将智能体作为工具(专家处理特定子任务)或移交(专家接管后续控制权)。

循环运作:步进式演练

既然了解了组件,让我们看看它们在一次循环中是如何协同工作的。

图片

  1. 1. 第一步(提示词组装):Harness 构建完整的输入信息。
  2. 2. 第二步(模型推理):组装好的内容发送给模型 API,模型生成 Token:可能是文本,也可能是工具调用请求。
  3. 3. 第三步(输出分类):如果没有工具调用,循环结束;如果有,进入执行阶段。
  4. 4. 第四步(工具执行):Harness 校验参数、检查权限,在沙箱中运行并捕获结果。
  5. 5. 第五步(结果打包):将结果格式化为模型可读的消息,捕获错误以便模型自愈。
  6. 6. 第六步(上下文更新):将结果追加到历史记录,必要时触发压缩。
  7. 7. 第七步(循环):返回第一步,直到满足退出条件。

现实中的框架是如何实现的

图片

  • Anthropic (Claude Agent SDK):通过一个简单的 query() 函数暴露 Harness,运行时是一个“笨循环”,智慧全在模型里。
  • OpenAI (Agents SDK):采用“代码优先”策略,工作流逻辑直接用 Python 表达,而不是复杂的图形语言。
  • LangGraph:将 Harness 建模为显式的状态图,强调对流程的精细控制。
  • CrewAI:实现了基于角色的多智能体协作,由“流程层”管理确定性的骨干逻辑。
  • AutoGen:由微软开发,支持多种编排模式,如顺序执行、群聊、移交和动态任务管理。

“脚手架”的比喻 (The Scaffolding Metaphor)

“脚手架”这个比喻并非装饰,而是极其精准的。建筑脚手架是临时性的基础设施,让工人们能触及原本够不到的高度。脚手架本身不盖房子,但没有它,工人就上不去高层。

图片

关键洞察在于:房子盖好后,脚手架是要拆除的。 随着模型能力的提升,Harness 的复杂程度应该逐渐降低。

这就是协同进化原则:现在的模型在训练时,就已经考虑了 Harness 的存在。如果你的 Harness 设计得好,当模型升级时,你不需要增加复杂度,性能就会自动提升。

图片

定义 Harness 的 7 个关键决策

每个 Harness 的架构师都面临这七个选择:

图片

  1. 1. 单智能体 vs. 多智能体:官方建议:先充分挖掘单智能体的潜力。多智能体会带来额外的开销和信息损耗。
  2. 2. ReAct vs. 先规划后执行:ReAct 灵活但成本高;“先规划后执行”速度更快。
  3. 3. 上下文管理策略:是总结对话,还是动态加载?
  4. 4. 验证循环设计:是用硬性的代码测试,还是用另一个 LLM 来打分?
  5. 5. 权限与安全架构:是追求速度自动批准,还是追求安全步步确认?
  6. 6. 工具范围管理:工具不是越多越好。暴露当前步骤所需的最小工具集往往效果最佳。
  7. 7. Harness 的厚度:多少逻辑写死在系统里,多少逻辑留给模型发挥?

Harness 即产品

两个使用完全相同模型的智能体,性能可能天差地别,原因就在于 Harness 的设计。TerminalBench 的证据已经非常明确:仅仅改变 Harness,就能让排名变动 20 多位。

Harness 不是一个已经解决的问题,也不是一个通用的商品层。它是硬核工程能力的体现:如何将上下文视为稀缺资源进行管理?如何设计验证循环以防止错误累积?如何构建不产生幻觉的记忆系统?

随着模型越来越强,Harness 会变薄,但它永远不会消失。即便最强大的模型,也需要系统来管理窗口、执行代码、保存状态并验证工作。

下次当你的智能体表现不佳时,别光顾着抱怨模型,去检查一下你的Harness吧。


原文:https://x.com/akshay_pachaar/status/2041146899319971922