前言

在 AI 领域,检索增强生成(RAG) 系统已成为处理简单查询、生成上下文相关回答的常见工具。然而,随着对更复杂 AI 应用的需求增长,我们需要超越仅“检索+生成”的能力。于是出现了 AI 智能体(Agents)——它们能执行复杂的多步任务、在多轮交互中维护状态,并能动态适应新信息。

LangGraph 是 LangChain 的强力扩展,专为帮助开发者构建这类高级 AI 智能体而设计。它支持有状态(stateful)多角色(multi-actor)、**可循环计算(cyclic computation)**的应用,让智能体在执行中不断“感知—决策—行动—反思—再行动”。

本文将介绍 LangGraph 如何改变 AI 开发方式,并通过一个太阳能板节能计算示例,手把手展示如何构建你自己的 AI 智能体。你将看到 LangGraph 的特性如何让系统更智能、更可适应、更贴近真实场景

什么是 LangGraph?

LangGraph 是构建在 LangChain 之上的高级库,用于为大模型应用引入循环计算能力

•在 LangChain 中,你通常构建有向无环图(DAG)来描述线性流程;•LangGraph 则更进一步:它支持循环(cycles),这对实现复杂、类似智能体的行为至关重要——模型可以在流程中反复迭代,根据不断变化的条件动态决定下一步动作

LangGraph 的节点、状态与边

LangGraph 的核心概念:有状态图(Stateful Graph)

State(状态)
表示在计算推进过程中被持续维护与更新的上下文/记忆。
它确保每一步都能访问之前步骤的相关信息,从而基于累计数据进行动态决策。•Nodes(节点)
工作流的基本构件,代表某个计算步骤或函数。
每个节点执行特定任务,如处理输入、做出决策、调用外部系统等;
节点可自定义,以满足多种操作需求。•Edges(边)
连接节点、定义计算从一步到下一步的流向; 支持条件逻辑,可根据当前状态改变执行路径;
负责数据与控制在节点间的传递,从而实现复杂的多步流程

为什么选择 LangGraph?

LangGraph 通过对图结构、状态与协调的无缝管理,重塑了 AI 应用的开发方式:

自动状态管理:在多轮交互中保留上下文,让 AI 能对变化的输入做出更聪明的响应;•精简的智能体协调:保障精确执行高效信息交换,开发者可以把精力放在设计创新工作流上;•极高的灵活性:支持打造定制化、高性能应用;•可扩展与容错:即便在企业级场景下,也能保持系统稳健与可靠

接下来你将学到什么?

•如何用 LangGraph 搭建有状态、可循环的智能体流程;•如何让智能体分步规划—执行—评估—再规划;•以“太阳能板节能计算”为例,如何将 LangGraph 的特性落地,构建智能、可适应且可生产的 AI 系统。

分步指南

在了解了 LangGraph 的核心概念与优势之后,下面通过一个可落地的实战示例来动手实现:
我们将构建一个用于根据用户输入计算太阳能板潜在节能收益的 AI 智能体。该智能体可作为光伏销售网站上的潜在客户收集(lead generation)工具,与访客交互、给出个性化节省估算。通过收集诸如每月电费等关键数据,智能体既能帮助用户理解光伏的经济价值,也能为销售团队筛选高意向线索。此示例将展示 LangGraph 如何打造智能、动态的系统,实现复杂任务自动化并创造业务价值

第 1 步:导入必要库

首先,导入项目所需的 Python 库与模块。这些依赖为我们使用 LangChainLangGraph 以及 AWS 服务构建 AI 助手打下基础。

from langchain_core.tools import toolfrom langchain_community.tools.tavily_search importTavilySearchResultsfrom langchain_core.prompts importChatPromptTemplatefrom langchain_core.runnables importRunnablefrom langchain_aws importChatBedrockimport boto3from typing importAnnotatedfrom typing_extensions importTypedDictfrom langgraph.graph.message importAnyMessage, add_messagesfrom langchain_core.messages importToolMessagefrom langchain_core.runnables importRunnableLambdafrom langgraph.prebuilt importToolNodefrom langgraph.prebuilt import tools_condition

第 2 步:定义太阳能节省计算工具

接下来,我们定义一个工具(tool),用于根据用户提供的 月度电费 来估算使用太阳能后可能带来的节省。
这个工具将被智能体调用,以实现 数据驱动的交互

