Agent快速构建框架的langGraph到底是什么及案例

Agent快速构建框架的langGraph到底是什么及案例

精选文章moguli202025-04-15 13:32:5411A+A-

1. LangGraph是什么

为啥要用LangGraph?

使用类似langchain框架开发智能体存在开发量大、灵活的性差、修改tools成本高等问题,如何降低开发量提高agent的灵活性是agent推广的一个关键点。

LangGraph 为生产级代理提供支持,受到 Linkedin、Uber、Klarna、GitLab 等的信任。LangGraph 对代理应用程序的流程和状态提供细粒度控制。它实现了一个中央持久层,支持大多数代理架构所共有的功能:

  • 内存:LangGraph 可以保存应用程序状态的任意方面,支持用户交互内部和跨用户交互的对话和其他更新的内存;
  • 人在链条:由于状态有检查点,因此可以中断和恢复执行,从而允许通过人工输入在关键阶段进行决策、验证和更正。

LangGraph是什么?

LangGraph是一个使用 LLM 构建有状态、多参与者应用程序的库,用于创建代理和多代理工作流。请在此处查看入门教程。

LangGraph 的灵感来自Pregel和Apache Beam。公共接口灵感来自NetworkX。LangGraph 由 LangChain 的创建者 LangChain Inc 构建,但可以在没有 LangChain 的情况下使用。

LangGraph核心组件

LangGraph的核心组件包括Graphs、State、Nodes、Edges、Send、Checkpointer。LangGraph有哪些优点:可控性、持久性、Human-in-the-loop、ReactAgent。

state

from langgraph.graph import StateGraph
from typing import TypedDict, List, Annotated
import Operator


class State(TypedDict):
    input: str
    all_actions: Annotated[List[str], operator.add]


graph = StateGraph(State)

Node

# 添加节点
graph.add_node("model", model)
graph.add_node("tools", tool_executor)

Edges

起始边:将图形的起点连接到特定节点。这使得该节点成为在输入传递到图形时首先被调用的节点。伪代码如下:

graph.set_entry_point("model")

正常边:在这些边上,一个节点应始终在另一个节点之后被调用。例如,在基本代理运行时,我们通常希望在调用工具后再调用模型:

graph.add_edge("tools", "model")

条件边:这些边使用函数(通常由LLM提供支持)来确定首先转到哪个节点。要创建这样的边,需要传入三个参数:

  • 上游节点:它查看此节点的输出以确定下一步应该做什么。
  • 一个函数:该函数将被调用以确定接下来要调用哪个节点。它应该返回一个字符串。
  • 映射:此映射将用于将第二个参数中函数的输出映射到另一个节点。键应该是函数可能返回的可能值。如果返回了某个值,那么这些值应该是要转到的节点的名称。

compile

定义好的状态图按编译成可执行的代码,类似编程语言的编译。

app = graph.compile()

Agent React 代理执行器

from typing import TypedDict, Annotated, List, Union
from langchain_core.agents import AgentAction, AgentFinish
from langchain_core.messages import BaseMessage
import operator


class AgentState(TypedDict):
   input: str
   chat_history: list[BaseMessage]
   agent_outcome: Union[AgentAction, AgentFinish, None]
   intermediate_steps: Annotated[list[tuple[AgentAction, str]], operator.add]

LangGraph案例

  1. Chatbots、Multi-agentSystems、Planning Agent;

2. 典型应用场景

  1. ReAct 架构智能体 通过循环执行 推理(Reasoning)-行动(Acting)-观察(Observing) 步骤完成任务,例如结合 Google 搜索和 DALL-E 生成图像的智能体1。
  2. 多智能体系统 构建协作网络,如一个智能体生成代码,另一个测试并反馈错误,形成自我修正循环38。
  3. 长时任务处理 支持中断与恢复,适用于数据分析、自动化流程等需要人工介入的场景38。

3.与传统 LangChain Agent 的对比

特性

LangChain Agent

LangGraph

控制流

基于链式结构,灵活性较低

支持循环、分支,灵活性高

可靠性

依赖 LLM 的每一步决策,容错性较弱

内置状态持久化和错误处理机制

适用场景

简单、线性任务(如问答)

复杂、动态任务(如多角色协作)

4. 快速上手示例

通过预构建函数快速创建 ReAct 智能体:

python

复制
from langgraph import StateGraph, ToolNode 
# 定义状态、工具和模型 
graph = StateGraph(initial_state={"messages": []})
graph.add_node("agent",  run_llm)
graph.add_node("tools",  ToolNode([search_tool, image_generator]))
# 设置边和条件 
graph.add_conditional_edge("agent",  decide_next_step)
graph.compile() 
# 执行任务 
response = graph.invoke({"input":  "生成一张雪山湖泊的图片"})

总结

LangGraph 通过图结构解决了传统 Agent 框架在复杂流程控制上的不足,特别适合需要循环、多角色协作或人工干预的场景。其设计理念在可控性、可靠性和灵活性之间取得了平衡

点击这里复制本文地址 以上内容由莫古技术网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

莫古技术网 © All Rights Reserved.  滇ICP备2024046894号-2