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)
相关推荐
打工仔折腾 AI1 小时前
在线PDF工具隐私焦虑?把BentoPDF部署到极空间NAS本地处理
人工智能·后端·python·pdf·ai agent 实战
keyipatience1 小时前
JS学习笔记(2)数组,函数,作用域,对象
前端·javascript·笔记·学习·html
2603_965148111 小时前
商品价格监控 API 接口:从原理到实战的完整指南
java·前端·数据库·python·生活
酷虎软件1 小时前
视频加字幕怎么制作
java·前端·音视频
Geoffwo2 小时前
robotjs0.6.0鼠标中轴滚动失效修复方案
前端·javascript
彭亚川Allen2 小时前
从零手搓 RAG 之文档解析技术
前端·后端·架构
苏渡苇2 小时前
Spring Insight:跨服务调用链路是怎么串起来的?
spring boot·后端·spring·系统监控·apm
oicola2 小时前
Ant Design v5 vs Tailwind CSS:组件库与样式框架的终极对决
前端·css
溪语流沙2 小时前
【Web全栈进阶】Vue Router + Pinia:SPA路由与全局状态
前端·javascript·vue.js