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

从 0 到 1 用 Python 写一个最小可用 LangGraph 系统

从 0 到 1 用 Python 写一个最小可用 LangGraph 系统关键词LangGraph, LangChain, 状态机, 多Agent系统, 图结构, LLM应用, Python实现摘要在这篇技术博客中,我们将深入探讨LangGraph的核心概念,并从零开始构建一个最小可用的LangGraph系统。LangGraph是LangChain生态系统中的一个重要组件,它允许我们构建更复杂、状态化的语言模型应用。我们将通过生动的比喻、详细的代码示例和图表,带你理解LangGraph的工作原理,并展示如何用Python实现一个基础但功能完整的LangGraph系统。无论你是LangChain的新手还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的代码实现。1. 背景介绍1.1 LangGraph的诞生背景在人工智能和自然语言处理快速发展的今天,大型语言模型(LLM)已经成为了各种应用的核心。从简单的问答系统到复杂的自动化工作流,LLM的应用场景正在不断扩大。然而,随着应用复杂度的增加,我们面临着一个新的挑战:如何有效地组织和管理多个LLM交互、工具调用和状态转换?传统的LLM应用通常采用线性或简单的分支结构,但这种方式在处理复杂任务时显得力不从心。想象一下,你正在构建一个客户服务机器人,它需要理解用户问题、查询数据库、调用外部API、根据不同情况做出不同决策,并且在整个过程中保持上下文的连贯性。这种情况下,简单的线性流程显然无法满足需求。这就是LangGraph诞生的背景。作为LangChain生态系统的一部分,LangGraph提供了一种以图为基础的方式来构建复杂的LLM应用。它允许我们定义状态、节点(代表动作或决策)和边(代表状态转换),从而创建更加灵活、强大的应用程序。1.2 为什么LangGraph重要?LangGraph的重要性体现在以下几个方面:状态管理:与传统的LangChain链不同,LangGraph天然支持状态管理。这意味着在整个交互过程中,应用可以保持和更新状态,使得多轮对话和复杂决策成为可能。循环和条件逻辑:LangGraph允许我们创建包含循环和条件逻辑的工作流,这对于需要反复尝试或根据不同情况做出不同决策的应用非常重要。多Agent协作:通过LangGraph,我们可以轻松实现多个Agent之间的协作,每个Agent负责不同的任务,共同完成复杂的目标。可控性和可观测性:图结构使得应用的流程更加清晰可控,同时也便于调试和观测应用的运行状态。1.3 目标读者这篇文章主要面向以下读者:有一定Python编程基础,想要了解LangChain生态系统的开发者对构建复杂LLM应用感兴趣的AI爱好者希望提升LLM应用架构设计能力的技术人员想要了解LangGraph内部工作原理的LangChain用户1.4 核心挑战在从零构建LangGraph系统时,我们将面临以下核心挑战:理解图状态机的基本概念和工作原理设计灵活且高效的状态管理机制实现节点和边的抽象与交互处理复杂的控制流,如条件分支和循环确保系统的可扩展性和可维护性在接下来的章节中,我们将一步步解决这些挑战,最终构建出一个最小可用的LangGraph系统。2. 核心概念解析2.1 什么是LangGraph?在深入技术细节之前,让我们先用一个生活化的比喻来理解LangGraph。想象一下,你正在玩一款冒险游戏。在这个游戏中:状态代表你当前的位置、拥有的物品、健康值等信息节点代表你可以采取的行动,如"与NPC对话"、“打开宝箱"或"战斗”边代表从一个行动到另一个行动的路径,可能取决于某些条件LangGraph就像是这样一个游戏框架,它允许你定义游戏的规则(状态、节点和边),然后让AI代理在这个框架内"玩游戏",完成特定的任务。更正式地说,LangGraph是一个基于状态机的图结构,用于构建复杂的LLM应用。它由以下核心组件组成:状态(State):代表系统的当前状况节点(Nodes):代表可以执行的动作或函数边(Edges):连接节点,定义状态转换的规则图(Graph):由节点和边组成的整体结构2.2 核心概念详解2.2.1 状态(State)状态是LangGraph的核心概念之一,它代表了系统在某一时刻的所有信息。你可以把状态想象成一个"背包",里面装着系统运行过程中需要的所有数据。随着系统的运行,这个背包里的东西可能会增加、减少或改变。在LangGraph中,状态通常是一个字典或类似的数据结构,包含了各种键值对。例如,一个简单的聊天机器人状态可能包含:{"messages":["你好,我是助手"],"user_question":"什么是LangGraph?","context":"用户是AI初学者","tool_calls":[]}状态的设计是构建LangGraph应用的第一步,也是最关键的一步。一个好的状态设计应该包含所有必要的信息,但又不至于过于复杂。2.2.2 节点(Nodes)节点是LangGraph中执行实际工作的部分。每个节点代表一个动作或函数,它接收当前状态作为输入,执行某些操作,然后返回更新后的状态。继续我们的冒险游戏比喻,节点就像是游戏中你可以执行的动作。比如,"与NPC对话"这个节点可能会更新你的任务列表,"打开宝箱"这个节点可能会给你的背包里添加新物品,"战斗"这个节点可能会改变你的健康值。在LangGraph中,节点通常是Python函数,它们接收状态作为参数,修改状态,然后返回修改后的状态。例如:defgreet_user(state):# 获取当前状态中的用户名username=state.get("username","陌生人")# 创建问候消息greeting=f"你好,{username}!欢迎使用我们的系统。"# 更新状态,添加问候消息state["messages"].append(greeting)# 返回更新后的状态returnstate2.2.3 边(Edges)边连接节点,定义了状态转换的规则。它们决定了在执行完一个节点后,接下来应该执行哪个节点。在冒险游戏比喻中,边就像是连接不同地点的路径,或者决定你下一步能做什么的规则。例如,在"与NPC对话"后,你可能会有两个选择:“接受任务"或"拒绝任务”,这就是两条不同的边,根据你的选择(状态中的某个值)决定接下来的路径。在LangGraph中,有几种类型的边:普通边:直接连接两个节点,表示从一个节点无条件转移到另一个节点条件边:根据状态中的某个值决定下一步走哪条边入口边:定义图的起始点出口边:定义图的结束点2.2.4 图(Graph)图是由节点和边组成的整体结构,它定义了整个应用的工作流。你可以把图想象成整个冒险游戏的地图,它包含了所有可能的地点(节点)和连接它们的路径(边)。在LangGraph中,图的构建通常遵循以下步骤:定义状态结构创建节点添加边连接节点设置入口点和出口点编译图2.3 概念间的关系和相互作用理解了LangGraph的核心概念后,让我们来看一下它们是如何相互作用的。首先,状态是整个系统的核心,它在节点之间流动。当一个节点执行完毕后,它会更新状态,然后根据边的规则将状态传递给下一个节点。这个过程持续进行,直到到达出口点。让我们用一个简单的客户服务机器人例子来说明这个过程:系统从初始状态开始,包含用户的问题"理解问题"节点分析用户问题,更新状态中的"问题类型"字段根据"问题类型"字段,条件边决定接下来是走"技术支持"路径还是"账单问题"路径相应的节点执行特定的操作,如查询知识库或数据库最后,"生成回复"节点根据所有收集到的信息生成最终回复,更新状态到达出口点,流程结束2.4 概念结构与核心要素组成为了更清晰地展示LangGraph的概念结构,让我们用Mermaid图表来表示:交互过程LangGraph系统输入更新条件判断选择路径更新输入更新图Graph状态State节点Nodes边Edges节点1动作/函数节点2动作/函数节点3动作/函数普通边无条件转移条件边条件转移入口边起始点出口边结束点新状态1新状态2最终状态这个图表展示了LangGraph的核心组件以及它们之间的交互过程。2.5 概念核心属性维度对比为了更深入地理解LangGraph的核心概念,让我们用表格来对比它们的关键属性:概念核心作用数据类型可变性主要交互对象示例状态存储系统信息字典/对象可变所有节点{“messages”: […], “user_id”: 123}节点执行具体操作函数/可调用对象固定状态def analyze_query(state): …边定义状态转换规则/连接固定节点if state[“type”] == “tech”: go to tech_support图组织整体结构图结构固定节点、边完整的工作流定义2.6 概念联系的ER实体关系图让我们用ER图来展示LangGraph核心概念之间的关系:

