当前位置: 首页 > article >正文

LangGraph 核心概念

LangGraph是LangChain 生态的 “进阶编排框架”是 AgentExecutor升级版基于图结构解决复杂工作流 / 多智能体问题兼容 LangChain 所有组件。AgentExecutor 是「单智能体固定循环执行器」适合简单线性任务LangGraph 是「多步骤 / 多智能体图状编排框架」适合复杂分支 / 协作任务LangGraph的特性图结构每个任务步骤是「节点」步骤间的跳转规则是「边」支持 if/else 分支、循环、并行执行状态管理全局维护一个 “状态State”所有节点可读写状态解决 AgentExecutor 上下文传递不灵活的问题多智能体协作轻松实现 “分工协作”如 “分析师智能体→审核智能体→总结智能体”持久化与中断恢复支持暂停 / 恢复工作流甚至重启后继续执行AgentExecutor 中断即从头再来兼容 LangChain 生态可直接复用 LangChain 的 LLM、Tool、Prompt 等组件。LangChain AgentExecutor和LangGraph 核心区别维度LangChain AgentExecutorLangGraph核心定位单智能体「思考 - 行动」循环的执行引擎复杂工作流 / 多智能体的编排框架执行逻辑固定循环思考→行动→反馈→思考单一路径图结构节点步骤 边跳转规则支持分支 / 并行 / 多智能体状态管理简单上下文依赖 Memory无全局状态全局可读写的 State所有节点共享 / 修改状态复杂度支持适合单工具 / 少步骤的简单任务如查天气 推荐景点适合多分支 / 多智能体 / 长流程如财报分析→风险审核→报告生成灵活性低循环逻辑固定仅能通过参数如 max_iterations微调高自定义节点跳转规则支持动态分支、条件判断多智能体支持弱仅能单智能体执行强原生支持多智能体分工、通信、协作持久化 / 中断恢复无中断后需重新执行有支持 checkpoint可暂停 / 恢复工作流学习 / 使用成本低几行代码即可跑通中高需理解图结构、状态定义、节点跳转典型场景单智能体 少工具的简单任务如查快递、计算器多步骤分支任务如 “用户提问→判断语种→对应翻译→审核”、多智能体协作如 “研究员 分析师 总结员”代码示例智能旅游助手-LangGraph 实现版填写api_key可直接运行# 安装依赖新增langgraph # pip install langchain langchain_community jwt python-dotenv langgraph import os # 第一步添加密钥配置 import warnings # 1. 屏蔽残留的警告双重保障 warnings.filterwarnings(ignore, categoryUserWarning, modulejwt) # 2. 设置LangGraph的安全密钥32字节符合SHA256要求 os.environ[LANGGRAPH_SECRET_KEY] your_secure_32bytes_key_here12345678 # 必须32位以上 from dotenv import load_dotenv from typing import TypedDict, Annotated import operator # 1. 导入核心模块LangGraph LangChain 生态复用 from langchain_community.chat_models import ChatZhipuAI from langchain_openai import ChatOpenAI from langchain_core.tools import Tool from langgraph.graph import StateGraph, END from langgraph.prebuilt import ToolNode # llm解析 from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import JsonOutputParser from langchain_core.exceptions import OutputParserException # 2. 加载环境变量 初始化LLM load_dotenv() llm ChatZhipuAI( modelglm-4, temperature0.3, api_key自己的api_key ) # 3. 定义工具复用原AgentExecutor的工具逻辑 # 工具1天气查询 def get_weather(city: str, date: str) - str: weather_data { 北京-2026-03-18: 晴10-22℃微风, 上海-2026-03-18: 多云12-20℃东风3级 } key f{city}-{date} return weather_data.get(key, f未查询到{city}{date}的天气信息) # 工具2景点推荐 def recommend_scenic_spots(city: str, weather: str) - str: if 晴 in weather: return f{city}晴天推荐故宫、颐和园、天安门广场 elif 雨 in weather: return f{city}雨天推荐国家博物馆、中国科技馆 else: return f{city}多云推荐什刹海、南锣鼓巷 # 工具3机票查询 def check_flight(from_city: str, to_city: str, date: str) - str: flight_data { 上海-北京-2026-03-18: 上海→北京2026-03-18\n1. 东航MU510108:00-10:30800元\n2. 国航CA150214:00-16:40750元 } key f{from_city}-{to_city}-{date} return flight_data.get(key, f未查询到{from_city}→{to_city}{date}的机票信息) # 封装工具列表LangGraph可直接复用LangChain Tool tools [ Tool( nameWeatherQuery, funcget_weather, description查询指定城市指定日期的天气参数city城市、dateYYYY-MM-DD ), Tool( nameScenicSpotRecommendation, funcrecommend_scenic_spots, description根据城市天气推荐景点参数city城市、weather天气描述 ), Tool( nameFlightQuery, funccheck_flight, description查询机票参数from_city出发地、to_city目的地、dateYYYY-MM-DD ) ] tool_node ToolNode(tools) # LangGraph工具执行节点 # 4. 定义全局状态核心替代AgentExecutor的Memory # 所有节点可读写该状态实现上下文共享 class TravelState(TypedDict): user_input: str # 用户原始输入 city: str # 目的地城市 date: str 2026-03-18 # 默认日期 from_city: str # 出发城市机票用 weather: str # 天气结果 spots: str # 景点结果 flight: str # 机票结果 next_step: str # 下一步执行的节点 final_answer: str # 最终回答 # 定义默认值字典集中管理方便修改 TRAVEL_STATE_DEFAULTS { city: , date: 2026-03-18, from_city: , weather: , spots: , flight: , next_step: , final_answer: } # llm解析state def llm_parse(user_input: str) - TravelState: # -------------------------- # 关键用PromptLLM提取关键信息 # -------------------------- # 定义Prompt模板明确要求LLM输出JSON格式 prompt ChatPromptTemplate.from_messages([ (system, 你是一个旅游信息提取助手需要从用户输入中提取以下信息输出JSON格式 1. from_city出发城市如无则为空字符串 2. city目的地城市如无则为空字符串 3. date出行日期格式YYYY-MM-DD如无则用默认值2026-03-18 注意 - 只输出JSON不要加任何额外解释 - 日期尽量从用户输入中提取比如明天对应2026-03-18后天对应2026-03-19 - 城市名必须是完整名称如上海而非沪 ), (user, 用户输入{user_input}) ]) # 创建JSON解析器 parser JsonOutputParser() # 组装ChainPrompt LLM 解析器 extract_chain prompt | llm | parser state: TravelState {user_input: user_input} try: # 调用LLM提取信息 extracted_info extract_chain.invoke({user_input: user_input}) # 将提取的信息赋值到State覆盖默认值 if extracted_info.get(from_city): state[from_city] extracted_info[from_city] if extracted_info.get(city): state[city] extracted_info[city] if extracted_info.get(date): state[date] extracted_info[date] except OutputParserException as e: # 解析失败时用默认值兜底 print(fLLM输出解析失败{e}使用默认值) except Exception as e: print(fLLM调用失败{e}使用默认值) return state # 5. 定义核心节点每个节点对应一个步骤替代Agent的“思考” # 节点1解析用户输入提取关键信息 def parse_input(state: TravelState) - TravelState: user_input state[user_input] state llm_parse(user_input) state[next_step] get_weather # 解析后下一步查天气 return state # 节点2查询天气 def get_weather_node(state: TravelState) - TravelState: city state[city] date state[date] state[weather] get_weather(city, date) state[next_step] recommend_spots # 下一步推荐景点 return state # 节点3推荐景点 def recommend_spots_node(state: TravelState) - TravelState: city state[city] weather state[weather] state[spots] recommend_scenic_spots(city, weather) # 分支逻辑有出发城市则查机票否则直接生成答案 if state[from_city]: state[next_step] check_flight else: state[next_step] generate_answer return state # 节点4查询机票 def check_flight_node(state: TravelState) - TravelState: from_city state[from_city] to_city state[city] date state[date] state[flight] check_flight(from_city, to_city, date) state[next_step] generate_answer # 下一步生成最终答案 return state # 节点5生成最终回答 def generate_answer_node(state: TravelState) - TravelState: weather state[weather] spots state[spots] flight state[flight] # 整合结果 final_answer f你的旅行建议\n1. 天气{weather}\n2. 景点{spots} if flight: final_answer f\n3. 机票{flight} state[final_answer] final_answer state[next_step] END # 结束流程 return state # 6. 定义节点跳转逻辑替代AgentExecutor的固定循环 def get_next_node(state: TravelState): return state[next_step] # 7. 构建LangGraph图核心节点边 graph_builder StateGraph(TravelState) # 添加节点每个步骤对应一个节点 graph_builder.add_node(parse_input, parse_input) graph_builder.add_node(get_weather, get_weather_node) graph_builder.add_node(recommend_spots, recommend_spots_node) graph_builder.add_node(check_flight, check_flight_node) graph_builder.add_node(generate_answer, generate_answer_node) # 设置起始节点 graph_builder.set_entry_point(parse_input) # 添加边自定义跳转规则 # 方式1固定边解析→查天气→推荐景点 graph_builder.add_edge(parse_input, get_weather) graph_builder.add_edge(get_weather, recommend_spots) # 方式2条件边推荐景点后根据状态跳转到机票/生成答案 graph_builder.add_conditional_edges( recommend_spots, get_next_node, # 跳转规则函数 { check_flight: check_flight, generate_answer: generate_answer } ) graph_builder.add_edge(check_flight, generate_answer) graph_builder.add_edge(generate_answer, END) # 生成答案后结束 # 8. 编译并运行图 app graph_builder.compile() # 测试运行 if __name__ __main__: # 输入包含机票的综合需求 input_state { user_input: 我明天从上海飞北京玩推荐适合的景点并查一下机票 } # 运行图LangGraph核心调用方式 result app.invoke(input_state) print( LangGraph 运行结果 ) print(result[final_answer])运行结果 LangGraph 运行结果 你的旅行建议 1. 天气晴10-22℃微风 2. 景点北京晴天推荐故宫、颐和园、天安门广场 3. 机票上海→北京2026-03-18 1. 东航MU510108:00-10:30800元 2. 国航CA150214:00-16:40750元图AgentExecutor和LangGraph实现差异维度AgentExecutor 版本LangGraph 版本核心载体Agent决策AgentExecutor执行循环State全局状态Node步骤Graph编排逻辑组织靠 Prompt 让 Agent 决策 “调用哪个工具”逻辑耦合在 Prompt 中拆分为独立节点解析→查天气→推荐景点→查机票逻辑分散在节点函数更易维护分支控制靠 Agent 思考实现分支需在 Prompt 中写规则调试困难用add_conditional_edges显式定义分支规则可视化、易调试上下文管理依赖Memory仅能保存对话历史无法灵活读写多维度数据全局TravelState所有节点可读写城市、日期、天气等任意字段灵活度拉满AgentExecutor实现用户输入 → Agent 思考“先查天气” → Executor 调用天气工具 → Agent 思考“再推荐景点” → Executor 调用景点工具 → Agent 思考“再查机票” → Executor 调用机票工具 → Agent 整合结果 → Executor 返回答案。核心Agent 主导决策Executor 仅负责 “执行调用”逻辑黑盒化靠 Prompt 控制。LangGraph实现用户输入 → parse_input 节点解析信息→ get_weather 节点查天气→ recommend_spots 节点推荐景点→ 条件判断有出发城市→check_flight 节点→generate_answer 节点 | 无→直接 generate_answer 节点→ 结束。核心开发者主导定义节点和跳转规则逻辑白盒化代码显式控制。若增加功能二者差异扩展需求AgentExecutor 实现难度LangGraph 实现难度新增 “酒店查询” 步骤需修改 Prompt让 Agent 决策 “何时调用酒店工具”易影响原有逻辑新增check_hotel节点修改跳转规则即可无侵入调整分支逻辑如 “雨天不查机票”需修改 Prompt 规则调试需反复运行看 Agent 决策结果修改recommend_spots_node中的分支判断逻辑直接、可控多智能体协作如 “景点推荐交给专门智能体”极难需自定义 Agent 通信逻辑新增 “景点推荐智能体节点”直接替换原有recommend_spots_node即可适用场景总结AgentExecutor 适用场景简单线性任务≤3 个工具、快速落地、不想写复杂代码核心优势代码少、学习成本低靠 Prompt 快速实现 “思考 - 行动” 循环。LangGraph 适用场景复杂分支逻辑、多步骤任务、多智能体协作、需要显式控制执行流程核心优势逻辑解耦、可视化、易扩展、可维护性高适合生产级复杂应用。

