news 2026/5/18 21:36:42

深度拆解 AI 智能体 Harness 架构设计与实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度拆解 AI 智能体 Harness 架构设计与实现

本文深入探讨 Anthropic、OpenAI、Perplexity 和 LangChain 真正在构建什么。涵盖编排循环、工具、记忆、上下文管理,以及将无状态大语言模型转变为全能智能体的其他一切。

你已经构建了一个聊天机器人。也许你还用几个工具搭了一个 ReAct 循环。演示时它能跑通。但当你试图构建生产级系统时,轮子就掉了:模型忘了三步前做了什么,工具调用无声地失败,上下文窗口塞满了垃圾。

问题不在你的模型。而在模型周围的一切。

LangChain 证明了这一点:当他们只改变包裹大语言模型的基础设施(同样的模型,同样的权重),就从 TerminalBench 2.0 的前 30 名之外跃升至第 5 名。另一个研究项目通过让大语言模型优化基础设施本身,达到了 76.4% 的通过率,超越了人工设计的系统。

那套基础设施现在有了名字:智能体驾驭层(Agent Harness)。

一、什么是智能体 Harness?

这个术语在 2026 年初被正式提出,但概念早已存在。Harness 是包裹大语言模型的完整软件基础设施:编排循环、工具、记忆、上下文管理、状态持久化、错误处理和安全护栏。Anthropic 的 Claude Code 文档说得简单:SDK 就是"驱动 Claude Code 的智能体 Harness"。OpenAI 的 Codex 团队也使用同样的表述,明确将"智能体"和"Harness"这两个词等同起来,指代让大语言模型变得有用的非模型基础设施。

我很喜欢 LangChain 的 Vivek Trivedy 提出的那个经典公式:“如果你不是模型,你就是 Harness。”

这里有个容易让人混淆的区别。"智能体"是涌现出来的行为:那个以目标为导向、使用工具、自我修正的、用户与之交互的实体。而 Harness 是产生这种行为的机器。当有人说"我构建了一个智能体"时,他们的意思其实是他们构建了一个 Harness,然后把它指向了一个模型。

Beren Millidge 在 2023 年的文章《脚手架式大语言模型作为自然语言计算机》中把这个类比说得很精确。一个原始的大语言模型就像一台没有内存、没有硬盘、没有 I/O 的 CPU。上下文窗口充当内存(快但有限)。外部数据库充当硬盘存储(大但慢)。工具集成充当设备驱动。Harness 就是操作系统。正如 Millidge 所写:“我们重新发明了冯·诺依曼架构”,因为这是任何计算系统的自然抽象。

二、三个工程层级

模型周围有三个同心圆的工程层级:

  • 提示工程(Prompt Engineering):精心制作模型接收的指令。
  • 上下文工程(Context Engineering):管理模型在什么时间看到什么内容。
  • 驾驭工程(Harness Engineering):涵盖以上两者,再加上整个应用基础设施:工具编排、状态持久化、错误恢复、验证循环、安全执行和生命周期管理。

Harness 不是提示词的外包装。它是让自主智能体行为成为可能的完整系统。

三、生产级 Harness 的 12 个组件

综合 Anthropic、OpenAI、LangChain 以及更广泛的实践者社区的观点,一个生产级智能体 Harness 包含十二个不同的组件。我们逐一剖析。

  1. 编排循环(The Orchestration Loop)

这是心跳。它实现了思考-行动-观察(TAO)循环,也叫 ReAct 循环。循环的运行方式是:组装提示词 → 调用大语言模型 → 解析输出 → 执行任何工具调用 → 将结果反馈回去 → 重复直到完成。

从机制上讲,它通常只是一个 while 循环。复杂性存在于循环管理的一切之中,而不是循环本身。Anthropic 将他们的运行时描述为一个"笨循环",所有智能都存在于模型中。Harness 只是管理轮次。

  1. 工具(Tools)

工具是智能体的双手。它们被定义为模式(名称、描述、参数类型),注入到大语言模型的上下文中,让模型知道有哪些可用工具。工具层处理注册、模式验证、参数提取、沙盒化执行、结果捕获,以及将结果格式化回大语言模型可读的观察内容。

Claude Code 提供六大类工具:文件操作、搜索、执行、网络访问、代码智能和子智能体生成。OpenAI 的 Agents SDK 支持函数工具(通过@function_tool)、托管工具(WebSearch、CodeInterpreter、FileSearch)和 MCP 服务器工具。

  1. 记忆(Memory)

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

