Vibe Coding 只是起点:LangChain 拆解 + LangGraph 编排,手把手教你造生产级 Agent
💡 2025 年 2 月,Andrej Karpathy 提出 "Vibe Coding"——用自然语言描述意图,AI 负责写代码,你只看结果、提反馈。一年过去,Vibe Coding 让原型开发效率飙升,但生产级 AI 应用却暴露出状态管理、错误恢复、人机协作等硬骨头。本文带你从 Vibe Coding 的"快"出发,深入 LangChain 的组件化思想和 LangGraph 的图式编排,看清 AI 应用从 demo 到生产的完整技术路径。
一、Vibe Coding:AI 原生开发范式的崛起与边界
1.1 什么是 Vibe Coding
Vibe Coding(氛围编程/意图驱动编程)由 OpenAI 联合创始人 Andrej Karpathy 于 2025 年 2 月提出,核心理念是:
"You fully give in to the vibes, embrace exponentials, and forget that the code even exists."
开发者用自然语言描述"要做什么",AI 负责生成代码,开发者只管看结果、提反馈,从"手写代码"转向"描述意图 + 验收结果"。
典型工作流是一个紧凑的循环:
描述需求(自然语言)
↓
AI 生成代码(Cursor / Claude / Codex 等)
↓
运行 → 看效果 / 报错
↓
有问题?把错误信息扔回给 AI → 重新生成
1.2 Vibe Coding 的真实能力与风险
在 MVP 快速验证、脚本自动化、前端 UI 草稿 等场景中,熟练开发者借助 Cursor 和 Claude 能在一天内完成传统需要三天的工作 。但 "Vibe 出来的代码" 存在四个典型问题 :
|
风险维度 |
具体表现 |
|---|---|
|
安全盲区 |
AI 不会主动考虑 SQL 注入或 XSS 防御,除非明确要求 |
|
技术债积累 |
AI 倾向于选择"能跑通"的实现,而非"最优"的架构 |
|
调试困难 |
没有代码理解能力的开发者容易陷入"改了这里、坏了那里"的循环 |
|
协作割裂 |
代码风格不统一,在团队代码库中制造一致性问题 |
Google 工程负责人 Addy Osmani 将其总结为 "70% 问题":Vibe Coding 能快速完成 70% 的功能,但最后 30%(生产化、安全、可维护)如果没有深厚工程能力,会变得极其艰难 。
⚠️ 关键认知:Vibe Coding 降低了"把想法变成能跑的代码"的门槛,但没有降低"把代码变成生产系统"的门槛。后者恰恰是 LangChain 与 LangGraph 的主战场。
二、LangChain:组件化 LLM 应用开发的基石
2.1 核心定位
LangChain 诞生于 2022 年 10 月,是 LLM 应用开发的组件库 + 编排引擎。它把 LLM 应用拆解为可组合的模块 :
-
模型层(Models):LLM / ChatModel 的统一封装
-
提示层(Prompts):提示词模板与管理
-
记忆层(Memory):上下文与状态管理
-
工具层(Tools):LLM 调用外部工具
-
链层(Chains):组件的线性组合
-
代理层(Agents):自主决策与工具调用
根据 LangChain 官方的最新定位,LangChain 是一个代理框架(Agent Framework),提供结构化内容块、代理循环、中间件等标准抽象,让开发者能快速构建代理和自主应用 。
2.2 LangChain 的适用边界
LangChain 擅长"组件拆解"和"线性链式开发",在以下场景表现出色 :
-
✅ 简单线性流程、单智能体
-
✅ 快速原型开发
-
✅ 明确的"从 A 到 B"任务(如 RAG:文档加载 → 分割 → 向量化 → 检索 → 生成)
但当面对复杂控制流(循环、条件分支、动态路由)时,LangChain 需要通过 RunnableBranch、RunnableLambda 等模拟控制流,会显得笨拙 。这正是 LangGraph 诞生的原因。
三、LangGraph:图化编排与有状态智能体的运行时
3.1 为什么需要 LangGraph
LangGraph 于 2023 年 12 月推出(最初叫 LangChain Recurse),官方将其定位为低级别编排框架与运行时(Low-level orchestration framework and runtime),专门用于构建、管理和部署长时间运行、有状态的智能体 。
根据 LangChain 官方的产品分层 :
|
层级 |
代表 |
核心职责 |
|---|---|---|
|
Agent Frameworks(框架) |
LangChain |
提供抽象,便于快速上手 |
|
Agent Runtimes(运行时) |
LangGraph |
提供持久执行、流式、HITL、持久化等生产工具 |
|
Agent Harnesses(套件) |
Deep Agents SDK |
提供预定义工具、规划能力、子代理等 |
📌 LangChain 1.0 已经构建在 LangGraph 之上,但你使用 LangChain 时不需要了解 LangGraph 。
3.2 三个核心抽象:State、Node、Edge
LangGraph 将代理工作流建模为图,核心只有三个组件 :
🎯 State(状态)
一个共享数据结构,表示应用的当前快照。通常使用 TypedDict 或 Pydantic 模型定义,字段可通过 reducer 函数定义新旧值如何合并(如 add_messages 追加而非覆盖)。
🔧 Node(节点)
编码代理逻辑的函数。接收当前状态作为输入,执行计算或副作用,返回更新后的状态。节点可以是 LLM 调用,也可以是普通代码。
🔗 Edge(边)
根据当前状态决定接下来执行哪个节点。可以是条件分支或固定转换。
from typing import Annotated, TypedDict
from langgraph.graph.message import add_messages
class State(TypedDict):
messages: Annotated[list, add_messages] # reducer:追加而非覆盖
topic: str
3.3 底层执行模型:Pregel 与超级步骤
LangGraph 的底层图算法受 Google Pregel 系统启发,以离散的"超级步骤(super-step)" 执行 :
-
Plan:确定本轮要执行的节点
-
Execution:并行执行所有选中节点
-
Update:将节点输出更新到通信通道
每个超级步骤结束时,没有传入消息的节点将自己标记为 inactive 并投票 halt;当所有节点都 inactive 且没有消息在传输时,图执行终止。
3.4 五大核心优势
LangGraph 为长时间运行、有状态的工作流提供底层支持 :
1. 持久执行(Durable Execution)
通过 Checkpointer 机制,在每一个超级步骤后自动保存状态快照。进程崩溃后,新进程只需使用相同的 thread_id 重新调用图,LangGraph 会加载最新的检查点并从队列中的下一个节点继续执行——崩溃恢复与正常调用是同一个操作 。
from langgraph.checkpoint.postgres import PostgresSaver
checkpointer = PostgresSaver(conn) # 持久化、跨进程共享
graph = builder.compile(checkpointer=checkpointer)
config = {"configurable": {"thread_id": "alice"}}
graph.invoke({"topic": "Transformers", "messages": []}, config)
# 第二次调用会恢复同一个 thread,通过 add_messages 追加
2. 人机协作(Human-in-the-loop)
interrupt() 函数保存检查点并返回控制权;人工输入到达后,图从该精确点恢复。等待可以持续数分钟甚至数天,远超任何进程的生存周期 。
3. 全面记忆(Comprehensive Memory)
-
短期工作记忆:用于持续推理(单个 thread 内)
-
长期持久记忆:跨会话保持(跨 thread)
4. 时间旅行(Time Travel)
通过指定 checkpoint_id 直接加载历史状态快照,用于 A/B 测试、故障复现、审计追溯 。
5. 生产就绪部署
可与 LangSmith 深度集成,提供执行路径追踪、状态转换捕获、运行时指标等可视化工具 。
四、LangChain vs LangGraph:核心差异深度解析
4.1 四个维度的本质差异
|
维度 |
LangChain |
LangGraph |
|---|---|---|
|
执行结构 |
线性链式 |
图结构(支持循环/分支) |
|
状态管理 |
参数传递,链外存储 |
一等公民,Schema 驱动 |
|
控制流 |
编排(模拟分支/循环) |
内置流程引擎 |
|
调试可视化 |
黑盒(依赖 Callbacks) |
白盒(图可视化 + 状态追踪) |
4.2 选择决策矩阵
🎯 使用 LangChain 当:
-
快速构建 RAG 问答系统
-
流程是线性的、确定性的
-
主要关注提示词模板、工具封装和输出解析
-
不需要复杂的循环或长期状态管理
🎯 使用 LangGraph 当:
-
构建需要"思考-行动-观察"循环的智能体(ReAct、Plan-and-Execute)
-
应用需要根据中间结果动态改变执行路径
-
需要持久执行、人机协作、长期记忆
-
构建复杂多智能体协作系统
4.3 两者不是替代,而是互补
💡 LangGraph 并非替代 LangChain,而是对它的补充与升级:
底层依赖:LangGraph 复用 LangChain 的核心组件(模型、提示、工具、记忆)
能力互补:LangChain 擅长"组件拆解",LangGraph 擅长"复杂流程编排"
开发范式:LangChain 是"线性链式开发",LangGraph 是"图化节点开发"
五、从 Vibe Coding 到生产级 Agent:完整技术路径
结合前文分析,我们可以勾勒出一条清晰的演进路径:
阶段一:Vibe Coding 快速验证(70%)
用 Cursor / Claude 等工具,通过自然语言快速搭建原型。这一阶段重点验证:
-
产品需求是否成立
-
核心用户交互是否顺畅
-
LLM 的能力边界在哪里
阶段二:LangChain 组件化重构(20%)
将 Vibe 出来的代码用 LangChain 的组件体系重构:
-
用
PromptTemplate管理提示词 -
用
Tool/BaseTool封装外部工具 -
用
ChatModel统一模型调用接口 -
用
Memory管理对话历史
这一步解决"技术债"和"代码风格不统一"的问题。
阶段三:LangGraph 图化编排(10%,但决定生产可用性)
当应用需要以下能力时,引入 LangGraph:
-
循环推理:Agent 需要"行动-观察-再行动"
-
持久化:长时间运行任务不能因崩溃归零
-
人机协作:高风险操作需要人工审批
-
多智能体:不同专家代理协作
from langgraph.graph import StateGraph, START, END
# 构建有状态图
builder = StateGraph(State)
builder.add_node("research", research_agent) # LLM 工具调用节点
builder.add_node("review", review_gate) # 确定性门控节点
# 条件边:根据 research 结果决定下一步
builder.add_conditional_edges("research", route_after_research)
builder.add_edge("review", END)
# 编译时挂载持久化
graph = builder.compile(checkpointer=PostgresSaver(conn))
这就是 LangGraph 的核心优势:在一个图里同时容纳"确定性的、开发者驱动的节点"和"LLM 驱动的、自主决策的节点" ——这种混合正是生产级 Agent 的精髓。
六、工程落地最佳实践
6.1 Checkpointer 选型
|
Checkpointer |
适用场景 |
|---|---|
|
|
开发环境,重启即丢失 |
|
|
单机部署,容器内需挂载持久卷 |
|
|
多进程、并发线程的生产环境 |
6.2 状态设计原则
⚠️ 生产环境的关键经验 :
单个检查点超过 ~50KB 时,将载荷移至外部存储(如 S3),状态中只存引用
状态中的每个字段都要付出序列化时间和 LLM 上下文预算
只为父图编译时挂载 checkpointer,子图不要再挂,避免命名空间重复
6.3 Vibe Coding 规范化趋势
2026 年,先行企业正在建立 "Vibe Code 规范":要求 AI 生成代码必须经过 SAST 安全扫描、代码风格检查器和人工代码审查三个门禁 。这一规范化趋势使 Vibe Coding 从个人效率工具升级为团队工程基础设施——而 LangChain + LangGraph 正是这套基础设施的 AI 应用层支柱。
七、总结:范式演进的本质
从 Vibe Coding 到 LangChain 再到 LangGraph,我们看到的是 AI 应用开发范式的三次跃迁:
-
Vibe Coding:解决"想法 → 代码"的效率问题,让非专业开发者也能快速验证
-
LangChain:解决"代码 → 组件化应用"的工程问题,提供标准化的 LLM 应用构建块
-
LangGraph:解决"应用 → 生产级智能体"的可靠性问题,提供有状态、可持久、可恢复的运行时
这三者不是替代关系,而是层层递进的能力叠加。Vibe Coding 让你跑得更快,LangChain 让你的代码更规范,LangGraph 让你的系统更可靠。
🚀 真正的高手,会在 Vibe Coding 阶段大胆试错,在 LangChain 阶段严谨重构,在 LangGraph 阶段精心设计状态与图结构——三者的有机结合,才是 AI 原生应用从 demo 走向生产的完整答案。
更多推荐


所有评论(0)