AI Agent 工程化开发实战(一):Agent 开发的四个层次——积木、运行时、薄壳、套件
目录前言一、从一个困惑说起二、官方分三类产品依赖上却是四层三、四个层次逐层拆第 1 层积木langchain-core第 2 层运行时LangGraph第 3 层薄壳create_agent middleware第 4 层套件Deep Agents四、一张调用链图看清全貌五、一次选型定位该落到哪一层六、工程化要点双向认知参考文献前言本系列贯穿一条英文概念主线Agent Runtime → Harness。本文先建立整个系列的认知地基为什么我们讲「四个层次」而不是你更常听到的「三个框架」。一、从一个困惑说起如果你刚接触 LangChain 生态大概率会被这三个词绕晕LangChain、LangGraph、Deep Agents。它们是三个递进的框架吗是不是「先学 LangChain再学 LangGraph最后学 Deep Agents」我该从哪个入手为什么 LangChain 官网一会儿说自己是「框架」一会儿又冒出一个「运行时」、一个「套件」这套困惑不是你的问题是这个生态自己给自己挖的坑——它把产品和依赖层次两件事混在一起讲读者自然分不清。这篇先做一件事把「三类产品」和「四个层次」同时摆在你面前讲清楚它们各是什么、又怎么对应。这是后面各篇的地基值得现在花五分钟立稳。二、官方分三类产品依赖上却是四层先看官方口径。官方把 Agent 开发生态分成三类Runtime / Framework / Harness[1]——LangChain 自家三个产品 LangGraph / LangChain / Deep Agents SDK 正好各占其一[2]官方类别产品一句话定位Runtime运行时LangGraph控制 Agent智能体怎么执行图、状态、检查点、流式Framework框架LangChain提供组件和create_agent工厂Harness套件Deep Agents SDK把一套内置中间件栈各自注入常用工具打包好的开箱即用套件按产品数就是3 类。这没错。但注意两点一是这个「三类」是对整个生态的分类——每一类里都还有第三方选项Runtime 还有 Temporal / InngestFramework 还有 CrewAI / OpenAI Agents SDKHarness 还有 Claude Agent SDK 等只是本系列只讲 LangChain 自家的三个二是官方产品名现在是Deep Agents SDK另有独立的 Deep Agents CLI本文为行文简洁下文一律简称Deep Agents。但落到依赖关系上事情变了——因为LangChain 不是一个整块。它被 LangGraph 从中间「劈」成了两半langchain-core积木messages / tools / models / bind_tools ← LangChain 的一半在 LangGraph 之下 ↑ 依赖 LangGraph运行时图、状态、Checkpoint、流式、HITL ↑ 依赖 create_agent middlewareLangChain 薄壳 ← LangChain 的另一半在 LangGraph 之上 ↑ 依赖 deepagents / create_deep_agentDeep Agents 套件所以是「3 类产品、4 层依赖」。多出来的那一层正是把 LangChain 劈开的结果langchain-core我们叫它「积木」在 LangGraph之下——它是 LangGraph 的地基LangGraph 依赖它create_agent 中间件我们叫它「薄壳」在 LangGraph之上——它包在 LangGraph 外面是 LangGraph 的一层封装。这条是我全系列反复强调的铁律不要把 LangChain 画成一整块叠在 LangGraph 之上。很多人包括早期教程也包括我当年自己画的图都在这栽过跟头后果是讲create_agent的时候逻辑对不上——它明明「包着」LangGraph怎么会和「垫着」LangGraph 的langchain-core是同一个东西三、四个层次逐层拆从下往上看一层一层说清楚它「是什么、管什么」。第 1 层积木langchain-core最底层也是最「无聊」、最该先吃透的一层。它提供的是最小原子messages消息对象Human / AI / Tool / Systemtools工具的声明与描述models大模型的统一调用接口bind_tools把工具「绑」到模型上让模型知道它能调用什么以及后面讲检索与 RAG 的篇章要展开的检索组件Document / Embedding / Retriever 等。这一层不关心「Agent 怎么循环、怎么记忆、怎么中断」它只关心「一个消息长什么样、一个工具怎么声明、一次模型调用怎么发」。你后面写的每一行from langchain_core ... import用的都是这层。为什么它是最底层因为 LangGraph 自己就是建立在它之上的——Agent 场景下StateGraph里流动的状态通常是MessagesState一组messages不过状态本身可以是任意TypedDict结构。节点里调用的就是models和tools。第 2 层运行时LangGraphLangGraph 是执行引擎回答的问题是「Agent 每一步该怎么走」。它提供了图 / 节点 / 边把 Agent 拆成一个个节点调用模型、调用工具用边串成执行流状态StateAgent 每一步的输入输出、累积的对话历史都存在一个显式的状态对象里Checkpoint检查点每一步的中间状态可持久化支持断点恢复官方称时间旅行time travel讲 Checkpoint 与断点恢复的篇章会专门展开流式stream把执行过程以 token / 节点为单位推出来Human-in-the-loopHITL人在环在任意节点暂停等人类确认再继续讲 HITL 的篇章会给出底层interrupt()。一句话积木是「零件」运行时是「流水线」。LangGraph 决定零件按什么顺序、在什么状态驱动下流转。第 3 层薄壳create_agent middleware这是 LangChain 在 LangGraph之上的那半。LangGraph 已经能跑 Agent但手写StateGraph太啰嗦——一个「调模型 → 调工具 → 再调模型」的最简 Agent你要自己写节点、写条件边、写循环终止。于是 LangChain 提供了一个create_agent工厂一行代码生成一个标准的「模型 工具」循环图还附带一套中间件middleware栈让你在「模型调用前 / 调用后」「工具调用时」等时机插入自定义逻辑讲中间件的篇章会专门展开。所以「薄壳」的「薄」是刻意的它不改变LangGraph 的执行语义只是在外面包了一层更省事的 API。你要控制得更细随时可以「下沉」回 LangGraph。第 4 层套件Deep Agents最顶层最省力。create_deep_agent来自deepagents包在create_agent的基础上再打包一层把「写计划、读写文件、执行代码、管理长期记忆、人在环」这些生产级 Agent 几乎都要用的东西作为一套内置中间件栈各自注入内置工具预先装好。它和薄壳的关系就像薄壳和运行时套件是薄壳的薄壳薄壳是运行时的薄壳。你从第 4 层起步需要什么控制力就逐层往下沉。四、一张调用链图看清全貌认知篇不贴代码后面每篇都有能跑的代码用一张调用链图把四层的关系钉死。假设你最终写下这样一行fromdeepagentsimportcreate_deep_agent agentcreate_deep_agent(...)这行代码背后是自上而下的一串依赖调用你的代码 │ 调用 ▼ create_deep_agent(...)← 第4层 套件 │ 内部调用 ▼ create_agent(...) middleware 栈 ← 第3层 薄壳 │ 内部调用 ▼ StateGraphnodes / edges / state ← 第2层 运行时 │ 依赖 ▼ langchain-coremessages / tools / models / bind_tools ← 第1层 积木记这张图时抓两点方向是自上而下的依赖上层调用下层下层不反过来依赖上层。create_deep_agent不认识你的业务它只调用create_agentcreate_agent不认识「写计划」它只构建StateGraphStateGraph不关心「Agent」它只流转messages。LangChain 横跨两层create_agent薄壳在 LangGraph 之上langchain-core积木在 LangGraph 之下。这就是「3 类产品 / 4 层」的由来——Framework这一个产品拆出了两个依赖位置。五、一次选型定位该落到哪一层认知篇的「实战」不是写代码而是练一种选型直觉拿到一个需求或一个报错能立刻判断「它该由哪一层来负责」。这是我这些年排查问题和做架构评审时最高频的动作给你几道我真实遇到过的情况试着先自己想再看定位。场景 A「我要一个能调工具、带记忆、能写文件的 Agent最好明天就能演示。」→ 落第 4 层套件。create_deep_agent一行搞定规划、文件、记忆都是内置的。别手写StateGraph——那是把「明天要演示」的活干成「下周」。场景 B「我要在每次调用模型之前注入一段动态的系统提示比如按用户等级加载不同人设。」→ 落第 3 层薄壳。这是create_agent的中间件before_model干的活。用第 4 层做不了这么细的「卡点」用第 2 层又太重。场景 C「我要一个多智能体编排一个 supervisor 派单给几个子 Agent各自有独立的检查点和中断点还要能回放任一步。」→ 落第 2 层运行时。多图、独立 checkpoint、断点恢复/回放这是StateGraph 子图的地盘。第 3、4 层是「单 Agent 循环」的封装硬套多智能体会拧巴。场景 D报错AttributeError: BaseChatModel object has no attribute bind_tools发生在你往 LangGraph 节点里传模型的时候。→ 这是第 1 层积木的问题——bind_tools是挂在模型对象上的方法第 1 层的模型接口报这个错几乎总是因为你传进去的不是 ChatModel 对象比如拿成了裸 provider 模型、旧的BaseLLM或对象被错误包装。顺着「它属于第 1 层」去查你传进去的模型对象而不是在 LangGraph 的图逻辑里瞎找。我的选型口诀能用高层就绝不手写底层但一旦你要「精确控制」某一步就一路下沉到管那一步的那层别在高层的缝里硬抠。这也正是官方推荐的方向——默认从 Deep Agents 开始需要控制再下沉讲选型决策的篇章会把它展开成一套决策树。六、工程化要点双向认知最后把这个「双向认知」立住它能解释整个系列的编排逻辑自底向上 依赖顺序学习 / 理解时的顺序langchain-core→ LangGraph →create_agent→ Deep Agents。你要搞懂「为什么create_agent能包住 LangGraph」就得先知道 LangGraph 依赖什么、LangGraph 又能提供什么。所以本系列从 LangGraph 讲起而不是从「最省力的 Deep Agents」讲起——那不是最省力是「会用但不懂」。自顶向下 使用顺序真实开发时的顺序Deep Agents →create_agent→ LangGraph →langchain-core。上手永远是最高层逐层下沉直到拿到你要的控制力。两者不矛盾就像「装配一台发动机要从零件理解起但开车出门是从点火起步」。本系列 Part 1 快速起步、Part 2 系统讲运行时、Part 3 讲薄壳与积木、Part 4 讲套件、Part 5 组装成主案例正是这条双向认知的落地。记住本文最该带走的一句话官方是 3 类产品Runtime / Framework / Harness依赖上是 4 层——因为 LangChain 被劈成了「积木下 薄壳上」两块。这句话会是后面各篇反复回来校准的坐标原点。参考文献[1] LangChain 官方文档 · ConceptsProductsRuntimes, frameworks, harnesses— https://docs.langchain.com/oss/python/concepts/products[2] LangChain 官方博客《Deep Agents vs LangChain vs LangGraph》— https://www.langchain.com/blog/deep-agents-vs-langchain-vs-langgraph[3] LangGraph 官方文档 · Overview — https://docs.langchain.com/oss/python/langgraph/overview 更多专栏系列文章可以查看博客主页 若文章对你有所触动恳请点赞 ⭐ 关注 ⭐ 收藏

