LangGraph入门指南:构建大模型应用的核心组件与实战技巧

本文详细介绍了LangGraph框架的核心概念与使用方法。LangGraph通过状态(State)、节点(Nodes)和边(Edges)构建有状态应用程序。文章讲解了StateGraph类的使用、状态定义与reducer函数、节点实现方式以及普通边和条件边的应用,为开发者提供了构建大模型应用的完整技术指南。


Graph API 是一个灵活、强大的工具,用于构建有状态的、基于事件的应用程序。在 LangGraph 中,一切都是图!

图由以下核心组件组成:

状态(State):图的全局状态,包含所有节点共享的数据。它可以是任何 Python 类型,但通常是 TypedDict、dataclass 或 Pydantic BaseModel。

节点(Nodes):图中的计算单元(Python 函数),处理输入状态并返回更新的状态。它们接收当前的 State 作为输入参数,执行一些计算或副作用,并返回更新后的 State。

边(Edges):定义节点之间的转换规则,控制数据流向。根据当前 State 决定接下来执行哪个 Node 的 Python 函数。它们可以是条件分支固定转换

通过组合节点,可以构建复杂的、循环的工作流。节点 和 边 仅仅是普通的 Python 函数,可以在函数体内 调用 LLM 或 仅有普通的 Python 代码。

👀

StateGraph

LangGraph 提供了 StateGraph 类,是构建图的主要接口。StateGraph 允许您定义状态结构、添加节点和边,并编译图以供执行。

要构建图,您首先定义状态,然后添加节点和边,最后进行编译

class State(BaseModel): input: str results: str builder = StateGraph(State) def node1(state: State): # 业务逻辑 return { "results": "..." } # 添加节点 builder.add_node("node1", node1) # 添加边, START(开始节点,内置变量) -> node1 -> END(结束节点,内置变量) builder.add_edge(START, "node1") builder.add_edge("node1", END) # 编译成图 graph = builder.compile(...)

编译后的图是一个Runnable对象,您可以像使用 Langchain 那样,调用 invoke、stream 等函数 调用它。

👀

State 状态

定义图时,您要做的第一件事是定义图的 State。State 由图的 schema 以及指定如何将更新应用到状态的 reducer 函数组成。State 的 schema 将作为图中所有 Nodes 和 Edges 的输入 schema,可以是 TypedDict、dataclass 或 Pydantic 模型。所有 Nodes 将发出对 State 的更新,然后使用指定的 reducer 函数应用这些更新。

from langgraph.graph.message import add_messages class State(TypedDict): messages: Annotated[list[AnyMessage], add_messages] extra_field: int

add_messages 函数就是 reducer 函数

reducer 函数

理解节点更新如何应用于 State,Reducer 是关键。State 中的每个键都有其独立的 reducer 函数。如果未明确指定 reducer 函数,则假定对该键的所有更新都应覆盖它。Reducer 有几种不同类型:

  1. 默认类型的 reducer,节点的输出会覆盖全局状态。
from typing_extensions import TypedDict class State(TypedDict): foo: int bar: list[str]

在此示例中,未为任何键指定 reducer 函数。假设图的输入是 {“foo”: 1, “bar”: [“hi”]},

假设第一个 Node 返回 {“foo”: 2},这被视为对状态的更新。**Node 不需要返回整个 State 的所有键,而只需返回需要更新的键值即可。**应用此更新后,State 将变为 {“foo”: 2, “bar”: [“hi”]}。

第二个节点返回 {“bar”: [“bye”]},则 State 将变为 {“foo”: 2, “bar”: [“bye”]}。

  1. 消息 reducer,用于合并消息列表。

    from typing import Annotated from typing_extensions import TypedDict from langgraph.graph import add_messages class State(TypedDict): foo: int messages: Annotated[list[str], add_messages]

在此示例中,我们使用 Annotated 类型为第二个键 (bar) 指定了一个 reducer 函数 (add_messages)。假设图的输入是 {“foo”: 1, “messages”: [“hi”]}。

第一个 Node 返回 {“foo”: 2},应用此更新后,State 将变为 {“foo”: 2, “messages”: [“hi”]}。

第二个节点返回 {“messages”: [“bye”]},则 State 将变为 {“foo”: 2, “messages”: [“hi”, “bye”]},这里的 messages 键是通过将两个列表相加来更新的

3.自定义 reducer,编写处理消息的逻辑。

def custom_reducer(left: int, right: int) -> int: return left + right class State(TypedDict): # 使用 add_messages reducer messages: Annotated[List[str], add_messages] # 使用自定义 reducer count: Annotated[int, custom_reducer]

MessagesState

由于在状态中包含消息列表非常常见,因此存在一个预构建的状态 MessagesState。MessagesState 定义了一个单一的 messages 键,它是一个 AnyMessage 对象列表,并使用 add_messages reducer,我们可以继承 MessagesState 来定义状态。

from langgraph.graph import MessagesState class State(MessagesState): documents: list[str] # 额外增加的key