from langchain_core.tools import tool
@tooldef compute_savings(monthly_cost:float)->float:"""根据用户的月电费计算切换到太阳能后的潜在节省情况。
参数:        monthly_cost (float):用户当前的月电费(单位:美元)
返回:        dict:包含以下估算信息:-'number_of_panels':所需太阳能板数量-'installation_cost':预计安装成本-'net_savings_10_years':扣除安装成本后,10年净节省"""
def calculate_solar_savings(monthly_cost):# === 假设参数(可根据实际情况调整) ===        cost_per_kWh =0.28# 每度电费用(美元/kWh)        cost_per_watt =1.50# 每瓦太阳能安装费用(美元/W)        sunlight_hours_per_day =3.5# 平均每日有效日照时长        panel_wattage =350# 单块太阳能板功率(瓦)        system_lifetime_years =10# 系统寿命周期(年)
# === 计算过程 ===# 每月耗电量(千瓦时)        monthly_consumption_kWh = monthly_cost / cost_per_kWh
# 每日所需发电量(kWh)        daily_energy_production = monthly_consumption_kWh /30
# 系统总装机容量(kW)        system_size_kW = daily_energy_production / sunlight_hours_per_day
# 需要的太阳能板数量 & 安装成本        number_of_panels = system_size_kW *1000/ panel_wattage        installation_cost = system_size_kW *1000* cost_per_watt
# 年节省与十年净节省        annual_savings = monthly_cost *12        total_savings_10_years = annual_savings * system_lifetime_years        net_savings = total_savings_10_years - installation_cost
return{"number_of_panels": round(number_of_panels),"installation_cost": round(installation_cost,2),"net_savings_10_years": round(net_savings,2)}
# 返回估算结果return calculate_solar_savings(monthly_cost)

这段函数会处理用户的月度电费并返回一份太阳能系统收益的详细估算,包括:所需面板数量、安装成本以及 10 年期净节省。为简化演示,计算里使用了若干默认假设(如平均电价、平均日照时长)。在更高级的版本里,可以从用户处收集这些参数,从而更贴合其具体情况地给出个性化估算。

第 3 步:状态管理与错误处理

稳健的 AI 系统离不开有效的状态管理错误处理。下面定义两个实用工具:

handle_tool_error:在工具执行出错时,生成与具体 tool call 关联的错误消息;•create_tool_node_with_fallback:创建带兜底回退能力的工具节点,出错时自动调用错误处理逻辑。

