AI创想

标题: LangGraph 简介 [打印本页]

作者: AI小编    时间: 昨天 22:38
标题: LangGraph 简介
作者:CSDN博客
特点、功能与应用场景

核心特点:

主要功能:

典型应用场景:

介绍

一、LangGraph的背景

定位:LangGraph是LangChain的扩展库,专注于构建带有状态循环多参与者协作的应用(如复杂代理系统、自治工作流)。它弥补了LangChain在处理动态流程控制长时状态跟踪的不足。
典型场景

二、核心概念解析

1. 状态(State)

  1. {"user_input":"如何学习机器学习?","search_results":[...],"draft_answer":"首先需要掌握线性代数...","revised_answer":None}
复制代码
2. 节点(Node)

  1. defsearch_node(state):
  2.     query = state["user_input"]
  3.     results = web_search(query)return{"search_results": results}
复制代码
3. 边(Edge)


三、核心组件详解

1. StateGraph 类

2. 条件判断

  1. from langgraph.checkpoint import BaseCheckpointSaver
  2. defshould_revise(state):return"revise"if needs_revision(state)else"finalize"
复制代码

四、完整工作流示例

场景:问答系统优化流程
  1. from langgraph.graph import StateGraph
  2. # 定义状态类型from typing import TypedDict, List, Annotated
  3. classQaState(TypedDict):
  4.     question:str
  5.     draft:str
  6.     revisions: List[str]
  7.     final: Annotated[str,"最终回答"]# 构建节点defdraft_answer(state: QaState):return{"draft": llm.generate(f"回答:{state['question']}")}defreview_answer(state: QaState):return{"revisions":[llm.generate(f"优化建议:{state['draft']}")]}deffinalize_answer(state: QaState):return{"final": state['revisions'][-1]}# 构建图
  8. graph = StateGraph(QaState)
  9. graph.add_node("draft", draft_answer)
  10. graph.add_node("review", review_answer)
  11. graph.add_node("final", finalize_answer)# 设置边
  12. graph.add_edge("draft","review")
  13. graph.add_conditional_edges("review",lambda s:"final"iflen(s['revisions'])>=2else"review",{"final":"final","review":"review"})
  14. graph.set_entry_point("draft")# 编译执行
  15. app = graph.compile()
  16. result = app.invoke({"question":"解释量子计算原理"})print(result["final"])
复制代码

五、高级功能

1. 持久化检查点
  1. from langgraph.checkpoint import FileCheckpoint
  2. app = graph.compile(
  3.     checkpointer=FileCheckpoint("./checkpoints/"))
复制代码
2. 并行执行

通过ToolNode实现并行调用:
  1. from langgraph.prebuilt import ToolNode
  2. parallel_tools = ToolNode([web_search, docs_lookup])
复制代码
3. 人工干预

配置人工审核节点:
  1. defhuman_review(state):
  2.     show_gui(state["draft"])return{"approved": get_user_input()}
复制代码

六、设计模式建议

  1. try:
  2.     app.invoke(...)except LangGraphError as e:
  3.     handle_error(e.current_state)
复制代码
断点保存和恢复

在 LangGraph 中,中断执行和保存后重新载入执行是一个重要的功能,尤其是在处理长时间运行的任务或需要暂停任务的场景时。
1. LangGraph 的状态管理机制

LangGraph 的执行状态通常包括以下信息:
为了支持中断和恢复执行,LangGraph 需要将这些状态信息持久化存储,并在恢复时重新加载。

2. 中断执行与保存状态

步骤 1:设计中断点

在 LangGraph 中,可以通过以下方式定义中断点:
步骤 2:保存状态

保存状态的核心是将当前执行的状态序列化为一个可持久化的格式(如 JSON 或数据库记录)。以下是需要保存的关键信息:
  1. {"graph_id":"example_graph_001",// 图的唯一标识"current_node":"node3",// 当前执行到的节点"node_outputs":{// 每个节点的输出结果"node1":{"output":"weather","timestamp":"2023-10-01T12:00:00Z"},"node2":{"output":{"location":"Beijing","weather":"Sunny"},"timestamp":"2023-10-01T12:05:00Z"}},"context":{// 上下文信息"user_input":"What's the weather in Beijing?","session_id":"session_123456"},"status":"paused"// 当前状态(running, paused, completed)}
复制代码
步骤 3:存储状态

可以将上述状态信息存储到以下媒介之一:

3. 重新载入执行

步骤 1:加载状态

从存储媒介中读取之前保存的状态信息。例如,从数据库中查询状态记录:
  1. SELECT*FROM graph_states WHERE session_id ='session_123456';
复制代码
或者从文件中加载:
  1. import json
  2. withopen('state.json','r')as f:
  3.     state = json.load(f)
复制代码
步骤 2:恢复执行

根据加载的状态信息,恢复执行流程:
示例代码(伪代码):
  1. defresume_execution(graph, state):# 恢复上下文
  2.     graph.set_context(state["context"])# 恢复节点输出for node_id, output in state["node_outputs"].items():
  3.         graph.set_node_output(node_id, output)# 定位当前节点并继续执行
  4.     current_node = state["current_node"]
  5.     graph.start_from_node(current_node)# 示例调用
  6. state = load_state_from_storage()# 加载状态
  7. resume_execution(my_graph, state)# 恢复执行
复制代码

4. 示例场景

假设我们有一个任务图,用于处理用户提问并调用外部 API 获取天气信息。任务流程如下:
执行过程中断

保存状态

保存的状态信息可能如下:
  1. {"graph_id":"weather_graph","current_node":"node2","node_outputs":{"node1":{"output":"weather","timestamp":"2023-10-01T12:00:00Z"}},"context":{"user_input":"What's the weather in Beijing?","session_id":"session_123456"},"status":"paused"}
复制代码
恢复执行

当天气 API 返回结果后,系统从存储中加载状态并恢复执行:

5. 关键实现细节

状态持久化的设计

并发控制

工具调用的异步处理


6. 总结

LangGraph 的中断执行与保存/恢复功能通过以下步骤实现:
这种机制不仅提高了系统的灵活性,还支持长时间运行任务的分段处理和容错能力。在实际应用中,可以根据具体需求选择合适的存储媒介和状态管理策略。

原文地址:https://blog.csdn.net/weixin_44714085/article/details/146520470




欢迎光临 AI创想 (https://www.llms-ai.com/) Powered by Discuz! X3.4