写在前面

在构建基于大型语言模型(LLM)的应用时,我们很快会发现简单的“一问一答”模式远远不够。真正的智能应用需要具备规划、执行、反思的能力,能够与外部世界交互,并根据情况做出决策。这正是 LangGraph 的用武之地。

与 LangChain 中封装好的 AgentExecutor 不同,LangGraph 提供了一套更底层、更灵活的工具,让我们能够像绘制流程图一样,精确地设计和控制 Agent 的每一步行为。它将 Agent 难以捉摸的“黑盒”思考过程,转变成了对开发者完全透明的“白盒”工作流。

本篇教程将作为一个完整的、自包含的指南,带你走完从 LangGraph 零基础到构建第一个实用 AI Agent 的全过程。读完本文,将掌握构建复杂、有状态、可控的 AI 应用的核心技能。


第一部分:核心概念与基础工作流

在深入构建 Agent 之前,我们必须先掌握 LangGraph 的基本构成和如何创建一个简单的工作流。

1.1 核心概念:State, Node, Edge

构建一个 LangGraph 应用,就像绘制一张流程图,离不开三个基本元素:

State (状态): 一个在图的整个执行过程中持续存在并被传递的数据对象。可以把它看作是整个工作流的“共享内存”,所有节点都通过它来交换信息。•Node (节点): 一个代表流程图中具体“步骤”的 Python 函数。它接收当前的状态作为输入,执行独立的任务,然后返回一个字典来更新状态。•Edge (边): 负责连接节点,定义了任务从一个节点流向另一个节点的路径。

1.2 基础实践:构建一个线性的两步工作流

我们将从一个包含“起草”和“审阅”两个步骤的报告生成应用开始。这个例子将帮助我们熟悉最核心的 API,而无需立即处理复杂的 Agent 逻辑。

from dotenv import load_dotenvfrom langchain_openai importChatOpenAIfrom langgraph.graph importStateGraph,ENDfrom typing importTypedDictimport os
# 加载环境变量 (OPENAI_API_KEY 等)load_dotenv()
# 初始化 LLM# 建议将模型初始化放在代码的起始部分,以便复用llm =ChatOpenAI(    model_name=os.environ.get("OPENAI_MODEL","gpt-4o"),    temperature=0.7,    openai_api_base=os.environ.get("OPENAI_BASE_URL"),    openai_api_key=os.environ.get("OPENAI_API_KEY"),)
# 1. 定义状态classReportState(TypedDict):    topic: str    draft: str    report: str
# 2. 定义节点函数def draft_node(state:ReportState)-> dict:    """起草节点"""    print(">>> 正在执行节点: draft_node")    prompt = f"以技术报告的格式,为主题 '{state['topic']}' 写一份500字左右的草稿。"    draft = llm.invoke(prompt).content    return{"draft": draft}
def review_node(state:ReportState)-> dict:    """审阅节点"""    print(">>> 正在执行节点: review_node")    prompt = f"你是一位资深编辑。请审阅以下报告草稿,修正语法、改进措辞。草稿:\n\n{state['draft']}"    report = llm.invoke(prompt).content    return{"report": report}
# 3. 组装图workflow =StateGraph(ReportState)workflow.add_node("drafter", draft_node)workflow.add_node("reviewer", review_node)workflow.set_entry_point("drafter")workflow.add_edge("drafter","reviewer")workflow.add_edge("reviewer",END)
# 4. 编译并可视化linear_app = workflow.compile()print("线性工作流图结构:")linear_app.get_graph().print_ascii()

这个简单的线性图让我们掌握了 add_nodeadd_edge 的用法。现在,让我们进入更激动人心的部分。


第二部分:构建真正的 Agent

一个线性的工作流是不够的,真正的 Agent 需要具备决策和与外部交互的能力。

2.1 Agent 的核心思想 (ReAct)

一个智能体通常遵循 ReAct (Reason-Act) 的工作模式,这是一个循环过程:

1.思考 (Reason): 基于当前任务分析并决定下一步策略(是直接回答还是调用工具)。2.行动 (Act): 执行策略,例如调用搜索引擎。3.观察 (Observe): 接收工具返回的结果,再次进入“思考”阶段。

LangGraph 的图结构为实现这一循环提供了完美的框架。

2.2 综合实践:两种方式构建工具 Agent

我们将介绍两种方式来构建 Agent。对于标准场景,强烈推荐使用第一种 create_react_agent 的方式。

方法一 :使用 create_react_agent 简化流程

