在AI智能体Agent技术快速迭代的今天单一的“检索生成”模式已难以满足企业级复杂任务的落地需求——当智能体需要处理多步骤推理、多工具串联调用、动态决策等场景时“思考流程混乱、行动不可控、调试难度大”等问题便会凸显。而LangGraph作为LangChain团队推出的专用推理框架以状态机为核心聚焦复杂AI Agent推理流程的编排让智能体的思考和行动更有序、更可控成为工业级智能体落地的“核心引擎”。本文将从核心定位、技术原理、核心功能、实操示例、优缺点及适用场景六大维度全方位拆解LangGraph帮你彻底掌握这一框架的核心逻辑无论是学习、开发还是面试都能直接复用知识点。一、核心定位LangGraph的核心定位是基于状态机State Machine构建可控制、可调试、可循环的复杂AI Agent推理流程。与LlamaIndex专注检索增强、AutoGen专注多智能体协作不同LangGraph的核心价值的是“优化单个智能体的推理过程”——它不负责数据检索可无缝对接LlamaIndex也不负责多智能体分工可对接AutoGen而是专注于让智能体“学会有序思考、高效行动”。简单来说LangGraph通过“节点Node 边Edge”的状态机结构将智能体的“思考、行动、观察”等步骤进行结构化编排支持循环执行、分支判断和状态管理让智能体能处理多步骤、高复杂度的任务真正实现从“简单响应”到“复杂推理”的跨越满足工业级落地的需求。二、核心技术原理LangGraph的核心技术围绕“状态机驱动的推理流程”展开核心逻辑是将智能体的推理过程拆解为“思考、行动、观察”等独立步骤抽象为节点再定义步骤之间的流转规则抽象为边通过状态层存储推理过程中的所有信息实现步骤的循环执行、分支判断最终构建出可控、可追溯的复杂推理流程。其底层架构分为“状态层、节点层、边层、执行层”四层每层各司其职、协同工作具体拆解如下2.1 状态层State Layer—— 智能体的“记忆中枢”状态层是LangGraph的核心相当于智能体的“大脑记忆”负责存储推理过程中的所有信息确保流程的连贯性和可追溯性解决了传统智能体“健忘、上下文断裂”的痛点。核心概念State状态定义一个结构化的字典或自定义类包含智能体推理过程中需要用到的所有数据字段可根据业务需求灵活自定义。常用字段示例input用户的原始问题如“查询上海2025年3月15日的天气并生成简报”thought智能体的思考过程如“我需要先调用天气工具获取数据再整理成简报”action智能体的行动指令如工具调用参数、操作步骤observation行动的反馈结果如天气工具返回的“阴转小雨8℃~12℃”history多轮对话/推理历史确保上下文连贯done任务完成标识True/False用于判断推理流程是否终止。核心优势状态可实时更新、可回溯所有节点共享同一状态确保多步骤之间的数据传递无误避免重复推理或上下文断裂。状态更新机制每个节点执行完成后会返回一个更新后的状态覆盖原有的状态确保下一个节点能获取到最新的推理信息形成“状态流转闭环”。2.2 节点层Node Layer—— 智能体的“思考和行动单元”节点是LangGraph中最基础的执行单元每个节点对应智能体的一个“思考或行动步骤”相当于智能体的“一个个具体动作”。节点分为“普通节点”和“条件节点”两种类型可灵活组合实现复杂推理逻辑。普通节点Action Node功能执行具体的操作输入是当前状态输出是更新后的状态是推理流程的核心执行单元。常用普通节点示例Thought Node思考节点分析当前状态决定下一步行动比如判断“是否需要调用工具”“调用哪个工具”Action Node行动节点执行具体行动比如调用天气API、SQL工具、代码解释器等Observation Node观察节点处理行动的反馈结果将工具返回的数据整理后更新到状态中Answer Node回答节点基于最终状态生成用户可理解的自然语言回答。自定义节点开发者可根据业务需求自定义节点逻辑比如添加“反思节点”校验推理结果是否正确、“校验节点”判断工具调用是否成功灵活扩展推理能力。条件节点Conditional Node功能负责“分支判断”根据当前状态的具体情况决定下一步执行哪个节点实现推理流程的灵活跳转。典型示例条件节点判断“任务是否完成done是否为True”——若doneTrue跳转至Answer Node生成回答若doneFalse跳转至Thought Node继续思考形成循环。2.3 边层Edge Layer—— 智能体的“流程流转规则”边是节点之间的“流转关系”定义了“一个节点执行完成后下一步该执行哪个节点”相当于智能体的“行动路线图”。边分为“固定边”和“条件边”两种适配不同的流转场景。固定边无需判断固定从一个节点跳转至另一个节点。例如Action Node行动节点执行完成后固定跳转至Observation Node观察节点处理行动结果。条件边结合条件节点根据当前状态的不同跳转至不同的节点。例如条件节点判断“工具调用是否成功”——若成功跳转至Observation Node若失败跳转至Thought Node重新思考并尝试调用工具实现“自我纠错”。2.4 执行层Execution Layer—— 智能体的“流程驱动引擎”执行层是LangGraph的“动力核心”负责驱动整个推理流程的运行确保节点按边的流转规则有序执行直到满足终止条件doneTrue输出最终结果。核心特性1循环执行支持节点的循环执行完美适配ReAct推理框架思考→行动→观察→思考→行动→……直到任务完成解决了传统智能体“无法处理多步骤循环”的痛点。核心特性2可视化调试支持将推理流程节点边可视化可实时查看每个节点的执行过程、状态变化便于开发者排查问题、优化推理逻辑——这是LangGraph最核心的优势之一也是工业级落地的关键保障。核心特性3多流程编排可灵活编排复杂的推理流程比如“Planning任务拆解→ReAct执行子任务→Reflection反思校验→生成回答”满足多步骤、高复杂度任务的需求。三、核心功能总结LangGraph的功能围绕“复杂推理流程编排”展开覆盖推理、调试、扩展等全场景核心功能可总结为8点兼顾实用性和扩展性状态机驱动基于状态机构建推理流程状态可实时更新、可回溯确保流程连贯性和可追溯性。节点与边灵活定义支持自定义普通节点、条件节点固定边、条件边可编排任意复杂的推理流程适配不同业务场景。支持核心推理框架完美适配ReAct、Reflection、Planning三大推理框架可轻松实现“思考→行动→观察”循环、自我纠错、任务拆解。循环执行与分支判断支持节点循环执行可根据状态进行分支跳转轻松处理多步骤、动态决策类任务。可视化调试可将推理流程可视化查看每个节点的执行过程和状态变化降低调试难度提升开发效率。工具调用集成无缝集成LangChain的工具调用组件支持调用各类工具API、数据库、计算器、代码解释器等扩展智能体的行动能力。生态兼容性好完美兼容LangChain、LlamaIndex、AutoGen三大框架可对接LlamaIndex实现检索增强对接AutoGen实现多智能体协作灵活嵌入复杂智能体系统。工业级稳定支持日志监控、异常处理、状态持久化可满足企业级智能体的高可用需求适配生产环境部署。四、实操示例本次示例基于LangGraph实现一个“ReAct推理框架的天气查询智能体”功能接收用户天气查询需求→思考需调用的工具→调用天气工具→处理结果→生成回答全程实现循环执行和状态管理可直接复制运行。4.1 前提准备安装依赖包配置OpenAI API Key可替换为开源大模型如Qwen、Llamapip install langgraph langchain langchain-openai python-dotenv4.2 完整代码from langgraph.graph import StateGraph, END from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.tools import tool from dotenv import load_dotenv import os import json # 1. 加载环境变量配置大模型 load_dotenv() llm ChatOpenAI( modelgpt-3.5-turbo, temperature0.1, api_keyos.getenv(OPENAI_API_KEY) # 替换为你的API Key ) # 2. 定义工具天气查询工具模拟真实API调用 tool def get_weather(city: str, date: str) - str: 功能查询指定城市指定日期的天气情况 参数 city: 城市名称如“北京”“上海” date: 日期格式YYYY-MM-DD如“2025-03-15” 返回天气描述字符串 # 模拟天气数据实际开发可对接真实天气API weather_data { 北京-2025-03-15: 晴-5℃~5℃微风空气质量良, 上海-2025-03-15: 阴转小雨8℃~12℃东风3级空气质量优 } key f{city}-{date} return weather_data.get(key, f未查询到{city}{date}的天气信息) # 3. 定义状态智能体的记忆包含所有推理过程中的信息 class AgentState: input: str # 用户原始问题 thought: str # 思考过程 action: dict # 工具调用指令JSON格式 observation: str # 工具调用结果 done: bool False # 是否完成任务 # 4. 定义节点思考、行动、观察、回答、条件节点 # 4.1 思考节点分析当前状态决定下一步行动 def thought_node(state: AgentState) - AgentState: prompt ChatPromptTemplate.from_messages([ (system, 你是一个天气查询智能体基于当前状态思考下一步该做什么\n 1. 如果已经获取到天气信息observation有内容则设置doneTrue准备生成回答\n 2. 如果没有获取到天气信息需要调用get_weather工具明确传入city和date参数\n 3. 思考过程要清晰明确说明下一步行动。), (user, 用户问题{input}\n当前观察结果{observation}) ]) chain prompt | llm response chain.invoke({input: state.input, observation: state.observation}) return AgentState( inputstate.input, thoughtresponse.content, actionstate.action, observationstate.observation, donestate.done ) # 4.2 行动节点生成工具调用指令并执行 def action_node(state: AgentState) - AgentState: prompt ChatPromptTemplate.from_messages([ (system, 基于当前思考过程生成get_weather工具的调用指令格式为JSON\n {name: get_weather, parameters: {city: 城市名, date: 日期}}), (user, 思考过程{thought}\n用户问题{input}) ]) chain prompt | llm response chain.invoke({thought: state.thought, input: state.input}) # 解析工具调用指令实际开发可增加异常处理 action json.loads(response.content.strip()) return AgentState( inputstate.input, thoughtstate.thought, actionaction, observationstate.observation, donestate.done ) # 4.3 观察节点处理工具调用结果更新状态 def observation_node(state: AgentState) - AgentState: action state.action if action[name] get_weather: # 执行工具调用 observation get_weather(** action[parameters]) return AgentState( inputstate.input, thoughtstate.thought, actionstate.action, observationobservation, donestate.done ) else: return AgentState( inputstate.input, thoughtstate.thought, actionstate.action, observation工具调用失败未找到对应工具, donestate.done ) # 4.4 回答节点生成最终自然语言回答 def answer_node(state: AgentState) - AgentState: prompt ChatPromptTemplate.from_messages([ (system, 基于用户问题和工具调用结果生成自然、清晰的回答不要添加额外信息。), (user, 用户问题{input}\n工具调用结果{observation}) ]) chain prompt | llm response chain.invoke({input: state.input, observation: state.observation}) # 将回答存入thought字段简化处理实际可自定义字段 return AgentState( inputstate.input, thoughtresponse.content, actionstate.action, observationstate.observation, doneTrue ) # 4.5 条件节点判断任务是否完成决定跳转方向 def conditional_node(state: AgentState) - str: if state.done: return answer # 任务完成跳转至回答节点 else: return action # 任务未完成跳转至行动节点 # 5. 构建LangGraph状态机 graph StateGraph(AgentState) # 添加节点 graph.add_node(thought, thought_node) # 思考节点 graph.add_node(action, action_node) # 行动节点 graph.add_node(observation, observation_node)# 观察节点 graph.add_node(answer, answer_node) # 回答节点 # 添加边流转规则 graph.add_edge(thought, conditional_node) # 思考节点后进入条件判断 graph.add_edge(action, observation) # 行动节点后进入观察节点 graph.add_edge(observation, thought) # 观察节点后回到思考节点形成循环 graph.add_edge(answer, END) # 回答节点后流程终止 # 设置起始节点编译图 graph.set_entry_point(thought) app graph.compile() # 6. 运行智能体测试效果 user_question 查询上海2025年03月15日的天气 initial_state AgentState( inputuser_question, thought, action{}, observation, doneFalse ) # 执行推理流程获取结果 result app.invoke(initial_state) # 输出结果 print(用户问题, result.input) print(思考过程, result.thought) print(工具调用指令, result.action) print(工具调用结果, result.observation) print(最终回答, result.thought)4.3 运行结果说明1. 流程闭环程序构建了“思考→行动→观察→思考→回答”的完整闭环符合ReAct推理逻辑2. 状态管理所有推理过程思考、行动、结果都存储在状态中可实时查看和回溯3. 循环执行若工具调用失败如未查询到天气数据会重新回到思考节点调整参数后再次调用4. 可控可调试可通过可视化工具如langgraph visualize查看节点流转过程快速排查问题。五、优点与缺点LangGraph的优势和局限都非常明确精准匹配不同场景的需求以下总结可直接用于面试或技术选型5.1 优点核心优势复杂推理流程编排能力强基于状态机可灵活编排ReAct、Reflection、Planning等推理流程支持循环执行和分支判断能轻松处理多步骤、动态决策类复杂任务。可控可调试可视化调试功能可实时查看节点执行过程和状态变化大幅降低复杂智能体的调试难度适合工业级落地。状态管理完善状态层统一存储推理过程中的所有信息确保上下文连贯、可追溯解决了传统智能体“健忘”的痛点。生态兼容性好完美兼容LangChain、LlamaIndex、AutoGen三大框架可灵活组合实现“检索推理多智能体协作”的完整智能体系统。可扩展性强支持自定义节点、边和状态字段可根据业务需求扩展推理逻辑适配不同行业场景。工业级稳定支持日志监控、异常处理、状态持久化能满足企业级智能体的高可用需求可直接部署到生产环境。5.2 缺点核心局限检索能力弱自身不专注于检索增强没有完善的数据源接入和检索组件需要对接LlamaIndex等框架才能实现外部数据检索。开发门槛较高需要理解状态机、节点、边等核心概念对于新手来说上手难度比LlamaIndex轻量级检索框架高。不支持多智能体协作专注于单个智能体的推理流程无法实现多个智能体的分工协作需要对接AutoGen才能完成多智能体任务。轻量级场景适配差对于简单的智能体如普通文档问答用LangGraph会显得繁琐不如LlamaIndex轻量、易上手。六、适用场景LangGraph的核心价值是“复杂推理流程编排”适合需要多步骤推理、高可控性、工业级落地的场景具体可分为6类复杂智能体开发需要多步骤推理、多工具串联调用的智能体如企业级客服、数据分析智能体、自动化办公智能体等。工业级智能体落地需要可控、可调试、高稳定的智能体适合企业生产环境部署如工业巡检智能体、供应链调度智能体等。推理流程定制化需要自定义推理逻辑的场景如“ReActReflection结合”“Planning任务拆解多子任务执行”等。多工具串联调用需要多个工具按顺序调用的复杂任务如“查询数据→分析数据→生成报表→发送邮件”。作为推理引擎嵌入复杂系统在多智能体系统中负责单个智能体的推理流程编排与LlamaIndex检索、AutoGen多智能体协同工作。高要求智能体调试需要可视化调试、状态回溯便于排查问题的场景如复杂推理逻辑的智能体开发。七、总结LangGraph作为专注于推理流程编排的框架填补了“复杂智能体可控性不足”的空白——它不追求“大而全”而是聚焦“专而精”通过状态机驱动的节点-边结构让智能体的思考和行动更有序、更可控成为工业级智能体落地的核心引擎。在实际开发中LangGraph很少单独使用更多是与LlamaIndex负责检索、AutoGen负责多智能体协作组合形成“检索推理协作”的完整智能体系统适配更复杂的企业级需求。如果你的需求是“快速落地简单智能体”优先选择LlamaIndex如果是“实现多智能体协作”优先选择AutoGen如果是“开发复杂、可控的工业级智能体”LangGraph绝对是核心选择。
LangGraph详解:专注推理流程,让AI Agent“会思考、能落地”
在AI智能体Agent技术快速迭代的今天单一的“检索生成”模式已难以满足企业级复杂任务的落地需求——当智能体需要处理多步骤推理、多工具串联调用、动态决策等场景时“思考流程混乱、行动不可控、调试难度大”等问题便会凸显。而LangGraph作为LangChain团队推出的专用推理框架以状态机为核心聚焦复杂AI Agent推理流程的编排让智能体的思考和行动更有序、更可控成为工业级智能体落地的“核心引擎”。本文将从核心定位、技术原理、核心功能、实操示例、优缺点及适用场景六大维度全方位拆解LangGraph帮你彻底掌握这一框架的核心逻辑无论是学习、开发还是面试都能直接复用知识点。一、核心定位LangGraph的核心定位是基于状态机State Machine构建可控制、可调试、可循环的复杂AI Agent推理流程。与LlamaIndex专注检索增强、AutoGen专注多智能体协作不同LangGraph的核心价值的是“优化单个智能体的推理过程”——它不负责数据检索可无缝对接LlamaIndex也不负责多智能体分工可对接AutoGen而是专注于让智能体“学会有序思考、高效行动”。简单来说LangGraph通过“节点Node 边Edge”的状态机结构将智能体的“思考、行动、观察”等步骤进行结构化编排支持循环执行、分支判断和状态管理让智能体能处理多步骤、高复杂度的任务真正实现从“简单响应”到“复杂推理”的跨越满足工业级落地的需求。二、核心技术原理LangGraph的核心技术围绕“状态机驱动的推理流程”展开核心逻辑是将智能体的推理过程拆解为“思考、行动、观察”等独立步骤抽象为节点再定义步骤之间的流转规则抽象为边通过状态层存储推理过程中的所有信息实现步骤的循环执行、分支判断最终构建出可控、可追溯的复杂推理流程。其底层架构分为“状态层、节点层、边层、执行层”四层每层各司其职、协同工作具体拆解如下2.1 状态层State Layer—— 智能体的“记忆中枢”状态层是LangGraph的核心相当于智能体的“大脑记忆”负责存储推理过程中的所有信息确保流程的连贯性和可追溯性解决了传统智能体“健忘、上下文断裂”的痛点。核心概念State状态定义一个结构化的字典或自定义类包含智能体推理过程中需要用到的所有数据字段可根据业务需求灵活自定义。常用字段示例input用户的原始问题如“查询上海2025年3月15日的天气并生成简报”thought智能体的思考过程如“我需要先调用天气工具获取数据再整理成简报”action智能体的行动指令如工具调用参数、操作步骤observation行动的反馈结果如天气工具返回的“阴转小雨8℃~12℃”history多轮对话/推理历史确保上下文连贯done任务完成标识True/False用于判断推理流程是否终止。核心优势状态可实时更新、可回溯所有节点共享同一状态确保多步骤之间的数据传递无误避免重复推理或上下文断裂。状态更新机制每个节点执行完成后会返回一个更新后的状态覆盖原有的状态确保下一个节点能获取到最新的推理信息形成“状态流转闭环”。2.2 节点层Node Layer—— 智能体的“思考和行动单元”节点是LangGraph中最基础的执行单元每个节点对应智能体的一个“思考或行动步骤”相当于智能体的“一个个具体动作”。节点分为“普通节点”和“条件节点”两种类型可灵活组合实现复杂推理逻辑。普通节点Action Node功能执行具体的操作输入是当前状态输出是更新后的状态是推理流程的核心执行单元。常用普通节点示例Thought Node思考节点分析当前状态决定下一步行动比如判断“是否需要调用工具”“调用哪个工具”Action Node行动节点执行具体行动比如调用天气API、SQL工具、代码解释器等Observation Node观察节点处理行动的反馈结果将工具返回的数据整理后更新到状态中Answer Node回答节点基于最终状态生成用户可理解的自然语言回答。自定义节点开发者可根据业务需求自定义节点逻辑比如添加“反思节点”校验推理结果是否正确、“校验节点”判断工具调用是否成功灵活扩展推理能力。条件节点Conditional Node功能负责“分支判断”根据当前状态的具体情况决定下一步执行哪个节点实现推理流程的灵活跳转。典型示例条件节点判断“任务是否完成done是否为True”——若doneTrue跳转至Answer Node生成回答若doneFalse跳转至Thought Node继续思考形成循环。2.3 边层Edge Layer—— 智能体的“流程流转规则”边是节点之间的“流转关系”定义了“一个节点执行完成后下一步该执行哪个节点”相当于智能体的“行动路线图”。边分为“固定边”和“条件边”两种适配不同的流转场景。固定边无需判断固定从一个节点跳转至另一个节点。例如Action Node行动节点执行完成后固定跳转至Observation Node观察节点处理行动结果。条件边结合条件节点根据当前状态的不同跳转至不同的节点。例如条件节点判断“工具调用是否成功”——若成功跳转至Observation Node若失败跳转至Thought Node重新思考并尝试调用工具实现“自我纠错”。2.4 执行层Execution Layer—— 智能体的“流程驱动引擎”执行层是LangGraph的“动力核心”负责驱动整个推理流程的运行确保节点按边的流转规则有序执行直到满足终止条件doneTrue输出最终结果。核心特性1循环执行支持节点的循环执行完美适配ReAct推理框架思考→行动→观察→思考→行动→……直到任务完成解决了传统智能体“无法处理多步骤循环”的痛点。核心特性2可视化调试支持将推理流程节点边可视化可实时查看每个节点的执行过程、状态变化便于开发者排查问题、优化推理逻辑——这是LangGraph最核心的优势之一也是工业级落地的关键保障。核心特性3多流程编排可灵活编排复杂的推理流程比如“Planning任务拆解→ReAct执行子任务→Reflection反思校验→生成回答”满足多步骤、高复杂度任务的需求。三、核心功能总结LangGraph的功能围绕“复杂推理流程编排”展开覆盖推理、调试、扩展等全场景核心功能可总结为8点兼顾实用性和扩展性状态机驱动基于状态机构建推理流程状态可实时更新、可回溯确保流程连贯性和可追溯性。节点与边灵活定义支持自定义普通节点、条件节点固定边、条件边可编排任意复杂的推理流程适配不同业务场景。支持核心推理框架完美适配ReAct、Reflection、Planning三大推理框架可轻松实现“思考→行动→观察”循环、自我纠错、任务拆解。循环执行与分支判断支持节点循环执行可根据状态进行分支跳转轻松处理多步骤、动态决策类任务。可视化调试可将推理流程可视化查看每个节点的执行过程和状态变化降低调试难度提升开发效率。工具调用集成无缝集成LangChain的工具调用组件支持调用各类工具API、数据库、计算器、代码解释器等扩展智能体的行动能力。生态兼容性好完美兼容LangChain、LlamaIndex、AutoGen三大框架可对接LlamaIndex实现检索增强对接AutoGen实现多智能体协作灵活嵌入复杂智能体系统。工业级稳定支持日志监控、异常处理、状态持久化可满足企业级智能体的高可用需求适配生产环境部署。四、实操示例本次示例基于LangGraph实现一个“ReAct推理框架的天气查询智能体”功能接收用户天气查询需求→思考需调用的工具→调用天气工具→处理结果→生成回答全程实现循环执行和状态管理可直接复制运行。4.1 前提准备安装依赖包配置OpenAI API Key可替换为开源大模型如Qwen、Llamapip install langgraph langchain langchain-openai python-dotenv4.2 完整代码from langgraph.graph import StateGraph, END from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.tools import tool from dotenv import load_dotenv import os import json # 1. 加载环境变量配置大模型 load_dotenv() llm ChatOpenAI( modelgpt-3.5-turbo, temperature0.1, api_keyos.getenv(OPENAI_API_KEY) # 替换为你的API Key ) # 2. 定义工具天气查询工具模拟真实API调用 tool def get_weather(city: str, date: str) - str: 功能查询指定城市指定日期的天气情况 参数 city: 城市名称如“北京”“上海” date: 日期格式YYYY-MM-DD如“2025-03-15” 返回天气描述字符串 # 模拟天气数据实际开发可对接真实天气API weather_data { 北京-2025-03-15: 晴-5℃~5℃微风空气质量良, 上海-2025-03-15: 阴转小雨8℃~12℃东风3级空气质量优 } key f{city}-{date} return weather_data.get(key, f未查询到{city}{date}的天气信息) # 3. 定义状态智能体的记忆包含所有推理过程中的信息 class AgentState: input: str # 用户原始问题 thought: str # 思考过程 action: dict # 工具调用指令JSON格式 observation: str # 工具调用结果 done: bool False # 是否完成任务 # 4. 定义节点思考、行动、观察、回答、条件节点 # 4.1 思考节点分析当前状态决定下一步行动 def thought_node(state: AgentState) - AgentState: prompt ChatPromptTemplate.from_messages([ (system, 你是一个天气查询智能体基于当前状态思考下一步该做什么\n 1. 如果已经获取到天气信息observation有内容则设置doneTrue准备生成回答\n 2. 如果没有获取到天气信息需要调用get_weather工具明确传入city和date参数\n 3. 思考过程要清晰明确说明下一步行动。), (user, 用户问题{input}\n当前观察结果{observation}) ]) chain prompt | llm response chain.invoke({input: state.input, observation: state.observation}) return AgentState( inputstate.input, thoughtresponse.content, actionstate.action, observationstate.observation, donestate.done ) # 4.2 行动节点生成工具调用指令并执行 def action_node(state: AgentState) - AgentState: prompt ChatPromptTemplate.from_messages([ (system, 基于当前思考过程生成get_weather工具的调用指令格式为JSON\n {name: get_weather, parameters: {city: 城市名, date: 日期}}), (user, 思考过程{thought}\n用户问题{input}) ]) chain prompt | llm response chain.invoke({thought: state.thought, input: state.input}) # 解析工具调用指令实际开发可增加异常处理 action json.loads(response.content.strip()) return AgentState( inputstate.input, thoughtstate.thought, actionaction, observationstate.observation, donestate.done ) # 4.3 观察节点处理工具调用结果更新状态 def observation_node(state: AgentState) - AgentState: action state.action if action[name] get_weather: # 执行工具调用 observation get_weather(** action[parameters]) return AgentState( inputstate.input, thoughtstate.thought, actionstate.action, observationobservation, donestate.done ) else: return AgentState( inputstate.input, thoughtstate.thought, actionstate.action, observation工具调用失败未找到对应工具, donestate.done ) # 4.4 回答节点生成最终自然语言回答 def answer_node(state: AgentState) - AgentState: prompt ChatPromptTemplate.from_messages([ (system, 基于用户问题和工具调用结果生成自然、清晰的回答不要添加额外信息。), (user, 用户问题{input}\n工具调用结果{observation}) ]) chain prompt | llm response chain.invoke({input: state.input, observation: state.observation}) # 将回答存入thought字段简化处理实际可自定义字段 return AgentState( inputstate.input, thoughtresponse.content, actionstate.action, observationstate.observation, doneTrue ) # 4.5 条件节点判断任务是否完成决定跳转方向 def conditional_node(state: AgentState) - str: if state.done: return answer # 任务完成跳转至回答节点 else: return action # 任务未完成跳转至行动节点 # 5. 构建LangGraph状态机 graph StateGraph(AgentState) # 添加节点 graph.add_node(thought, thought_node) # 思考节点 graph.add_node(action, action_node) # 行动节点 graph.add_node(observation, observation_node)# 观察节点 graph.add_node(answer, answer_node) # 回答节点 # 添加边流转规则 graph.add_edge(thought, conditional_node) # 思考节点后进入条件判断 graph.add_edge(action, observation) # 行动节点后进入观察节点 graph.add_edge(observation, thought) # 观察节点后回到思考节点形成循环 graph.add_edge(answer, END) # 回答节点后流程终止 # 设置起始节点编译图 graph.set_entry_point(thought) app graph.compile() # 6. 运行智能体测试效果 user_question 查询上海2025年03月15日的天气 initial_state AgentState( inputuser_question, thought, action{}, observation, doneFalse ) # 执行推理流程获取结果 result app.invoke(initial_state) # 输出结果 print(用户问题, result.input) print(思考过程, result.thought) print(工具调用指令, result.action) print(工具调用结果, result.observation) print(最终回答, result.thought)4.3 运行结果说明1. 流程闭环程序构建了“思考→行动→观察→思考→回答”的完整闭环符合ReAct推理逻辑2. 状态管理所有推理过程思考、行动、结果都存储在状态中可实时查看和回溯3. 循环执行若工具调用失败如未查询到天气数据会重新回到思考节点调整参数后再次调用4. 可控可调试可通过可视化工具如langgraph visualize查看节点流转过程快速排查问题。五、优点与缺点LangGraph的优势和局限都非常明确精准匹配不同场景的需求以下总结可直接用于面试或技术选型5.1 优点核心优势复杂推理流程编排能力强基于状态机可灵活编排ReAct、Reflection、Planning等推理流程支持循环执行和分支判断能轻松处理多步骤、动态决策类复杂任务。可控可调试可视化调试功能可实时查看节点执行过程和状态变化大幅降低复杂智能体的调试难度适合工业级落地。状态管理完善状态层统一存储推理过程中的所有信息确保上下文连贯、可追溯解决了传统智能体“健忘”的痛点。生态兼容性好完美兼容LangChain、LlamaIndex、AutoGen三大框架可灵活组合实现“检索推理多智能体协作”的完整智能体系统。可扩展性强支持自定义节点、边和状态字段可根据业务需求扩展推理逻辑适配不同行业场景。工业级稳定支持日志监控、异常处理、状态持久化能满足企业级智能体的高可用需求可直接部署到生产环境。5.2 缺点核心局限检索能力弱自身不专注于检索增强没有完善的数据源接入和检索组件需要对接LlamaIndex等框架才能实现外部数据检索。开发门槛较高需要理解状态机、节点、边等核心概念对于新手来说上手难度比LlamaIndex轻量级检索框架高。不支持多智能体协作专注于单个智能体的推理流程无法实现多个智能体的分工协作需要对接AutoGen才能完成多智能体任务。轻量级场景适配差对于简单的智能体如普通文档问答用LangGraph会显得繁琐不如LlamaIndex轻量、易上手。六、适用场景LangGraph的核心价值是“复杂推理流程编排”适合需要多步骤推理、高可控性、工业级落地的场景具体可分为6类复杂智能体开发需要多步骤推理、多工具串联调用的智能体如企业级客服、数据分析智能体、自动化办公智能体等。工业级智能体落地需要可控、可调试、高稳定的智能体适合企业生产环境部署如工业巡检智能体、供应链调度智能体等。推理流程定制化需要自定义推理逻辑的场景如“ReActReflection结合”“Planning任务拆解多子任务执行”等。多工具串联调用需要多个工具按顺序调用的复杂任务如“查询数据→分析数据→生成报表→发送邮件”。作为推理引擎嵌入复杂系统在多智能体系统中负责单个智能体的推理流程编排与LlamaIndex检索、AutoGen多智能体协同工作。高要求智能体调试需要可视化调试、状态回溯便于排查问题的场景如复杂推理逻辑的智能体开发。七、总结LangGraph作为专注于推理流程编排的框架填补了“复杂智能体可控性不足”的空白——它不追求“大而全”而是聚焦“专而精”通过状态机驱动的节点-边结构让智能体的思考和行动更有序、更可控成为工业级智能体落地的核心引擎。在实际开发中LangGraph很少单独使用更多是与LlamaIndex负责检索、AutoGen负责多智能体协作组合形成“检索推理协作”的完整智能体系统适配更复杂的企业级需求。如果你的需求是“快速落地简单智能体”优先选择LlamaIndex如果是“实现多智能体协作”优先选择AutoGen如果是“开发复杂、可控的工业级智能体”LangGraph绝对是核心选择。