langgraph教程系列-01-为什么需要图-从链到图
本文是「LangGraph 教程系列」第 1 篇。写作时基于 langgraph 1.2.10、langchain 1.3.14、langchain-deepseek 1.1.0、Python 3.12。配套代码仓库 https://github.com/wxj006007/deep-research-assistant 本篇对应 tagv0。这个系列要做一件事带你亲手把一个「深度研究助手」从 v0 养到 v5。它一开始只会直接回答问题最后能联网检索、接受人类审批、跨会话记忆、多专家协作、部署成 API。每一篇的节奏都一样上一版撞了什么墙这一版用 LangGraph 的哪个特性把墙拆掉。特性不是硬塞给你的是助手自己「长」出来的需求。今天是第 1 篇我们先把 v0 跑起来。而且要跑两遍一遍用链一遍用图。跑完你就能亲手摸到「从链到图」的差异在哪。一、你可能听过 LangChain 的 chain 写法不需要你熟悉 LangChain只需要知道一个背景。LangChain 是 LangGraph 的前代产品同一家公司LangChain Inc.出品它最出圈的抽象叫 chain链把提示词、模型、输出解析器像水管一样串起来数据从左往右流。这种写法有个正式名字叫 LCELLangChain Expression Language核心就是一个管道符chainprompt|llm|parser优雅、直观、一行搞定。那为什么同一家公司后来又做了 LangGraph 呢坦率的讲因为链有一个天生的限制数据只能单向流动流程不能回头也不能分叉。先别急着理解这句话我们把 v0 写出来跑完再回头看。二、v0一个只会直接回答的研究助手v0 的需求简单到不能再简单用户提一个问题助手直接回答。没有检索、没有反思、没有任何花活。流程只有一步用户问题调用模型回答2.1 环境准备pipinstalllanggraph1.2.10langchain1.3.14 langchain-deepseek1.1.0 python-dotenv模型用 DeepSeek在 platform.deepseek.com 申请 API Key写进.env的DEEPSEEK_API_KEY。整个系列共用一个模型工厂# src/llm.pyfromdotenvimportload_dotenvfromlangchain_deepseekimportChatDeepSeek load_dotenv()defget_llm(temperature:float0.0)-ChatDeepSeek:returnChatDeepSeek(modeldeepseek-chat,temperaturetemperature)2.2 用 LCEL 写 v0# src/v0_chain.pyfromlangchain_core.output_parsersimportStrOutputParserfromlangchain_core.promptsimportChatPromptTemplatefromsrc.llmimportget_llm promptChatPromptTemplate.from_messages([(system,你是一个研究助手请直接、准确地回答用户的问题。),(human,{question}),])chainprompt|get_llm()|StrOutputParser()answerchain.invoke({question:什么是 LangGraph})print(answer)三个组件一根管道数据从prompt流到llm再流到parser一路向右绝不回头。对 v0 这种「一步到位」的需求链是完美的。2.3 用 LangGraph 写 v0现在用 LangGraph 把完全相同的功能再写一遍。LangGraph 的世界里只有三件套State状态一个共享的数据结构流程中所有步骤都读写它Node节点一个普通的 Python 函数读 state、干一件事、返回要更新的字段Edge边声明节点之间谁先谁后# src/v0_graph.pyfromtypingimportTypedDictfromlanggraph.graphimportEND,START,StateGraphfromsrc.llmimportget_llm# State整个图共享的状态classResearchState(TypedDict):question:stranswer:str# Node一个普通函数就是一个节点defanswer_node(state:ResearchState)-dict:llmget_llm()responsellm.invoke([(system,你是一个研究助手请直接、准确地回答用户的问题。),(human,state[question]),])# 节点只返回要更新的字段LangGraph 负责合并进 statereturn{answer:response.content}# Edge把节点连成图builderStateGraph(ResearchState)builder.add_node(answer,answer_node)builder.add_edge(START,answer)builder.add_edge(answer,END)graphbuilder.compile()resultgraph.invoke({question:什么是 LangGraph})print(result[answer])跑一下两个版本的输出几乎一样但代码量明显变多了。可能有小伙伴纳闷这不是退步吗三、图到底比链强在哪3.1 先承认v0 用图是杀鸡用牛刀对单步流程图写法确实更啰嗦。LCEL 一行管道LangGraph 要定义 State、写节点函数、连边、编译四道工序。这一点我不打算辩护说实话如果你的需求永远停留在单步问答用链一点问题没有。但注意两个写法的结构性差异维度链LCEL图LangGraph数据传递上一步的输出直接塞给下一步所有步骤读写同一个共享 State流程形状一条直线方向固定任意拓扑边可以指向任何节点流程控制结构即控制写死在管道里边是显式声明的可以按条件选择回到之前的步骤不可能加一条回指的边就行链的「输出直接喂给下一步」听着省事代价是第 3 步只能看到第 2 步的输出看不到第 1 步的。图的共享 State 不一样任何节点都能看到之前所有节点留下的信息。链的「结构即控制」呢流程在写代码时就定死了。图把边做成显式声明那结果会怎样呢下一步去哪可以在运行时根据 State 决定。这就是下一篇要讲的条件边。3.2 三种范式链、循环、图把流程组织方式抽象一下其实是三个层次图任意拓扑节点A路由节点B节点C节点D循环能回头否是执行满意?结束链单向流水线步骤1步骤2步骤3链能表达「依次做」循环能表达「不满意就重做」图能表达依次做、按条件分叉、不满意重做的任意组合。你想想看链和循环其实都只是图的特例。一个真正的 Agent 需要什么判断、分叉、重试、回头反思这些全是图才有的能力。LangChain Inc. 自己从 chain 走到 graph 的产品演进就是「从链到图」这个标题的最佳注脚先用链把「把 LLM 组件串起来」这件事做顺然后发现严肃的 Agent 场景需要的是图。顺带一提如果你把「节点」换成「工序」这个演进你在历史课本里见过。手工作坊是一条链一个人从头做到尾。流水线引入了固定分工的循环。现代供应链则是一张动态调度的图。生产组织方式的演进和 Agent 编排方式的演进走的是同一条路复杂度到了结构就得升级。3.3 那 v0 为什么还要用图写一遍因为 v0 不会停在 v0。我们的研究助手马上要面对的现实是事实型问题和分析型问题该用不同的回答策略v0.1流程要分叉检索结果要累积不能覆盖v0.2状态要合并答案不满意要回头重查v1流程要循环。如果 v0 用链写每次进化都要推翻重来。用图写每次进化只是加节点、加边State、Node、Edge 三件套不变。这就是我们在最简单的版本就切换到 LangGraph 的原因不是 v0 需要图是 v1、v2、v3 需要。四、本篇小结回到「从链到图」这块这篇其实就讲了一件事。链是prompt | llm | parser式的单向流水线适合定死的流程。图用 State、Node、Edge 三件套描述任意拓扑链和循环都只是它的特例Agent 需要的判断、分叉、重试只有图能表达。另外有一个约定值得你现在就记牢节点不修改 state只返回要更新的字段合并交给框架。第 3 篇讲 reducer 时它是主角。v0 已经能跑了但它有个毛病。不管你问「LangGraph 是哪家公司开源的」还是「为什么 Agent 框架都在转向图结构」它都用同一套提示词硬答事实型问题答得啰嗦分析型问题答得草率。流程需要分叉。下一篇条件边登场。赞或收藏 关注 我们下次再见

