Agent快速构建框架的langGraph到底是什么及案例
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案例
- Chatbots、Multi-agentSystems、Planning Agent;
2. 典型应用场景
- ReAct 架构智能体 通过循环执行 推理(Reasoning)-行动(Acting)-观察(Observing) 步骤完成任务,例如结合 Google 搜索和 DALL-E 生成图像的智能体1。
- 多智能体系统 构建协作网络,如一个智能体生成代码,另一个测试并反馈错误,形成自我修正循环38。
- 长时任务处理 支持中断与恢复,适用于数据分析、自动化流程等需要人工介入的场景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 框架在复杂流程控制上的不足,特别适合需要循环、多角色协作或人工干预的场景。其设计理念在可控性、可靠性和灵活性之间取得了平衡