Claude Code 实现了一个三层层级结构:一个轻量级索引(每条约 150 个字符,始终加载)、按需拉取的详细主题文件、以及仅通过搜索访问的原始转录文本。一个关键的设计原则是:智能体将自己的记忆视为"提示",在行动前会针对实际状态进行验证。

  1. 上下文管理(Context Management)

这是许多智能体无声失败的地方。核心问题是上下文腐烂(context rot):当关键内容落在窗口中间位置时,模型性能下降 30% 以上(Chroma 的研究,与斯坦福的"Lost in the Middle"发现相互印证)。即使是百万 token 的窗口,随着上下文增长,指令遵循能力也会下降。

生产级策略包括:

  • 压缩(Compaction):接近限制时总结对话历史(Claude Code 保留架构决策和未解决的 bug,同时丢弃冗余的工具输出)。
  • 观察屏蔽(Observation Masking):JetBrains 的 Junie 隐藏旧的工具输出,但保留工具调用可见。
  • 即时检索(Just-in-time Retrieval):维护轻量级标识符并动态加载数据(Claude Code 使用grep、glob、head、tail,而不是加载完整文件)。
  • 子智能体委托(Sub-agent Delegation):每个子智能体进行广泛探索,但只返回 1,000 到 2,000 token 的浓缩摘要。

Anthropic 的上下文工程指南指出目标是:找到最小的高信号 token 集合,以最大化期望结果的可能性。

  1. 提示词构建(Prompt Construction)

这负责组装模型在每一步实际看到的内容。它是分层的:系统提示词、工具定义、记忆文件、对话历史,以及当前用户消息。

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

  1. 输出解析(Output Parsing)

现代 Harness 依赖原生工具调用,模型返回结构化的 tool_calls 对象,而不是必须解析的自由文本。Harness 检查:有工具调用吗?执行它们并循环。没有工具调用?那就是最终答案。

对于结构化输出,OpenAI 和 LangChain 都支持通过 Pydantic 模型进行模式约束的响应。像RetryWithErrorOutputParser 这样的传统方法(将原始提示词、失败的完成内容和解析错误反馈给模型)在边缘情况下仍然可用。

  1. 状态管理(State Management)

LangGraph 将状态建模为流经图节点的类型化字典,通过 reducer 合并更新。检查点发生在超级步骤边界,支持中断后恢复和时间旅行调试。OpenAI 提供四种互斥策略:应用内存、SDK 会话、服务器端 Conversations API,或轻量级的 previous_response_id 链式调用。Claude Code 采取了不同方法:用 git 提交作为检查点,用进度文件作为结构化草稿本。

  1. 错误处理(Error Handling)

这之所以重要,是因为:一个 10 步流程,如果每步成功率 99%,端到端成功率也只有约 90.4%。错误会快速复合。

LangGraph 区分四种错误类型:瞬态错误(带退避的重试)、大语言模型可恢复错误(将错误作为 ToolMessage 返回,让模型自行调整)、用户可修复错误(中断以获取人工输入)、以及意外错误(冒泡以供调试)。Anthropic 在工具处理程序内部捕获失败,并将它们作为错误结果返回,以保持循环运行。Stripe 的生产级 Harness 将重试次数上限设为两次。

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

OpenAI 的 SDK 实现了三个层级:输入护栏(在第一个智能体上运行)、输出护栏(在最终输出上运行)、工具护栏(在每次工具调用上运行)。一个"绊线(tripwire)"机制在触发时立即停止智能体。

Anthropic 在架构上将权限执行与模型推理分离。模型决定尝试什么;工具系统决定允许什么。Claude Code 独立控制约 40 个离散的工具能力,分为三个阶段:项目加载时的信任建立、每次工具调用前的权限检查、以及高风险操作的显式用户确认。

  1. 验证循环(Verification Loops)

这是区分玩具演示和生产级智能体的东西。Anthropic 推荐三种方法:基于规则的反馈(测试、linter、类型检查器)、视觉反馈(通过 Playwright 截图用于 UI 任务)、以及大语言模型作为裁判(一个单独的子智能体评估输出)。

Claude Code 的创建者 Boris Cherny 指出,给模型一种验证其工作的方式能将质量提升 2 到 3 倍。

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

Claude Code 支持三种执行模型:Fork(父上下文的字节级相同副本)、Teammate(单独的终端面板,基于文件的邮箱通信)、以及 Worktree (拥有自己的 git 工作树,每个智能体一个独立分支)。OpenAI 的 SDK 支持智能体作为工具(专家处理有界的子任务)和交接(handoffs,专家完全接管控制)。LangGraph 将子智能体实现为嵌套状态图。