相关新闻

计算机网络五层模型与异常流量检测:从协议原理到实战排查

计算机网络五层模型与异常流量检测:从协议原理到实战排查

1. 从“异常流量”到知识体系:为什么你需要这篇总结最近在帮学弟学妹们准备期末考和面试,不止一个人跑来问我:“学长,我复习的时候,系统老是弹窗说‘检测到您的计算机网络中存在异常流量’,这到底啥意思&am…

2026/10/19 6:54:37 阅读更多 →
原来重庆这些正规会议系统品牌这么好,究竟哪家更值得选?

原来重庆这些正规会议系统品牌这么好,究竟哪家更值得选?

在会议系统市场蓬勃发展的今天,重庆地区也涌现出了众多优质的品牌。如何从这些品牌中挑选出最适合自己的会议系统,成了许多企业和单位面临的难题。下面就为大家介绍一些正规的会议系统品牌,其中重点了解一下重庆优沃科技的特色。 重庆优沃科…

2026/10/19 6:54:35 阅读更多 →
原来重庆这些竟然是知名的会议系统厂商,你知道几家?

原来重庆这些竟然是知名的会议系统厂商,你知道几家?

在重庆的商业、办公等领域,会议系统的重要性日益凸显。一个好的会议系统能极大提升会议效率和体验。下面为大家介绍重庆知名的会议系统厂商,看看你知道几家。重庆优沃科技有限公司:双渠道产品体系优势明显重庆优沃科技有限公司成立于2011年5月…

