尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
LangGraph核心概念详解,节点、边、状态、条件边
LangGraph核心概念详解节点、边、状态、条件边上一篇用一个例子展示了LangGraph的能力。这一篇我们把核心概念拆开讲清楚。LangGraph的四个核心概念是节点、边、状态、条件边。理解了这四个LangGraph就入门了。状态State状态是LangGraph最核心的概念。整个图的执行过程中所有节点共享一个状态对象。状态通常用TypedDict来定义。每个字段代表一种信息。fromtypingimportTypedDict,List,OptionalclassAgentState(TypedDict):messages:List[str]# 对话历史current_task:str# 当前任务results:List[str]# 中间结果retry_count:int# 重试次数status:str# 当前状态每个节点函数接收状态作为参数返回一个字典。返回的字典会合并到当前状态里。defsearch_node(state:AgentState)-dict:# 从状态里读取信息taskstate[current_task]# 执行搜索resultf搜索{task}的结果# 返回要更新的字段return{results:state[results][result],status:searched,}这里有个重要的设计。节点返回的不是完整的新状态只是要更新的字段。LangGraph会自动把返回值合并到状态里。没返回的字段保持不变。这种设计让节点之间的耦合度很低。每个节点只关心自己需要读什么、写什么不用管其他节点。节点Node节点是图里的处理步骤。每个节点是一个函数接收状态返回状态更新。defanalyze_node(state:AgentState)-dict:resultsstate[results]# 分析结果analysisf分析了{len(results)}条结果return{messages:state[messages][analysis],status:analyzed,}节点的函数签名是固定的。参数是当前状态返回值是状态更新字典。添加节点用add_node方法。第一个参数是节点名字第二个参数是节点函数。fromlanggraph.graphimportStateGraph workflowStateGraph(AgentState)workflow.add_node(search,search_node)workflow.add_node(analyze,analyze_node)workflow.add_node(report,report_node)节点名字是字符串标识后面添加边的时候用这个名字来引用。边Edge边定义了节点之间的跳转关系。从节点A执行完后走向节点B。# search执行完后走向analyzeworkflow.add_edge(search,analyze)# analyze执行完后走向reportworkflow.add_edge(analyze,report)普通的边是无条件的。A执行完一定走向B。还有一个特殊的边入口边。用set_entry_point来设置图的起始节点。# 图从search节点开始workflow.set_entry_point(search)还有一个特殊的终止节点END。走到END就表示图执行结束。# report执行完后结束fromlanggraph.graphimportEND workflow.add_edge(report,END)条件边Conditional Edge条件边是LangGraph最强大的功能。它允许根据当前状态动态决定下一步走向哪个节点。defdecide_next(state:AgentState)-str:statusstate[status]ifstatusanalyzed:returnreportelifstatusneed_more_data:returnsearchelse:returnerror_handler# 添加条件边workflow.add_conditional_edges(analyze,# 从哪个节点出发decide_next,# 判断函数)条件边的判断函数接收状态返回一个字符串。这个字符串就是下一步要走向的节点名字。判断函数里可以写任意复杂的逻辑。读状态、做判断、返回目标节点。条件边是实现分支和循环的关键。分支就是条件边返回不同的节点名字。循环就是条件边返回之前的节点。一个完整的例子把四个概念串起来做一个完整的Agent工作流。fromlanggraph.graphimportStateGraph,ENDfromtypingimportTypedDict,List# 1. 定义状态classWorkState(TypedDict):question:strsearch_results:List[str]answer:strneeds_search:boolquality_ok:boolretry_count:int# 2. 定义节点defdecide_node(state:WorkState)-dict:判断是否需要搜索questionstate[question]# 简单问题不需要搜索iflen(question)10:return{needs_search:False}return{needs_search:True}defsearch_node(state:WorkState)-dict:搜索资料questionstate[question]resultf关于{question}的搜索结果resultsstate.get(search_results,[])[result]return{search_results:results}defanswer_node(state:WorkState)-dict:生成回答questionstate[question]resultsstate.get(search_results,[])ifresults:answerf根据{len(results)}条资料回答{question}的答案是...else:answerf直接回答{question}的答案是...return{answer:answer}defcheck_node(state:WorkState)-dict:检查回答质量answerstate[answer]retrystate.get(retry_count,0)# 模拟质量检查iflen(answer)15orretry2:return{quality_ok:True}return{quality_ok:False,retry_count:retry1}# 3. 定义条件判断函数defroute_after_decide(state:WorkState)-str:ifstate[needs_search]:returnsearchreturnanswerdefroute_after_check(state:WorkState)-str:ifstate[quality_ok]:returnENDreturnanswer# 质量不行重新回答# 4. 构建图workflowStateGraph(WorkState)workflow.add_node(decide,decide_node)workflow.add_node(search,search_node)workflow.add_node(answer,answer_node)workflow.add_node(check,check_node)workflow.set_entry_point(decide)workflow.add_conditional_edges(decide,route_after_decide)workflow.add_edge(search,answer)workflow.add_edge(answer,check)workflow.add_conditional_edges(check,route_after_check)# 5. 编译并运行appworkflow.compile()resultapp.invoke({question:什么是RAG检索增强生成技术,search_results:[],answer:,needs_search:False,quality_ok:False,retry_count:0,})print(f回答:{result[answer]})print(f搜索次数:{len(result.get(search_results,[]))})print(f重试次数:{result.get(retry_count,0)})这个工作流的流程是。先判断要不要搜索要搜就搜搜完生成回答。不要搜就直接生成回答。生成后检查质量不行就重来。编译和运行图构建好了以后需要编译才能运行。编译会做一些优化和验证。appworkflow.compile()运行有两种方式。invoke是同步运行等全部执行完返回最终状态。resultapp.invoke(initial_state)stream是流式运行每执行一个节点就返回一次中间状态。适合前端展示执行进度。foreventinapp.stream(initial_state):print(event)几个实用技巧限制循环次数。条件边可能导致无限循环。在状态里加一个计数器超过次数就强制结束。defroute_after_check(state:WorkState)-str:ifstate[quality_ok]orstate.get(retry_count,0)3:returnENDreturnanswer用Annotated减少代码。如果状态字段是列表每次都要手动拼接。用Annotated和reducer可以简化。fromtypingimportAnnotatedfromlanggraph.graph.messageimportadd_messagesclassState(TypedDict):messages:Annotated[list,add_messages]# 自动追加而不是覆盖保存中间状态。用stream可以看到每一步的中间状态方便调试。下一篇讲状态管理实战。在多轮交互中怎么维护Agent的状态怎么处理复杂的对话上下文。
RELATED

