我们维护着几个不同的开源软件包:其中最大的有 LangChain 和 LangGraph,而 DeepAgents 也日益流行。我开始使用不同的术语来描述它们:LangChain 是一个代理框架(agent framework),LangGraph 是一个代理运行时(agent runtime),DeepAgents 是一个代理挂钩(agent harness)。其他人也在使用这些术语,但我认为框架(framework)与运行时(runtime)和挂钩(harness)之间并没有清晰的定义。这是我尝试定义这些概念。我坦白承认,其中仍然存在模糊和重叠之处,所以我非常欢迎任何反馈!

代理框架 (LangChain)
市面上大多数帮助构建 LLM 的软件包,我都会将其归类为代理框架。它们的主要附加价值在于提供抽象。这些抽象代表了对世界的思维模型。理想情况下,这些抽象应该能让入门更容易。它们还提供了一种标准的构建应用程序的方式,使得开发者易于上手并能在不同项目之间切换。对抽象的抱怨在于,如果做得不好,它们可能会掩盖事物的内部工作原理,并且在高级用例中无法提供所需的灵活性。
我们认为 LangChain 是一个代理框架。作为 1.0 版本的一部分,我们花了很多时间思考抽象 - 针对结构化内容块、代理循环、中间件(我们认为这为标准的代理循环增加了灵活性)。其他我认为是代理框架的例子包括 Vercel 的 AI SDK、CrewAI、OpenAI Agents SDK、Google ADK、LlamaIndex 等等。
代理运行时 (LangGraph)
当您需要在生产环境中运行代理时,您会需要某种代理运行时。这个运行时应该提供更多基础设施层面的考虑。最主要想到的是持久化执行(durable execution),但我也会将诸如流式处理支持、人工干预支持(human-in-the-loop support)、线程级持久化和跨线程持久化(cross-thread persistence)等考虑因素也归入此类。
当我们构建 LangGraph 时,我们想从零开始构建一个生产级的代理运行时。您可以在这里阅读更多关于我们构建 LangGraph 的思路。我们认为其他最接近这个概念的项目是 Temporal、Inngest 以及其他持久化执行引擎。
代理运行时通常比代理框架更底层,并且可以为代理框架提供支持。例如,LangChain 1.0 就构建在 LangGraph 之上,以利用其提供的代理运行时。
代理挂钩 (DeepAgents)
DeepAgents 是我们正在进行的最新项目。它比代理框架更高级 - 它构建在 LangChain 之上。它包含了默认的提示、对工具调用的权威性处理、用于规划的工具、对文件系统的访问等等。它不仅仅是一个框架 - 它提供了“开箱即用”的完整功能。
我们还曾将 DeepAgents 描述为“Claude Code 的通用版本”。公平地说,Claude Code 也试图成为一个代理挂钩 - 他们已经发布了 Claude Agent SDK 等产品,朝着这个方向迈进。除了 Claude Agent SDK,我认为今天市面上很少有其他通用的代理挂钩。不过,有人可能会争辩说,所有的代码 CLI 在某种程度上都是代理挂钩,并且可能是通用的。
何时使用
让我们总结一下区别,并谈谈何时使用它们。

现在,我坦承这些界限是模糊的。例如,LangGraph 最适合被描述为运行时和框架。 “代理挂钩”(Agent Harness)是我刚开始看到更多被使用的术语(这个概念不是我提出的)。我认为目前还没有一个非常清晰的定义。
在一个早期领域进行开发的乐趣之一是,为如何谈论事物建立思维模型。我们知道 LangChain 与 LangGraph 不同,而 DeepAgents 又与它们两者都不同。我们认为将它们分别描述为框架、运行时和挂钩是一种有用的区分 - 但一如既往,我们非常希望得到您的反馈!