相关文章:

LangGraph 核心概念

LangGraph是LangChain 生态的 “进阶编排框架”,是 AgentExecutor升级版,基于图结构解决复杂工作流 / 多智能体问题,兼容 LangChain 所有组件。AgentExecutor 是「单智能体固定循环执行器」,适合简单线性任务;LangGrap…...

零基础搭建免费IP代理池:从原理到实战的保姆级指南

在数据驱动型业务中,很多企业都会接触到“IP代理池”这一概念。尤其是在进行公开数据整合、市场信息监测等场景时,单一IP往往难以支撑持续稳定的请求需求,这时代理池就成为重要基础设施。但对于初学者来说,“搭建代理池”听起来复…...

努力学习了一辈子,突然发现学习没什么用了

从小,我是众人眼中的 “学习标兵”。到现在,每天一节法语,一篇英语阅读,依然雷打不动:但最近几个月,随着老杨的“眨眼猫会务智能体”中对报名、签到、查座、AI会务助理的全面 “AI化改造”,老杨…...

大模型的那点事儿

大模型参数调优完全指南:从模型选择到参数配置 作者:虾兵一号 发布时间:2026-03-17 关键词:大模型参数、模型选择、Temperature、Top P、推理参数、LLM调优 一、前言 在使用大模型 API 时,两个问题最让人头疼&#xf…...