相关新闻

Python 技术报告:从 C 语言结构体到 Python 复合数据建模

Python 技术报告:从 C 语言结构体到 Python 复合数据建模

在 C 语言中,struct 是一种自定义复合数据类型,用于把多个不同类型的数据组合成一个整体。结构体变量可以通过 . 访问成员,结构体指针则通过 -> 访问成员。Python 虽然没有与 C 语言完全相同的 struct 关键字,但它提供了更丰富…

2026/10/15 3:58:45 阅读更多 →
51单片机电子秤系列weight

51单片机电子秤系列weight

1. 引言 这是一套基于 STC89C52(REGX52.H) 的智能称重分拣系统,核心硬件包括: HX711:24 位高精度 A/D 转换芯片,负责读取称重传感器(电阻应变式)的原始数据;DS1302&#…

2026/10/15 3:58:45 阅读更多 →
离散元分析(DEM)和机器学习(Machine Learning, ML)

离散元分析(DEM)和机器学习(Machine Learning, ML)

文章目录1. 机器学习辅助2PFV-DEM参数标定2. GNN DEM:最值得作为创新点3. AI预测非饱和土土水特征曲线4. 深度学习识别SEM/MIP细观结构 → DEM胶结模型5. 论文最推荐的AI路线第一阶段第二阶段第三阶段(创新)第四阶段最终可以形成的论文题目方…

