零基础入门 LangChain 与 LangGraph(二):AI 都会写代码了,为什么还要学框架?
文章目录
零基础入门 LangChain 与 LangGraph(二):AI 都会写代码了,我为什么还要学框架?
💬 开篇:上一篇我先把大模型、提示词、Embedding 和接入方式这些“地基”铺开了。到那一步,我已经能回答“模型是什么”“为什么会有 Prompt”“为什么 RAG 离不开向量”,但新的问题马上就来了:既然现在 AI 已经能写代码,甚至一句话就能生成一个小应用,那我为什么不直接上手用这些工具,而是还要花时间系统学 LangChain 和 LangGraph?
👍 这篇我想讲清楚的核心问题:AI 会写代码,解决的是“起步快”;但真正把一个 AI 能力做成可维护、可扩展、可上线、可调试的应用,靠的不是一句 prompt,而是工程化的抽象、状态管理、工具编排和流程控制。也正是在这个层面上,LangChain 和 LangGraph 才真正开始有价值。
🚀 这篇的定位:这不是环境安装篇,也不是 API 背诵篇,而是一篇“框架认知篇”。我要先把一件事想明白:我到底是在学一个库,还是在学 AI 应用开发的工程方法。
一、怎么把模型做成应用
1.1 只知道模型、Prompt 和 Embedding,还不等于会做 AI 应用
上一篇之后,我们已经对这些概念有了一定理解:
- 模型负责理解输入、生成输出
- Prompt 负责把任务描述清楚
- Embedding 负责把文本变成向量,支撑语义检索
- API、本地部署、SDK 只是不同的接入方式
这些东西都很重要,但它们更多回答的是:“一个模型是什么,以及我怎么碰到它。”
可一旦真的开始往“做应用”这件事上想,问题就变了。
因为一个真正能用的 AI 应用,绝不只是:
用户输入一句话 -> 调一次模型 -> 返回一段文本 它中间往往还会夹着很多层:
- 提示词模板怎么组织
- 多轮对话状态怎么保存
- 知识库怎么接进来
- 工具什么时候调用
- 模型输出怎么变成结构化数据
- 某一步失败了怎么重试
- 长流程中断后怎么恢复
- 结果怎么评估、怎么调试、怎么追踪
到这里我才真正意识到:
一个“能聊天的模型”,离一个“能落地的应用”,中间差的不是一点 API,而是一整层工程。
1.2 现在最容易把人带偏的一句话,就是“AI 都会写代码了”
这句话听起来很有冲击力,而且也不完全错。
因为现在的模型确实已经很强了。你给它一个需求,它能:
- 写一个网页 Demo
- 写一个爬虫脚本
- 写一个接口
- 写一个小游戏
- 给你补一段业务代码
很多人第一次看到这些效果,很自然就会得出一个结论:
那我还学什么框架?
直接让 AI 写不就行了?
我一开始也差点这么想。
但后来我发现,这个结论里其实偷换了一个非常关键的问题:
“会生成代码” 和 “能完成工程” 根本不是一回事。
前者解决的是产出速度,
后者解决的是系统质量。
而接下来学 LangChain 和 LangGraph,真正要解决的恰恰是第二个问题。
二、Vibe Coding 为什么突然这么火
2.1 什么是 Vibe Coding?
“Vibe Coding” 这个词在 2025 年突然火起来,不是因为它第一次让 AI 写代码,而是因为它把一种开发姿势说得特别形象:开发者尽量只描述意图,把实现细节大幅外包给模型,自己更多是通过看结果、提新要求、复制报错、继续追问的方式推动代码往前走。 这个词一般被认为是 Andrej Karpathy 在 2025 年 2 月提出的;而 Simon Willison 后来专门写文章强调:不是所有 AI 辅助编程都叫 vibe coding,真正的 vibe coding 更接近“我主要凭感觉驱动,甚至不认真读 diff”。(TechCrunch)
我自己现在对它的理解是:
Vibe Coding 不是“AI 辅助写代码”的总称,而是一种更激进的、以自然语言驱动实现细节、弱化代码阅读与底层掌控感的开发方式。
换句话说,如果我只是把 AI 当成一个更聪明的补全工具、重构工具、解释工具,那还不算严格意义上的 vibe coding。
真正更接近 vibe coding 的状态,是:
- 我主要描述需求,不怎么手写实现
- 我主要看运行结果,不太看中间过程
- 我把很多局部决策交给模型
- 我甚至可能没有完全理解生成代码的全部结构
2.2 为什么它会让这么多人上头
因为它确实抓住了开发里最让人上头的那部分体验:反馈非常快。
以前写一个小东西,流程大概是这样:
想需求 -> 设计数据结构 -> 写代码 -> 跑起来 -> 改 bug -> 再改需求 现在很容易变成:
说需求 -> AI 先给一版 -> 跑起来看看 -> 继续用自然语言修 这对很多场景是非常爽的,比如:
- 做一个临时工具
- 写一个简单页面
- 验证一个小想法
- 搭一个原型
- 写一些重复性特别强的样板代码
尤其是当需求还不稳定、还在摸索的时候,这种“先让它长出来,再一点点改”的方式,非常符合人的直觉。
在我看来,Vibe Coding 真正吸引人的地方,不是“自动生成代码”本身,而是:
它把开发从“逐行构造”变成了“持续验收”。
这是一种非常大的心智变化。
2.3 但我不想把它神化:它改变的是分工,不是工程规律
这个概念火了以后,最容易出现的误区就是把它神话成:
- 程序员不重要了
- 框架不重要了
- 基础不重要了
- 架构也可以靠模型“自动长出来”
我现在反而越来越不认同这种说法。
因为 Vibe Coding 不是把工程规律消灭了,
它只是把人的精力从“手写每一行代码”往更高层挪了一点:
- 更强调问题定义
- 更强调需求表达
- 更强调验收和审查
- 更强调架构边界
- 更强调系统理解
所以从这个角度看,开发者并不是“消失”了,
而是从纯粹的代码生产者,越来越像:
- 方案设计者
- 约束制定者
- 结果审查者
- 系统负责人
这也是为什么我越往后学,越觉得:
AI 时代真正更重要的,不是“会不会手敲每一行”,而是“能不能控制系统如何生长”。
而框架,正是做这件事的。
三、 Vibe Coding 远不是终点:它能做 Demo,但做不了完整工程
3.1 能跑,不等于可维护
这是大多数人最在意的一点。
一个小 Demo 能跑起来,说明的是:
- 这段代码眼下可能没报错
- 这个功能路径暂时是通的
- 模型在当前上下文里凑出了一版实现
但工程里真正困难的,从来都不是“第一版能不能跑”,而是:
- 半个月后你还看不看得懂
- 另一个人能不能接着改
- 增加新需求时会不会牵一发动全身
- 出线上问题时能不能定位
- 做版本演进时会不会越来越乱
这一点我做过 C++ 网络项目之后感受特别深。
比如一个高并发服务器项目里,最可怕的从来不是“写不出 accept/epoll/read/write”,
而是你有没有把这些东西组织成:
- 清晰的事件流
- 稳定的对象生命周期
- 合理的线程归属
- 可控的资源边界
AI 当然可以给你生成几个函数,
但系统结构不是靠函数堆出来的。
3.2 它对局部很强,但对整个系统的持续一致性并不天然可靠
这也是很多人真正上手之后会碰到的问题。
当项目很小的时候,AI 很像一个效率倍增器。
但当项目一大,你会越来越频繁地遇到这些情况:
- 新需求和旧设计冲突
- 早期接口和后期实现不一致
- 局部修好了,整体风格乱了
- 新加的功能绕过了旧约束
- 代码表面上没错,但结构越来越腐化
为什么会这样?
因为大模型非常擅长在当前上下文里生成“局部合理”的东西,
但一个真实系统需要的是长期一致的约束。
而这件事,靠的不是模型自己“悟出来”,而是你有没有提前给它:
- 清晰的边界
- 稳定的抽象
- 明确的状态流
- 固定的接口契约
说白了,
Vibe Coding 的问题不是它不强,
而是它天然更偏“局部生成”,不负责“全局演化”。
3.3 更现实的问题是:安全、可靠性、可追踪性,都不能靠“它大概会对”
这一点在企业项目里尤其致命。
AI 可以很快给你一段看起来没问题的代码,
但它不会天然替你承担这些责任:
- 这里有没有注入风险
- 这里有没有越权访问
- 这里有没有异常兜底
- 这里有没有幂等性问题
- 这里并发下会不会出竞态
- 这里失败后怎么恢复
- 这里上线后怎么排查
这些东西不属于“生成几行代码”的问题,
而属于系统设计与运维可控性的问题。
Vibe Coding 最适合的是“加速局部实现”,而不是“接管整体工程”。
真正的项目里,它更像一个很强的助手,
而不是你把整个系统都放心交给它的总工程师。
3.4 真正需要的,不是“一个更会写代码的模型”,而是一套能控制复杂度的组织方式
到这一步,我的目标已经不是:
- 让模型帮我多写点代码
而是:
- 让模型调用可替换
- 让提示词结构可复用
- 让检索流程可组合
- 让工具调用可编排
- 让输出格式可约束
- 让状态能够保存
- 让长流程能中断、恢复、追踪
而这整套事情,本质上都已经不再是“写一段脚本”的问题了。
它是工程组织问题。
四、框架为什么在 AI 时代反而更重要了?
4.1 框架最核心的价值,从来不是“帮我少写几行”
很多初学者对框架的第一印象是:
框架 = 偷懒工具
这个理解太浅了。
框架真正的价值,通常至少有三层:
- 抽象重复问题
把那些高频出现、形式稳定的底层细节收起来 - 统一组织方式
让代码结构、调用路径、模块边界有一致性 - 限制复杂度扩散
当项目变大时,避免每个功能都按自己的方式野蛮生长
这套逻辑在传统后端里很常见。
Spring 是这样,libcurl 这种库也是这样。
现在到了 AI 应用开发里,本质并没有变。
只是被抽象起来的对象,从数据库、网络请求、依赖注入,换成了:
- 模型调用
- Prompt 组织
- 工具调用
- 检索流程
- 状态管理
- 结果解析
- 工作流编排
Spring AI 官方文档现在写得就很直白:它的核心就是用一套抽象把不同 AI provider 的实现统一起来,让组件可以低成本切换,并提供跨模型的便携 API、结构化输出、向量库集成等能力。(Home)
一句话总结:
AI 时代不是让框架失效了,而是让“抽象层”变得更值钱了。框架提供了一种让我们把本来离散的 AI 能力,组织成一个真正可运行、可扩展、可维护的系统的方式。
五、LangChain 到底是什么
5.1 先看官方定位:它不是模型,而是面向 LLM 应用的高层框架
现在官方文档对 LangChain 的定位已经非常明确:它是一个开源框架,提供预构建的 agent 架构,以及和不同模型、工具的集成,目标是让开发者更快构建由 LLM 驱动的应用;如果要快速起步做 agent 或 autonomous application,优先从 LangChain 开始。(LangChain Docs)
更重要的是,官方“Philosophy”页把它的两个核心目标也说得很清楚:
- 让开发者可以更容易切换到更好的模型,避免 provider lock-in
- 让模型不只做文本生成,而是能和外部数据、外部计算一起编排复杂流程 (LangChain Docs)
这两句话非常关键,因为它们几乎就是 LangChain 的“框架灵魂”:
- 前者解决的是模型抽象
- 后者解决的是流程抽象
所以 LangChain 并不是“再造一个模型”,
而是给模型外面包了一层更适合做应用的工程壳。
5.2 LangChain 为什么会出现?它到底是在补哪块空白?
官方时间线里写得很清楚:LangChain 在 2022 年 10 月作为 Python 包发布,最早的核心就是 LLM abstraction 和 chains;2023 年 1 月推出 JavaScript 版本;到了 2025 年 10 月的 1.0,官方又把高层抽象进一步收敛,明确把 agent 作为新的标准入口。(LangChain Docs)
这条时间线其实说明了一件事:
LangChain 的出现,不是为了“把 prompt 写得更漂亮”,而是为了让开发者别再每接一个模型、每做一个流程、每换一个工具都重写一遍胶水代码。
它补的空白主要就是下面这些:
- 不同模型 provider 参数不一样,消息格式不一样
- Prompt 组织方式容易散
- 输出天然是自然语言,不方便程序消费
- 检索、工具、模型调用很难标准化拼起来
- 多步流程写到后面会很乱
- 换模型、换向量库、换工具时耦合太重
而 LangChain 提供的,就是一套“统一界面”。
5.3 我现在对 LangChain 的理解:它是 AI 应用开发里的“组件层 + 组合层”
如果让我用最工程化的话来描述,我会这样说:
LangChain 不是单个功能点,而是一组可组合的组件抽象。
这些组件一般包括:
- 模型抽象
- 消息抽象
- Prompt 模板
- 输出解析
- 文档加载
- 文本切分
- Embedding
- Retriever
- Tool
- Agent
你会发现,这里面没有一个东西是“凭空发明”的。
它们全都是上一篇里那些基础能力的工程化版本。
也就是说,LangChain 做的不是创造新能力,
而是把原本零散的能力,变成:
- 可以复用
- 可以替换
- 可以组合
- 可以扩展
的一套标准化积木。
5.4 “Chain” 这个词,不该只理解成老 API,而要理解成“组合思想”
很多人第一次学 LangChain,最容易被各种旧文章带偏:
- 什么
LLMChain - 什么
ConversationChain - 什么各种各样的老式 chain 类名
但现在官方路线已经明显收敛了。LangChain 1.0 明确把 create_agent 作为标准高层入口,同时把旧的很多遗留能力移到了 langchain-classic;本质上,官方是在告诉开发者:不要再执着于背一堆旧类名,而是要抓住真正稳定的高层抽象。 (LangChain Docs)
所以我现在理解“Chain”这个词时,不会再停留在“某个具体类”,而是先抓它背后的思想:
把多个步骤按照确定的输入输出关系串起来,让一整个任务能够连续执行。
最简单的链式思路,可以画成这样:
User Input
Prompt Template
LLM
Retriever or Tool
LLM
Structured Result
这张图的重点不是某个节点叫什么,
而是你要意识到:
- 每个节点都只做自己那一小步
- 节点之间靠标准输入输出衔接
- 复杂任务不是“一口吃掉”,而是分步走完
这就是我现在理解的 LangChain。
六、那为什么还要有 LangGraph?因为很多真实任务根本不是“直线”
6.1 LangChain 的高层抽象很好用,但复杂控制流不是它最擅长的那一层
官方现在对 LangGraph 的定位也非常明确:它是一个 low-level orchestration framework and runtime,用于构建、管理、部署长时间运行的、有状态的 agent;它关注的核心能力包括 durable execution、streaming、human-in-the-loop 等。并且官方还明确说了:LangGraph 可以配合 LangChain 组件一起用,但并不要求你必须依赖 LangChain 才能使用 LangGraph。(LangChain Docs)
这说明什么?
说明 LangGraph 出现,不是因为 LangChain “不行”,
而是因为:
高层抽象负责让你快,低层编排负责让你控。
当任务还是线性的,比如:
- 一个 prompt
- 一次模型调用
- 一次检索
- 一次输出解析
LangChain 已经很够用了。
但一旦任务开始变成下面这种样子:
- 需要循环追问用户补信息
- 需要根据条件走不同分支
- 需要多轮状态持续保留
- 需要长时间运行
- 需要中途人工介入
- 需要失败后从中断点继续
你就会发现,单纯“把几个步骤串起来”已经不够了。
6.2 LangGraph 的核心,不是“更高级”,而是“把控制流和状态管理拿回来了”
LangGraph 的底层思路是图结构:
Node 做事,Edge 决定下一步,State 贯穿整个流程。