python-web自动化-selenium(1)

目录 资源 驱动器下载流程 设置、创建启动浏览器 设置浏览器Options() 创建启动浏览器webdriver.Chrome() 完整代码 打开网页,关闭标签页,关闭浏览器 打开网址get() 关闭当前标签页close() 完整代码 最大化最小化 最大化maximize_window() 最…...

AI智能水库图像识别数据集 水面漂浮物识别 水面分割识别 河道护栏分割数据集 YOLO格式数据集第10573期

数据集文档数据集概览 本数据集为实例分割场景专用数据集,聚焦于水处理场景下的关键目标识别与分割任务,为工业视觉算法提供高质量标注数据支撑。项目内容类别数量及中文名称4类:水面、粗格栅1、粗格栅2、悬浮物数据总量100张数据集格式YOLO核…...

关于密码破解的方式

当重启虚拟机或者开启虚拟机时,当界面跳出时,快速将鼠标点进虚拟机中,按向下或者向上箭头防止界面跳转,并按如下步骤进行:1 在界面中选择第二个选项2 按e键进入如下界面,按向下向上键将光标移动到quiet单词后面&#x…...

SAP 系统配置、落地即用的《SAP 成本分摊循环配置清单》,包含事务码、主数据、循环结构、分配 / 分摊规则、计算公式、案例数据

