掌握 LangGraph:从零开始的超实用指南(上)

序言

本文将介绍一个名为 LangGraph 的工具链,它是一个支持利用大规模语言模型(LLM)开发应用程序的框架 LangChain 中的一部分。

如果您想了解 LangChain 是什么,欢迎您阅读一下。

※ LangGraph 是一个可以与 LangChain 无缝连接的库,但本文将重点介绍 LangGraph 本身的入门内容,因此不会详细讨论 LangChain,请您谅解。

LangGraph 是什么

LangGraphLangChain工具集中的一个工具,用于将各LLM代理的步骤等图形化,以进行状态管理。

LangGraph 旨在简化状态机的创建,使多个代理能够协同工作,构建“多代理”系统。

LangChain 的博客详细介绍了 LangGraph 开发的动机和具体案例,欢迎您查看。

LangGraphhttps://blog.langchain.dev/langgraph/https://blog.langchain.dev/langgraph/LangGraph: Multi-Agent Workflowshttps://blog.langchain.dev/langgraph-multi-agent-workflows/https://blog.langchain.dev/langgraph-multi-agent-workflows/

LangGraph 是一个在利用 LangChain 的前提下的工具,但它独立于LLM模型和其他工具,可以作为构建状态机的简单库使用。

接下来将主要介绍 LangGraph 这个状态机构建库的基本用法。

环境

本文使用如下环境
特别是 LangChain 周围的开发速度非常快,请确认当前的最新版本

  • langgraph: 0.1.5
  • Python: 3.10.12

LangGraph 的基本组件

LangGraph 通过使用接下来介绍的一些主要组件来构建图形。

组件説明
图表LangGraph 的核心组成部分,是各个 Node 和 Edge 的集合体。
状态在节点间迁移时保持的信息,各节点进行引用和更新。
节点图中表示个别步骤或状态的元素,作为特定的动作或检查点发挥作用。
边缘表示节点之间的连接,并定义转换的条件和动作。可以根据特定逻辑控制转换,例如条件边。

图表

Graph是 LangGraph 的核心组件,用于管理整个图。基本用法是使用StateGraph类,并与后面提到的 State 一起初始化。

(StateGraph 的声明示例)

from typing_extensions import TypedDict
from langgraph.graph import StateGraph

# 定义State
class State(TypedDict):
    value: str

# 以 State 作为参数初始化 Graph
graph = StateGraph(State)

State

State是传递给图中节点和边的状态对象。

State 可以使用 typing 模块的“TypeDict”或“Pydantic 的 BaseModel”。

以下是继承了 TypeDict 的 State 的例子。

from typing_extensions import TypedDict

# 名为 “value” 的 str 类型的 State
class State(TypedDict):
    value: str

Reducers

State 可以与称为 reducer 的函数一起使用。reducer 是用于更新状态的函数,具有(当前值,添加的值) -> 更新状态的值的签名。

from typing import TypedDict, Annotated

def reducer(a: list, b: int | None) -> int:
    # 当传入 b 时,将其添加到 a 中
    if b is not None:
        return a + [b]
    return a

class State(TypedDict):
    # 使用 Annotated 指定用于更新状态的 reducer
    bar: Annotated[list[str], reducer]

通过使用 reducer,可以在状态更新时通过特定的逻辑进行处理。

节点

Node是一个在图上执行实际步骤的组件。例如,实际使用 LangChain 调用LLM模型的过程是在 Node 上进行的。

在 Node 中,可以使用具有(State、Config) -> 変更するState签名的函数。

from typing import Annotated
from typing_extensions import TypedDict
from langchain_core.runnables import RunnableConfig
from langgraph.graph import StateGraph

# State定义
class State(TypedDict):
    value: str

# Node定义
def node(state: State, config: RunnableConfig):
    return {"value": "hoge"}
    
graph = StateGraph(State)
# 向Graph添加Node
graph.add_node("node", node)

对图形使用 add_node 方法来关联节点。第一个参数可以为节点指定任意的路径名字符串。

边缘

Edge是定义各个 Node 和 Graph 如何运作(路由、起点定义等)的组件。

from typing import Annotated
from typing_extensions import TypedDict
from langchain_core.runnables import RunnableConfig
from langgraph.graph import StateGraph

# 声明 State
class State(TypedDict):
    value: str

# 声明 Node
def node(state: State, config: RunnableConfig):
    return {"value": "hoge"}

def node2(state: State, config: RunnableConfig):
    return {"value": "fuga"}

graph_builder = StateGraph(State)
graph_builder.add_node("node", node)
graph_builder.add_node("node2", node2)

# 将节点的关联添加为边
graph_builder.add_edge("node", "node2")

# 声明图的起点
graph_builder.set_entry_point("node")

# 声明图的终点
graph_builder.set_finish_point("node2")

可以使用 add_edge(<from path>, <to path>) 来表示处理从哪个 Node 移到下一个 Node。
此外,您可以使用set_entry_pointset_finish_point来指定图形的起点和终点。

最后

在开发基于大规模语言模型(LLM)的应用程序时,LangGraph 作为 LangChain 框架中的重要工具,为开发者提供了高效构建和管理复杂工作流的能力。

掌握 LangGraph:从零开始的超实用指南(下)里我会介绍Graph 的基本制作方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值