相关文章:

从 0 到 1 用 Python 写一个最小可用 LangGraph 系统

从 0 到 1 用 Python 写一个最小可用 LangGraph 系统 关键词 LangGraph, LangChain, 状态机, 多Agent系统, 图结构, LLM应用, Python实现 摘要 在这篇技术博客中,我们将深入探讨LangGraph的核心概念,并从零开始构建一个最小可用的LangGraph系统。LangGraph是LangChain生态…...

如何用AI视频分析工具快速理解视频内容:完整指南

如何用AI视频分析工具快速理解视频内容:完整指南 【免费下载链接】video-analyzer Analyze videos using LLMs, Computer Vision and Automatic Speech Recognition 项目地址: https://gitcode.com/gh_mirrors/vi/video-analyzer 在信息爆炸的数字时代&#…...

html如何修改备注

<p>HTML中没有“备注”&#xff0c;只有<!-- -->注释&#xff1b;它不显示、不可见、无法被JS选择器获取&#xff0c;仅用于源码说明&#xff0c;语法严格&#xff0c;不可嵌套或缺失字符&#xff0c;生产环境常被压缩移除。</p>HTML 里没有“备注”这个东西…...

Android车机蓝牙开发避坑指南:如何正确配置A2DP Sink与HFP Client模式(附源码修改点)