SAP 系统配置、落地即用的《SAP 成本分摊循环配置清单》,包含事务码、主数据、循环结构、分配 / 分摊规则、计算公式、案例数据一、通用主数据(所有案例共用,先建好)1. 成本中心(标准示例)成本中心名称类型…...

基于MATLAB_SIMULINK_SIMSCAPE建模的用于组件尺寸的电动和混合动力飞机模型

基于MATLAB/SIMULINK/SIMSCAPE建模的用于组件尺寸的电动和混合动力飞机模型第一步:主脚本 (AircraftSizingMain.m) 在 MATLAB 中运行此脚本,它将定义参数并启动仿真。 matlab 编辑 1%% Aircraft Component Sizing Simulation Script 2% 适用于电动 (AE) …...

C 语言03:结构体——自定义数据类型的万能基石

结构体(struct)是 C 语言的核心自定义数据类型,用于将不同类型的数据(如姓名、年龄、日期)打包成一个整体,极大简化了复杂数据的管理。本文从定义到使用,极简解析结构体的核心用法。一、结构体类…...

SAP 成本分摊逻辑与案例(含具体数据)

SAP 成本分摊核心是通过 ** 分配(Allocation)与分摊(Assessment)** 两种循环,将间接成本中心归集的费用,按预设规则(统计指标、比例、作业量等)结转至直接成本中心、生产订单、内部订…...

C语言当中的字符函数