四、循环运转:逐步拆解

既然你已经了解了各个组件,让我们追踪它们如何在一个循环中协同工作。

第 1 步(提示词组装):Harness 构建完整输入:系统提示词 + 工具模式 + 记忆文件 + 对话历史 + 当前用户消息。重要上下文被放置在提示词的开头和结尾(基于"Lost in the Middle"发现)。

第 2 步(大语言模型推理):组装的提示词被发送到模型 API。模型生成输出 token:文本、工具调用请求,或两者兼有。

第 3 步(输出分类):如果模型只产生了文本而没有工具调用,循环结束。如果它请求了工具调用,进入执行阶段。如果请求了交接,更新当前智能体并重新开始。

第 4 步(工具执行):对于每个工具调用,Harness 验证参数、检查权限、在沙盒环境中执行、并捕获结果。只读操作可以并发运行;变更操作串行运行。

第 5 步(结果打包):工具结果被格式化为大语言模型可读的消息。错误被捕获并作为错误结果返回,以便模型自我纠正。

第 6 步(上下文更新):结果被追加到对话历史。如果接近上下文窗口限制,Harness 触发压缩。

第 7 步(循环):返回第 1 步。重复直到终止。

终止条件是分层设置的:模型产生没有工具调用的响应、超过最大轮次限制、token 预算耗尽、护栏绊线触发、用户中断、或返回安全拒绝。一个简单问题可能需要 1 到 2 轮。一个复杂的重构任务可以跨多轮串联几十个工具调用。

对于跨越多个上下文窗口的长时间运行任务,Anthropic 开发了一种两阶段的"Ralph Loop"模式:一个初始化智能体设置环境(初始化脚本、进度文件、功能列表、初始 git 提交),然后每个后续会话中的编码智能体读取 git 日志和进度文件来定位自己,挑选最高优先级的未完成功能,进行工作,提交,并写入摘要。文件系统提供了跨上下文窗口的连续性。

五、真实 Harness 如何实现这一模式

Anthropic 的 Claude Agent SDK 通过单个query() 函数暴露 Harness,该函数创建智能体循环并返回一个异步迭代器来流式传输消息。运行时是一个"笨循环"。所有智能都存在于模型中。Claude Code 使用一个收集-行动-验证循环:收集上下文(搜索文件、阅读代码)、采取行动(编辑文件、运行命令)、验证结果(运行测试、检查输出),重复。

OpenAI 的 Agents SDK 通过Runner类实现 Harness,具有三种模式:异步、同步和流式。该 SDK 是"代码优先"的:工作流逻辑用原生 Python 表达,而不是图 DSL。Codex Harness 在此基础上扩展了三层架构:Codex Core(智能体代码 + 运行时)、App Server(双向 JSON-RPC API)和客户端界面(CLI、VS Code、网页应用)。所有界面共享同一个 Harness,这就是为什么"Codex 模型在 Codex 界面上感觉比在通用聊天窗口中更好"。

LangGraph 将 Harness 建模为显式状态图。两个节点(llm_call和tool_node)通过条件边连接:如果存在工具调用,路由到 tool_node;如果不存在,路由到 END。LangGraph 从 LangChain 的 AgentExecutor 进化而来,后者在 v0.2 中被弃用,因为它难以扩展且缺乏多智能体支持。LangChain 的 Deep Agents 明确使用了"智能体 Harness"这一术语:内置工具、规划(write_todos工具)、用于上下文管理的文件系统、子智能体生成和持久化记忆。

CrewAI 实现了基于角色的多智能体架构:Agent(围绕大语言模型的 Harness,由角色、目标、背景故事和工具定义)、Task(工作单元)和 Crew(智能体集合)。CrewAI 的 Flows 层增加了"在关键处注入智能的确定性骨架",管理路由和验证,而 Crews 处理自主协作。

AutoGen(正在演变为 Microsoft Agent Framework)开创了对话驱动的编排。其三层架构(Core、AgentChat、Extensions)支持五种编排模式:顺序、并发(扇出/扇入)、群聊、交接和 magentic(一个管理智能体维护动态任务账本,协调专家)。

六、脚手架隐喻

脚手架隐喻不是装饰性的。它是精确的。建筑脚手架是临时基础设施,让工人能够建造他们 otherwise 无法到达的结构。它不做建造工作。但没有它,工人就上不了高层。

