1. 首页>
  2. 技术文章>
  3. LangGraph学习笔记2

LangGraph学习笔记2

9/15/26 3:58:34 PM 浏览 905 评论 0

LangGraph

分支控制

import operator
from typing import Any,Annotated
from typing_extensions import TypedDict
from IPython.display import Image,display
from langgraph.graph import START, END, StateGraph
#Annotated 允许为类型提供额外的元数据,而不影响类型检查器对类型本身的理解
class State(TypedDict):
    aggregate:Annotated[list,operator.add]
   
def a(state:State):
    return {"aggregate": ["A"]}
def b(state:State):
    return {"aggregate": ["B"]}
def c(state:State):
    return {"aggregate": ["C"]}
def d(state:State):
    return {"aggregate": ["D"]}
graph_builder = StateGraph(State)
#添加节点
graph_builder.add_node(a)
graph_builder.add_node(b)
graph_builder.add_node(c)
graph_builder.add_node(d)
# 添加边
graph_builder.add_edge(START, "a")
graph_builder.add_edge("a", "b")
graph_builder.add_edge("a", "c")
graph_builder.add_edge("b", "d")
graph_builder.add_edge("c", "d")
graph = graph_builder.compile()
display(Image(graph.get_graph().draw_mermaid_png()))

分支与循环:

from typing import Annotated,Literal
from typing_extensions import TypedDict
from IPython.display import Image,display
from langgraph.graph import START, END, StateGraph
from langgraph.errors import GraphRecursionError

#Annotated 允许为类型提供额外的元数据,而不影响类型检查器对类型本身的理解
class State(TypedDict):
    aggregate:Annotated[list,operator.add]
   
def a(state:State):
    return {"aggregate": ["A"]}

def b(state:State):
    return {"aggregate": ["B"]}

#条件路由函数
def route(state:State) -> Literal["b", END]:
    if len(state["aggregate"]) < 5:
        return "b"
    else:
        return END

graph_builder = StateGraph(State)

#添加节点
graph_builder.add_node(a)
graph_builder.add_node(b)

# 添加边
graph_builder.add_edge(START, "a")
graph_builder.add_conditional_edges("a", route)
graph_builder.add_edge("b", "a")

graph = graph_builder.compile()

display(Image(graph.get_graph().draw_mermaid_png()))

#限制递归调用次数,防止异常情况下的大量无用调用
try:
    graph.invoke({"aggregate": []},{"recursion_limit":3})
except GraphRecursionError:
    print("Recursion error occurred")

条件与循环复杂例子

from typing import Annotated,Literal
from typing_extensions import TypedDict
from IPython.display import Image,display
from langgraph.graph import START, END, StateGraph
from langgraph.errors import GraphRecursionError
#Annotated 允许为类型提供额外的元数据,而不影响类型检查器对类型本身的理解
class State(TypedDict):
    aggregate:Annotated[list,operator.add]
   
def a(state:State):
    return {"aggregate": ["A"]}
def b(state:State):
    return {"aggregate": ["B"]}
def c(state:State):
    return {"aggregate": ["C"]}
def d(state:State):
    return {"aggregate": ["D"]}
#条件路由函数
def route(state:State) -> Literal["b", END]:
    if len(state["aggregate"]) < 5:
        return "b"
    else:
        return END
graph_builder = StateGraph(State)
#添加节点
graph_builder.add_node(a)
graph_builder.add_node(b)
graph_builder.add_node(c)
graph_builder.add_node(d)
# 添加边
graph_builder.add_edge(START, "a")
graph_builder.add_conditional_edges("a", route)
graph_builder.add_edge("b", "c")
graph_builder.add_edge("b", "d")
graph_builder.add_edge(["c","d"], "a")
graph = graph_builder.compile()
display(Image(graph.get_graph().draw_mermaid_png()))
#限制递归调用次数,防止异常情况下的大量无用调用
graph.invoke({"aggregate": []})


网友讨论