字符分类函数可以很好的帮助我们进行字符的分类其中头文件为<ctype.h>现在举个列子&#xff0c;进行大小写转换islower运用函数的代码int i0&#xff1b;char str【】“CBASJDHsfjaf”&#xff1b;char c;while(str[i]){cstr[i];if(islower(c))c-32;putchar(c)i;}远高于平…...

思特威SC1220IOT——为AI眼镜量身打造的超低功耗影像之心

导读: 随着AI大模型向端侧迁移,AI智能眼镜被视为继智能手机之后最具潜力的下一代个人计算平台。然而,要在极其有限的轻量化镜架中塞进高性能的“眼睛”,同时保证全天候续航与即时响应,对核心的CMOS图像传感器提出了严苛挑战。近日,国内技术先进的CMOS图像传感器供应商思特…...

算法设计与分析-习题8.3

目录 1.完成本节构造最优二叉查找树的例题中余下的计算。 2. a.算法OptimalBST的时间效率为什么是立方级的? b.算法 OptimalBST 的空间效率为什么是平方级的? 3.写一个线性时间算法的伪代码&#xff0c;来从根表中生成最优二叉查找树。 4.请设计一种在常量时间(每个求和…...

把数据交给松鼠,把安全留给自己(二):异地同步——把第二份数据放在灾害够不到的地方

2021年郑州暴雨&#xff0c;某科技公司办公室进水&#xff0c;服务器和放在同一房间的备份硬盘一起泡水&#xff0c;十年积累的研发数据全部损毁。 这不是孤例&#xff0c;而是无数中小企业灾备盲区的真实写照。 火灾、水灾、盗窃、雷击……这些“小概率”事件&#xff0c;一旦…...

【RaddbitMQ 概述】消息中间件核心概念

文章目录1. 前言2. 什么是 MQ2.1 同步通信2.2 异步通信3. MQ 的作用3.1 异步解耦3.2 流量削峰3.3 消息分发3.4 延迟通知4. 为什么选择 RabbitMQ4.1 Kafka4.2 RocketMQ4.3 RabbitMQ5. RabbitMQ介绍1. 前言 Rabbit&#xff0c;兔子的意思。 互联网行业很多公司&#xff0c;都喜…...

前端构建部署优化

前端构建部署优化&#xff1a;提升效率的关键策略 在当今快节奏的互联网开发中&#xff0c;前端构建和部署的效率直接影响产品的迭代速度和用户体验。随着项目规模扩大&#xff0c;构建时间变长、资源加载缓慢等问题逐渐凸显。如何通过优化手段提升构建部署效率&#xff0c;成…...

手把手教你部署Fun-ASR语音识别:Web界面操作,小白也能快速上手

手把手教你部署Fun-ASR语音识别&#xff1a;Web界面操作&#xff0c;小白也能快速上手 1. 引言 1.1 学习目标 今天咱们来聊聊一个特别实用的工具——Fun-ASR语音识别模型。你可能听说过语音识别&#xff0c;但总觉得这东西离自己很远&#xff0c;要么需要复杂的编程&#xf…...

LiuJuan20260223Zimage效果可视化:生成图分辨率、细节还原度、风格一致性实测报告

LiuJuan20260223Zimage效果可视化&#xff1a;生成图分辨率、细节还原度、风格一致性实测报告 1. 引言&#xff1a;当AI画笔遇见特定风格 你有没有想过&#xff0c;让AI帮你生成特定人物的图片&#xff0c;而且每次生成的效果都高度一致&#xff1f;这听起来像是为设计师或内…...

MySQL Explain 执行计划性能优化

MySQL Explain执行计划性能优化实战指南 在数据库性能优化中&#xff0c;MySQL的Explain执行计划分析是定位SQL性能瓶颈的核心工具。通过解析Explain输出的关键字段&#xff0c;开发者可以快速发现索引失效、全表扫描等问题&#xff0c;从而针对性优化查询效率。本文将深入剖析…...

程序员常见的职业病与预防

程序员职业病与科学预防指南 在数字化浪潮中&#xff0c;程序员成为推动技术进步的核心力量&#xff0c;但长期伏案、高强度用脑的工作模式也带来了独特的健康隐患。从颈椎劳损到用眼过度&#xff0c;这些"职业病"不仅影响工作效率&#xff0c;更可能造成不可逆的身…...

