Jean's Blog

一个专注软件测试开发技术的个人博客

0%

LangGraph介绍

什么是智能体

智能体(AI Agents或Agents)是指能够自主感知环境、做出决策并执行行动的系统或程序。根据IBM的定义,智能体是“能够通过设计其工作流和利用可用工具,代表用户或其他系统自主执行任务的系统或程序”[IBM]。英伟达则将智能体描述为“AI 智能体是先进的 AI 系统,旨在根据高级目标自主进行推理,制定计划并执行复杂任务。”,代表了“从简单自动化向能够管理复杂工作流的自主系统过渡”的演进方向[NVIDIA]。

在更专业的学术定义中,百度百科指出:“智能体是指能够感知环境并自主采取行动以实现特定目标的实体。这一概念最早由“人工智能之父”马文·明斯基提出,他认为某些问题可经由社会中的一些个体经过协商后解决,这些个体就是智能体。”[百度百科]

智能体具有以下基本特征:

  • 自主性(Autonomy):智能体能够在没有人类或其他实体的直接干预下运行,并对其行动和内部状态具有某种程度的控制。
  • 反应性(Reactivity):智能体能够感知其环境,并对环境变化做出实时响应。
  • 交互性/社交性(Socialability):智能体能够与其他智能体或人类进行交互和协作。
  • 适应性/主动性(Proactivity):智能体能够根据环境变化主动调整其行为策略,适应新的情况。
  • 学习能力:许多智能体具有通过经验或数据学习和改进的能力。

单智能体与多智能体

image-20250917095828145

LangChain内置

注意:LangChain内置的Agent模块已经不在支持维护了,智能体开发重点使用LangGraph

单Agent的特点

  • 结构简单,只有一个智能体负责所有任务
  • 决策过程中,不需要协调多个Agent之间的通信
  • 适合处理相对简单或专一的任务
  • 通常计算资源需求较少
  • 响应速度可能更快,因为不需要多Agent间的协调

LangGraph内置

多Agents的特点

  • 系统由多个相互协作的智能体组成
  • 各Agent可能有不同的专业领域或功能
  • 需要Agent之间得的通信和协调机制
  • 可以并行处理多个任务
  • 系统整体更加复杂但也更加强大
  • 具有更好的可扩展性和容错能力

多智能体

  • 更小颗粒度和更低层面的封装
  • 更灵活
  • 难度也更高

image-20250917100224849

常见的多智能体架构

多智能体架构中的网状结构、监管者模式、分级架构和自定义模式,并通过类比人类工作方式说明多智能体如何协作完成复杂任务。

image-20250917100621793

  • 网状结构:任何一个智能体都可以进行决策
  • 监督者结构:由主管来决策下一步操作
  • 监管者架构(工具):智能体作为工具,接受一个LLM主管的调用
  • 分级架构:多级架构每级都有一个监管者
  • 自定义:只有部分智能体具备决策权

LangGraph介绍

image-20250917101404838

官方地址:https://langchain-ai.github.io/langgraph

LangGraph 是一个专注于构建、管理和部署 有状态(Stateful)长期运行(Long-running) 的 LLM Agent 编排框架。

  • 核心设计思想:结合状态机模型与现代链式逻辑编排能力。
  • 应用场景:智能代理系统、复杂工作流管理、人机协同任务。
  • 行业应用:被 Klarna、Replit、Elastic 等一线公司广泛采用,逐步成为下一代 Agent 系统的核心底座。

核心优势

LangGraph 为长期运行/有状态的工作流提供底层基础设施支持,具备以下特性:

优势 说明
持久执行 支持故障恢复,自动从中断点继续执行。
人机交互 允许实时检查/修改代理状态,无缝集成人工监督。
综合记忆 短期工作记忆(推理) + 长期持久记忆(跨会话)。
LangSmith 调试 通过可视化工具跟踪执行路径、状态转换和运行时指标。
生产就绪部署 提供可扩展架构,专为有状态工作流的独特挑战设计。

LangGraph 生态系统

LangGraph 可独立使用,也可与 LangChain 生态深度集成:

组件 功能
LangSmith 代理评估与可观测性工具,支持生产环境监控和性能优化。
LangGraph 平台 专为长期工作流设计的部署平台,支持可视化原型设计(LangGraph Studio)。
LangChain 提供可组合的 LLM 开发组件,简化应用构建流程。

环境安装

1
pip install langgraph

核心概念

State(状态)

  • 状态是一个在整个图中共享和传递的对象,包含了流程执行过程中所有信息。
  • 有状态(stateful):程序具有“记忆”,能记住过去的步骤和结果,并根据这些信息来决定下一步
  • 可变(mutable):每个节点都可以修改状态。例如,一个节点可能会将LLM的回复写入状态中,而下一个节点则会读取这个回复并根据它来做决策

Node(节点)

  • 节点是图中的基本单元,代表一个具体的功能或操作,视作流程中的一个步骤
  • 每个节点负责完成一项特定任务(如查询数据、生成文本、做决策等)
  • 节点接受输入,处理后产生输出
  • 可以是简单的函数、API调用、LLM调用或其他复杂操作

Edges(边)

  • 边决定了流程如何从一个节点移动到另一个节点。
  • LangGraph支持两种主要类型的边:
    • Normal Edges(普通边):简单的将流程从节点A -> B
    • Conditional Edges(条件边):根据当前状态的内容来决定下一步执行哪个节点,是根据LLM的回复或工具的结果动态的做出决策

Graph(图)

  • 图是节点及其连接关系的集合,代表整个工作流程
  • 定义了信息如何从一个节点流向另一个节点
  • 可以是线性的(A -> B -> C)或包含分支、循环复杂结构
  • 控制整个应用的执行流程和逻辑