langgraph 循环节点的静态和动态实现

ReAct 循环节点的两种实现方法,静态实现和动态实现,current小于5的话就不断累加

1.静态

python 复制代码
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import MessagesState
from rich import print as rprint

class overAllState(MessagesState):
    current: int

def add_fn(state: overAllState):
    num = state["current"]
    print("add_fn", num)
    return {"current": num + 1}

def route(state: overAllState):
    if state["current"] < 5:
        return "add_fn"
    return END

builder = StateGraph(overAllState)
builder.add_node("add_fn", add_fn)

# 起点直接进 add_fn
builder.add_edge(START, "add_fn")

# add_fn 执行完后,用条件边决定:回自己 或 结束
builder.add_conditional_edges(
    "add_fn",
    route,
    path_map={
        "add_fn": "add_fn",
        END: END,
    },
)

graph = builder.compile()
display(graph)
res = graph.invoke({"current": 0})
rprint(res)

2,动态实现

python 复制代码
from langgraph.graph import StateGraph, START, END
from langgraph.types import Command
from langgraph.graph.message import MessagesState
from rich import print as rprint
from typing import Literal

class overAllState(MessagesState):
    current: int

def add_fn(state: overAllState) -> Command[Literal["add_fn", "__end__"]]:
    num = state["current"]
    print("add_fn", num)

    if num < 5:
        # 更新状态并自循环回到当前节点
        return Command(
            update={"current": num + 1},
            goto="add_fn"   # 指向自身,形成循环
        )
    else:
        # 达到条件,不更新状态(或更新后)直接结束
        return Command(goto=END)

builder = StateGraph(overAllState)
builder.add_node("add_fn", add_fn)
builder.add_edge(START, "add_fn")  # 起点直接进入循环节点

graph = builder.compile()
display(graph)
res = graph.invoke({"current": 0})
rprint(res)
相关推荐
IT_陈寒17 分钟前
React的setState真是个演员,你以为它同步其实在装睡
前端·人工智能·后端
ServBay1 小时前
Claude Fable 5.5 测试曝光,但它在悄悄给你打分
后端·ai编程·claude
孟健2 小时前
Claude Code 同需求写两版对比:装不装 frontend-design 差多远?
前端·ai编程·claude
IT规划师2 小时前
一文讲透五种发布机制:滚动、蓝绿、金丝雀、红黑与 AB
后端·面试
一条Go4 小时前
两套权限目录,三重闸门:Alioth 的多租户 RBAC 为什么这么拧
后端·程序员·github
Tokenfree4 小时前
把多模态 OCR 接进业务系统:四千张运单,三个坑
后端
梦de天空一米16884 小时前
【一个重复id让游戏卡在62%,聊聊配置表检查】
前端
ryn483984 小时前
01 一个功能模块,怎么分层才不乱
前端·ai编程·claude
用户859313061354 小时前
我给 AI Agent 写了个下载器:293KB 的网页,不再吃掉 7 万 token
后端
Amos_Web4 小时前
通过 Rspack 源码学 Rust(五):读懂 Result 与问号运算符的错误返回
前端