Stable Diffusion v1.5 在内容创作中的应用:快速生成文章插图与创意配图

Stable Diffusion v1.5 在内容创作中的应用&#xff1a;快速生成文章插图与创意配图 如果你是一名内容创作者&#xff0c;无论是写公众号、做视频、发小红书还是维护技术博客&#xff0c;你一定遇到过这样的烦恼&#xff1a;文章写好了&#xff0c;视频脚本完成了&#xff0c;…...

PROJECT MOGFACE跨平台文档生成:替代Typora的智能Markdown写作体验

PROJECT MOGFACE跨平台文档生成&#xff1a;替代Typora的智能Markdown写作体验 如果你和我一样&#xff0c;是个重度Markdown用户&#xff0c;每天都要和文档打交道&#xff0c;那你肯定对Typora不陌生。它简洁、实时预览&#xff0c;一度是很多人的写作首选。但不知道你有没有…...

圣女司幼幽-造相Z-Turbo保姆级教程:cat日志定位问题+Gradio端口映射调试

圣女司幼幽-造相Z-Turbo保姆级教程&#xff1a;cat日志定位问题Gradio端口映射调试 1. 快速了解圣女司幼幽-造相Z-Turbo 圣女司幼幽-造相Z-Turbo是一个专门生成《牧神记》中圣女司幼幽角色图片的AI模型。这个模型基于Z-Image-Turbo的LoRA版本训练而成&#xff0c;能够根据文字…...

GLM-4v-9b多场景落地:教培机构用4090实现课件截图→知识点打标+习题生成

GLM-4v-9b多场景落地&#xff1a;教培机构用4090实现课件截图→知识点打标习题生成 1. 引言&#xff1a;当AI老师走进课堂 想象一下这个场景&#xff1a;一位数学老师刚上完一节关于“二次函数”的课&#xff0c;他手头有几十张课件截图。过去&#xff0c;他需要花一两个小时…...

数据库运维最佳实践

数据库运维最佳实践&#xff1a;保障数据安全与高效运行 在数字化时代&#xff0c;数据库作为企业核心数据的存储和管理平台&#xff0c;其稳定性和安全性直接影响业务连续性。高效的数据库运维不仅能提升系统性能&#xff0c;还能降低故障风险。本文将介绍数据库运维中的关键…...

从零搭建ComfyUI:硬件选型、环境部署与工作流优化实战

1. ComfyUI入门&#xff1a;为什么选择节点式工作流&#xff1f; 第一次打开ComfyUI时&#xff0c;那种密密麻麻的节点连线界面确实容易让人发懵——这和我熟悉的WebUI差别太大了&#xff01;但用惯之后才发现&#xff0c;这种看似复杂的设计才是真正的生产力工具。就像从Windo…...

Qwen2-VL-2B-Instruct压力测试与性能基准报告

Qwen2-VL-2B-Instruct压力测试与性能基准报告 最近在星图GPU平台上部署了Qwen2-VL-2B-Instruct模型&#xff0c;准备用它来处理一些图文对话任务。部署过程挺顺利&#xff0c;但心里一直有个疑问&#xff1a;这个服务到底能扛住多大的压力&#xff1f;如果同时有很多用户上传图…...

【HBuilderX】快速解决SCSS/Sass预编译错误:插件安装与配置全指南

1. 遇到SCSS/Sass预编译错误怎么办&#xff1f; 第一次在HBuilderX里看到"预编译器错误&#xff1a;代码使用了scss/sass语言&#xff0c;但未安装相应的编译器插件"这个提示时&#xff0c;我也是一头雾水。明明代码在别的编辑器里运行得好好的&#xff0c;怎么到这里…...

一人能顶一支团队?阿里发布全球首个企业级Agent平台“悟空”

3月17日&#xff0c;阿里巴巴发布全球首个企业级AI原生工作平台——“悟空”&#xff0c;让每个团队、每家公司&#xff0c;都能拥有一支24h工作的“龙虾军团”。悟空是一款独立应用&#xff0c;即日起开启邀测&#xff0c;也将直接内置到超2000万企业组织的钉钉之中。拥有8亿用…...