langgraph学习3 - demo

LangGraph 的核心概念:

state:  状态。像个接力棒,在整个流程中传递,并携带了一些信息,比如下一步去哪个节点。

node:节点。就是定义的一个个函数(处理节点),比如调用llm, 或者处理下数据,或者判断下值的内容等等。

edge: 边。就是把node  串联起来,指定好下一步怎么走。分为 edge 无条件边  和 conditional_edges 条件边,就是说满足条件了才把两个节点连接起来。

graph: 表示整个流程图,就是声明下。

LangGraph 的执行逻辑是:输入初始状态 → 图按节点和边定义的顺序执行 → 不断更新状态 → 直到达到终止条件。

最简单的一个案例:

from typing import TypedDict
from langgraph.graph import StateGraph, START, END

# 定义状态
class State(TypedDict):
    input: str
    output: str

# 定义节点
def process_input(state: State) -> State:
    state["output"] = f"处理输入: {state['input']}"
    return state

def finalize_output(state: State) -> State:
    state["output"] += " -> 已完成"
    return state

# 创建图
workflow = StateGraph(State)
workflow.add_node("process_input", process_input)
workflow.add_node("finalize_output", finalize_output)
workflow.add_edge(START, "process_input")
workflow.add_edge("process_input", "finalize_output")
workflow.add_edge("finalize_output", END)

# 编译和运行
graph = workflow.compile()
result = graph.invoke({"input": "Hello, LangGraph!", "output": ""})
print(result)
 

条件边的案例

关键组成部分解析:

  1. 起始节点 ("check_input"):

    • 表示条件分支的起点,当这个节点执行完毕后,会根据条件决定下一步走向

  2. 条件函数 (route):

    • 这是一个自定义函数(前面定义的 def route(state: State) -> str

    • 接收当前状态 state 作为输入

    • 返回一个字符串,这个字符串就是决策结果(在本例中是 "process_input" 或 "skip_processing"

  3. 分支映射字典:

    • 这是一个映射表,将条件函数的返回值连接到具体的节点

    • 键:条件函数可能返回的字符串

    • 值:对应要执行的节点名称

    • 结构:{ "条件返回值1": "节点A", "条件返回值2": "节点B" }

完整代码:

from typing import TypedDict
from langgraph.graph import StateGraph, START, END


# 定义状态
class State(TypedDict):
    input: str
    output: str


# 定义节点
def check_input(state) -> State:
    state["needs_processing"] = len(state["input"]) > 5  # length big than 5

    return state


def process_input(state: State) -> State:
    state["output"] = f"process_input 处理输入: {state['input']}"
    return state


def skip_processing(state: State) -> State:
    state["output"] = f"too short, no need processing"
    return state


def finalize_output(state: State) -> State:
    state["output"] += " -> 已完成"
    return state


def route(state):
    return "process_input" if state["needs_processing"] else "skip_processing"


# 创建图
workflow = StateGraph(State)
workflow.add_node("check_input", check_input)
workflow.add_node("process_input", process_input)
workflow.add_node("skip_processing", skip_processing)
workflow.add_node("finalize_output", finalize_output)
workflow.add_edge(START, "check_input")
workflow.add_conditional_edges("check_input",route,{
    "process_input": "process_input",
    "skip_processing": "skip_processing"
})
workflow.add_edge("process_input", "finalize_output")
workflow.add_edge("skip_processing", "finalize_output")
workflow.add_edge("finalize_output", END)

# 编译和运行
graph = workflow.compile()
result = graph.invoke({"input": "hi!", "output": ""})
print(result)

循环:

from typing import TypedDict
from langgraph.graph import StateGraph, START, END

class State(TypedDict):
    counter: int
    output: str

def increment(state: State) -> State:
    state["counter"] += 1
    state["output"] = f"当前计数: {state['counter']}"
    return state

def should_continue(state: State) -> str:
    return "increment" if state["counter"] < 3 else END

# 创建图
workflow = StateGraph(State)
workflow.add_node("increment", increment)
workflow.add_edge(START, "increment")
workflow.add_conditional_edges("increment", should_continue, {
    "increment": "increment",
    END: END
})

# 编译和运行
graph = workflow.compile()
result = graph.invoke({"counter": 0, "output": ""})
print(result)
 

ps:

1. tools 要么写文本注释,要么添加 description = "工具的表述"

eg:

# tools
@tool
def search(query_content):
    """搜索工具:根据用户查询内容进行搜索"""
    return f"query {query_content} result is balabalala:"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值