“ 智能体应该才是大模型应用的未来,它才是有可能实现真正人工智能的途径 ”
在大模型技术的应用过程中,智能体算是一个主要的技术方向;如果说把大模型比作人的大脑,那么智能体就是人的手和脚;大脑能够思考,但具体的事情还是需要手和脚才能做。
而Langgraph就是给大模型安装手和脚的工具;而我们学习Langgraph主要就是基于它强大的功能逻辑。在传统的人工智能应用开发中,包括Langchain框架,都是基于链式调用的方式,简单来说就是线性执行;一旦其中某个环节出现问题,那么整个链条就会陷入瘫痪。
但基于Langgraph开发的工作流却不同,它可以根据不同的场景和路径进行判断,可以实现循环调用和条件判断;而这就为大模型应用的开发提供了很强的灵活性,也更能满足我们的现实需求。
Langgraph的原来和执行过程
先来了解一下传统智能体开发过程中所面临的问题,在传统的智能体开发过程中主要使用Function call配合langchain或其它工作流开发框架;比如典型的Dify框架和字节的Coze就是典型的智能体配合工作流进行开发。
但这种方式有一个很明显的问题,就是整体都是通过链式调用来实现的;虽然集成了工作流但其延展性依然不是很好。
原因就在于链式调用存在一个很大的缺点就是,一旦处于链条中的某个节点出现问题,就会导致整个链条不可用;而且在异常处理中,由于节点执行的过程和结果并未保存,就导致无法重新恢复链式的执行过程。
但使用LangGraph就会很好的解决这个问题,因为LangGraph中使用的是状态图来保存节点执行的过程,当某个环节出现问题或者需要回溯整个执行过程时,就可以使用状态图来随时回到某个节点重新执行。

而这种方式在Langgraph中被称为时间旅行,也就是说可以追溯到整个智能体的执行过程和节点状态。
我们应该知道,智能体是为了解决复杂问题而出现的一项技术;里面涉及到大量的推理和决策过程,其就类似于我们人类在遇到复杂问题时,需要对问题进行拆解和规划,然后一步一步的去完成任务。
但在处理问题的过程中,我们肯定会遇到各种各样的问题,以及会犯各种各样的错误;这时问题处理过程中的记录就变得特别重要,因为这样才能复盘整个过程,以及找到问题发生的原因和节点。

而且,在事情处理的过程中,可能还需要其它决策者参与进来;比如说公司的项目运作,可能需要领导的审批或签字,亦或者需要其它人员中途参与。
所以,Langgraph实现了人工参与的功能,叫做人在回路;所谓的人在回路,就是Langgrap在智能体的执行过程中,随时可以进行中断;然后由人参与进来,之后再继续执行。
而这些场景的实现,更真实的接近我们人类现实社会中解决问题的逻辑;而这也是Langgraph强大的原因。
Langgraph的核心理论和模块
Langgraph主要由以下几个节点组成:
-
状态图
-
节点
-
边
-
检查点
状态图
状态图是一种数据结构,其生命周期存在于整个Langgraph过程中,所有节点的执行过程和结构都可以被记录到状态图中;而且每个节点也都可以随时方法状态图中的数据,来获取其当时的执行过程和结果,状态图是Langgraph实现上述功能的核心。
# 状态图
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
class State(TypedDict):
# Messages have the type "list". The `add_messages` function
# in the annotation defines how this state key should be updated
# (in this case, it appends messages to the list, rather than overwriting them)
messages: Annotated[list, add_messages]
graph_builder = StateGraph(State)
节点
节点就比较容易理解了,节点的概念就是一个一个的智能体或功能函数;其主要作用就是用来执行具体的任务,比如说查询天气就调用天气查询接口。
边
如果说节点是一个函数,那么边就相当于判断逻辑中的分支,边决定了当前节点执行完毕之后,下一个执行的节点;当然,还有一种边叫做条件边,意思就是可以根据条件判断来动态决定应该执行哪个节点。
检查点
检查点说白了就是记忆存储的节点,我们都知道大模型没有记忆的功能,因此其每次执行对话等对大模型都是一次新的开始,因此就需要有一个外部记忆功能来保存当前任务的执行记录,也就是记忆;这样大模型就可以知道之前干了什么事,以及整个事情的执行过程。
而检查点就是做这个事情的,它的主要作用就是保存记忆;而它和状态图的区别是,状态图会随着整个工作流的执行在不同的节点进行流转;而检查点只记忆当前节点的历史记录;当然,不同的节点可以有各自的检查点。
(文:AI探索时代)