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

langgragh的思想与入门(一)

langgragh的思想与入门

  • 一. 绪论:从LCEL到LangGragh——为何需要新范式
    • langgragh的定位:引入“循环”以及“状态”
    • langgragh与langchain的关系:共生而非替代
    • 核心权衡:控制vs复杂性
  • 二. langgragh核心架构解析:图,状态以及节点(心智模型)
    • 基本范式:Google Pregel 与消息传递
    • 核心组件1:State (状态) —— 图的“灵魂”与“记忆”
      • 重点:状态更新机制(覆盖vsReduces)
      • 解决方案是使用 "Reducer" 。
    • 核心组件 2:Nodes (节点) —— “执行者”
    • 核心组件3:Edges (边) —— “导航员”与“控制流”
      • 类型 1:直接边 (Direct Edges / Fixed Transitions)
      • 类型 2:条件边 (Conditional Edges / Conditional Branching)

一. 绪论:从LCEL到LangGragh——为何需要新范式

在构建LLM应用时,开发者首先接触的事通过LangChain表达式语言(LangChain Expression Language, LCEL)实现的声明式链条。LCEL提供了一个强大的范式来链接组件,但核心架构基于有向无环图(DAG)。这一特性使其更适合线性的,一次性的处理流程,例如“检索-生成”或者“提示-模型-输出解析”。

然而,构建真正智能的 AI 智能体(Agent)需要超越 DAG 的限制。智能体需要具备反思、修正和动态决策的能力。例如,一个智能体在调用工具后,可能需要根据工具的输出“反思”,然后决定 重新 调用另一个工具,或者 返回 到上一个思考步骤来修正其计划。这种需要“循环(Loops)”或“返回”的逻辑,在有向无环的 LCEL 中难以实现或极其复杂 。

langgragh的定位:引入“循环”以及“状态”