👀

Node 节点

在 LangGraph 中,节点通常是 Python 函数(同步或异步)。

第一个参数是状态

第二个参数是“config”RunnableConfig,包含可选的可配置参数(例如 thread_id)

第三个参数是 “runtime”Runtime,包含 Context、store、stream_writer 等

from typing_extensions import TypedDict from langchain_core.runnables import RunnableConfig from langgraph.graph import StateGraph class State(TypedDict): input: str results: str builder = StateGraph(State) def my_node(state: State, config: RunnableConfig): print("In node: ", config["configurable"]["user_id"]) return {"results": f"Hello, {state['input']}!"} def my_other_node(state: State): return state # 添加节点,并设置节点缓存 builder.add_node("my_node", my_node, cache_policy=CachePolicy(ttl=3)) builder.add_node("other_node", my_other_node) # 不要忘记传递 cache graph = builder.compile(cache=InMemoryCache())

START 节点是一个特殊节点,它代表将用户输入发送到图的节点。引用此节点的主要目的是确定应首先调用哪些节点。

END 节点是一个特殊节点,代表一个终止节点。当您想表示哪些边在完成后没有后续操作时,会引用此节点。

节点缓存,默认缓存 key 通过 pickle 对输入进行哈希生成,可以通过key_func自定义缓存 key 的生成策略。

👀

Edge 边

边定义了逻辑如何路由以及图如何决定停止。这是代理工作方式以及不同节点之间如何通信的重要组成部分。LangGraph 支持以下类型的边:

  1. 普通边直接从一个节点连接到另一个节点
builder.add_edge("node_a", "node_b")
  1. 条件边根据自定义逻辑决定下一个要执行的节点

    # 直接返回节点名称 def routing_function(state: State): if state["count"] > 0: return "node_b" else: return "node_c" builder.add_conditional_edges("node_a", routing_function)
# 不直接返回节点名称 def routing_function(state: State): if state["count"] > 0: return False return True # 这里要做映射 graph.add_conditional_edges("node_a", routing_function, {True: "node_b", False: "node_c"})

如何学习AI大模型?

如果你对AI大模型入门感兴趣,那么你需要的话可以点击这里大模型重磅福利:入门进阶全套104G学习资源包免费分享!

这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

这是一份大模型从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!


第一阶段:从大模型系统设计入手,讲解大模型的主要方法;

第二阶段:在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段:大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段:大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段:大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段:以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段:以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

100套AI大模型商业化落地方案

大模型全套视频教程

200本大模型PDF书籍

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

LLM面试题合集

大模型产品经理资源合集

大模型项目实战合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1210253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026年电商财税服务商推荐榜:合规与税优双驱,五大优质品牌助力企业无忧经营

2026年电商财税行业趋势与服务商测评背景 2026年,随着金税四期“数电票+数据穿透”监管深化,电商行业“多平台对账混乱、达人私户收款风险、MCN机构合规能力薄弱”等痛点愈发突出。同时,上海等区域产业园区政策持续…

10B击败200B!阶跃星辰视觉语言模型开源,大模型技术学习指南

阶跃星辰发布的Step3-VL-10B视觉语言模型仅用10B参数就在多项基准测试中达到同规模SOTA水平。该模型采用全参数端到端多模态联合预训练、大规模多模态强化学习和并行协调推理机制三大创新设计,在STEM推理、数学竞赛、空间理解和代码能力等方面表现出色。这一突破证明…

产品经理转型AI大模型全攻略:从入门到精通_从互联网到人工智能,产品经理转型指南

本文是一位产品经理分享的转型成为人工智能产品经理(AIPM)的指南。文章分析了人工智能市场前景,介绍了AIPM需具备的职业技能(AIPMX),详细阐述了从零开始的学习路径和方法,并分享了大模型学习的六个阶段及全套学习资源,为有志于转型…

全网最全8个AI论文写作软件,研究生毕业论文必备!

