功能多的网站模板 中文内容,重庆十大装饰公司,中山 做网站,淄博网站制作设计定制本文深入探讨LangGraph中的“状态”概念及其在AI工作流中的核心作用。通过基础状态#xff08;如计数器#xff09;和复杂状态#xff08;含消息历史#xff09;的定义#xff0c;结合代码示例#xff0c;演示如何通过函数式编程实现状态的不可变修改。然后进一步解析了如… 本文深入探讨LangGraph中的“状态”概念及其在AI工作流中的核心作用。通过基础状态如计数器和复杂状态含消息历史的定义结合代码示例演示如何通过函数式编程实现状态的不可变修改。然后进一步解析了如何构建简单和复杂的工作流图Workflow并以实际案例如设备预测性维护、对话机器人说明状态管理的实际应用。附带的完整Python代码提供了可落地的操作模板适合开发者快速掌握LangGraph的状态管理机制。 LangGraph的状态是什么
LangGraph 已成为创建循环代理式人工智能工作流的强大工具。LangGraph 中的一个关键概念是“状态”这一理念——它是基本的构建模块使我们的 AI 系统能够在整个流程中保持和处理信息。
在AI系统处理数据时LangGraph中的状态是一种维护和跟踪信息的方法。可以把它想象成系统的内存允许它在工作流或图形的不同阶段移动时记住和更新信息。
基本状态定义
让我们从LangGraph中最简单的状态形式开始
from typing import TypedDictclass BasicState(TypedDict):count: int这个基本状态定义创建了一个简单的结构它可以保存单个整数值也可以是任何值。虽然看起来很简单但这种类型的状态在许多情况下都非常有用例如
跟踪对话中的回合数统计特定事件的发生次数维持一个简单的分数、指标或AI输出
复杂状态结构
当我们进入更现实的应用程序时我们通常需要更复杂的状态结构。LangGraph允许我们创建可以保存各种类型信息的复杂状态
from typing import TypedDict, Annotated
from langchain_core.messages import HumanMessage, AIMessageclass ComplexState(TypedDict):count: intmessages: Annotated[list[HumanMessage | AIMessage], add_messages]这个复杂的状态不仅跟踪计数而且还维护消息列表。Annotated类型提供了LangGraph用于特殊处理消息列表元组的附加元数据。这个结构特别适用于
需要记住对话历史的聊天机器人在多个交互中维护上下文的人工智能助手需要跟踪定量计数和定性消息数据的系统
状态修改函数
一旦我们定义了状态结构我们就需要修改它们的方法。在LangGraph中我们通常创建新的状态对象而不是修改现有的状态对象并遵循不变性原则
def increment_count(state: BasicState) - BasicState:return BasicState(countstate[count] 1)def add_message(state: ComplexState, message: str, is_human: bool True) - ComplexState:new_message HumanMessage(contentmessage) if is_human else AIMessage(contentmessage)return ComplexState(countstate[count],messagesstate[messages] [new_message])这些函数演示了我们如何
在我们的基本状态增加计数器向我们的复杂状态添加新消息区分人类和AI消息创建反映这些变化的新状态对象
简单图状态
现在我们已经了解了state的基础知识以及如何修改它让我们看看如何在LangGraph中使用state
from langgraph.graph import StateGraph, ENDdef create_simple_graph():workflow StateGraph(BasicState)def increment_node(state: BasicState):return {count: state[count] 1}workflow.add_node(increment, increment_node)workflow.set_entry_point(increment)workflow.add_edge(increment, END)return workflow.compile()这个简单的图表展示了LangGraph工作流的基本结构
我们使用BasicState创建一个StateGraph。我们定义了一个节点函数increment_node来修改状态。我们将这个节点添加到图中并将其设置为入口点。我们从我们的节点到图的END创建一条边。最后我们编译我们的工作流。
虽然这个图看起来很基本但它可以作为更复杂工作流的基础。
复杂图状态
基于我们对简单图形的理解让我们创建一个更高级的工作流
def create_complex_graph():workflow StateGraph(ComplexState)def process_message(state: ComplexState):last_message state[messages][-1].content if state[messages] else No messages yetresponse fReceived: {last_message}. Count is now {state[count] 1}return {count: state[count] 1,messages: state[messages] [AIMessage(contentresponse)]}workflow.add_node(process, process_message)workflow.set_entry_point(process)workflow.add_edge(process, END)return workflow.compile()这个更复杂的图表展示了我们如何
使用我们的ComplexState来维护计数和消息历史处理传入消息并生成响应在每一步用新的信息更新我们的状态
这种类型的图形可以构成一个简单的聊天机器人或人工智能助手的基础展示了LangGraph中状态的强大和灵活性。
在LangGraph中理解和有效地使用状态为创建复杂的、上下文感知的人工智能系统开辟了一个可能性的世界。从简单的计数器到复杂的会话代理状态的概念允许我们构建可以轻松处理多步骤流程的人工智能工作流。
完整实战案例
改示例是使用 LangGraph实现状态管理的完整教学示例包含 状态定义、状态修改函数 和 图workflow构建 的核心逻辑。
from typing import TypedDict, Annotated
from langgraph.graph import StateGraph, END
from langgraph.graph.message import add_messages
from langchain_core.messages import HumanMessage, AIMessage# Step 1: Basic State Definition
class BasicState(TypedDict):count: int# Step 2: More Complex State
class ComplexState(TypedDict):count: intmessages: Annotated[list[HumanMessage | AIMessage], add_messages]# Step 3: State Modification Functions
def increment_count(state: BasicState) - BasicState:return BasicState(countstate[count] 1)def add_message(state: ComplexState, message: str, is_human: bool True) - ComplexState:new_message HumanMessage(contentmessage) if is_human else AIMessage(contentmessage)return ComplexState(countstate[count],messagesstate[messages] [new_message])# Step 4: Simple Graph with State
def create_simple_graph():workflow StateGraph(BasicState)def increment_node(state: BasicState):return {count: state[count] 1}workflow.add_node(increment, increment_node)workflow.set_entry_point(increment)workflow.add_edge(increment, END)return workflow.compile()# Step 5: More Complex Graph with State
def create_complex_graph():workflow StateGraph(ComplexState)def process_message(state: ComplexState):last_message state[messages][-1].content if state[messages] else No messages yetresponse fReceived: {last_message}. Count is now {state[count] 1}return {count: state[count] 1,messages: state[messages] [AIMessage(contentresponse)]}workflow.add_node(process, process_message)workflow.set_entry_point(process)workflow.add_edge(process, END)return workflow.compile()# Interactive Session
def run_interactive_session():print(Welcome to the Interactive LangGraph State Lesson!)print(\nStep 1: Basic State)basic_state BasicState(count0)print(fInitial basic state: {basic_state})print(\nStep 2: More Complex State)complex_state ComplexState(count0, messages[])print(fInitial complex state: {complex_state})print(\nStep 3: State Modification)modified_basic increment_count(basic_state)print(fModified basic state: {modified_basic})modified_complex add_message(complex_state, Hello, LangGraph!)print(fModified complex state: {modified_complex})print(\nStep 4: Simple Graph with State)simple_graph create_simple_graph()result simple_graph.invoke(BasicState(count0))print(fSimple graph result: {result})print(\nStep 5: Complex Graph with State)complex_graph create_complex_graph()initial_state ComplexState(count0, messages[HumanMessage(contentHello, LangGraph!)])result complex_graph.invoke(initial_state)print(fComplex graph result: {result})if __name__ __main__:run_interactive_session()这段代码是使用 LangGraph一个开源框架实现状态管理的完整教学示例包含 状态定义、状态修改函数 和 图workflow构建 的核心逻辑。以下是逐段详细解释 1. 导入必要的模块
from typing import TypedDict, Annotated
from langgraph.graph import StateGraph, END
from langgraph.graph.message import add_messages
from langchain_core.messages import HumanMessage, AIMessageTypedDict: 定义结构化的字典类型类似数据类。Annotated: 类型注解工具用于增强类型约束如 messages 字段必须包含特定类型的消息。StateGraph, END: LangGraph 核心组件用于构建状态图。add_messages: 装饰器标记可添加消息的字段。HumanMessage, AIMessage: 表示人类用户消息和 AI 生成的响应消息。
2. 定义基本状态BasicState
class BasicState(TypedDict):count: int简单状态类仅包含一个整数 count用于演示基础状态管理。
3. 定义复杂状态ComplexState
class ComplexState(TypedDict):count: intmessages: Annotated[list[HumanMessage | AIMessage], add_messages]复杂状态类包含 count: 整数计数器。messages: 一个消息列表存储交互记录人类消息或 AI 响应。Annotated[list[...], add_messages]: 类型注解强制 messages 字段遵循 LangGraph 的消息规范。
4. 状态修改函数
(1) increment_count 函数
def increment_count(state: BasicState) - BasicState:return BasicState(countstate[count] 1)输入一个 BasicState将 count 加 1 并返回新状态。
(2) add_message 函数
def add_message(state: ComplexState, message: str, is_human: bool True) - ComplexState:new_message HumanMessage(contentmessage) if is_human else AIMessage(contentmessage)return ComplexState(countstate[count],messagesstate[messages] [new_message])输入 ComplexState 和消息内容根据 is_human 参数判断消息类型人类或 AI将新消息追加到 messages 列表中。
5. 构建简单状态图create_simple_graph
def create_simple_graph():workflow StateGraph(BasicState)def increment_node(state: BasicState):return {count: state[count] 1}workflow.add_node(increment, increment_node)workflow.set_entry_point(increment)workflow.add_edge(increment, END)return workflow.compile()目标: 创建一个仅包含 count 增加的简单流程。节点 (increment_node): 处理输入状态将 count 1。入口点: 默认从 increment 节点开始。边: 直接连接到结束节点 END。编译: 将流程图转换为可执行的逻辑。
6. 构建复杂状态图create_complex_graph
def create_complex_graph():workflow StateGraph(ComplexState)def process_message(state: ComplexState):last_message state[messages][-1].content if state[messages] else No messages yetresponse fReceived: {last_message}. Count is now {state[count] 1}return {count: state[count] 1,messages: state[messages] [AIMessage(contentresponse)]}workflow.add_node(process, process_message)workflow.set_entry_point(process)workflow.add_edge(process, END)return workflow.compile()目标: 创建处理消息并维护对话历史的复杂流程。节点 (process_message): 读取当前最新消息last_message。生成响应包含 count 1 的结果。更新 count 和追加 AI 响应到 messages。 流程: 每次调用 process 节点后直接结束。
7. 交互式会话运行
def run_interactive_session():print(Welcome to the Interactive LangGraph State Lesson!)# 分步骤演示 BasicState 和 ComplexState 的操作# ...省略中间打印语句# 调用简单图和复杂图simple_result simple_graph.invoke(BasicState(count0))complex_result complex_graph.invoke(ComplexState(count0, messages[HumanMessage(contentHello, LangGraph!)]))print(fSimple graph result: {simple_result})print(fComplex graph result: {complex_result})功能: 运行教学示例展示不同状态和流程的实际效果。简单图调用: 初始状态为 count0执行后结果为 count1。复杂图调用: 初始包含一条人类消息处理后生成 AI 响应并更新 count。
最后总结
LangGraph的状态管理是其构建上下文感知AI系统的核心机制。状态作为系统“内存”贯穿工作流始终确保信息在不同阶段间连贯传递。通过TypedDict定义结构化状态如BasicState追踪计数、ComplexState维护消息历史开发者能够灵活处理简单数值统计与多模态交互场景。状态的修改遵循函数式编程原则——每次操作均生成新状态对象而非直接修改旧状态保障数据一致性与可追溯性。
实际应用中开发者可通过构建简单图如计数器递增验证基础逻辑再进阶到复杂图如消息处理与动态响应模拟对话机器人或自动化流程。例如制造业中的设备预测性维护场景中状态可整合设备运行数据与历史故障记录驱动智能决策而政务服务领域的政策咨询机器人则依赖状态维护用户提问轨迹与政策匹配结果。代码实践部分通过完整的Python示例包括基础/复杂状态定义、工作流构建与交互式运行为开发者提供了可直接复用的模板降低了从理论到落地的门槛。
LangGraph的状态管理不仅解决了多步骤流程中的上下文丢失问题还通过类型注解、不可变状态等设计增强了系统的可靠性与扩展性是构建高效AI代理的关键支撑。 文章转载自: http://www.morning.jmtrq.cn.gov.cn.jmtrq.cn http://www.morning.jqrhz.cn.gov.cn.jqrhz.cn http://www.morning.kwyq.cn.gov.cn.kwyq.cn http://www.morning.rnlx.cn.gov.cn.rnlx.cn http://www.morning.yuanshenglan.com.gov.cn.yuanshenglan.com http://www.morning.lhzqn.cn.gov.cn.lhzqn.cn http://www.morning.hlppp.cn.gov.cn.hlppp.cn http://www.morning.prznc.cn.gov.cn.prznc.cn http://www.morning.dnmwl.cn.gov.cn.dnmwl.cn http://www.morning.pigcamp.com.gov.cn.pigcamp.com http://www.morning.ghphp.cn.gov.cn.ghphp.cn http://www.morning.wdpt.cn.gov.cn.wdpt.cn http://www.morning.xrct.cn.gov.cn.xrct.cn http://www.morning.rhpy.cn.gov.cn.rhpy.cn http://www.morning.rfbpq.cn.gov.cn.rfbpq.cn http://www.morning.pskjm.cn.gov.cn.pskjm.cn http://www.morning.ztfzm.cn.gov.cn.ztfzm.cn http://www.morning.gbgdm.cn.gov.cn.gbgdm.cn http://www.morning.xqgh.cn.gov.cn.xqgh.cn http://www.morning.pplxd.cn.gov.cn.pplxd.cn http://www.morning.zqbrd.cn.gov.cn.zqbrd.cn http://www.morning.bccls.cn.gov.cn.bccls.cn http://www.morning.cbmqq.cn.gov.cn.cbmqq.cn http://www.morning.yrms.cn.gov.cn.yrms.cn http://www.morning.zlnkq.cn.gov.cn.zlnkq.cn http://www.morning.zdmlt.cn.gov.cn.zdmlt.cn http://www.morning.lhyhx.cn.gov.cn.lhyhx.cn http://www.morning.lrybz.cn.gov.cn.lrybz.cn http://www.morning.hpcpp.cn.gov.cn.hpcpp.cn http://www.morning.kxqwg.cn.gov.cn.kxqwg.cn http://www.morning.swyr.cn.gov.cn.swyr.cn http://www.morning.wynqg.cn.gov.cn.wynqg.cn http://www.morning.rsfp.cn.gov.cn.rsfp.cn http://www.morning.wsxly.cn.gov.cn.wsxly.cn http://www.morning.ksggl.cn.gov.cn.ksggl.cn http://www.morning.jthjr.cn.gov.cn.jthjr.cn http://www.morning.rxydr.cn.gov.cn.rxydr.cn http://www.morning.xkppj.cn.gov.cn.xkppj.cn http://www.morning.pmghz.cn.gov.cn.pmghz.cn http://www.morning.simpliq.cn.gov.cn.simpliq.cn http://www.morning.nktgj.cn.gov.cn.nktgj.cn http://www.morning.wngpq.cn.gov.cn.wngpq.cn http://www.morning.rhdln.cn.gov.cn.rhdln.cn http://www.morning.rnhh.cn.gov.cn.rnhh.cn http://www.morning.bcnsl.cn.gov.cn.bcnsl.cn http://www.morning.xhpnp.cn.gov.cn.xhpnp.cn http://www.morning.nkcfh.cn.gov.cn.nkcfh.cn http://www.morning.zqzhd.cn.gov.cn.zqzhd.cn http://www.morning.ldsgm.cn.gov.cn.ldsgm.cn http://www.morning.bhrkx.cn.gov.cn.bhrkx.cn http://www.morning.hxycm.cn.gov.cn.hxycm.cn http://www.morning.sjftk.cn.gov.cn.sjftk.cn http://www.morning.hwljx.cn.gov.cn.hwljx.cn http://www.morning.nnhfz.cn.gov.cn.nnhfz.cn http://www.morning.bxgpy.cn.gov.cn.bxgpy.cn http://www.morning.yhwmg.cn.gov.cn.yhwmg.cn http://www.morning.qwmsq.cn.gov.cn.qwmsq.cn http://www.morning.wqgr.cn.gov.cn.wqgr.cn http://www.morning.bqdgr.cn.gov.cn.bqdgr.cn http://www.morning.qhkdt.cn.gov.cn.qhkdt.cn http://www.morning.dhdzz.cn.gov.cn.dhdzz.cn http://www.morning.ktrzt.cn.gov.cn.ktrzt.cn http://www.morning.ptmsk.cn.gov.cn.ptmsk.cn http://www.morning.ptwzy.cn.gov.cn.ptwzy.cn http://www.morning.rbktw.cn.gov.cn.rbktw.cn http://www.morning.fwlch.cn.gov.cn.fwlch.cn http://www.morning.hwbmn.cn.gov.cn.hwbmn.cn http://www.morning.rhmk.cn.gov.cn.rhmk.cn http://www.morning.wptdg.cn.gov.cn.wptdg.cn http://www.morning.ykmtz.cn.gov.cn.ykmtz.cn http://www.morning.sjzsjsm.com.gov.cn.sjzsjsm.com http://www.morning.mfmrg.cn.gov.cn.mfmrg.cn http://www.morning.xsbhg.cn.gov.cn.xsbhg.cn http://www.morning.pmysp.cn.gov.cn.pmysp.cn http://www.morning.dmsxd.cn.gov.cn.dmsxd.cn http://www.morning.rsszk.cn.gov.cn.rsszk.cn http://www.morning.btpll.cn.gov.cn.btpll.cn http://www.morning.tstkr.cn.gov.cn.tstkr.cn http://www.morning.ydxwj.cn.gov.cn.ydxwj.cn http://www.morning.fypgl.cn.gov.cn.fypgl.cn