from langchain_core.messages importToolMessagefrom langchain_core.runnables importRunnableLambdafrom langgraph.prebuilt importToolNode
def handle_tool_error(state)-> dict:"""在工具执行过程中处理错误。
参数:        state (dict):智能体当前状态,包含消息历史与 tool call 信息。
返回:        dict:包含针对每个出错 tool 的错误消息(ToolMessage)的字典。"""# 从状态中取出异常    error = state.get("error")
# 取出最后一条消息中的 tool_calls(LangChain/LangGraph 产生)    tool_calls = state["messages"][-1].tool_calls
# 针对每一个 tool call,生成一条带有错误详情的 ToolMessage,并与其 id 关联return{"messages":[ToolMessage(                content=f"Error: {repr(error)}\n please fix your mistakes.",                tool_call_id=tc["id"],)for tc in tool_calls]}
def create_tool_node_with_fallback(tools: list)-> dict:"""创建带回退(fallback)机制的Tool节点。
参数:        tools (list):需要挂载到该节点的工具列表。
返回:        dict:带错误兜底的工具节点;一旦发生异常,将调用 handle_tool_error。"""returnToolNode(tools).with_fallbacks([RunnableLambda(handle_tool_error)],# 用 RunnableLambda 包装错误处理函数        exception_key="error"# 指定捕获异常的键)

这些函数可确保在工具执行过程中一旦出现错误,系统能优雅降级并向用户提供有用的反馈。

第 4 步:定义 State(状态)与 Assistant 类

在这一步,我们将定义智能体如何管理会话状态(对话的持续上下文),并保证其能正确响应用户输入与工具输出。

为此,先用 Python 的 TypedDict 来定义状态结构 State——它描述在 LangGraph 中节点之间传递的消息格式。状态中会保存整段对话的消息列表,其中既包括用户输入,也包括智能体回复工具输出

from typing importAnnotatedfrom typing_extensions importTypedDictfrom langgraph.graph.message importAnyMessage, add_messages
classState(TypedDict):# 一个“可累积”的消息列表:# - AnyMessage:统一抽象,兼容人类消息、AI 消息、工具消息(ToolMessage)等# - add_messages:LangGraph 的 reducer,用于将新消息追加到状态中    messages:Annotated[list[AnyMessage], add_messages]

在有了 State 之后,我们需要定义一个 Assistant 类 来驱动智能体的运行。
这个类的职责是:

•执行智能体的主循环;•调用工具(如 compute_savings);•管理对话流转(处理用户输入与工具结果);•兜底错误与无效输出(re-prompt 用户或请求澄清)。

核心逻辑基于一个 Runnable(可运行单元),它定义了调用 LLM 和工具的具体流程。

from langchain_core.runnables importRunnable
classAssistant:def __init__(self, runnable:Runnable):"""初始化Assistant。
参数:            runnable (Runnable):定义 LLM 与工具交互流程的Runnable对象。"""self.runnable = runnable
def __call__(self, state:State):"""执行智能体主循环,确保最终返回有效输出。
参数:            state (State):当前智能体状态,包含消息与上下文。
返回:            dict:更新后的状态(包含新消息)。"""whileTrue:# 运行当前流程            result =self.runnable.invoke(state)
# 检查工具是否未返回有效输出ifnot result.tool_calls and(not result.contentor isinstance(result.content, list)andnot result.content[0].get("text")):# 请求用户澄清或重试                messages = state["messages"]+[("user","Respond with a real output.")]                state ={**state,"messages": messages}else:# 一旦得到有效输出,就退出循环break
# 返回包含新消息的最终状态return{"messages": result}

这些配置对于维持对话流程并确保助手基于上下文做出恰当响应至关重要。

第 5 步:使用 AWS Bedrock 配置 LLM

本步骤我们为智能体接入 AWS Bedrock 上的 LLM(如 Anthropic Claude),作为语言能力引擎。
要调用 AWS 服务,你必须先正确配置 AWS 凭据,否则无法连接 Bedrock 并运行模型。

常见凭据配置方式包括:

•通过 AWS CLI 登录并写入本地凭据(aws configure)•设置环境变量:AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN(可选)、AWS_DEFAULT_REGION•使用可被 AWS SDK 访问的 credentials 文件(通常位于 ~/.aws/credentials

完成凭据与区域设置后,即可创建 Bedrock Runtime 客户端,并实例化 LangChain 的 ChatBedrock

import boto3from langchain_aws importChatBedrock
def get_bedrock_client(region):return boto3.client("bedrock-runtime", region_name=region)
def create_bedrock_llm(client):returnChatBedrock(        model_id='anthropic.claude-3-sonnet-20240229-v1:0',        client=client,        model_kwargs={'temperature':0},        region_name='us-east-1')
llm = create_bedrock_llm(get_bedrock_client(region='us-east-1'))

这一步的集成保证了助手能够有效理解并响应用户输入

第 6 步:定义 Assistant 的工作流(Workflow)

在配置好 LLM工具 之后,我们需要定义智能体的工作流。 工作流决定了智能体如何:

•与用户沟通;•何时收集所需信息(如月度电费);•何时调用工具(如 compute_savings);•如何将结果返回给用户。

核心部分是创建一个提示模板(Prompt Template),明确智能体的身份、对话目标与交互规则。

from langchain_core.prompts importChatPromptTemplate
primary_assistant_prompt =ChatPromptTemplate.from_messages([("system",'''You are a helpful customer support assistant for Solar Panels Belgium.You should get the following information from them:- monthly electricity costIf you are not able to discern this info, ask them to clarify!Donot attempt to wildly guess.
After you are able to discern all the information, call the relevant tool.''',),("placeholder","{messages}"),])

system 消息:作为智能体的“行为守则”,引导其向用户询问月度电费,若信息不明确就不要猜测,并持续追问直至收集到必要数据。•placeholder:用于动态注入对话历史,让助手能基于上下文持续对话,并让用户的上一轮输入影响下一步动作。

接下来,定义智能体交互中会用到的工具;主要工具是 compute_savings,它会基于用户的月度电费计算潜在节省。将工具列在清单里后,通过 llm.bind_tools() 绑定到助手工作流,使智能体在对话中按需触发工具,实现人与工具的无缝衔接。

# 定义助手在本阶段将使用的工具part_1_tools =[    compute_savings]
# 将工具绑定到助手工作流(Prompt → LLM(已绑定工具))part_1_assistant_runnable = primary_assistant_prompt | llm.bind_tools(part_1_tools)

第 7 步:构建图结构

本步骤使用 LangGraph 搭建智能体的状态图,控制助手如何处理用户输入、何时触发工具、以及各阶段之间的流转。
图中包含用于核心动作的节点(nodes),以及决定节点间走向的边(edges)

用于计算太阳能节省的 AI 智能体流程图

在 LangGraph 中,每个 节点 代表一个操作步骤(如与用户交互或执行工具)。本示例定义两个关键节点:

Assistant 节点:管理对话流程,向用户询问月度电费并处理响应;•Tool 节点:执行工具(如 compute_savings)来计算节省结果。

from langgraph.graph importStateGraph
builder =StateGraph(State)
# 1) 助手节点:驱动对话与决策(是否需要调用工具等)builder.add_node("assistant",Assistant(part_1_assistant_runnable))
# 2) 工具节点:实际执行 compute_savings,并带有错误兜底builder.add_node("tools", create_tool_node_with_fallback(part_1_tools))

用于定义节点之间的流向。在本例中:

•助手(assistant)先发起对话;•当收集到所需输入后,转入工具节点;•工具执行完成后,返回助手节点继续对话或收尾。

builder.add_edge(START,"assistant")# 从起点进入 assistantbuilder.add_conditional_edges("assistant", tools_condition)# 收到必要输入后转入 toolsbuilder.add_edge("tools","assistant")# 工具执行结束后回到 assistant

为确保对话在多步交互中能记住上下文,我们使用 MemorySaver 持久化图的会话状态(State):

from langgraph.checkpoint.memory importMemorySaver
memory =MemorySaver()graph = builder.compile(checkpointer=memory)

第 8 步:运行助手

最后,通过初始化图工作流并开始对话来运行助手。

# import shutilimport uuid
# 构造一个示例对话,模拟用户与助手的交互tutorial_questions =['hey','can you calculate my energy saving',"my montly cost is $100, what will i save"]
thread_id = str(uuid.uuid4())
config ={"configurable":{"thread_id": thread_id,}}
_printed =set()for question in tutorial_questions:    events = graph.stream({"messages":("user", question)}, config, stream_mode="values")foreventin events:        _print_event(event, _printed)

结论

通过以上步骤,你已经成功构建了一个基于 LangGraph 的 AI 助手,它能够根据用户输入计算太阳能板节能效益

本教程展示了 LangGraph 在管理复杂的多步骤流程中的强大能力,并突出了如何结合先进的 AI 工具来高效解决现实问题

无论是开发用于 客户支持能源管理 还是其他应用场景的 AI 智能体,LangGraph 都提供了你所需的:

灵活性(Flexibility):可定制复杂工作流;•可扩展性(Scalability):支持从小规模实验到企业级部署;•稳健性(Robustness):保证系统在长时运行与多轮交互中的可靠表现。

👉 借助 LangGraph,你可以更快地将 AI 创意转化为实用的智能系统,并让它们在真实世界中创造价值。

最后

为什么要学AI大模型

当下,⼈⼯智能市场迎来了爆发期,并逐渐进⼊以⼈⼯通⽤智能(AGI)为主导的新时代。企业纷纷官宣“ AI+ ”战略,为新兴技术⼈才创造丰富的就业机会,⼈才缺⼝将达 400 万!

DeepSeek问世以来,生成式AI和大模型技术爆发式增长,让很多岗位重新成了炙手可热的新星,岗位薪资远超很多后端岗位,在程序员中稳居前列。

在这里插入图片描述

与此同时AI与各行各业深度融合,飞速发展,成为炙手可热的新风口,企业非常需要了解AI、懂AI、会用AI的员工,纷纷开出高薪招聘AI大模型相关岗位。
在这里插入图片描述
最近很多程序员朋友都已经学习或者准备学习 AI 大模型,后台也经常会有小伙伴咨询学习路线和学习资料,我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师给大家这里给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频 全系列的学习资料,这些学习资料不仅深入浅出,而且非常实用,让大家系统而高效地掌握AI大模型的各个知识点。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

AI大模型系统学习路线

在面对AI大模型开发领域的复杂与深入,精准学习显得尤为重要。一份系统的技术路线图,不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点,还能提供一条高效、有序的学习路径。

img

但知道是一回事,做又是另一回事,初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性,在这基础上,找到高质量的学习资源,不浪费时间、不走弯路,又是重中之重。

AI大模型入门到实战的视频教程+项目包

看视频学习是一种高效、直观、灵活且富有吸引力的学习方式,可以更直观地展示过程,能有效提升学习兴趣和理解力,是现在获取知识的重要途径

在这里插入图片描述
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

海量AI大模型必读的经典书籍(PDF)

阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。
在这里插入图片描述

600+AI大模型报告(实时更新)

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
在这里插入图片描述

AI大模型面试真题+答案解析

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下
在这里插入图片描述

在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