全网最全8个AI论文写作软件,研究生毕业论文必备! 论文写作的智能革命,从这里开始 随着人工智能技术的不断发展,AI 工具已经成为研究生在论文写作过程中不可或缺的助手。尤其是在降低 AIGC(人工智能生成内容&#xff…

2026昆明市雅思一对一培训深度测评排行榜:优质机构甄选与提分方案解析

在雅思培训领域,昆明市考生面临着诸多备考困境:基础薄弱不知如何起步、目标分明确却缺乏针对性提分技巧、碎片化时间难以适配常规课程、盲目选课导致投入与效果失衡等。对于追求高效提分的考生而言,一对一培训因具备…

昆明市雅思培训TOP榜:2026全维度测评,精准提分机构推荐

在雅思培训市场鱼龙混杂的当下,昆明考生普遍面临选课迷茫、提分艰难、优质教育机构甄别不易的核心痛点。多数考生既渴望获取权威实用的提分技巧,又关注培训性价比与个性化方案适配度,如何在众多机构中筛选出靠谱的选…

昆明雅思选课避坑指南:2026最新全国性机构口碑排名与提分效果实测

在雅思培训的赛道上,昆明市呈贡、五华、盘龙、官渡等核心区域的考生普遍面临着雅思培训选课迷茫、优质教育机构筛选困难、提分技巧缺失、个性化方案不足的核心痛点。随着2026年雅思考试改革深化,机械刷题收益大幅弱化…

2026昆明市雅思网课一对一权威测评排行榜:精准避坑,高效提分优选指南

在雅思备考的赛道上,昆明市考生往往深陷多重困境:口语缺乏真实交流场景、写作逻辑混乱难提分,面对海量教育机构更是无从下手,想要筛选出靠谱且性价比高的雅思网课一对一课程难上加难。对于雅思新手而言,不知如何搭…

2026年双片全自动钉箱机口碑厂家排行,不容错过,双片全自动钉箱机源头厂家精选优质品牌助力工程采购

随着电商物流、食品饮料、家电制造等行业的持续繁荣,作为包装环节关键设备的双片全自动钉箱机,其市场需求与技术迭代正同步加速。行业正面临着从“能用”到“好用、智能、高效”的深刻转型。企业不仅追求设备的稳定钉…

完整教程:微软官方直链下载(winxp,win8,win10,win11镜像下载)

完整教程:微软官方直链下载(winxp,win8,win10,win11镜像下载)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

setState on unmounted component

问题 Warning: Cant perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks i…

2026昆明市雅思培训补习班深度测评排行榜:优质机构甄选指南

在雅思备考的赛道上,昆明市众多考生普遍面临着雅思培训选课迷茫、优质教育机构筛选困难、提分技巧缺失、个性化方案不足的核心痛点。尤其是2026年雅思考试改革深化,机械刷题收益弱化,真实语言输出能力与学术应用素养…

2025年AI超级员工品牌大评测:口碑最好的竟然是它,AI企业员工/AI员工/AI智能员工/AI超级员工产品推荐

行业背景与评测标准 随着人工智能技术的快速发展,AI超级员工正成为企业数字化转型的重要工具。据权威机构统计,2025年全球AI超级员工市场规模预计突破千亿元,越来越多的企业开始采用这一智能化解决方案提升运营效率…

亲测好用8个AI论文平台,继续教育学生轻松搞定毕业论文!

亲测好用8个AI论文平台,继续教育学生轻松搞定毕业论文! AI 工具如何成为论文写作的得力助手 在当前继续教育学生面临毕业论文压力日益增大的背景下,AI 工具正逐渐成为学术写作中不可或缺的一部分。尤其是那些能够有效降低 AIGC(…

php调用deepseek 接口示例

<?php class DeepSeekClient {private $apiKey;private $apiUrl = https://api.deepseek.com/chat/completions;private $model = deepseek-chat;public function __construct($apiKey) {$this->apiKey = $apiK…

运算符:4.关系运算符

4.关系运算符 1.结果:boolen->要么是true,要么是false 2.作用:做条件判断使用符号 说明== 如果符号前后相等为true;否者为false> 如果符号前的数据大于符号后的数据为true,否者为false< 如果符号前的数据…

默纳克刷机,默纳克刷协议,默纳克显示板 外呼板协议更改 烧录 默纳克各种软件各种刷机

默纳克刷机&#xff0c;默纳克刷协议&#xff0c;默纳克显示板 外呼板协议更改 烧录 默纳克各种软件各种刷机&#xff0c;含主板、轿顶板、外呼板刷机软件原程序、操作器刷机软件及协议一应俱全。 深夜的办公室&#xff0c;只有电脑屏幕发出幽蓝的光芒。我坐在工位上&#xff…

Matlab/Cplex代码:两级电力市场环境下计及风险的省间交易商最优购电模型

Matlab/Cplex代码&#xff1a;两级电力市场环境下计及风险的省间交易商最优购电模型 参考电网技术的《两级电力市场环境下计及风险的省间交易商最优购电模型》 Highlights:省间可再生能源交易&#xff0c;双层优化模型&#xff0c;采用KKT和强对偶化简MPEC模型为MILP&#xff0…

直接看代码最实在。先来搞个简单的BP神经网络结构

PSO粒子群优化算法优化BP神经网络做MIMO多输入多输出系统的预测&#xff0c;预测精度非常高class BPNN:def __init__(self, input_size, hidden_size, output_size):self.w1 np.random.randn(input_size, hidden_size)self.b1 np.zeros((1, hidden_size))self.w2 np.random.…

基于SVPWM调制的三相T型三电平并网逆变器Simulink模型

调制方法为SVPWM的三相T型三电平并网逆变器simulink模型。 光伏组件也是自己搭建的数学模型&#xff0c;不是simulink库里的模块&#xff1b;前级是boost电路&#xff0c;通过扰动观测法追踪光伏组件的最大功率点&#xff0c;并控制输出电压的大小&#xff1b;后级是T型三电平逆…