langgragh正是为了解决上述问题设计的,他被明确为一个用于构建部署和管理复杂的生成式AI智能体工作流的开源框架。它不是对LCEL的简单扩展,而是一个根本性的范式转换:他将工作流建模为有状态的图
LangGraph 是一个 低层次(low-level的编排框架 ,其核心价值主张在于构建 长周期、有状态的(long-running, stateful)智能体 。开发者选择 LangGraph,意味着主动选择了一个更低的抽象层次,以换取对循环(Loops)和状态(State) 的完全控制权 。这是构建真正“智能”的、具备 ReAct 风格(Reasoning and Acting)的智能体所必需的基础。

langgragh与langchain的关系:共生而非替代

LangGraph 由 LangChain 团队创建 ,它们之间的关系是共生的,而非替代:

  1. LangGraph 可以独立使用:官方文档明确指出,使用 LangGraph 不一定 需要 LangChain 。
  2. LangGraph 建立在 LangChain 的组件之上:LangGraph 专注于“编排”,而 LangChain
    提供了用于“构建和管理 LLM”的库,例如模型、工具和提示词 。
  3. LangChain 建立在 LangGraph 之上:这是一个至关重要的趋势。LangChain 中更高级的智能体抽象(例如create_…_agent)现在正逐步构建在 LangGraph 之上 。

这种关系表明,Langgraph正在成为langchain生态系统的“执行引擎”或者“底层进行时”。即时用户未来主要使用高级抽象,理解 LangGraph 也将是理解其底层行为和进行深度定制的关键。对于希望“系统学习”的开发者来说,LangGraph 是必须掌握的地基。

核心权衡:控制vs复杂性

学会langgragh必须理解核心权衡。

  • 获得的控制(Power) :开发者获得了构建循环 、持久化状态 、实现人在回路(Human-in-the-Loop, HITL) 以及设计复杂多智能体系统 的能力。
  • 付出的代价(Cost):这种强大的能力是有代价的。有观点指出,LangGraph 的代码可能变得“冗长(verbose)”或“企业级”,需要开发者编写大量“管道(plumbing)”代码 。不当的实现(尤其是在缺乏 LangSmith 辅助时)可能导致“调试是地狱” 。

本学习指南的目标,就是系统性地阐述如何利用 LangGraph 提供的“控制”,并有效地管理其“复杂性”。

二. langgragh核心架构解析:图,状态以及节点(心智模型)

要系统地学习Langgragh,首要任务是建立正确的心智模型。LangGraph 的架构灵感来源于 Google 的 Pregel 系统 ,其核心是基于消息传递的图计算。

基本范式:Google Pregel 与消息传递

在 LangGraph 中,工作流被建模为一个图(Graph) 。与 LCEL 的线性执行不同,LangGraph 的执行过程是通过消息传递(Message Passing在离散的“超级步骤(super-steps)”中进行的 。

工作原理:当一个节点(Node)完成计算的时候,它会发送一条消息(即状态更新)到图中的一个或者多个其他节点。接受到消息的节点背激活,执行计算,然后再发送新的消息。图的执行会持续进行,知道所有节点都变成 “非活动” 状态(即没有收到新消息)。这个基于消息传递和“超级步骤”的模型,正式Langgragh实现循环和并发执行的基础。

核心组件1:State (状态) —— 图的“灵魂”与“记忆”

“状态”是langgragh架构最核心的概念。

  • 定义:状态是一个“共享数据结构” 或“记忆库” ,它在图的各个节点之间流动,并负责跟踪和记录 AI 系统处理的所有有价值信息 。
  • 技术实现:状态(Scheme)通常使用Python的TypeDict来定义。在构建图时,StateGragh类在初始化必须传入State类(例如 graph = StateGraph(MyState)) 。

重点:状态更新机制(覆盖vsReduces)

这是初学者最容易犯错,也是最关键的知识点。默认情况下,当一个节点返回一个字典(状态更新)时,它会覆盖(overwrite)状态中已有的键值 。
这在处理聊天记录时是灾难性的。开发者通常希望**追加(append)**新的消息,而不是用新消息替换整个历史记录。

解决方案是使用 “Reducer” 。

Reducer 是一种指定状态键应如何更新的机制。通过 Python 的 Annotated 类型注解来实现:

  • 在 TypedDict 中定义状态时,不直接使用 list,而是使用 Annotated。
  • 例如,messages: Annotated[list[AnyMessage], operator.add] 。这里的 operator.add(或 add_messages 帮助器 )告诉 LangGraph,当节点返回 {“messages”:…} 时,应将新消息添加到现有列表中,而不是覆盖它 。
    因此,LangGraph 的状态定义不仅仅是数据结构,还包含了数据的更新逻辑。

核心组件 2:Nodes (节点) —— “执行者”

节点是图中的执行者,负责完成具体的工作。

  • 定义:节点是编码智能体逻辑的函数 。
  • 本质:节点可以是任何 Python 函数或 LangChain Runnable 。它可以是一个 LLM
    调用、一个工具调用,或任何“常规代码(good ol’ code)” 。
  • 工作原理:节点接收当前状态(State)作为输入,执行某些计算或副作用,并返回一个状态更新(一个字典)。

核心组件3:Edges (边) —— “导航员”与“控制流”

如果说节点是“执行者”,那么边就是“导航员” 。边是决定“下一步执行哪个节点”的函数 。

类型 1:直接边 (Direct Edges / Fixed Transitions)

这是最简单的边,用于固定的、顺序的转换。

  • 实现:gragh.add_edge(“node_A”,“node_B”)。
  • 含义:执行完node_A后,总是执行node_B。

类型 2:条件边 (Conditional Edges / Conditional Branching)

这是 LangGraph 实现循环和动态分支的核心机制,也是学习的重中之重。
工作原理:

  1. 开发者定义一个路由函数(例如,在官方快速入门中,这个函数叫 should_continue )。
  2. 这个路由函数接收**当前状态(State)**作为其唯一输入。
  3. 函数内部根据状态中的信息进行判断(例如,“最新的消息 state[‘messages’][-1] 中是否包含工具调用 tool_calls?” )。
  4. 函数返回一个字符串 ,该字符串必须是图中某个节点的名称(例如 “tool_node”),或者是特殊的 END 字符串,表示执行结束 。
    这种设计的影响是深远的:LangGraph 的整个控制流是由数据(状态)驱动的。图的“形状”不是静态的,而是根据每次执行的状态动态决定的。这就是 LangGraph 如此强大的根本原因。
http://www.dtcms.com/a/598137.html

相关文章:

  • 网站开发任职要求免费网站空间注册
  • 借助LLama_Factory工具对大模型进行lora微调
  • 基于Springboot + vue3实现的渔具管理系统
  • 网站工作室设计数字营销的4个特征
  • Linux动静态库以及动静态链接
  • 一个关于python编程小白日记
  • 自己做一个外贸网站怎么样沪上装修排名前十有哪些品牌
  • 环保HJ212-2017协议Java代码解析
  • 专业零基础网站建设教学深圳极速网站建设定制
  • 黑马点评学习笔记10(优惠券秒杀下单优化(分布式锁的优化,Lua脚本))
  • 单页面网站有哪些内容吗电子商务就业岗位
  • 亚马逊云科技 Amazon Bedrock 持续壮大模型阵营:Qwen3 和 DeepSeek-V3.1 重磅上线
  • 同一个空间可以做两个网站么wordpress建设购物网站
  • 小县城做网站福田做商城网站建设多少钱
  • 东莞网站制作方案定制无锡网站制作哪家服务好
  • 做的的网站怎样上传如何做网站关键字优化
  • 【OpenCV + VS】图像像素的加减乘除操作
  • 那里可以做网站的吗wordpress修改文章链接
  • [Java EE] 多线程 -- 初阶(2)
  • 蓝牙钥匙 第89次 蓝牙钥匙未来发展趋势篇:与汽车电子架构演进深度融合
  • 网站建设解析2345网址导航开创中国
  • 营销型网站模版vi设计的目的
  • U++工程提取二进制工程
  • Zabbix告警配置全攻略:邮件+钉钉双保险
  • qq钓鱼网站制作微盟集团
  • 中国人做跨电商有什么网站自建冷库费用
  • 03|Langgraph | 从入门到实战 | 进阶篇 | 持久化
  • 如何将网站挂载域名网站建设的定位是什么意思
  • 知识管理工具sward上手指南:安装、配置与入门
  • 在Vivado中添加HLS IP后只显示路径无法显示可例化的IP核解决方式