LangGraph 提供了一个极其方便的高级函数 create_react_agent,它可以将所有繁琐的组装工作封装起来,让你用一行代码就得到一个功能完备的 ReAct Agent。

from langchain_core.messages importHumanMessagefrom langchain_tavily importTavilySearchfrom langchain_tavily._utilities importTavilySearchAPIWrapperfrom langgraph.prebuilt import create_react_agent
# 实例化工具search_tool =TavilySearch(    max_results=2,    api_wrapper=TavilySearchAPIWrapper(         tavily_api_key=os.environ.get("TAVILY_API_KEY")    ))tools =[search_tool]
# 2. 调用工厂函数,一键生成 Agent# 它会自动处理工具绑定app = create_react_agent(llm, tools)
# 3. 直接使用inputs ={"messages":[HumanMessage(content="今天北京的天气怎么样?")]}result = app.invoke(inputs)
print("\n--- 最终结果 ---")print(result['messages'][-1].content)

create_react_agent 极大地提升了开发效率,是构建标准 Agent 的首选。

方法二 :手动构建以实现完全控制

如果需要实现高度定制化的逻辑(比如增加一个人工审核节点),理解如何手动构建就至关重要了。

1. 定义 Agent 状态与路由

from typing importAnnotatedfrom typing_extensions importTypedDictfrom langchain_core.messages importBaseMessage
# 定义一个函数,用于将新消息追加到旧消息列表中def add_messages(left: list[BaseMessage], right: list[BaseMessage])-> list[BaseMessage]:return left + right
classAgentState(TypedDict):# 使用 Annotated 指示 messages 字段应通过 add_messages 函数进行更新    messages:Annotated[list[BaseMessage], add_messages]
def router(state:AgentState)-> str:    """根据 Agent 的最新消息中是否包含工具调用请求,来决定下一步的走向。"""    print("--- 正在执行路由判断 ---")    last_message = state['messages'][-1]
if hasattr(last_message,'tool_calls')and last_message.tool_calls:    print(">>> 路由决策:调用工具")    return"tool_node"else:    print(">>> 路由决策:直接结束")    return"END"

2. 定义节点并组装图

from langgraph.prebuilt importToolNode
# 将模型与工具绑定,生成一个能调用工具的新 "executable"agent_model = llm.bind_tools(tools)
def agent_node(state:AgentState):    """Agent 节点:负责调用模型进行“思考”"""    print("--- 正在执行节点: agent_node (思考) ---")    response = agent_model.invoke(state['messages'])    return{"messages":[response]}
tool_node =ToolNode(tools=[search_tool])
# 手动组装图graph =StateGraph(AgentState)graph.add_node("agent_node", agent_node)graph.add_node("tool_node", tool_node)graph.set_entry_point("agent_node")graph.add_conditional_edges(    "agent_node",    router,    {"tool_node":"tool_node","END":END})graph.add_edge("tool_node","agent_node")agent_app_manual = graph.compile()
# 可视化 Agent 的图结构print("\n手动构建的 Agent 图结构:")agent_app_manual.get_graph().print_ascii()

3. 运行与测试

print("\n--- 手动构建 Agent 测试 ---")# 测试 1: 需要调用工具的问题inputs_1 ={"messages":[HumanMessage(content="最新的 AI 领域新闻有哪些?")]}result_1 = agent_app_manual.invoke(inputs_1)print("\n--- 最终结果 1 ---")print(result_1['messages'][-1].content)
# 测试 2: 不需要调用工具的问题inputs_2 ={"messages":[HumanMessage(content="1加1等于多少")]}result_2 = agent_app_manual.invoke(inputs_2)print("\n--- 最终结果 2 ---")print(result_2['messages'][-1].content)

我们会发现,手动构建出的 agent_app_manualcreate_react_agent 生成的 agent_app_prebuilt 功能上是完全一致的。手动构建给了我们更多的控制权,让我们可以在这个图的任何地方“添砖加瓦”。


总结

在本篇教程中:

  • 我们从一个简单的线性工作流入手,掌握了 LangGraph 的基础 API。
  • 接着,我们学习了构建一个真正 Agent 所需的核心技术并重点掌握了最高效的构建方式 create_react_agent
  • 同时,我们也深入了解了手动构建的全过程,这为我们将来实现更复杂的定制化 Agent 打下了坚实的基础。

我们同时掌握了构建 Agent 的“快捷方式”和“根本方法”,足以应对各种不同的开发需求。在后续的教程中,我们将基于此,探索更高级的状态管理、多智能体协作以及应用的持久化等更深入的主题。

最后

为什么要学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

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