关键洞察:建筑完工时,脚手架会被拆除。随着模型改进,Harness 复杂性应该降低。Manus 在六个月内重写了五次,每次重写都移除了复杂性。复杂的工具定义变成了通用的 shell 执行。"管理智能体"变成了简单的结构化交接。

这指向了共同进化原则:模型现在会在特定的 Harness 在环的情况下进行后训练。Claude Code 的模型学会了使用它被训练时所用的特定 Harness。改变工具实现可能会降低性能,因为这种紧密耦合。

Harness 设计的"未来验证测试":如果性能随着更强大的模型而提升,且无需增加 Harness 复杂性,那么设计就是合理的。

七、定义每个 Harness 的七个决策

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

  • 单智能体 vs. 多智能体。

Anthropic 和 OpenAI 都说:先最大化单智能体。多智能体系统增加开销(额外的路由大语言模型调用、交接时的上下文丢失)。只有当工具过载超过约 10 个重叠工具,或存在明显分离的任务域时,才进行拆分。

  • ReAct vs. 计划-执行。

ReAct 在每一步交错推理和行动(灵活但每步成本更高)。计划-执行将计划与执行分离。LLMCompiler 报告称比顺序 ReAct 快 3.6 倍。

  • 上下文窗口管理策略。

五种生产级方法:基于时间的清除、对话总结、观察屏蔽、结构化笔记和子智能体委托。ACON 研究表明,通过优先保留推理痕迹而非原始工具输出,token 减少了 26% 到 54%,同时保持了 95% 以上的准确率。

  • 验证循环设计。

计算验证(测试、linter)提供确定性的 ground truth。推理验证(大语言模型作为裁判)捕获语义问题但增加延迟。Martin Fowler 的 Thoughtworks 团队将其框定为引导器(前馈,在行动前引导)与传感器(反馈,在行动后观察)。

  • 权限和安全架构。

宽松(快但风险高,自动批准大多数操作)vs. 严格(安全但慢,每个操作都需要批准)。选择取决于部署上下文。

  • 工具范围策略。

更多工具通常意味着更差的性能。Vercel 从 v0 中移除了 80% 的工具,结果反而更好。Claude Code 通过懒加载实现了 95% 的上下文缩减。原则:只暴露当前步骤所需的最小工具集。

  • Harness 厚度。

多少逻辑存在于 Harness 中,多少留给模型。Anthropic 押注簿 Harness 和模型改进。基于图的 Harness 押注显式控制。Anthropic 经常从 Claude Code 的 Harness 中删除规划步骤,因为新版本模型内化了这种能力。

八、Harness 就是产品

两个使用相同模型的产品,仅凭 Harness 设计就可能产生截然不同的性能。TerminalBench 的证据很明确:只改变 Harness,智能体就跃升了 20 多个排名位置。

Harness 不是一个已解决的问题,也不是一个商品化层。这里才是硬核工程所在:将上下文作为稀缺资源管理、设计能在失败复合前捕获它们的验证循环、构建提供连续性而不产生幻觉的记忆系统、以及做出架构赌注:该建多少脚手架,又该留给模型多少。

这个领域正朝着更薄的 Harness 发展,因为大模型在改进。但 Harness 本身不会消失。即使是最强大的模型,也需要某种东西来管理它的上下文窗口、执行它的工具调用、持久化它的状态、并验证它的工作。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/18 21:36:41

简介LLM 推理的内部工作原理

每次对 LLM 的 generate() 调用都会在同一个 GPU 上运行两个不同的计算阶段: • Prefill(处理提示词)是计算密集型• Decode(逐个生成 token)是内存密集型 大多数推理优化都针对其中一个阶段,而诊断哪个阶…

作者头像 李华
网站建设 2026/5/18 21:36:27

AKShare:5分钟掌握Python金融数据获取的完整解决方案

AKShare:5分钟掌握Python金融数据获取的完整解决方案 【免费下载链接】akshare AKShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库 项目地址: https://gitcode.com/gh_mirrors/aks/aks…

作者头像 李华
网站建设 2026/5/18 21:29:41

GitHub个人主页自动化构建:从静态README到动态技术名片

1. 项目概述:一个GitHub个人主页的深度构建与品牌化实践 在程序员的世界里,GitHub主页早已超越了单纯的代码仓库集合,它正逐渐演变为一个技术人的数字名片和品牌展示窗口。当我在GitHub上看到“AntonyCanut/AntonyCanut”这个项目时&#xf…

作者头像 李华