Android车机蓝牙音频接收端开发实战&#xff1a;A2DP Sink与HFP Client模式深度配置 在智能座舱和车载娱乐系统快速发展的今天&#xff0c;蓝牙音频接收功能已成为车机系统的标配能力。不同于手机作为音源端的常规场景&#xff0c;车机需要作为接收端&#xff08;Sink&#xff…...

别再让机械臂‘抖’了!用Matlab手把手教你实现输入整形(附完整代码)

机械臂振动抑制实战&#xff1a;用Matlab实现输入整形的完整指南 看着机械臂末端执行器在定位后持续抖动的画面&#xff0c;作为工程师的你一定眉头紧锁。这种残余振动不仅影响定位精度&#xff0c;还会延长作业周期——在高速分拣、精密装配等场景下&#xff0c;这简直是性能杀…...

深入AC695N Soundbox SDK:模式管理模块的代码设计与调试避坑指南

深入AC695N Soundbox SDK&#xff1a;模式管理模块的代码设计与调试避坑指南 在嵌入式音频设备开发中&#xff0c;模式管理是系统稳定性的核心枢纽。AC695N作为杰里科技面向Soundbox应用的旗舰芯片&#xff0c;其SDK中的模式切换机制直接关系到用户体验的流畅度。本文将带您深入…...

【Unity】解决UGUI的Button无法点击/点击无反应的排查方案

1.UGUI与用户实现交互的基本原理当用户触摸/点击屏幕的时候&#xff0c;会从屏幕接触的那个点&#xff0c;从相机发射一条射线&#xff0c;如果射线中途有UI元素会阻挡射线&#xff08;Raycast Target&#xff09;&#xff0c;则会根据实际情况执行UI交互的行为。我们可以根据这…...

Oracle密码过期的处理方法

1、问题描述2、解决方法2.1、以SYSDBA身份登陆sqlplus sys/sysorcl as sysdba2.2、修改账号的密码alter user 账号 identified by "密码";...

ITE 联阳半导体推出新一代 IT6115:集成分路器与信号放大器的 MIPI 全能转换方案

随着 AR/VR、折叠屏及智能座舱等高端影像市场的爆发&#xff0c;MIPI 接口在带宽、传输距離以及协议兼容性上正面临前所未有的挑战 。联阳半导体&#xff08;ITE&#xff09;顺势推出了高度集成的 MIPI D-PHY / C-PHY 双模转换核心——IT6115 。IT6115 并非简单的桥接芯片&…...

偏相关怎么做:SPSSAU操作步骤与结果解读

一、偏相关所属模块 偏相关在SPSSAU中位于【进阶方法】模块。 二、方法概述 偏相关用于考察多个定量变量之间的相关关系&#xff0c;同时剔除控制变量带来的干扰影响。它适合用于研究两个或多个指标之间是否仍然存在稳定联系&#xff0c;尤其适用于需要排除背景因素影响的分…...

GBase数据库助力某大型再保险机构核心系统替换案例介绍

保险行业的关联交易、档案管理、数据服务&#xff0c;背后都离不开数据库的稳定支撑。某大型再保险机构原本采用开源数据库搭建核心系统&#xff0c;随着业务发展和安全要求提升&#xff0c;决定全面替换为国产数据库。南大通用基于共享存储的数据库集群GBase 8s&#xff08;gb…...

龙迅 LT8775 Type‑C/DP1.4/eDP1.4 转双 MIPI DSI+LVDS 桥接芯片详解

最近做车载中控、便携 4K 屏、VR 双显方案&#xff0c;用到龙迅 LT8775&#xff0c;整理完整参数、应用与调试要点&#xff0c;分享给大家。 一、芯片定位与核心规格 LT8775 是龙迅高性能 Type‑C/DP1.4/eDP1.4 转双 MIPI DSI LVDS 视频桥接芯片&#xff0c;内置 MCUEDID/HDCP…...

小晓AI标书精灵构建企业级招投标智能体:基于Spring AI与LangGraph的架构实践

背景&#xff1a;从自动化到智能化的代际跨越在数字化转型的深水区&#xff0c;招投标行业正面临从“电子化流程”向“智能化决策”的范式转移。传统的标书制作往往受困于非结构化数据的处理瓶颈、长文档的逻辑一致性维护以及严苛的合规性要求。小晓AI标书精灵的此次重磅升级&a…...

Flutter APK打包遇阻:深入剖析‘gen_snapshot’缺失引发的非零退出值错误

1. 问题现象&#xff1a;Flutter打包APK时遭遇的"拦路虎" 最近在Windows系统上用Flutter打包APK时&#xff0c;突然遇到了一个让人头疼的错误。执行flutter build apk命令后&#xff0c;控制台抛出一堆红色错误信息&#xff0c;最显眼的就是那句"Process finish…...

python学习笔记 | 2026-4-16 | 使用list和tuple

这篇内容一共讲了两件事 list&#xff08;列表&#xff09; —— 可以随便改的有序盒子tuple&#xff08;元组&#xff09; —— 一旦创建就不能改的有序盒子一、list&#xff08;列表&#xff09;是什么&#xff1f; 用 方括号 [] 表示里面可以放数字、文字、布尔值、甚至另一…...

还在“人肉审漏洞”?AI 正在接管 DevSecOps,而你可能还没上车

还在“人肉审漏洞”?AI 正在接管 DevSecOps,而你可能还没上车 你有没有经历过这种崩溃时刻: 代码刚上线,安全漏洞被爆 CI/CD 跑得飞快,安全扫描却慢得像蜗牛 一堆告警刷屏,结果 90% 是误报 更扎心一点: 你以为 DevSecOps 已经“左移”了,其实只是把问题“提前发现”,…...

2026供应商审核重点:5大维度+AI工具应用指南

供应商审核的重点关注点主要包括资质合规性、质量体系、风险监控、供应链穿透和响应能力这五大核心维度。2026年行业又迎来了新要求&#xff0c;供应链需穿透到三级、AI预警替代人工监控、质量数据实时可追溯成为标配。用风鸟企业查询平台可以一站式搞定这些审核要点&#xff0…...

杀疯了!Claude Opus 4.7 突袭发布,多项能力登顶第一

北京时间 2026 年 4 月 17 日&#xff08;凌晨&#xff09;&#xff0c;Anthropic 正式推出 Claude Opus 4.7 版本&#xff0c;作为当前面向公众开放的最强旗舰模型&#xff0c;此次更新没有涨价&#xff0c;却在代码、视觉、推理等核心维度全面拉满&#xff0c;直接刷新多项行…...

基于STM32LXXX的模数转换芯片ADC(SGM58031XMS10G/TR)驱动C程序设计

一、简介: SGM58031是一款低功耗、16位高精度Δ-Σ(ΔΣ)模数转换器(ADC),工作电压范围为3V至5.5V。 该器件集成片上参考电压源与振荡器,配备IC兼容接口并支持四个IC从设备址选择功能,滤波器数据采样率最高可达960SPS。内置PGA(电平调整器)可提供低至256mV的输入范围…...

基于STM32LXXX的模数转换芯片ADC(ADS1100A0IDBVR)驱动C程序设计

一、简介: ADS1100是一款高精度、具备连续自校准功能的模数转换器(A/D),采用差分输入接口,可在紧凑的SOT23-6封装中实现高达16位的分辨率。该转换器采用比率测量方式,以电源电压作为参考电压。 ADS1100配备I2C兼容串行接口,支持2.7V至5.5V的单一电源供电,可提供每秒8、…...

Solon AI v3.13 发布(智能体开发框架,支持 Java8 到 Java26)

Solon AI Solon AI 是一款面向 Java 开发者 的全栈智能体&#xff08;Agent&#xff09;应用开发框架。它秉承 Solon 家族一贯的“克制、高效、开放”理念&#xff0c;向上抽象统一接口屏蔽模型差异&#xff0c;向下深度集成向量库、MCP 协议与复杂流控制。 核心理念&#xf…...

Office Timeline Plus(PPT时间线制作) 14.05

Office Timeline Plus 是一款专业的PPT时间线制作软件&#xff0c;作为PowerPoint的强大插件深度集成到Office办公环境中。该PowerPoint时间轴插件让用户能够在制作演示文稿时轻松添加时间轴元素&#xff0c;为每个时间段编辑不同的内容&#xff0c;是Windows和Office平台上备受…...

2026国产适合企业的Ai智能体平台选型推荐:架构师视角下的非侵入式集成与提效避坑指南

摘要&#xff1a; 站在2026年4月这个“智能体商用元年”的时间点&#xff0c;企业对于AI的认知已从简单的“对话框”进化为具备自主决策与执行能力的“智能员工”。然而&#xff0c;在实际落地过程中&#xff0c;多数企业仍深陷系统烟囱、API缺失及信创适配难的泥潭。作为一名在…...

PyCharm里用pip装Seaborn总失败?试试这3种更稳的安装方式(含Anaconda对比)

PyCharm里用pip装Seaborn总失败&#xff1f;试试这3种更稳的安装方式&#xff08;含Anaconda对比&#xff09; 每次在PyCharm里用pip安装Seaborn时&#xff0c;你是不是也经常遇到各种莫名其妙的报错&#xff1f;网络超时、依赖冲突、版本不兼容...这些问题困扰着无数数据分析开…...

从零实现MDP:用Python代码拆解马尔可夫决策过程核心算法

1. 马尔可夫决策过程入门指南 第一次接触马尔可夫决策过程(MDP)时&#xff0c;我也被那些数学符号弄得头晕眼花。但当我用Python把它实现出来后&#xff0c;突然就豁然开朗了。MDP本质上是一个用来建模序列决策问题的数学框架&#xff0c;在机器人路径规划、游戏AI等领域都有广…...

AI编程革命:用Codex告别重复造轮子

告别重复造轮子&#xff1a;Codex写脚本的技术文章大纲技术背景与现状重复造轮子的定义及其在开发中的常见场景 传统脚本编写方式的痛点&#xff1a;效率低、维护成本高 AI辅助编程工具&#xff08;如Codex&#xff09;的兴起及其技术原理Codex的核心能力与应用场景Codex的模型…...

OpenSTA:开源芯片时序验证引擎如何重塑数字设计流程

OpenSTA&#xff1a;开源芯片时序验证引擎如何重塑数字设计流程 【免费下载链接】OpenSTA OpenSTA engine 项目地址: https://gitcode.com/gh_mirrors/op/OpenSTA OpenSTA是一款革命性的开源静态时序分析引擎&#xff0c;专为现代芯片设计流程打造。它通过解析Verilog网…...

如何获取并定制化订货系统源码以适应企业需求?

在数字化转型的浪潮中&#xff0c;构建自主可控的 B2B 业务平台已成为众多企业的核心战略。对于希望深度掌控业务流程、实现数据私有化部署的企业而言&#xff0c;直接获取并二次开发订货系统源码是最高效的路径。这不仅意味着拥有系统的完全所有权&#xff0c;更代表了能够根据…...

Unity游戏窗口自定义:实现标题栏与边框的动态控制

1. 为什么需要自定义Unity游戏窗口样式 当你用Unity开发游戏或者工具软件时&#xff0c;默认的窗口样式可能会显得很"游戏引擎"。标准的标题栏、边框和系统按钮&#xff08;最小化/最大化/关闭&#xff09;虽然实用&#xff0c;但有时候我们需要更专业的界面外观。比…...

健康管理没有局外人!深圳国商联帮你把健康握在手里

不知道你有没有发现&#xff0c;身边谈论“养生”的人越来越年轻了。 以前觉得三高、心血管问题那是上了年纪才要考虑的事&#xff0c;现在三十出头就开始关注血脂、血糖的朋友大有人在。至于癌症&#xff0c;更是不分年龄、不分性别&#xff0c;悄悄潜伏在生活角落里。 说白了…...