相关推荐

深度学习中的StepLR学习率调度策略详解

深度学习中的StepLR学习率调度策略详解

1. 为什么需要学习率调度策略在深度学习模型训练过程中,学习率(learning rate)是最关键的超参数之一。它决定了模型参数在每次迭代中更新的幅度大小。固定学习率训练往往会遇到两个典型问题:训练初期:过大的学习率可能导致损失函数在最优解附…

📅 2026/10/7 7:49:26
2026年Kubernetes高频面试题解析与实战技巧

2026年Kubernetes高频面试题解析与实战技巧

1. Kubernetes面试题分类汇总:2026年最新高频考点解析 作为容器编排领域的事实标准,Kubernetes在2026年依然是企业技术架构的核心组件。根据近三个月对一线大厂技术面试的跟踪统计,Kubernetes相关问题的出现频率在云计算岗位中高达87%&#x…

📅 2026/10/9 2:19:15
免费AI视频增强神器:Video2X终极使用指南,让模糊视频秒变高清

免费AI视频增强神器:Video2X终极使用指南,让模糊视频秒变高清

免费AI视频增强神器:Video2X终极使用指南,让模糊视频秒变高清 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub…

📅 2026/10/15 13:29:52
MORE NEWS

更多资讯

📰

零售平台对比:五类渠道全成本、获客与现金流选型指南

1. 把零售平台对比当成一门必修课,是我踩过坑之后才想明白的事零售平台对比这件事,我一开始也觉得很虚。开个店、上个架、接个单,能有多复杂?直到我第一次把同一批货铺到三个不同类型的渠道上,月底对账发现毛利被啃掉了…

📰

caveman:零依赖、零构建的极简静态站点方案实践

我最近把自己一个小落地页项目从头重写了一遍,把能拆的依赖全拆掉,越用越顺手,就给它起了个名字叫caveman。这个名字有两层意思:一是整个项目像穴居人一样原始,二也是提醒自己,很多页面根本不需要被现代前端…

📰

impeccable:AI编程代理时代的前端设计质量自动化检查工具

1. 从"impeccable"这个词说起:一个被低估的前端质量信号第一次看到"impeccable"作为项目名,我下意识去查了这个词的本义——"无可挑剔的、零瑕疵的"。放在前端开发语境里,这个词其实非常精准地指向了一类长期被…

📰

神经群体几何学:高维神经数据的低维解析与应用

1. 神经群体几何学研究概述神经群体几何学是近年来神经科学领域兴起的一个重要研究方向,它通过数学中的几何学方法来描述和分析神经群体活动的结构和动态。这项研究将高维神经活动数据映射到低维空间,使我们能够直观地理解神经群体编码和处理信息的机制。…

📰

动态规划解决洛谷P13658扒手问题

1. 项目概述"洛谷 P13658 [CERC 2020] Pickpockets"是一道来自2020年Central Europe Regional Contest(中欧区域赛)的编程竞赛题目,目前在洛谷在线评测平台上编号为P13658。这道题目属于算法竞赛中的动态规划类问题,考察…

📰

AI写前端代码质量怎么保证?impeccable工具CLI与浏览器扩展实战解析

1. 从"impeccable"这个词说起:一个被低估的前端质量信号第一次看到"impeccable"作为项目名,我下意识觉得这又是一个玩概念的工具。毕竟现在前端圈子里,名字起得漂亮、实际跑起来一塌糊涂的项目太多了。但把相关热搜词摊开…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