官方 Graph API 文档对这件事讲得非常清楚:
你先定义 State,再添加 nodes 和 edges,最后 compile;节点本质上就是函数,边负责决定流向,而图的真正威力来自于状态如何在执行过程中被管理和演化。(LangChain Docs)
这套模型非常适合描述真实世界里的复杂流程。
因为真实任务很多时候并不是:
A -> B -> C -> End 而是更像:
- 先判断意图
- 意图不同走不同路线
- 某一步信息不全就回头继续问
- 风险高的情况人工接管
- 完成后记录状态
- 出错时从上个检查点恢复
这就已经很像状态机、工作流引擎了。
而 LangGraph 本质上就是把这套能力,带进了 LLM/Agent 生态里。
6.3 用一个客服工单例子看,“链”和“图”到底差在哪
假设我要做一个自动处理客服工单的 AI 系统。
用户可能提交:
- 退货申请
- 商品咨询
- 投诉
- 信息不完整的工单
如果按最朴素的线性链去想,流程可能是:
识别意图 -> 处理问题 -> 返回结果 
但现实里很快就会出问题:
- 如果订单号缺失,必须继续追问
- 如果是投诉,要走人工审核
- 如果是咨询,要去知识库检索
- 如果资料核验失败,不能硬往下走
- 如果系统中断,不能从头再来
这时候更合理的表达方式其实是图:
Return
Inquiry
Complaint
No
Yes
Start
Intent Classify
Collect Info
Knowledge Retrieval
Human Review
Info Complete?
Process Return
Generate Answer
Manual Decision
Done
你看这张图就会发现,LangGraph 真正解决的不是“节点多一点”这么简单,
而是它允许我把这些原本只能塞进 if-else、外部缓存、数据库补丁逻辑里的东西,变成一个清晰可视、状态可追、路径可控的工作流。
这就是图式架构的价值。
6.4 LangGraph 最让我觉得“这玩意儿真是工程化”的地方,是状态、记忆和检查点
我觉得这是 LangGraph 最值得认真理解的部分。
官方 Memory 文档里明确说了:
LangGraph 的短期记忆是 thread-scoped 的,属于 agent state 的一部分,并通过 checkpointer 持久化,所以一次对话线程在任何时间都可以恢复;长期记忆则通过 store 跨会话保存。(LangChain Docs)
官方 Persistence 文档又进一步解释了 checkpoint 的意义:
- 它能提供 fault tolerance
- 能在失败后从上一个成功步骤恢复
- 能保存每个 super-step 的状态快照
- 能做 replay、time travel、state history 查看等能力 (LangChain Docs)
这几个词如果只背定义,会很抽象。
但如果从工程视角看,就非常清楚:
LangGraph 不是只帮你“把流程走完”,它还帮你“把流程记住”。
这件事太重要了。
因为很多真实 AI 应用不是一次性调用,而是:
- 多轮会话
- 长任务执行
- 可能失败
- 可能暂停
- 可能人工接管
- 可能过一会儿再继续
如果没有状态和检查点,这种系统的维护成本会非常高。
而 LangGraph 把这些东西直接提升成了框架能力。
它把复杂 Agent 的控制流、状态持久化、恢复能力和人工介入机制,正式提升成了框架层的能力。
七、LangChain 和 LangGraph 关系
7.1 它们不是替代关系,而是分层关系
很多人一听 LangGraph,就会下意识理解成:
- LangGraph 比 LangChain 新
- 所以 LangGraph 是 LangChain 的升级版
- 那是不是学 LangGraph 就不用学 LangChain 了?
这个理解不对。
官方文档现在已经把两者关系说得很明白:
- LangChain 适合快速开始构建 agent 和应用
- LangGraph 是更低层的 orchestration runtime
- LangChain 的 agent 本身就是构建在 LangGraph 之上的
- 基本使用 LangChain agent,并不要求你先学完 LangGraph (LangChain Docs)
所以他们关系图是这样的:
My AI App
LangChain
LangGraph Runtime
Models
Tools
Retrievers
State and Memory
这张图最关键的意思是:
- LangChain 更像高层应用开发接口
- LangGraph 更像底层流程运行时
- 上层讲“我想做什么”
- 下层讲“这个复杂流程怎么可靠地跑”
7.2 官方路线:高层起步,再按需下沉
从当前文档看,LangChain v1 把 create_agent 作为高层标准入口,强调的是更简洁、更可定制的 agent 构建方式;而 LangGraph v1 则强调自己是稳定的 agent runtime,保留 graph primitives 和 execution model,不强迫你放弃底层控制。(LangChain Docs)
这其实给初学者指了一条非常明确的学习路线:
- 先学 LangChain
把高层组件和基础 agent 用顺 - 再学 LangGraph
学会处理复杂控制流、状态和长流程
这样学的好处是:
- 不会一上来就被 graph 抽象吓住
- 也不会只停留在“调个模型”这种表层
我自己现在就决定按这条路走。
因为它既符合认知顺序,也符合真实工程顺序。
八、不同语言在AI应用的生态
8.1 按生态看,Python 依然是 AI 应用框架的主战场
因为只要你去看各家官方文档,就会发现主流 AI 应用框架的第一入口几乎都在 Python:
- LangChain 官方把 Python 和 JavaScript/TypeScript 都作为核心支持语言,但 Python 仍然是最完整、最成熟的主入口之一。(LangChain Docs)
- LlamaIndex 官方文档明确说明它提供 Python 和 TypeScript 两套框架,但 Python 版本仍然是主文档入口,低层 API 也非常完整。(LlamaIndex OSS Documentation)
- Java 企业生态里,Spring AI 提供的是更贴近 Spring 风格的 AI 抽象层,LangChain4j 则是 JVM 世界里非常活跃的一条路线。(Home)
所以如果我的目标是:
- 学 LangChain
- 学 LangGraph
- 快速进入 AI 应用开发主流生态
- 最快接上教程、案例、社区和招聘市场
那 Python 路线几乎就是最自然的选择。
这不是说别的语言没价值,
而是说当前最密集的知识和生态,确实主要堆在 Python 这边。
8.2 C++技术栈在LLM里的位置
在 LLM 技术栈里,C++ 其实并没有消失,
只是它更常出现在:
- 推理引擎
- 性能优化
- 模型运行时
- 本地部署底层
- 资源受限环境
比如 llama.cpp 这个非常典型的项目,本身就是以 “LLM inference in C/C++” 为核心定位的。(GitHub)
这说明什么?
说明现在的主流技术分工,越来越像这样:
- Python / JS / Java:更负责应用层、业务层、编排层
- C / C++:更负责推理层、性能层、底层基础设施
在给 C++ 背景,上面再补一层 AI 应用工程能力。
九、后面到底该怎么学
9.1 不要把后面的学习,理解成“背一堆框架 API”
后面真正要学的,不是:
- 背多少类名
- 记多少函数
- 抄多少 demo
而是要形成下面这套能力:
- 知道每一层在做什么
- 知道什么时候该用高层抽象,什么时候该下沉到底层控制
- 知道一个 AI 应用的复杂度会从哪里冒出来
- 知道怎么用框架去约束这种复杂度
所以接下来的学习路线,我会尽量按这个顺序来:
先建立地图 -> 再跑通最小代码 -> 再掌握 LangChain 组件 -> 再进入 RAG / Tool / Structured Output -> 最后进入 LangGraph 的状态化编排 这比一上来就把所有概念揉成一团,要稳得多。
十、本篇总结
作为系列的前两篇,我没有急着安装环境,也没有急着写 LangChain 代码,
因为我觉得在真正动手之前,必须先把下面这个问题想明白:
AI 已经会写代码了,我为什么还要学 LangChain 和 LangGraph?
现在答案已经非常明确了:
- Vibe Coding 解决的是“开发起步更快”,但它并不天然解决系统的可维护性、可靠性和状态管理问题。(TechCrunch)
- LangChain 的价值在于高层抽象:统一模型调用、Prompt、检索、工具、输出解析和 agent 入口,让我可以更快、更稳地构建 AI 应用。(LangChain Docs)
- LangGraph 的价值在于底层编排:它把循环、分支、状态、检查点、恢复、人工介入这些复杂能力,正式提升成了框架层能力。(LangChain Docs)
- 两者不是替代关系,而是分层关系:LangChain 更适合快速起步,LangGraph 更适合复杂、有状态、可恢复的长流程系统。(LangChain Docs)
- Python 是当前最主流的 AI 应用框架生态入口,但这并不意味着 C++ 背景失去价值;相反,系统设计、状态管理、性能意识和工程抽象能力,会让我在后面学这些框架时更有优势。(LlamaIndex OSS Documentation)
如果要用一句话概括这一篇,那就是:
AI 会写代码,只是把“写代码”这件事变快了;而 LangChain 与 LangGraph,解决的是“怎样把 AI 变成一个真正可控的系统”。
💬 下一篇预告:下一篇我会开始真正动手,把环境、语言和最小调用链路跑起来。对我这种 C++ 背景、Python 基础很弱的人来说,重点不是把 Python 学成语法大全,而是先把最小可运行链路打通:环境怎么装、第一个模型调用怎么写、第一个 LangChain 程序怎么跑。