2026/10/18 4:50:54 阅读更多 →

最新新闻

计算机考研复试第30天:补齐基础概念、机试手感与面试表达

计算机考研复试第30天:补齐基础概念、机试手感与面试表达

1. 第30天的“补”,到底该补什么计算机复试准备到第30天,其实已经到了一个很微妙的阶段:初试那种“天天背、天天刷题”的节奏早就失效了,而复试又不像初试那样有一条一眼能看到头的复习主线。我把这一天的笔记标成“补”&#xff…

2026/10/19 6:54:02 阅读更多 →
数据库内核实践:实现LRU缓冲池与并发控制全复盘

数据库内核实践:实现LRU缓冲池与并发控制全复盘

某高校软件学院数据库系统实验四,终于在我把一个周末加两晚搭进去之后提交了。这轮实验和前面三次完全不是一个画风:前几轮还在调SQL、画ER图、写存储过程,到了第四次,需求文档里明明白白写着「实现一个支持LRU置换与并发访问的缓…

2026/10/19 6:54:02 阅读更多 →
如何让 flux2-klein-9B 出图更快?显卡显存优化与推理调优终极指南

如何让 flux2-klein-9B 出图更快?显卡显存优化与推理调优终极指南

【免费下载链接】flux2-klein-9B 项目地址: https://ai.gitcode.com/hf_mirrors/Comfy-Org/flux2-klein-9B 点击查看 免费下载 flux2-klein-9B 是 ComfyUI 官方为 FLUX.2-klein-9B 重打包的模型文件仓库,提供全精度、FP8 与 FP4 混合精度三种文本编码器…

2026/10/19 6:54:02 阅读更多 →
VisualPRM-8B数据揭秘:VisualPRM400K自动化管线如何构建多模态过程监督数据集

VisualPRM-8B数据揭秘:VisualPRM400K自动化管线如何构建多模态过程监督数据集

【免费下载链接】VisualPRM-8B 项目地址: https://ai.gitcode.com/OpenGVLab/VisualPRM-8B 点击查看 免费下载 📊 本文带你揭秘 VisualPRM-8B 背后的训练数据:VisualPRM400K 多模态过程监督数据集。它由一条全自动的 VisualPRM400K 自动化数…

2026/10/19 6:54:02 阅读更多 →
具身智能中的无线技术——无线线束2

具身智能中的无线技术——无线线束2

本文对比了车载与具身智能领域六种有线(LIN、CAN/CANFD、FlexRay、车载以太网、SerDes、A2B)与九种无线短距通信技术(BLE、星闪、Wi-Fi、UWB等),并基于通信距离、带宽、延迟、同步精度、功耗等维度进行综合分析。提出“…

2026/10/19 6:54:02 阅读更多 →
一文读懂Qwen3.6-35B-A3B-Quark-INT4-G128:MoE大模型INT4量化的完整入门指南

一文读懂Qwen3.6-35B-A3B-Quark-INT4-G128:MoE大模型INT4量化的完整入门指南

【免费下载链接】Qwen3.6-35B-A3B-Quark-INT4-G128 项目地址: https://ai.gitcode.com/hf_mirrors/amd/Qwen3.6-35B-A3B-Quark-INT4-G128 点击查看 免费下载 Qwen3.6-35B-A3B-Quark-INT4-G128 是用 Quark INT4 W4A16 方案对 Qwen3.6-35B-A3B 这个 MoE 多模态大模型…

2026/10/19 6:53:02 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →