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

使用 LangGraph 构建状态化 Agent Harness

使用 LangGraph 构建状态化 Agent Harness标题选项从零到一:使用 LangGraph 构建高度可控的状态化 Agent 系统LangGraph 实战指南:构建具有记忆和推理能力的智能 Agent Harness告别简单链:使用 LangGraph 构建复杂状态化 Agent 的完整教程掌握 LangGraph:构建企业级状态化 Agent Harness 的最佳实践从 LangChain 到 LangGraph:构建下一代状态化智能 Agent引言痛点引入你是否曾经尝试过使用 LangChain 构建一个复杂的 AI Agent,却发现简单的链式结构无法满足你的需求?当你需要处理多轮对话、保持上下文状态、实现条件分支或循环逻辑时,传统的链式结构显得力不从心。你可能发现自己在不断地 hack 代码,试图让系统按照你的意愿工作,但结果往往是代码变得难以维护和扩展。在当今的 AI 应用开发中,我们需要的不仅仅是简单的“提示词-响应”模式,而是能够模拟人类思维过程、具有状态记忆、能够做出复杂决策的智能 Agent。这些 Agent 需要能够:记住之前的交互和决策根据当前状态选择不同的行动路径处理错误和异常情况在多个工具和数据源之间协调实现复杂的推理和规划流程文章内容概述本文将带你深入了解 LangGraph——一个由 LangChain 团队开发的、专门用于构建状态化 Agent 的库。我们将从基础概念开始,逐步深入到实际应用,最终构建一个功能完整的状态化 Agent Harness。具体来说,我们将涵盖以下内容:LangGraph 的核心概念和设计理念如何设置开发环境构建基础的状态图和节点实现条件边和循环逻辑集成工具和外部 API处理多轮对话和状态管理错误处理和重试机制最佳实践和性能优化读者收益读完本文后,你将能够:理解 LangGraph 与传统 LangChain 链的区别和优势独立设计和构建复杂的状态化 Agent 系统实现具有记忆、推理和决策能力的智能应用掌握 LangGraph 的高级特性和最佳实践为你的 AI 应用添加更强大的交互和控制能力无论你是刚刚开始探索 AI Agent 开发,还是已经有一定 LangChain 使用经验但希望构建更复杂系统的开发者,本文都将为你提供有价值的 insights 和实用的代码示例。准备工作在开始我们的 LangGraph 之旅之前,让我们先确保你具备必要的知识和环境。技术栈/知识为了充分理解本文的内容,你应该具备以下基础知识:Python 编程:熟悉 Python 3.8+ 的语法和特性,包括异步编程、类型提示等。LangChain 基础:了解 LangChain 的核心概念,如 LLMs、Prompts、Chains、Tools 等。虽然不是必需的,但这将帮助你更快地理解 LangGraph。状态机概念:对有限状态机(FSM)有基本了解将有助于理解 LangGraph 的设计理念。API 调用:熟悉如何使用 Python 调用外部 API,处理 JSON 数据等。异步编程:了解 async/await 模式,因为 LangGraph 充分利用了异步编程来提高性能。环境/工具在开始编写代码之前,你需要设置好以下环境和工具:Python 环境:确保你安装了 Python 3.8 或更高版本。我推荐使用 conda 或 venv 来创建虚拟环境,以避免依赖冲突。# 使用 venv 创建虚拟环境python-mvenv langgraph-env# 激活虚拟环境# Windowslanggraph-env\Scripts\activate# macOS/Linuxsourcelanggraph-env/bin/activate必要的库:我们需要安装以下核心库:langgraph:我们的主角,用于构建状态图langchain:提供 LLM 集成、工具等langchain-openai:OpenAI 模型的集成python-dotenv:用于管理环境变量pipinstalllanggraph langchain langchain-openai python-dotenvAPI 密钥:你需要一个 OpenAI API 密钥(或其他支持的 LLM 提供商的密钥)。你可以从 OpenAI 官网获取。代码编辑器:选择你喜欢的代码编辑器,如 VS Code、PyCharm 等。可选工具:Jupyter Notebook:用于实验和调试Git:用于版本控制一旦你准备好了这些,我们就可以开始探索 LangGraph 的世界了!核心概念:理解 LangGraph在开始编写代码之前,让我们先深入理解 LangGraph 的核心概念和设计理念。这将帮助你更好地理解后续的代码示例和最佳实践。问题背景传统的 LangChain 链(Chains)虽然强大,但它们本质上是线性的。它们按照预定义的顺序执行一系列步骤,每个步骤的输出作为下一个步骤的输入。这种线性结构对于简单的任务来说足够了,但当我们需要构建更复杂的应用时,就会遇到以下限制:缺乏状态管理:传统链在执行过程中很难维护和更新复杂的状态。难以实现条件逻辑:虽然可以使用RouteChain等实现简单的条件分支,但复杂的条件逻辑仍然难以处理。不支持循环:传统链很难实现循环执行某个步骤直到满足特定条件的逻辑。错误处理有限:当链中的某个步骤失败时,很难实现灵活的错误恢复策略。可观察性差:很难跟踪和调试链的执行过程。为了解决这些问题,LangChain 团队开发了 LangGraph——一个基于状态机概念的库,专门用于构建复杂的、状态化的 AI Agent。核心概念LangGraph 的核心概念非常简单,但却非常强大。让我们逐一介绍:1. 状态(State)状态是 LangGraph 的核心概念之一。它代表了 Agent 在执行过程中所维护的所有信息。状态可以包括:用户的输入和历史对话Agent 的中间思考和推理从工具或 API 获取的结果任何其他需要在执行过程中保持的数据在 LangGraph 中,状态通常定义为一个 TypedDict 或 Pydantic 模型,这样可以提供类型安全和更好的开发体验。fromtypingimportTypedDict,Annotated,Sequencefromlangchain_core.messagesimportBaseMessageimportoperatorclassAgentState(TypedDict):# 消息历史messages:Annotated[Sequence[BaseMessage],operator.add]# 当前任务current_task:str# 任务结果task_result:str# 错误信息error:str注意这里使用了Annotated和operator.add,这告诉 LangGraph 当更新messages字段时,应该将新消息添加到现有列表中,而不是替换整个列表。2. 节点(Nodes)节点是 LangGraph 中的执行单元。每个节点代表 Agent 可以执行的一个动作或函数。节点接收当前状态作为输入,并返回一个更新后的状态(或状态的一部分)。节点可以是:调用 LLM 进行推理执行某个工具或 API处理和转换数据做出决策下面是一个简单的节点示例:fromlangchain_openaiimportChatOpenAIfromlangchain_core.messagesimportHumanMessage llm=ChatOpenAI(model="gpt-4")defcall_model(state:AgentState)-AgentState:"""调用 LLM 生成响应"""messages=state["messages"]response=llm.invoke(messages)# 返回更新后的状态return{"messages":[response]}3. 边(Edges)边定义了节点之间的连接关系,决定了状态流转的路径。边可以是:普通边:从一个节点无条件地流向另一个节点条件边:根据当前状态的某些条件决定下一个节点入口点:定义图的起始节点结束点:定义图的结束节点条件边是 LangGraph 最强大的特性之一,它允许我们根据当前状态动态地决定执行路径。fromtypingimportLiteraldefshould_continue(state:AgentState)-Literal["tool","end"]:"""决定是否需要继续执行工具或结束"""messages=state["messages"]last_message=messages[-1]# 如果有工具调用,则继续执行工具iflast_message.tool_calls:return"tool"# 否则结束return"end"4. 图(Graph)图是 LangGraph 的顶层容器,它将节点和边组合在一起,形成一个完整的执行流程。LangGraph 提供了StateGraph类来构建状态图。fromlanggraph.graphimportStateGraph,END# 创建图workflow=StateGraph(AgentState)# 添加节点workflow.add_node("agent",call_model)workflow.add_node("tool",execute_tools)# 设置入口点workflow.set_entry_point("agent")# 添加条件边workflow.add_conditional_edges("agent",should_continue,{"tool":"tool","end":END,},)# 添加普通边workflow.add_edge("tool","agent")# 编译图app=workflow.compile()概念之间的关系为了更好地理解这些核心概念之间的关系,让我们使用一个 ER 图来表示:containscontainsmanagesreadsupdatesconnectsmay_haveGRAPHNODEEDGESTATECONDITION这个图展示了:一个图(Graph)包含多个节点(Node)和边(Edge)图管理着一个状态(State)节点读取和更新状态边连接节点,并可能有条件(Condition)状态流转过程让我们再用一个流程图来展示 LangGraph 中状态的流转过程:

相关文章:

使用 LangGraph 构建状态化 Agent Harness

使用 LangGraph 构建状态化 Agent Harness 标题选项 从零到一:使用 LangGraph 构建高度可控的状态化 Agent 系统 LangGraph 实战指南:构建具有记忆和推理能力的智能 Agent Harness 告别简单链:使用 LangGraph 构建复杂状态化 Agent 的完整教程 掌握 LangGraph:构建企业级状…...

CnOpenData A股上市公司招股说明书公告数据

根据2007年1月30日证监会令第40号公布的《上市公司信息披露管理办法》,为规范发行人、上市公司及其他信息披露义务人的信息披露行为,上市公司应当及时、准确、完整地披露相关信息,包括招股说明书、募集说明书、上市公告书、定期报告和临时报告…...

VRCT终极指南:免费解锁VRChat多语言交流的神奇工具

VRCT终极指南:免费解锁VRChat多语言交流的神奇工具 【免费下载链接】VRCT VRCT(VRChat Chatbox Translator & Transcription) 项目地址: https://gitcode.com/gh_mirrors/vr/VRCT 你是否曾在VRChat中因为语言障碍而错失精彩对话?当你听到日语…...

Visual Studio:打开#包诊断

例如,下面代码的前面引用了两个头文件,但不知道哪个没有被引用:在代码编辑区右键单击,在上下文菜单中选择 #include指令-》打开#包诊断:可以看到,string.h 这个头文件0引用,所以可以放心删除&am…...

5分钟掌握League Akari:英雄联盟终极智能助手使用指南

5分钟掌握League Akari:英雄联盟终极智能助手使用指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari是一款基于英雄…...

CnOpenData A股上市公司股权激励公告数据

根据2007年1月30日证监会令第40号公布的《上市公司信息披露管理办法》,为规范发行人、上市公司及其他信息披露义务人的信息披露行为,上市公司应当及时、准确、完整地披露相关信息,包括招股说明书、募集说明书、上市公告书、定期报告和临时报告…...

臻灵:数字人+大模型,实时交互的技术临界点在哪里

数字人大模型:实时交互的技术临界点在哪里 当数字人可以听懂你的情绪,当虚拟主播可以即兴回答弹幕问题,当企业客服不再是机械地回复"您好,请问有什么可以帮助您"——我们正在见证数字人从"数字形象"向"数…...

数字图像相关(DIC)测量系统在软物质实验力学中的应用

近日,由中国科学技术大学与安徽淮南理工大学联合承办的《软物质实验力学测试技术学术研讨会》在淮南市寿县召开。与会学者围绕“生命软物质、智能软材料、柔性电子器件、新型纳米材料”等前沿方向展开研讨。软物质实验力学研究通常关注三个问题:一是变形…...

西门子PLC伺服大型多轴多气缸智能控制,Modbus与RS232通讯,完整触摸屏程序,机械结构...

西门子PLC伺服大型20轴程序modbus通讯RS232通讯MES通讯气缸,通讯,机械手,模拟量等,各种FB块 PTO控制20多个轴,100多个气缸,控制2台机器人。 5台PLC智能IO通讯,ModbusRTU通讯轮询,完整…...

如何用5分钟彻底优化你的Windows系统:Winhance中文版完整指南

如何用5分钟彻底优化你的Windows系统:Winhance中文版完整指南 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winh…...

OpenSCENARIO 2.0:自动驾驶仿真领域的下一代场景描述语言

1. OpenSCENARIO 2.0:自动驾驶仿真的语言革命 当你在玩赛车游戏时,有没有想过电脑控制的车辆为什么能如此逼真地避让、超车?背后正是场景描述语言在指挥这些"虚拟司机"。而在真实的自动驾驶开发中,这种语言的重要性被放…...

开机卡在‘reboot and select proper boot device’?别慌,这3个BIOS设置检查点帮你5分钟搞定

开机卡在‘reboot and select proper boot device’?三步排查法助你快速恢复系统 遇到电脑开机时突然显示"reboot and select proper boot device"的提示,确实会让人心头一紧。这个报错意味着系统在启动时找不到可引导的设备,但别担…...

3分钟彻底掌控Windows安全:开源工具defender-control让你的系统真正属于你

3分钟彻底掌控Windows安全:开源工具defender-control让你的系统真正属于你 【免费下载链接】defender-control An open-source windows defender manager. Now you can disable windows defender permanently. 项目地址: https://gitcode.com/gh_mirrors/de/defe…...

PEG-PLA-PAMAM-Fe₃O₄ NPs,聚乙二醇-聚乳酸-PAMAM修饰四氧化三铁纳米颗粒,制备方法

PEG-PLA-PAMAM-Fe₃O₄ NPs,聚乙二醇-聚乳酸-PAMAM修饰四氧化三铁纳米颗粒,制备方法PEG-PLA-PAMAM-Fe₃O₄ NPs是一类以四氧化三铁(Fe₃O₄)纳米颗粒为核心,并在其表面构建聚乙二醇-聚乳酸(PEG-PLA&#xf…...

PEG-Dex-Mal-Fe₃O₄ NPs,聚乙二醇-右旋糖苷-马来酰亚胺修饰四氧化三铁纳米颗粒,定义与特点

PEG-Dex-Mal-Fe₃O₄ NPs,聚乙二醇-右旋糖苷-马来酰亚胺修饰四氧化三铁纳米颗粒,定义与特点PEG-Dex-Mal-Fe₃O₄ NPs是一类以四氧化三铁(Fe₃O₄)纳米颗粒为无机核心,在其表面构建右旋糖苷(Dextran, Dex&am…...

PEG-PLLA-Mal-Fe₃O₄ NPs,聚乙二醇-聚L-乳酸-马来酰亚胺修饰四氧化三铁纳米颗粒,定义与特点

PEG-PLLA-Mal-Fe₃O₄ NPs,聚乙二醇-聚L-乳酸-马来酰亚胺修饰四氧化三铁纳米颗粒,定义与特点PEG-PLLA-Mal-Fe₃O₄ NPs是一类以四氧化三铁(Fe₃O₄)纳米颗粒为核心,并在其表面引入聚乙二醇-聚L-乳酸(PEG-PL…...

如何轻松备份你的QQ空间回忆:GetQzonehistory完整指南

如何轻松备份你的QQ空间回忆:GetQzonehistory完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想过,那些记录青春岁月的QQ空间说说,如…...

如何零门槛掌握暗黑破坏神2存档编辑:从二进制迷宫到可视化自由

如何零门槛掌握暗黑破坏神2存档编辑:从二进制迷宫到可视化自由 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾幻想过能够像游戏设计师一样自由定制自己的暗黑破坏神2角色?是否渴望摆脱枯燥的练级…...

通过Citrix API实现许可证管理自动化与系统集成

经过Citrix API实现许可证管理自动化跟系统集成掏心窝子说,我就是个“许可证焦虑”的过来人。以前项目上线前晚上,最怕的就是看到“License不足”的警告。那时候,不可你要这么说,得跟产品经理、业务部门扯皮还得临时协调资源&…...

远程办公场景Allegro许可证安全使用方案

远程办公场景下的Allegro许可证安全使用方案 讲真,这帮年我在几家制造企业当过顾问,见过太多人就因为软件许可出了大事。有的项目卡在软件申麻烦上,急得直跺脚;有的IT部门天天在干“抢许可”的活儿,忙得焦头烂额。最离…...

告别手动抢票烦恼:用Python自动化脚本轻松获取大麦网演出门票

告别手动抢票烦恼:用Python自动化脚本轻松获取大麦网演出门票 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 还在为心仪演出门票秒光而烦恼吗?每次抢票时,紧张…...

用PyTorch手把手教你实现CT图像重建的FP/FBP模块(附完整代码与避坑指南)

用PyTorch实现CT图像重建的FP/FBP模块:从理论到工业级代码的完整指南 在医学影像处理领域,CT图像重建技术一直是研究热点。传统重建算法如滤波反投影(FBP)在临床应用中表现优异,但当这些算法需要与深度学习结合时,如何在PyTorch框…...

esp32操作系统研究

ESP32系列芯片作为乐鑫科技推出的高性能、低功耗物联网系统级芯片,其操作系统架构与实现机制是理解其技术优势和开发潜力的关键。本文将深入剖析ESP32的操作系统生态,从底层FreeRTOS内核到上层ESP-IDF开发框架,再到各类高级开发环境(如Arduino、MicroPython等)的层次结构,…...

别再让串口数据丢失了!手把手教你为STM32 HAL库串口添加环形FIFO缓冲区

STM32 HAL库串口通信的救星:环形FIFO缓冲区实战指南 在嵌入式开发中,串口通信就像系统的神经末梢,负责与外界交换关键数据。但当你满怀期待地调试STM32的串口功能时,是否遇到过这样的场景:传感器数据莫名其妙丢失、蓝牙…...

终极指南:用Ryujinx在PC上免费畅玩Switch游戏的完整教程

终极指南:用Ryujinx在PC上免费畅玩Switch游戏的完整教程 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想在电脑上体验《塞尔达传说:旷野之息》的广阔世界&…...

别再粗暴地用Ctrl-C了!Python中安全停止后台任务的5种设计模式

Python后台任务优雅终止的5种工程实践 当你在凌晨三点被生产环境告警惊醒,发现某个Python服务在滚动更新时丢失了关键数据,而原因仅仅是运维人员用Ctrl-C强制终止了进程——这种场景足以让任何开发者脊背发凉。不同于临时脚本,长期运行的服务…...

基于STM32Cube MX的CAN总线高效配置实战:从HAL库初始化到多节点通信调试

1. CAN总线与STM32Cube MX基础认知 第一次接触CAN总线时,我也被它复杂的协议栈吓到过。但实际在工业控制领域,CAN总线就像老司机们心照不宣的暗号——用两根线就能搞定多设备通信。我的第一个CAN项目是给智能农业大棚做环境监控,当时用STM32F…...

AI伦理在测试中的应用:防止模型偏差

随着人工智能技术深度融入软件测试流程,自动化测试、智能缺陷预测与生成式测试用例构建等应用显著提升了效率与覆盖率。然而,技术的赋能也伴随着严峻的伦理挑战,其中模型偏差问题尤为突出。对于软件测试从业者而言,测试工具与流程…...

【Linux从入门到精通】第1篇:开篇辞——我们为什么要学Linux?从服务器霸主到Android内核

目录 一、引言:我们为什么要学Linux? 二、Linux与Windows/macOS:三种哲学的分野 三、Linux发行版图谱:选对第一套系统 1. Debian系:社区驱动的稳定基石 2. RedHat系:企业应用的事实标准 3. Arch系&…...

【20年IDE架构师亲测】:长代码生成准确率从63%跃升至91.7%的6个不可跳过的工程化卡点

第一章:智能代码生成在长代码中的挑战 2026奇点智能技术大会(https://ml-summit.org) 当智能代码生成模型面对超过千行的模块化系统(如微服务入口层、编译器前端或分布式事务协调器)时,其输出质量常出现显著衰减。这种衰减并非源…...