开场介绍0:00
感谢 " 屠龙之树 " 主播庄明昊老师的推荐 。 红杉美国近期发起 "Own Your Intelligence" 系列专题 , 邀请在企业自建智能议题上走得最远的几家公司做系统分享 。
本期由 LangChain 联合创始人兼 CEO Harrison Chase 主讲 ,他围绕智能体三要素 "Harness、Model、Context" 展开 , 重点探讨何时该自建 Harness、 何时该直接使用现成方案 ,以及评测 (Evals) 与可观测性 (Observability) 在智能体落地中的关键作用 。
Harness 我觉得这是一个非常重要的话题 。在座的很多朋友现在都在思考 " 要不要自建自己的 Harness"。 我很高兴向大家介绍 Harrison, 我第一次注意到他是在 2022 年的 Twitter 上, 当时还处于 GPT-3 时代 。Harrison 是最早一批思考这个问题的人, 我们有了这些模型之后, 如何围绕它们构建一整套 Harrison, 让它们不再只是 " 自动补全式 " 的任务工具 ,而是开始像虚拟协作者 、 像智能体一样行动 。
而且自 2022 年以来 , 整个生态已经成长了很多 。 我也看到你在 " 如何构建智能体 "" 如何构建 Harness"" 如何做评测 " 这些方面的思考不断深入 , 所以今天非常高兴请你来做分享 。
今天的分享会同时涵盖 Harness 和评测两个主题 , 形式上依然是大约 15 分钟的演讲外加 15 分钟的问答 。
谢谢你 ,Harrison。
智能体三要素1:25
好的 。 我叫 Harrison,是 LangChain 的联合创始人兼 CEO。 围绕 " 拥有你自己的智能 " 这个话题 , 我想谈谈评测和 Harness。 谈到 " 智能 ", 我们通常指的是智能体 (Agent)。
那么 , 一个智能体到底由什么构成 ? 在 LangChain 我们认为主要有三部分 : 负责编排的 Harness, 加上模型 , 再加上上下文 。
如果要谈 " 拥有你自己的智能 ", 那这三部分你大概都想拥有 。 关于 " 拥有模型 " 这部分 , 我不打算多讲 ,Lin 已经从 Fireworks 那边来讲过了 ,他谈的是开放权重模型以及如何拥有它们 。
这中间还有一个很重要的部分 , 就是切换模型的能力 。 过去有个概念叫 " 云无关 ",Cloud Agnostic, 指的是能在不同云之间自由切换 。
现在同样的事情正发生在模型身上 : 你希望自己能切换模型 , 一方面是为了避免被锁定 , 另一方面是当更好的模型出现时能立刻用上 。
至于上下文 , 你希望拥有智能体用到的所有上下文 , 无论是记忆 、 语义知识 , 还是过往的对话 , 这些都能帮助智能体在运行过程中实现个性化和正确引导 。
核心循环与中间件2:35
最后一部分是 Harness, 这也是我今天真正想重点讲的 。 那么 , 怎样才能真正拥有自己的 Harness? 这到底意味着什么 ?Harness 的主要职责是什么 ?
它的核心职责是在正确的时间点把上下文带给模型 。 它负责对固定上下文和动态上下文做全部编排 , 把上下文送进模型的上下文窗口 , 让模型看到一些内容 , 得到一次回应 , 再根据这个回应采取下一步行动 。
智能体要完成任务 , 需要做所有这些不同的事情 。 它们还有很多领域特定的工作要做 ,但核心是它们需要与外部系统交互 。
而当你与外部系统交互时, 系统会释放出更多上下文 , 这些上下文又能被反馈回智能体 , 进入循环 。
所以 Harness 就是真正把这一切编排起来的东西 。 智能体最简单的形态 。 大家谈论智能体时, 真正说的其实就是一个 LLM 在循环里不断调用工具 。
这是一个非常简单却又极其通用的架构 : 请求进来 ,LLM 做一次生成 , 这次生成里可能包含要调用的工具 , 如果有 , 就调用这些工具 , 再把观察结果传回给 LLM。
这就是今天几乎所有智能体背后的核心架构 。 不过 , 它们彼此之间又存在细微差别 。 看左边 , 这是基础的 、 核心的循环 ; 而在你自己特定的 Harness 里 , 你可以在不同阶段做很多不同的事情 。
比如 , 我们构建的 LangChain 就是一个非常基础的最小化 Harness, 就是这边这个 。 然后是 Deep Agents, 它是我们模型无关的 、 更通用的版本 , 类似 Claude Code 那类产品 。
它做的事情更多 : 连接文件系统 、 拥有技能 (Skills) 和子智能体 (Subagents)。 它构建在这个非常简单的 Harness 之上 ,但我们可以通过这边的这些杠杆来定制它 。
你可以在智能体被调用之前 、 在每次模型调用之前运行特定的代码片段 ,也可以包装模型调用 、 包装工具调用 。
借助我们称之为中间件 (Middleware)的这种小结构 , 你可以用非常强大的方式定制这个核心的简单循环 、 定制 Harness, 还有其他方式 ,但这种方式正逐渐成为主流 。在很多编码智能体里也出现了 " 钩子 (Hooks)" 和 " 插件 (Plugins)" 的概念 , 本质上是同一件事 : 拿着这个正在运行的基础循环 ,在各个环节挂上小钩子或插件 , 让你能够定制它 。
所以 , 当你能够定制时, 你能做的很多事情都是通过中间件完成的 ,也就是修改那个核心循环 。 智能体仍然在循环里运行 , 仍然是那个简单的架构 ,但通过中间件 , 你可以给智能体接入沙箱 、 文件系统 、 子智能体和记忆 , 还可以做摘要 。
回到刚才那张图 : 摘要是介入在模型之前的 —— 模型被调用前 , 先检查上下文是不是太长了 , 太长就做摘要 。
所以你可以通过中间件这个概念 , 把摘要加进核心循环 。 上下文卸载 (Context Offloading) 也一样 , 它本质上是一种把大型工具调用转储出去的方式 , 包装的则是 " 工具调用 "。
所以关键在于 : 智能体存在这样一个非常简单的通用架构 , 所有更高级的智能体 (Harness) 本质上都在跑这个循环 , 只是在跑核心循环的同时叠加了一大堆东西 。
所以 , 当你思考如何构建或定制自己的 Harness 时, 上面这些就是你可以插入东西的不同位置 : 加入自己的摘要步骤 , 加入自己对特定工具调用的处理 。
这正是让智能体和 Harness 适应你特定领域的方式 。 定制智能体所运行 Harness 的另一种方式 ,是采用一个更显式的认知架构 (Cognitive Architecture)。
认知架构6:06
这其实是 2023、2024 年很多人构建智能体的方式 , 当时的模型还不够 " 好 ", 没法直接跑循环 。 所以为了让它完成特定的事情 , 你需要设计非常定制的认知架构 。
这边这个例子是深度研究 (Deep Research) 场景 : 它会生成一些子问题 , 分发出去 , 然后执行 。 这边是一个 " 代码审查机器人 "。
可以看到 , 这里有非常多高度定制的步骤 , 如今很多这种东西已经沉淀进了 Harness。 我所说的 Harness 仍然是指那个核心循环 。
这些步骤可能是作为对核心循环的特定修改加入的 ,但对于很多非常特定的流程 , 我们确实看到人们仍在用这样的认知架构来特别引导它 。
我们给大家的一条建议是 : 从一个通用的 Harness 开始 , 那是最容易上手 、 也最快能获得价值的方式 。 然后随着你逐渐锁定想做到出色的那个用例 , 就可以开始在它周围加上更多这样的闸门和检查点 , 把它引导到特定的方向 。
何时自研Harness7:20
我们经常被问到的一个问题是 : 什么时候该构建自己的 Harness? 什么时候该用现成的 ? 很多现成的 Harness 都是配合特定模型工作的 , 比如 Claude Code 或 Claude Agent SDK 配合 Anthropic 的模型 ,Codex 配合 OpenAI 的模型 。
我认为这是行业里一个很大的开放性问题 。 我的答案一般来说是 : 你越处于模型训练所覆盖的分布之内 (In Distribution), 现成 Harness 的表现就越好 ; 一旦你开始越来越偏离分布 (Out of Distribution), 就可能需要以某种方式调优自己的 Harness。
调优 Harness 也有不同的方式 , 即便你正在做的是一件分布外的任务 ,其中某些环节对模型来说可能仍是分布内的 。
举个例子 , 想想法律 AI 这种东西 ,Gabe 刚才讲过 , 我记得他提到他们有自己的一套 Harness。在法律 AI 里 ,有些东西对主流模型来说仍然是分布内的 , 比如编辑文件 , 就是所有主流模型都经过强化学习训练的任务 ,而且它们实际上是以非常特定的方式被训练的 。OpenAI 和 Claude 的模型在各自的 Harness 里编辑文件的方式不同 , 结果就是它们各自最擅长以不同的方式编辑文件
。 现在模型们在法律 AI 这个更大的任务上是分布外的 ,但在编辑文件这个任务上则是分布内的 。
所以 , 如果你考虑为那里构建一个 Harness, 你大概需要一个定制的 Harness,但你会希望它使用与所用模型分布匹配的那个编辑文件工具 。
比如我们在 Deep Agents 里做的一件事 :Deep Agents 是我们的可定制 Harness, 我们有一个 " 模型配置文件 (Model Profile)" 的概念 。 对于像编辑文件这类模型分布内的东西 , 会根据当前用的是哪个模型 ,在不同的编辑文件实现之间切换 。
所以我认为这是一个例子 : 当整体任务分布外时, 定制整体 Harness,但把较小的 、 分布内的部分尽量贴近模型层 。
评测与可观测9:18
我想讲的第二个大主题 ,是评测 (Evals) 和可观测性 (Observability)。 我认为 , 当你在实验智能体的各个部分时, 无论是模型 、Harness 还是上下文 , 你都会想知道系统内部发生了什么 ,也希望有能力评估它 。
所以这些是你可以借助的有用工具 ,而且再次强调 ,不只是用于定制 Harness,也用于定制模型 。 两周前 ,Satya 写了一篇很棒的 Twitter 文章 , 谈到了很多这些概念 ,其中有三句话特别触动我 。
第一句 : 创建你自己的私有评测 ,因为评测定义了组织内部 " 好 " 的标准 。 第二句 : 保留你对组织记忆 ( 轨迹 ) 反馈 , 加粗是我标的 " 决策和制度性上下文的所有权 "。
第三句 : 创造你自己的持续学习循环 ( 爬山机器 ), 让你的 AI 投资能够为你的公司复利增值 。 这些话说明了评测和可观测性 ,以及它们所驱动的学习循环在真正拥有你的智能并让它复利增值上的重要性 。
Harbor基准10:21
那么 , 它们到底是怎么做到的呢 ? 先说评测 。Gabe 在这里讲了他们如何为法律领域构建基准 (Benchmark)。 我认为每家公司在构建任务关键型智能体时, 都会为那个智能体构建基准 。
你可以用它来定义并捕捉回归 (Regression), 也可以在基准上爬山 (Hill Climb), 持续改进 , 无论是通过调整 Harness 还是调整模型 。
我们看到正在成为行业标准的定义基准的工具是 Harbor。Harbor 是一个开源的评测运行器 ,由 Terminal Bench 2 的制作者创建 。Terminal Bench 2 是评测编码智能体的行业标准基准之一 ,而 Harbor 本身已经在很多领域流行起来 , 它能让你做什么 ?
这是 Frontier Bench 另一个 " 编码基准 "。 你会得到这样一个漂亮的基准 , 可以比较不同的智能体 (Harness), 不同的模型 , 不同的推理强度 (Reasoning Effort), 看到所有这些 Harness 和模型在你的任务上表现如何 。
所以 , 当你想定义自己的任务时, 为任务建立基准就变得非常重要 。Harbor 到底是什么 ? 它其实很简单 , 概括来说 , 就是由一个智能体去跑一个数据集 , 数据集里包含很多不同的任务 , 任务通常在沙箱里运行 ,因为数量很多 , 你可能想并行化 。
而且 , 正如我稍后会讲到的 , 每个任务都有自己的一套环境 。 这就是一个 Harbor 任务的样子 。在右边你可以看到 , 它有一个 " 环境 ", 这是你定义智能体运行环境的地方 。
很多运行时间更长 、 更有状态的智能体需要与环境交互 , 所以基本上就是启动一个沙箱 , 给它一个在 Dockerfile 里定义的环境 , 然后在里面运行 。
然后是一个解决方案 (Solution), 基本上就是黄金标准答案 , 用来做健全性检查 , 所以它不太有意思 。 测试 (Test) 更有意思 , 它基本上是智能体运行的验证器 (Verifier)。
测试脚本可以做任何事情 : 可以运行代码 、 运行单元测试 ,也可以让另一个 LLM 当裁判 (LLM as a Judge), 甚至让一个智能体当裁判 。
你基本上就是在测试里定义智能体如何被评分 ,而 Instruction.md 是给智能体的提示词 , 这基本上就是 Harbor 的核心 。
你定义这些任务 , 它们是打包好的 、 可以在沙箱里运行的单元 , 然后让一堆智能体去跑 , 智能体又由模型和 Harness 组成 , 最后给它们打分 。
做完所有这些之后, 你会得到什么 ? 你会得到一些可以互相比较的漂亮结果 。 这是 LangSmith 我们为评测和可观测性构建的平台 。
你可以在这里看到很多不同的实验 , 我们和 Harbor 有非常好的集成 , 你可以看到反馈分数 ,在这个例子里是一个单一的奖励函数 , 你还可以跟踪延迟和 Token 消耗 。
所以 , 给智能体做基准测试时, 你可能不只看准确率 , 还关心延迟和成本 , 你会想跟踪所有这些指标 。
轨迹与追踪13:19
而针对你运行的某个特定实验 , 这些就是 Harbor 数据集中包含的不同任务 。 再稍微谈谈可观测性 , 它听起来很基础 ,但我觉得其实非常重要 ,而且对智能体来说被严重低估了 。
当智能体出错时, 根源往往是某一次 LLM 调用出了问题 。 为什么会出问题 ? 原因无非两种 : 一是模型不够好 , 二是 LLM 接收到的上下文不够好 。
实际上, 我认为更多时候是第二种原因导致的问题 。 所以 , 对进入模型上下文窗口的内容有非常好的可观测性 , 包括这些上下文是如何积累的 、 跑了哪些步骤 、 调了哪些工具 , 上下文是怎么到那里的 。
所有这些对调试出错的智能体都非常重要 。 这是我们提供的一种可观测性视图 , 设计得对用户更友好 , 和你在 Claude Code 里看到的东西类似 。
我们收起了一些工具调用的展开 , 所以你能看到上面一共 7 次工具调用 , 我们努力让它很容易浏览 。
如今 , 大多数智能体的运行路径以轨迹 (Trajectories)的形式呈现 , 轨迹基本上可以理解为你在 Claude Code 里看到的那一串消息 : 你输入一条人类消息 , 它做一堆工具调用 , 这些在底层都是消息 , 然后它回应你再输入下一条人类消息 。
这就是那个正在变得越来越核心的消息轨迹 。 但光有轨迹还不足以完全调试 , 所以我们还有完整的追踪 (Trace), 你可以点进特定内容 , 看看模型内部到底发生了什么 。
这种可观测性对于了解正在发生的事情非常重要 。 评测和可观测性 , 真正让你能够建立起这个数据飞轮 。
当你开始使用智能体 , 你的用户开始使用智能体 , 你开始获得反馈时, 你的智能就能不断复利增长 。 这是我们一个团队成员在 SWEX 的 AI 工程大会上展示的一张幻灯片 , 主题是 " 持续改进智能体的配方 (Recipe)"。
数据飞轮15:00
概括来说很简单 : 你构建一个智能体 , 开始运行它 , 收集大量轨迹 , 然后整理这些轨迹数据 , 再在你创建的数据上运行实验 。
说起来简单 , 底层当然有很多复杂性 ,其中非常重要的一点是 " 反馈 ": 从环境中获取反馈 , 或者从合成来源获取反馈 。
先说从环境获取 。 我认为在智能体设计中被严重低估的一点 ,是你如何把智能体呈现给用户的 UX 设计 。
如果你用巧妙的方式呈现 , 实际上能从用户那里获得大量反馈 ,他们可能不会明确地点赞或点踩 , 没有人真的会那样做 ,但如果你巧妙设计 UX, 就能从中获得一部分反馈 。
另一件可以做的事是获得合成反馈 , 你可以让我们称之为在线评测器 (Online Evaluators)的东西在这些轨迹上运行 , 来做判断 。Gabe 提到过我们和 Harbor 一起做的一个实验 , 我们显著降低了一些 LLM 作为裁判时评测的成本 。
想象一下, 对进入你系统的每一条轨迹都跑一遍 Opus, 那会是一笔巨大的账单 。 所以你需要一种非常便宜 、 快速的方式 。
我们为此微调了一些小语言模型 (SLM), 但你当然也可以用现成模型加定制提示词来做 。 如果有些想测的东西足够简单 , 直接用代码也可以 。
这就是完整流程的一部分 : 整理轨迹数据 , 反馈是其中很大的一块 。 另一件事是 , 当你用这些数据去更新时, 可以用这套系统更新智能体的任何部分 , 通过 Harness 工程 (Harness Engineering) 更新 Harness, 通过对数据做微调 (Fine Tuning) 更新模型 , 通过记忆 (Memory) 更新上下文 。在 LangChain, 我们想得最多的就是 Harness 工程这部分 , 所以我想快速演示一下我们为此添加的一个东西 ,不过我觉得 Trajectory 接下来会讲一些可以做的
微调 。 这是一个非常相似的过程 : 运行智能体 , 获得轨迹 , 用这些数据以某种方式改进系统 。 系统是什么 ?
就是这三块 ,其中任何一块都可以用某种方式更新 。 所以 ,是的 , 这就是你可能想做的完整的端到端流程 。
我们一直在思考的一件事 ,是如何尽可能自动化这个过程 ,因为它很棘手 ,也很花时间 。 这是过去几个月我们一直在思考的事情之一 。
LangSmith Engine17:36
我想快速演示一下我们称之为 LangSmith Engine 的东西 , 它基本上是一个坐在你的轨迹之上, 做所有这些工作的智能体 。
来看看这些工作是什么 。 你有了这些轨迹 , 接下来的工作是整理轨迹 , 运行一些实验 , 对三件事之一提出修复建议 。
如我所说 , 我们主要关注 Harness 工程这块 。在演示中, 我想展示这看起来是什么样 , 它是如何呈现的 。 希望这能成功 , 如果不成功 ,也没关系 , 完美 。
好的 , 这就是 LangSmith, 这是一堆进入的轨迹 。 我们这边有一个叫 Engine 的标签 , 它是一个智能体 ,在后台运行 , 创建我们称之为问题看板 (Issue Boards)的东西 ,也就是整理数据的那部分 。
底层是一个编码智能体 , 能访问我们的 LangSmith CLI。LangSmith CLI 可以按反馈等条件过滤轨迹 , 所以我们给它一个很好的大提示词和几个子智能体 , 帮助它探索这些数据 , 识别问题 , 看看什么是最常见的 。
然后它会在这里创建这些问题 , 创建一个问题 , 给出描述 , 链接到相关轨迹 , 这样我就能去看一些支持证据 。
然后在这里 , 我觉得这是对提示词的一些非常简单的修改 。在这个案例中, 它更新了上下文的一部分 , 这里它还在更新一些指令 , 我们也能看到它添加了一些代码进入 Harness。
这是我们过去几个月推出的东西 , 我认为它体现了这个数据飞轮 。 再次强调 , 这是非常简单的一件事 : 运行智能体 , 获得轨迹 , 看到模式 , 修复 。
这就是我们自动化它的尝试 。 我就讲这么多 , 欢迎就 Harness 或评测提出任何问题 。
顺便说一句 , 这很棒 , 非常感谢你的整个演讲 。Engine 本身是一个智能体 , 对吧 ? 给它一个提示词 , 然后让它去搜索各种东西 。
你有没有让 Engine 跑 Engine?
我们在运行它 ,是的 , 所以有点 。Engine 也接入了 Slack, 会发送关于它自己的报告 。 是的 , 这就是我们 " 吃自己的狗粮 " 的方式 。
我们还为 Engine 创建了我们称之为问题基准 (Issue Bench)的东西 , 它又是一个 Harbor 格式的基准 , 我们不断在上面测评不同的模型和 Harness。
我认为 Gabe 也谈到过一点 : 拥有基准的好处之一是 , 你可以在很多不同的 Harness 上跑它 , 看看它们各自擅长什么 、 不擅长什么 。
几周前 , 我们让 Deep Agents(Codex 和 Claude Code) 跑了这个基准 , 我们看到 Codex 做了一个非常有趣的事情 : 它会给自己写一堆小脚本来跑这些轨迹 ,而且做得非常激进 , 这让它表现得非常好 。
于是我们做了一个冲刺 , 做了我们称之为把 Engine Codex 化 (Codexification)的事情 , 基本上就是把那个经验带进 Engine 的核心 (Harness)。
所以 , 我认为这是基准的另一个好处 : 你可以在上面跑一堆不同的东西 , 看看它们实际表现如何 , 然后把那些经验带回你的核心智能体 (Harness)。
非常酷的演讲 。 你觉得 Harness 会在多大程度上收敛成同一个东西 ? 用户会被教育成这样 , 模型也会为此做到最好 , 还是会分化 , 每家都有自己的方式为自己的场景优化 ?
收敛还是分化20:40
是的 , 非常好的问题 ,也是我们想了很多的问题 。 我和 Factory 的 Eno 聊过 ,他也在这方面思考了很多 。 我们讨论过一些东西 , 我觉得模型 , 老实说我不知道 。
我看到的一些情况是 , 通用 Harness 已经足够好 , 至少在你刚开始的时候能处理很多基础任务 。 所以我会推荐从一个现成的 Harness 开始 , 无论是 Deep Agents、Codex 还是 Claude Code 之类的 。
因为我认为模型现在已经足够好 ,而且我们学到的那些让模型表现好的东西 —— 访问文件系统 、 子智能体等等 —— 已经足够好了 。
我们经常看到的是 , 你越是分布外, 就越想定制 Harness。 这是一个频谱 , 对吧 ? 在频谱的极端一端 , 你可能想构建一个完全定制的认知架构 , 真正聚焦于特定的事情 。
顺便说一句 , 你这么做还有一个原因 : 可预测性和控制 。 我们有很多金融服务客户 ,他们需要可预测性 , 所以我们给他们看 Deep Agents 这样的东西 ,他们说 " 哇 , 哇 , 这个智能体对我们来说太吓人了 "。
我们想要更接近这种的定制认知架构 , 可以真正控制 。 但在另一端 , 你也可以就用一个现成的 Harness, 中间还有钩子或中间件这种东西可用 。
所以它也是一个频谱 : 你越分布外, 就越想拥有更定制的 Harness。 然后还有一些奇怪的事情 , 比如我认为 OpenAI 和 Anthropic 都非常擅长编码 ,但它们在编辑文件的方式上采用了非常不同的做法 , 差别实际上挺大 。
你知道 , 我认为它们有一些基准 ,Eno 认为一种方式比另一种方式更好 ,是严格占优的 。 所以我认为模型实验室会某种程度上收敛 , 它们似乎都非常擅长编码 。
如果继续沿着这条路走 ,Harness 会收敛到都非常擅长编码 ,但同时又存在这些非常小的差异 。 我也不知道怎么解释这些差异 ,而现在它们最具体地表现在一些小事情上 。
但你可以想象 , 如果某个实验室真的深入生物领域 , 那些 Harness 会变得非常擅长生物智能体的事情 , 然后 Harness 本身就开始分化 。
所以 , 对这个快速变化的领域 , 答案是我不知道 。 这正是为什么评测和可观测性很重要 , 我们需要去衡量所有这些 。
谢谢你们 。
结尾致谢23:11
这就是今天跟大家分享的全部内容 。 欢迎订阅 《AI 知识路 》, 获取最新鲜的 AI 领域最新知识 。 最后插播一个广告 : 主播自己的 AI 创业产品 YouNavi, 一个能一键整合你的飞书 、 钉钉 、 腾讯会议 、Claude 和其他录音卡 / 录音豆 , 随时随地帮您解读日常会议与沟通背后的深意 。
锁定关键信息的 Agent 应用已经正式上线 , 最新的版本也支持了直接给它播客链接 , 它就能轻松完成转写 、 总结 、 分析 , 甚至多个播客的关联解读和分析 。
如果你有兴趣 , 欢迎在本播客的公告栏查看体验方式 。 我们下期见 。