2026/10/15 3:57:45 阅读更多 →

最新新闻

Java反射机制原理、优化与实践指南

Java反射机制原理、优化与实践指南

1. 反射机制的本质与核心价值Java反射是运行时动态获取类信息并操作类成员的能力集合。与静态编码不同,反射允许程序在编译期未知具体类的情况下,通过Class对象完成方法调用、字段存取等操作。这种能力源于JVM的类型信息保留机制——即使经过编译擦除&am…

2026/10/15 6:56:51 阅读更多 →
QT Socket 客户端服务端一体化调试工具:原理、实现与避坑指南

QT Socket 客户端服务端一体化调试工具:原理、实现与避坑指南

简介:本资源是一份基于Qt的TCP网络编程实战项目源码,面向具备一定C与Qt基础、希望掌握网络通信开发的初学者和进阶开发者。项目将TCP客户端与服务器端功能集成于同一GUI程序,借助Qt Network模块中的QTcpSocket与QTcpServer类,演示…

2026/10/15 6:56:51 阅读更多 →
空间站锂离子电池技术解析与应用前景

空间站锂离子电池技术解析与应用前景

1. 项目背景与核心价值在太空探索领域,能源系统堪称航天器的"心脏"。最近我国空间站开展的新型锂离子电池在轨实验,标志着空间能源技术迈入新阶段。作为一名曾参与卫星电源系统设计的工程师,我深知这项实验对后续深空探测任务的意义…

