LangGraph1.0智能体开发:运行时系统

LangGraph的运行时(Runtime)功能通过底层类Pregel(借鉴谷歌Pregel图计算模型实现)实现。Pregel负责管理 LangGraph应用程序的执行流程。

编译状态图(StateGraph)或创建 @entrypoint(入口点装饰器)会生成一个Pregel实例,该实例可接收输入并被调用。

本文将从宏观层面讲解运行时系统,并提供直接使用Pregel开发应用程序的操作说明。

注意:Pregel 运行时的命名源自谷歌(Google)的 Pregel 算法 ------ 该算法提出了一种利用图结构进行大规模并行计算的高效方法。

一、概述

在 LangGraph 中,Pregel将 "参与者"(actors)与 "通道"(channels)整合到一个应用程序中。参与者从通道读取数据,并向通道写入数据。Pregel 遵循 Pregel 算法(Pregel Algorithm)/ 批量同步并行模型(Bulk Synchronous Parallel model),将应用程序的执行过程划分为多个步骤。 每个步骤包含三个阶段:

  • 规划阶段(Plan):确定本步骤中要执行的参与者。例如,在第一步中,选择订阅特殊输入通道的参与者;在后续步骤中,选择订阅上一步骤中已更新通道的参与者。
  • 执行阶段(Execution):并行执行所有选中的参与者,直至所有参与者执行完成、某个参与者执行失败,或达到超时时间。在此阶段,通道的更新对参与者而言是不可见的,直至进入下一步骤。
  • 更新阶段(Update):使用本步骤中参与者写入的值更新通道。 重复上述步骤,直至没有选中任何参与者用于执行,或达到最大步骤数。

二、参与者(Actors)

参与者是一个 PregelNode(Pregel 节点)。它会订阅通道(channels),从通道中读取数据,并向通道中写入数据。在 Pregel 算法中,可将其理解为 "参与者" 角色。PregelNode 实现了 LangChain 的 Runnable(可运行)接口。

三、通道(Channels)

通道用于在参与者(PregelNode)之间实现通信。每个通道都包含值类型(value type)、更新类型(update type)和更新函数(update function)------ 更新函数会接收一系列更新内容,并修改已存储的值。通道可用于在不同链条(chain)之间传输数据,也可用于让某个链条在后续步骤中向自身传输数据。LangGraph 提供了多种内置通道,具体如下:

  • LastValue(最后值通道):默认通道,存储发送至该通道的最后一个值,适用于处理输入值、输出值,或在步骤间传输数据的场景。
  • Topic(主题通道):可配置的发布 - 订阅(PubSub)主题通道,适用于在参与者之间传输多个值,或累积输出结果的场景。可通过配置实现值的去重,或在多个步骤中累积值。
  • BinaryOperatorAggregate(二元运算符聚合通道):存储一个持久化的值,更新方式为将二元运算符应用于当前值与发送至通道的每个更新内容,适用于在多个步骤中计算聚合结果的场景;例如:total = BinaryOperatorAggregate(int, operator.add)(定义一个整数类型的聚合通道,通过加法运算符累积值,用于计算总和)。

四、示例

python 复制代码
from langgraph.channels import LastValue, EphemeralValue
from langgraph.pregel import Pregel, NodeBuilder

node1 = (
    NodeBuilder().subscribe_only("a")
    .do(lambda x: x + x)
    .write_to("b")
)

node2 = (
    NodeBuilder().subscribe_only("b")
    .do(lambda x: x + x)
    .write_to("c")
)


app = Pregel(
    nodes={"node1": node1, "node2": node2},
    channels={
        "a": EphemeralValue(str),
        "b": LastValue(str),
        "c": EphemeralValue(str),
    },
    input_channels=["a"],
    output_channels=["b", "c"],
)

app.invoke({"a": "foo"})

五、高级API

LangGraph 提供了两种用于创建 Pregel 应用程序的高层级 API,分别是:状态图(StateGraph,即图 API(Graph API))和函数式 API(Functional API)。

状态图(StateGraph,即图 API(Graph API))是一种抽象程度更高的上层抽象,可简化 Pregel 应用程序的创建过程。它支持你定义由节点(nodes)和边(edges)构成的图结构。当你对该图进行编译(compile)时,StateGraph API 会自动为你创建 Pregel 应用程序。

在函数式 API 中,你可以使用 @entrypoint(入口点装饰器)创建 Pregel 应用程序。该入口点装饰器支持你定义一个函数,该函数接收输入(参数)并返回输出(结果)。

详细了解Graph API,请参阅《LangGraph1.0智能体开发:Graph API概念与设计》

详细了解Functional API,请参阅《LangGraph1.0智能体开发:Functional API概念与设计》

相关推荐
青 春 记 忆2 小时前
零基础入门python70:Docker Compose 编排完整后端
python·后端开发
新时代牛马2 小时前
字符设备驱动完整篇:从 cdev_add、file_operations 到chrdev_open 与排障
开发语言·python
武子康3 小时前
商业比较词进入 AI Overview:Semrush 60 万关键词研究能说明什么
人工智能·ai·架构·agent·claude·codex·semrush
白山编程大哥3 小时前
Java OutputStreamWriter 详解:从字符到字节的桥梁
java·开发语言·python
ToTensor3 小时前
DataGen——合成数据生成器:把一句任务描述变成可校验的训练数据
langchain·agent
冬奇Lab3 小时前
Code Agent 解剖(23):从零扩展——接入 MCP 外部工具生态
人工智能·agent
落羽的落羽3 小时前
【AI】快速理解AI应用的相关名词概念
linux·c++·人工智能·python·计算机网络·算法
Chasing__Dreams4 小时前
大模型应用开发--13--RAG 查询优化策略
python
不是株4 小时前
AI Agent 记忆系统全解:从 Markdown、SQLite、向量检索到 GraphRAG
sqlite·知识图谱·agent·memory·graphrag·harness
“AI国潮设计-小江”4 小时前
《Python实战 | SDXL大模型批量生成“英歌舞海浪”蛋糕IP,附核心Prompt控制代码与IP授权变现思路》
人工智能·python·prompt·aigc