@eyad_khrais: https://x.com/eyad_khrais/status/2069552027382980882
摘要
一份构建 AI 代理框架的全面指南,涵盖工具执行、上下文管理、状态/记忆和护栏,基于构建 Claude Code 和其他企业级框架的经验。
查看缓存全文
缓存时间: 2026/06/24 00:17
AI 工具链工程入门
如果AI模型是智能体的大脑,那么工具链就是身体。你可以通过API调用模型,但身体必须自己构建——这就是为什么如果你对开发智能体感兴趣,工具链工程是当前最重要的概念。
Cursor、Codex和Claude Code都是为编码任务设计的工具链的例子。Claude Code的大脑是Opus,但产品的其余部分就是工具链。
过去一年,我们一直在构建像Claude Code这样的工具链,但用于大型企业希望自动化的后台企业工作。这篇文章概述了我们学到的关于构建有效智能体身体并使其达到企业级就绪状态的全部经验。
首先,每个工程师在构建第一个工具链时必须回答4个问题:
- 智能体实际如何行动?(工具执行)
- 它如何知道什么与任务相关?(上下文管理)
- 它如何记住发生了什么?(状态与记忆)
- 你如何阻止它做不应该做的事?(护栏)
然后整合所有内容并从头到尾运行它。
到最后,你应该理解构建智能体身体的每个组件。
为什么需要工具链
当你调用LLM的API时,它通常只接收和返回文本。这意味着模型本身可以描述需要采取的行动,但无法执行任何行动。文字不能执行任何东西。
构建工具链的第一步是通过将模型说它想做的事情转化为实际发生的事情来弥合这一差距——从工具执行开始。
工具执行
当你构建一个智能体时,你只是向模型提供一个它可以使用的可用工具列表。每个工具都有一个名称、描述其功能的说明以及它期望的输入的模式。API将所有内容送入模型的上下文,所以从模型的角度来看,它仍然是位于用户请求旁边的文本——一个它被允许请求的工具列表。
当模型决定行动时,它会响应一个工具调用:一个包含工具名称和参数的结构化块。
示例:update_record with {“id”: 4521, “status”: “approved”}
模型可以请求行动,但不能执行行动。这是工具链的工作。它接收调用,对你的系统执行实际操作(写入数据库、发送电子邮件等),并将结果写回上下文:{“success”: true, “record”: {“id”: 4521, “status”: “approved”}}。模型读取该结果的方式与读取其他任何内容相同,然后继续。
这是智能体采取行动的完整循环:模型请求,工具链执行,结果作为文本返回。模型只读和写;工具链做其他所有事情。
上下文管理
每个工具菜单、工具调用和工具结果都以文本形式进入上下文窗口。但上下文窗口是有限的——这意味着工具链必须过滤掉哪些内容留在上下文窗口中,哪些被排除。
有大量数据进入模型。例如,一个正在验证供应商发票与采购订单的智能体。它可能拉取一个供应商列表,返回两百行,为每张发票调用一个工具,然后得到更多数据。
任务进行十分钟后,上下文窗口现在包含数十个工具结果,仅此一项就填满了整个上下文窗口。上下文管理至关重要,因为它确保任务开始时的供应商列表不会仍然留在第40步,占据上下文窗口的空间。
上下文管理是工具链在每一步决定模型需要面前有什么才能采取下一步行动。任务定义和相关的近期结果需要保留,但其他所有内容要么被总结,要么被移除。上下文管理的目标是控制智能体当前正在查看的内容。
如何做到这一点
它通过三个步骤完成:
-
它将旧历史压缩成一个运行摘要,这样一百行供应商数据就变成了一行。
-
然后总结每个供应商在哪里可以找到,以便模型可以语义查询并找到它要查找的内容,而无需解析所有内容。
-
最后,它丢弃已经使用过的工具结果,以在上下文窗口中腾出空间。
重要的是,你要将所有数据存储在上下文窗口之外(例如,在向量数据库中),以便在需要时可以在后续步骤中拉回上下文。更多内容见下一部分。
状态与记忆
每次对模型的API调用都是完全无状态的。当你向LLM发送请求时,工具链正在将所有先前的消息作为一段完整的文本发送到请求中,因为模型不会在调用之间保留信息。
这意味着智能体“记住“的所有内容都存在于工具链可以轻松访问并提供给模型的地方。它是一个数据库或文件存储,存储任务产生的所有内容。
在我们的案例中,我们处理的是已经处理过的发票、收集的批准、做出的决定等。记录就是状态。当一个步骤需要其中的某些内容时,工具链拉取相关部分并将其放入上下文窗口——这样模型可以像读取其他任何内容一样读取它。
状态也很重要,因为如果智能体在处理第30张发票时崩溃,模型知道从第30步恢复,而不是从头开始。你甚至可以在任务中途更换或升级模型,智能体将继续工作,因为智能体的记忆从未存在于模型内部。
上下文是智能体当前正在查看的内容,而状态是它知道但当前未查看的所有内容。工具链的工作是在正确的时间在两者之间移动信息。
护栏
模型产生错误的工具调用时,其自信程度与产生正确的调用完全相同——都只是文本。模型内部没有警报会在它编写的JSON重复支付发票或发错供应商时响起。无论哪种方式,它都会报告成功。因此,判断一个行动是否危险必须存在于工具链中,因为工具链是它在到达模型之前唯一接触的东西。
由于每个行动在到达模型之前已经经过工具链,这就给了你在模型请求和实际发生之间的一个检查点。护栏是在该检查点运行的规则。
工具链在执行前进行验证。它检查记录是否存在、金额是否在限制内、行动是否已经运行过一次。
它还限定每个智能体可以接触的内容(因此发票智能体持有发票系统的权限,物理上无法发送电汇)。对于需要人工处理的行动,它会将请求重新路由给人工。批准作为文本返回上下文,智能体继续。
完整的智能体循环
工具链从状态重建模型的视图,通过上下文管理进行修剪,然后发送请求。模型返回文本。当该文本是一个JSON工具调用时,护栏检查它,工具链执行它,将结果写入状态和上下文,然后循环再次进行。
循环结束方式与智能体中其他所有内容相同——模型写入文本。这就是它能做的全部。所有步骤完成后,它将停止发出文本来调用工具,而是发出最终答案。
工具链识别到模型已停止请求行动,并退出循环。
模型是每个人都可以调用的相同API,但良好的工具链工程允许该模型被部署并拥有任务,而不仅仅是处理文本。
模型只能读写,但工具链给了它执行的手、聚焦上下文窗口的眼睛,以及赋予它状态的记忆。
Varick致力于构建工具链并将其部署到价值数十亿美元的公司。我们正在解决将这些企业中实际有效的AI实施到位的巨大问题,而这项工作的很大一部分就是开发工具链。如果你感兴趣,并希望与应用AI领域最顶尖的团队一起研究工具链,请在这里申请:https://www.varickagents.com/careers
相似文章
@tom_doerr: 精心策划的AI代理框架模式与模板 https://github.com/ai-boost/awesome-harness-engineering…
一个精心策划的资源、模式和模板集合,用于构建可靠的AI代理框架,重点关注代理周围的脚手架结构而非模型本身。
@_vmlops:这是互联网上学习 harness engineering 的最佳网站 https://walkinglabs.github.io/learn-harness-engineer…
一门全面的课程,教授面向 AI 编程 agent 的 harness engineering,涵盖环境设计、状态管理和验证,使 Codex 和 Claude Code 等 agentic 编程工具更加可靠。
@eng_khairallah1: https://x.com/eng_khairallah1/status/2058116763372453997
一份全面的指南,教非编码人员如何使用Claude和Cowork构建AI代理,无需编写任何代码,解释核心组件并提供分步说明。
@elvissun: https://x.com/elvissun/status/2065035615800864954
Elvis Sun 分享了一份详细的操作手册,介绍如何使用 AI 编码代理、工程框架和损失函数开发来自主解决复杂工程问题,并展示了如何避免代理作弊等常见陷阱。
学习Harness Engineering
Learn Harness Engineering 是一个免费课程,教授AI编码代理的工程原理,涵盖环境设计、状态管理和验证,使像Codex和Claude Code这样的代理更加可靠。