一旦构建了智能体循环,LangChain实际上能自动化什么
解释了 LangChain、LangGraph 以及类似的 SDK 是如何封装由零开始构建的相同核心智能体循环的,以及依赖框架何时会有帮助,何时会带来弊端。
到此为止,你仅使用基础的 Anthropic SDK 就从原始组件——循环、内存、工具、子代理、钩子——组装出了一个完整的智能体,完全没有用到任何框架。
现在正是谈论框架的好时机,因为此时会出现很有意义的现象:既然你已经亲手构建了整个机制,那么再也不会有任何框架让你感到神秘了。
你经常听到的名称
LangChain、LangGraph、LlamaIndex、CrewAI、AutoGen、OpenAI Agents SDK。
每一个框架都有自己独特的术语,以及处理看似相同底层任务的方式。如果你是这个领域的新人,如此众多的选择会让人感到不知所措。
有一个观点可以消除这种困惑:
所有这些框架其实都在封装你在本系列之前已经构建过的那个循环。
这其实就是全部的秘密。它们之中没有任何隐藏的魔法。本质上,它们都在执行相同的流程:发送消息、检查停止原因、运行工具、再将结果反馈回来。这就是你早已彻底了解的同一个循环。
可以把它想象成烹饪。一旦你学会了从原材料开始制作一道菜,你就知道每一个步骤,可以在过程中品尝并进行调整,如果味道不对,你也清楚该修改什么。而框架则更像一套餐料包——蔬菜已经切好,酱料也预先调好,你只需几分钟就能把所有东西组装起来。当然这更快了。但如果酱料的味道不对,你却无法修复它,因为你从未亲自制作过,也不清楚其中用了什么成分。
这就是每个框架都提供的交易:用一定的控制权换取更高的速度。
亲眼见证
让我们看看同一个智能体被实现两次的情况——一次是手动编写,另一次则是通过框架实现。
以下是使用原始SDK实现的智能体的大致样子,也就是你现在已经完全理解的那个版本:
messages = [{"role": "user", "content": user_message}]
while True:
# call the API — this runs again every time the model asks for a tool
response = client.messages.create(
model="claude-sonnet-4-6",
tools=tools,
messages=messages,
) # if the model is done, stop
if response.stop_reason == "end_turn":
break # otherwise it asked for a tool: run it, append the result, loop again
messages.append(response_as_message)
messages.append(tool_result_message)
这正是本系列前面介绍过的循环结构。API调用被放在while循环中,因为它会反复执行——首先是为了获取初始响应,之后在每个工具返回结果后都会再次执行——直到模型表明任务已完成。
现在将其与在LangChain中构建的几乎相同的智能体作比较:
from langchain.agents import create_agent
agent = create_agent(model="claude-sonnet-4-6", tools=tools)
result = agent.invoke({"messages": [user_message]})
从五行代码变成了三行。表面上看,这显然是一种改进。
但注意有什么消失了。循环不见了。stop_reason 的检查也不见了。对消息的手动处理也消失了。其实那些逻辑并没有真正消失——它们仍在运行,只是被隐藏在 create_agent 内部,让你无法看到。
当一切顺利时,你节省了时间;但一旦出问题,你就得去调试一个无法查看的流程。
这种矛盾正是框架背后的核心所在。其他一切都只是叠加在上面的细节罢了。
你实际要做的与框架所做的事
这部分往往会让人们措手不及。一旦开始使用框架,你就不会再直接查看 stop_reason,也不会检查 tool_use 块,更不会手动添加 tool_result,甚至连循环都不再需要自己编写。
实际上,你的工作只需三步:
- 像使用原始 SDK 时一样编写工具函数。
- 通过类似
create_agent(tools=[...])的方式将这些函数注册到代理中。 - 调用一次
agent.invoke(...)即可。
整个流程就是如此。你只需连接好这些工具,然后触发一次调用。
在这一次调用背后,框架会默默地运行你之前构建的整个循环:发送消息、检查停止原因、判断模型是否需要工具、调用你的函数、追加结果、再次循环,不断重复这个过程,直到模型最终返回 end_turn。只有到那时,它才会将处理完成的答案交给你。
因此,框架不仅隐藏了循环本身,还隐藏了让工具调用得以实现的整个机制。那些从框架开始学习智能体的人甚至不会知道存在像 end_turn 这样的停止条件,也不会明白工具调用是通过反复迭代来处理的。在他们看来,这一切似乎只是“我注册了一个工具,它就自动被使用了”而已。
在工具调用开始出现异常之前,这并没有问题。但一旦出现问题,你就只能面对一个黑箱,因为你从未见过其背后的运作机制。而你则是亲手构建了那个机制,所以完全清楚其中发生了什么。
LangChain与LangGraph——有什么区别?
你会经常遇到这两个名称,以下是简短说明。
LangChain本身就是框架。它提供工具定义、模型连接以及create_agent函数——也就是上文提到的那种隐藏循环的快捷方式。
LangGraph是LangChain所依赖的更低层级的运行时环境。当需要更精细的控制时就会使用它——比如暂停智能体以便人工审核某一步操作、协调多个智能体之间的分支逻辑,或是持久化状态,让崩溃的服务器能够从上次停止的位置继续运行。
简单来说:LangChain是快速且高级的入口;而当这个入口不够用时,就需要使用LangGraph。自2025年底起,LangChain已在LangGraph基础上重新构建,因此二者不再是竞争关系——它们只是同一个系统的两个层次,一个简单,一个强大。
如果你刚开始学习,可能暂时还不需要这些。你已熟悉的原始 SDK 就足以帮你完成很多工作。
何时需要框架
框架本身并非陷阱。在某些情况下,使用框架确实是正确的选择。
你需要现成的集成功能。假设你的智能体需要从 Pinecone 向量存储中获取数据,同时从 Google Drive 中读取文档。用原始 SDK 自行编写这两个连接功能虽可行,但十分繁琐。LangChain 已经预置了这些功能——你只需导入并连接即可,从而节省大量时间。
你在截止日期前进行原型开发。你的上级要求明天早上就能看到可运行的演示版本。此时无需考虑内部实现细节——只需快速得到一个能用的产品即可。五行代码的配置就能让你在当晚完成目标。
你需要真正复杂的协调机制来构建。想象这样一个智能体:它在执行任务时暂停,等待有人点击“批准”后才释放付款,即便在服务器重启后也能从停下的地方继续执行——某些框架能直接提供这种功能。而要从头实现它则需要巨大的工程投入。
框架带来的弊端
调试变得极为困难。假设你的智能体偶尔会返回空响应,而你却无法找出原因。在自己编写的代码中,只需加入打印语句、追踪循环就能在几分钟内找到问题。但在框架中,同样的错误却隐藏在并非你编写的create_agent函数内部。为了弄清楚自己的智能体在做什么,你不得不深入研究GitHub上该框架的源代码。
抽象层开始出现漏洞。框架是为常见场景优化的。假如你需要以非标准格式输出工具结果,或是需要针对自身环境定制重试策略,框架根本无法应对这些情况。于是你不得不强行使用复杂的变通方法,而本来30行代码就能直接解决这些问题。
你最终记住的是工具本身,而非核心概念。从框架入手会让你了解“LangChain的运作方式”,而非智能体真正的运行机制。随后LangChain的API会不断变化——事实上它已经多次如此——你的知识很快就会过时。本系列之前介绍的循环逻辑从智能体诞生之初就未曾改变,也不会有变化。
值得遵循的准则
从原始 SDK 开始。手动构建循环逻辑。这样你就能清楚地知道智能体在做什么,一旦出现问题也能逐行排查。对于大多数智能体而言,这确实就是全部所需。
只有当某个框架能在特定方面比你自己实现的效果更好时,才考虑使用它——比如现成的集成方案、能在崩溃后保持状态的功能、需要人工介入审批的流程。出于这些明确目的才使用它,而非将其作为默认选择。
不要为了跳过学习循环逻辑就直接使用框架。这才是真正的陷阱。跳过这一步,最终得到的只会是一个基于你从未真正理解的概念的“黑箱”系统。
先彻底理解循环逻辑。之后,框架才会变成你主动选择的工具——而非因为你没掌握基础而不得不依赖的拐杖。
为何本系列从零开始构建一切
这正是我们至今仍未采用框架的原因。
如果本系列一开头就要求“安装LangChain,然后调用create_agent”,虽然能得到一个可运行的智能体,但人们却无法真正理解它的工作原理。他们不会知道tool_use模块是什么,不明白为何并行调用工具后的结果会被整合到一条消息中,也不理解为何授权逻辑要放在hook函数里。
既然这些基础你已经掌握,那么任何框架的术语都能立即被理解。无论它将什么称为“智能体”,其实都是同样的底层循环;它所谓的“内存”也不过是你早已熟悉的消息列表而已。它标记为“工具”的内容,其实就对应着你之前手动处理的tool_use代码块;而它宣传的“中间件”,不过是你自己构建的钩子的另一种叫法罢了。
这才是值得追求的状态——不是“我懂LangChain”,而是“我明白智能体是如何工作的,而LangChain只是实现这一理念的一种方式”。
框架会持续发展,每隔几个月就会有新的框架出现。但底层的循环始终不变。你应该在那些不会改变的部分上建立自己的理解。
相关阅读
- 聊天机器人与AI智能体:除了大语言模型之外,究竟是什么将二者区分开来 — 了解为何聊天机器人与AI智能体之间的真正差异在于其背后的系统架构——包括工具、规划流程和执行动作,而非大语言模型本身。
- 理解AI智能体:目标、工具、记忆与智能体循环 — 以通俗易懂的方式讲解AI智能体与聊天机器人的区别,涵盖核心组件、决策循环、自主程度以及实际应用场景。