2026/10/15 6:56:51 阅读更多 →
PyTorch深度学习实战:动态图、自动求导与训练调优全解析

PyTorch深度学习实战:动态图、自动求导与训练调优全解析

1. 为什么“PyTorch”这三个字值得反复咀嚼如果你最近在技术社区里闲逛,或者翻看各类招聘需求,会发现“PyTorch”这个词的出现频率高得离谱。它不只是一个深度学习框架的名字,更像是一张通行证——从学术论文的代码复现,到工业级推…

2026/10/15 6:56:51 阅读更多 →
C语言经典练手题:水仙花数拆解循环与取余的巧妙应用

C语言经典练手题:水仙花数拆解循环与取余的巧妙应用

这两年我一直在坚持整理一套C语言入门练手题,专栏名字就叫“菜鸟编程C语言100例”。前面三道题分别过了一遍变量与数据类型、格式化输出、if-else分支判断,到了第四题,我想着该让循环结构登场了。但纯写一个“for循环讲解”又太枯燥&#xff…

2026/10/15 6:56:51 阅读更多 →
SpringBoot+Vue轻量级博客系统设计与实现

SpringBoot+Vue轻量级博客系统设计与实现

1. 项目概述:SpringBootVue轻量级博客系统设计去年帮学弟评审毕业设计时,发现市面上很多博客系统要么功能冗余,要么扩展性差。于是我们决定用SpringBootVue搭建一个轻量级但五脏俱全的在线创作社区。这个系统最核心的特点是采用前后端分离架构…

2026/10/15 6:55:51 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →