LangGraph基础教程(1)---LangGraph的简介
先介绍一下什么是图结构
线性结构: 1对1 除了首尾节点外,其他节点有且仅有前节点和后节点,有序,有明确的 “起点” 和 “终点”
树形结构: 存在一个唯一的 “根节点”(首节点),其他节点有且仅有一个父节点,但可有多个子节点(最底层节点称为 “叶子节点”,无子节点)
节点分属不同层级,体现 “上下级” 关系。层级分明、无交叉依赖
图结构: 图结构是最灵活的数据结构,元素(节点)之间可以是 “多对多” 的任意关联 ,甚至可以直接与自身关联(自环),节点之间的关系不受层级或顺序约束,可自由连接;
图的核心结构
- 节点(Node): 是图的基本单元,可表示任何实体(如数据、任务、智能体、工具等)
- 边(Edge): 连接两个节点的线段,代表节点之间的关系或交互规则;
根据边的 “方向性” 和 “约束条件”,图结构可分为多种类型: 有向图,无向图,简单图,多重图,完全图等,与 LangGraph 关联最紧密的是有向图和有向循环图
- 无向图(Undirected Graph): 边没有方向,节点之间的关系是双向的。例如:社交网络中 “互为好友” 的关系(A 是 B 的好友,等价于 B 是 A 的好友)。
- 有向图(Directed Graph):有明确的方向(用箭头表示),节点之间的关系是单向的,LangGraph 中的工作流(“生成文本” 节点 → “审核文本” 节点,方向固定,必须先生成再审核)
- 有向循环图(Directed Cyclic Graph, DCG): 属于有向图的一种,允许从一个节点出发,经过若干条边后回到原节点(形成 “循环”)。这是 LangGraph 处理复杂任务的关键特性:
例如:在 “文本优化” 流程中,“生成初稿”→“评估质量”→ 若不达标则 “返回修改”(循环回 “生成初稿” 节点),直到质量合格后进入 “定稿” 节点。
图的关键特性:
路径(Path): 从一个节点到另一个节点的连续边序列。在 LangGraph 中,路径代表任务的执行流程。
权重(Weight): 边可以附加数值(权重),表示关系的强度、成本或优先级。
连通性(Connectivity): 描述节点之间是否可达。在工作流中,需确保关键节点(如 “最终输出”)是可抵达的,避免流程 “卡死”。
在 LangGraph 中,图结构是工作流的 “骨架”:
节点对应具体操作(如 LLM 调用、工具调用、人工干预);
有向边定义操作的执行顺序和条件(如 “若检测到用户问天气,则跳转至天气 API 调用节点”);
循环图支持任务迭代(如 “多次优化回答直到符合格式要求”)。
这种设计让 LangGraph 能突破传统线性工作流的限制,灵活应对多步骤、动态调整的复杂任务(如多轮对话、科研自动化、金融风控等)。
langgraph的核心组件: 构件图结构的基本单元
LangGraph 的图结构由 3 个核心组件 构成,它们共同定义了工作流的 “骨架” 和 “数据载体”
- 节点(Nodes):任务的执行单元
节点是图中最基础的操作载体,封装了具体的逻辑或功能,相当于工作流中的 “步骤”。
类型:
工具调用节点:调用外部工具(如 API、数据库、计算器),例如 “调用天气 API 获取实时温度”。
LLM 节点:调用大语言模型(如 GPT-4、Claude)生成文本,例如 “根据用户问题生成回答初稿”。
逻辑处理节点:执行自定义代码(如数据清洗、格式校验),例如 “检查 LLM 输出是否包含敏感词”。
人工节点:暂停流程等待人工输入(如 “需人工审核高风险内容”)。
特性:节点是 “黑盒”,仅通过输入(状态中的数据)和输出(更新状态)与外部交互,便于模块化复用。
- 边(Edges):节点间的 “流转规则”
边定义了节点之间的连接关系,决定了 “执行完当前节点后,下一步该去哪里”,是图结构灵活性的核心。
类型:
无条件边:固定指向某一节点,例如 “生成初稿后必走审核节点”。
条件边:根据状态中的数据动态选择下一个节点,例如 “若审核通过则进入输出节点,否则返回修改节点”。
循环边:允许从节点 A 跳转回节点 B 形成闭环,例如 “修改后重新进入审核节点,直到通过”。
- 状态(State):全局的 “数据容器”
状态是贯穿整个图结构的全局数据存储,用于在节点间传递信息(如上下文、工具结果、中间结论),避免 “失忆”。
核心作用:存储输入输出:例如用户问题、LLM 生成的文本、工具调用的返回值。记录流程信息:例如当前步骤、已执行的节点列表、错误日志。驱动边的决策:条件边的判断依赖状态中的数据(如 state["novelty_score"])。
特性:可持久化:支持内存、文件或数据库(如 Redis)存储,确保流程中断后可恢复。可扩展:通过类定义自定义状态结构(如 class AgentState: messages: list; tool_results: dict)。
核心功能:图结构带来的 “能力突破”
基于上述组件,LangGraph 实现了传统线性工作流(如单一 LangChain 链)难以支持的复杂功能
- 动态工作流编排:突破 “线性限制”
通过图结构的分支、循环和并行能力,支持 “非固定流程” 的任务规划。
场景示例:
多分支:用户问 “天气 + 推荐餐厅” 时,工作流自动拆分为 “天气查询节点” 和 “餐厅推荐节点” 并行执行,最后合并结果。
循环迭代:学术论文生成中,“初稿生成→查重→修改” 的循环可重复执行,直到查重率低于阈值。
-
状态自动化管理:解决 “上下文丢失” 问题
状态在节点间自动传递并更新,确保所有节点共享全局信息,无需手动传递参数。 -
多智能体协作:支持 “分工与协同”
允许多个独立智能体(如 “检索 Agent”“分析 Agent”“写作 Agent”)通过共享状态协作完成任务。 -
人类在环(Human-in-the-Loop):平衡 “自动化与可控性”
支持在关键节点插入人工干预,避免 AI 自主决策的风险。
实现方式:
定义 “人工节点”,执行到此时流程暂停,通过 API 或 UI 通知人工审核。
人工输入(如 “同意发布”“修改建议”)写入状态后,流程自动继续。
场景:医疗诊断报告生成(需医生确认)、合同条款审核(需法务校验)。
- 与 LangChain 生态深度集成:降低 “开发成本”
复用 LangChain 的工具集、模型接口和记忆模块,无需重复造轮子。 - 可观测性与可回溯:提升 “系统可靠性”
支持记录工作流的完整执行路径和状态快照,便于问题排查和优化。
核心能力:执行日志:记录每个节点的输入、输出、耗时和错误信息。状态回溯:通过 “时间旅行” 功能查看任意步骤的状态数据,定位流程卡点。批量测试:通过 LangSmith 批量运行测试用例,验证不同输入下的流程稳定性。
