系列文章目录

提示:这里是系列文章的专栏
并不喜欢吃鱼的C++专栏


提示:以下是文章目录哦!

系列文章目录

前言

一.先搞懂现在最火的 Vibe Coding——AI 辅助编程到底是什么?

1.1 Vibe Coding 是什么?起源 & 工作流程

1.2 Vibe Coding 三大优势(小白直观感受)

1.3 重点:Vibe Coding 致命局限性(为什么不能只靠 AI 写代码)

1.4 Vibe Coding 正确定位(总结)

二.AI 开发框架是什么?LangChain 为什么是行业标配?

2.1 框架的底层逻辑:和 Spring、libcurl 是一个道理

所有框架通用两大核心设计:抽象封装、模块化组装

1.传统框架类比:

2.框架的四大价值:

2.2 不用框架直接调用 LLM,会遇到哪些无解难题?(医疗助手案例)

2.3 LangChain 登场:一次性解决上面所有问题

2.3.1 LangChain 核心定义

2.4 主流 LLM 开发框架生态对比(按需选择)

三.LangChain 不够用?复杂 AI 代理必须学 LangGraph

3.1 LangChain 链式架构的先天短板(为什么需要 LangGraph)

3.2 LangGraph 是什么?核心定位

核心概念通俗解释

3.3 LangGraph 极简可运行代码示例:带循环信息收集客服机器人

安装依赖

3.4 LangChain vs LangGraph 怎么选?

四.AI 时代程序员的正确学习路线

4.1 三者学习顺序(循序渐进)


前言

提示:本文要记录的大概内容:

  1. 当下现状:现在人人都在用 Cursor、Claude Coding 一键生成代码,也就是网上爆火的Vibe Coding(氛围编程),很多小白产生疑问:AI 都能写代码了,我们还有必要学开发框架吗?
  2. 抛出核心观点:AI 只能做重复、样板代码,企业级复杂 AI 应用、RAG 知识库、自动 AI 代理,必须靠 LangChain/LangGraph 框架;只会 Vibe Coding 会踩大量安全、架构坑,框架思维才是不可替代的核心能力。
  3. 本文承诺:全程零基础友好,不讲晦涩理论,附带可直接复制运行的 Python 代码,看完能分清三者定位,上手写第一个 AI 小程序。

提示:以下是本篇文章正文内容


一.先搞懂现在最火的 Vibe Coding——AI 辅助编程到底是什么?

1.1 Vibe Coding 是什么?起源 & 工作流程

  • 起源:2025 年 2 月由 OpenAI 联合创始人 Andrej Karpathy 提出;
  • 核心定义:用自然语言描述需求交给大模型生成代码,开发者只做测试、反馈迭代,不用手写底层重复代码;
  • 标准工作流:自然语言描述需求 → AI 生成完整代码 → 开发者测试运行 → 反馈 bug / 优化点 → AI 迭代修改;
  • 核心特征:开发者可以不完全吃透底层代码,但必须审查、校验每一段输出。

1.2 Vibe Coding 三大优势(小白直观感受)

  1. 开发效率暴涨:原型开发速度提升 75%,几天工作量几小时完成;
  2. 零门槛上手:不会编程的人,靠自然语言一小时做出可用工具;
  3. 解放创意:不用纠结循环、变量命名,专注产品思路、架构设计。

1.3 重点:Vibe Coding 致命局限性(为什么不能只靠 AI 写代码)

这是全文核心转折点,解释为什么我们还要学 LangChain 框架

  1. 代码质量黑箱:AI 只保证 “能运行”,不考虑可维护、可扩展、优雅架构;
  2. 记忆 & 知识缺陷:
    • 上下文窗口有限,大型项目会遗忘前期逻辑,代码冲突;
    • 训练数据有时间截止,会虚构不存在的 API、库(AI 幻觉);
  3. 企业级安全隐患(最致命):自动生成带 SQL 注入、硬编码密码、XSS 漏洞的代码,金融 / 医疗系统绝对不能直接上线;
  4. 高并发可靠性差:小数据正常,大数据、高并发场景容易崩溃,缺少日志、熔断、异常处理。

1.4 Vibe Coding 正确定位(总结)

  1. 不是程序员替代品,是效率工具;
  2. 适合:写 Demo、单元测试、修改变量、简单工具、样板代码;
  3. 不适合:系统架构设计、企业级核心业务、安全敏感系统;
  4. 补充:Karpathy 后期修正观点,单一 AI 工具无法解决全部开发问题,需要框架、工具分工协作。

二.AI 开发框架是什么?LangChain 为什么是行业标配?

2.1 框架的底层逻辑:和 Spring、libcurl 是一个道理

所有框架通用两大核心设计:抽象封装、模块化组装

1.传统框架类比:

        1.Spring:封装 Java Web 复杂逻辑,不用手动写 Servlet

        Java Web:用 Java 语言做网页网站、后台服务的整套技术统称,我们平时访问的网站、小程序 / APP 后端接口,只要是 Java 写的后台,都叫 Java Web 项目。 举例子:淘宝、企业管理系统、校园教务系统,后端很多都是 Java Web 开发

        Servlet:Server + Applet,直译:运行在服务器上的小程序 它是 Java 官方规定、用来处理浏览器请求的基础接口,是 Java Web 最底层原生工具。

       

        ① Java EE

        Java EE = Java 企业版,就是早年用 Java 做网站、后台服务的一套官方标准,里面包含 Servlet、MVC、数据库工具等一堆组件,就是图里写的复杂 Java EE 组件

        ② MVC

        一种代码分层设计思想:

  • M:数据模型(数据库数据)
  • V:页面视图(前端网页)
  • C:控制器(接收浏览器请求,就是前面讲的 Servlet) 早年原生 Java EE 写 MVC,组件之间互相纠缠。

        ③ 中间一团乱麻:依赖注入(DI)

        先讲依赖:你的 A 类要用 B 类,A 就依赖 B。 没 Spring 之前,你要手动 new 对象:

        项目大了,几百个类互相 new、互相调用,代码耦合死死缠在一起,就是图里这团乱线: 改一个类,一堆关联代码全要改,维护、测试巨麻烦。 这堆乱线就代表:原生 Java EE 组件之间依赖关系错综复杂、高度耦合

        ④ Spring 方框 + 箭头

        箭头意思:Spring 把这一团乱糟糟的耦合问题全部解决、统一收纳管理

        2.libcurl:封装网络请求,不用底层 Socket;

        ①Socket:操作系统提供的、程序和网络通信的最底层接口,相当于电脑联网的 “网线接口”

        如果你不使用 libcurl,自己写代码访问网页、传文件、发邮件,就要手写一大段底层代码:

                1.手动建立 TCP 网络连接

                2.手动拼接 HTTP 请求报文(请求头、参数、换行格式全要自己拼)

                3.手动处理超时、重连、编码、代理、证书……

                4.图里散乱黑块,就是形容:原生网络底层代码零散、繁琐、写起来杂乱,每种网络协议都要重复写一套底层逻辑。

        右侧三种协议(libcurl 对外提供的能力)

        libcurl 封装完底层后,给开发者提供统一简单的接口,支持多种网络协议:

  1. HTTP(橙色圆形):浏览网页、调用后端接口最常用的协议(我们平时打开网站、小程序请求后台都用它)
  2. FTP(绿色三角):文件传输协议,用来上传 / 下载服务器文件
  3. SMTP(紫色方块):邮件发送协议,程序自动发邮件靠它

        除此之外 libcurl 还支持 HTTPS、SFTP、WebSocket 等几十种网络协议,图里只举了 3 个典型例子

        3.LangChain:封装所有大模型、向量库、工具调用的底层 API,统一接口

左边:所有能接入 LangChain 的底层组件(输入侧)

分成 4 大类,全是做 AI 应用要用到的零散工具:

1. LLM 大语言模型(AI 大脑)

  • OpenAI:ChatGPT 系列模型
  • Anthropic:Claude 系列大模型
  • 还有其他开源 LLM(图里立方体图标) 作用:负责生成文字、理解对话,是 AI 的 “大脑”。 如果不用 LangChain,每种模型都要写一套完全不同的对接代码,非常麻烦。

2. 向量数据库(Chroma / Pinecone)

        图标是数据库样式,叫向量库。 用途:存放你自己的私有文档(PDF、笔记、知识库),实现本地知识库问答(RAG 检索增强)。 比如上传公司手册,AI 回答时先查这份文档,不会瞎编。

3. Tools 工具集(扳手图标)

        给 AI 赋予联网、查数据、调用软件的能力: 联网搜索、计算器、读取文件、调用第三方接口、爬虫等都属于 Tools。 让 AI 不只聊天,还能干活。

中间:LangChain 核心封装层(塑料袋包裹的盒子)

它的核心作用:

  1. 统一兼容:不管你用 OpenAI、Claude、本地开源大模型,还是 Chroma/Pinecone 向量库、各类工具,全部用同一套代码写法接入;
  2. 屏蔽底层差异:不用记每个 AI 厂商、向量库独特的 API、请求格式、鉴权逻辑,LangChain 内部帮你适配;
  3. 提供流水线能力:内置对话记忆、文档分割、检索、提示词模板、Agent 智能体等现成功能,不用自己从零写复杂 AI 逻辑。

右边:对外输出统一 API(使用侧)

        LangChain 封装完内部所有组件后,向外暴露一套标准化 API 接口。 开发者 / 业务系统只需要调用这套统一接口,就能搭建完整 AI 应用: 智能客服、知识库问答、AI 自动工作流、智能 Agent 机器人等。

2.框架的四大价值:

        规范架构、把控代码质量、规避安全风险、快速集成各类 AI 组件。

2.2 不用框架直接调用 LLM,会遇到哪些无解难题?(医疗助手案例)

用医疗咨询助手 6 大痛点举例:

        1.模型幻觉:用户误食纽扣电池,AI 给出错误急救方案;

        2.提示词无统一规范,多人开发输出效果混乱;

        3.切换模型成本极高:从 GPT3.5 换到 Llama3 需要重写全部代码;

        4.输出纯文本,无法结构化对接前端页面;

        5.模型知识老旧,无法读取最新实时资料;

        6.不会自动调用外部数据库 / 工具(药物查询 API)。

2.3 LangChain 登场:一次性解决上面所有问题

2.3.1 LangChain 核心定义

        专门构建 LLM 应用的开发框架,把 AI 开发拆成标准化组件,像乐高积木自由拼接,用链式流程串联多步任务。

  1. 统一模型接口:一套代码切换 GPT、Claude、本地开源大模型;
  2. Prompt 提示词模板:统一规范提示词,批量管理;
  3. Chain 任务链:串联 “检索知识库→调用大模型→格式化输出” 完整流程;
  4. Memory 记忆:保存多轮对话上下文;
  5. RAG 检索模块:对接向量数据库,解决模型知识过时、幻觉;
  6. OutputParser 输出解析:强制模型输出 JSON 结构化数据;
  7. Agent 智能体:让 AI 自动调用外部工具(计算器、数据库、搜索引擎)。

2.4 主流 LLM 开发框架生态对比(按需选择)

三.LangChain 不够用?复杂 AI 代理必须学 LangGraph

3.1 LangChain 链式架构的先天短板(为什么需要 LangGraph)

        线性 Chain 只能一步接一步执行,遇到以下场景完全无力:

        举个例子,假设我们要构建一个 AI 代理,来自动处理用户提交的客服工单(例如:退货请求、产品咨询、投诉等)。一个理想的流程是:

  1. 循环逻辑:收集用户信息不全,自动回头重新询问;
  2. 条件分支:用户咨询 / 退货 / 投诉走完全不同流程;
  3. 长会话状态保存:多轮对话、跨天聊天记忆;
  4. 人工介入:AI 解决不了自动转交人工客服,处理完继续流程;
  5. 故障恢复:长时间运行任务中断后,从断点继续执行。

3.2 LangGraph 是什么?核心定位

        LangChain 团队 2024 年推出,图式状态编排框架,不是替代 LangChain,是补充扩展;底层复用 LangChain 所有组件,专门解决复杂 AI 代理、多分支循环工作流。

核心概念通俗解释
  • 节点 Node:每一步操作(意图分类、收集信息、调用工具);
  • 边 Edge:节点之间流转路线;
  • 条件边:根据状态判断走哪条分支;
  • State 全局状态:全程保存对话、业务数据、标记,自动传递

3.3 LangGraph 极简可运行代码示例:带循环信息收集客服机器人

安装依赖

1. 最简单比喻

你要做一碗番茄鸡蛋面:

  • 你的代码 = 一碗面(你自己写的程序)
  • 番茄、鸡蛋、面条、盐、锅 = 依赖 没有这些材料,你光靠自己,做不出这碗面; 写程序同理:很多功能你不想从零手写,就要借用别人写好的工具包,这些工具包就叫依赖

2. 结合你之前三张图对应理解

① Spring

你写 Java 网站,不想手写 Servlet、处理复杂对象依赖,就要导入 spring-web 这个依赖。 不装这个依赖,你代码里写 @Controller 会直接报错,程序跑不起来。

② libcurl

C/C++ 程序想发 HTTP 请求,不想手写 Socket 底层代码,就要安装 libcurl 依赖库。

③ LangChain

你想用代码对接 ChatGPT、做知识库 AI,必须安装 langchain 依赖包; 不装的话,你写 from langchain 直接爆红,找不到这个工具。

3. 专业定义

依赖(Dependency): 别人提前封装好、发布出来的代码工具库,你的项目需要调用它的功能才能正常运行,这个工具就是你的项目依赖。

from dotenv import load_dotenv
import os
from typing import TypedDict, Annotated
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI

load_dotenv()
llm = ChatOpenAI(model="gpt-3.5-turbo", api_key=os.getenv("OPENAI_API_KEY"))

# 1.定义全局状态:存储对话、收集的订单信息
class CustomerState(TypedDict):
    user_input: str
    order_id: str
    msg_history: list

# 2.节点1:检查是否收集到订单号,缺失则询问用户
def check_order(state: CustomerState):
    if not state.get("order_id"):
        return {"user_input": "请提供你的订单编号,我才能处理退货申请"}
    return state

# 3.节点2:处理退货业务
def handle_return(state: CustomerState):
    res = llm.invoke(f"用户订单{state['order_id']}申请退货,生成退货指引")
    return {"user_input": res.content}

# 4.构建图工作流
graph = StateGraph(CustomerState)
# 添加节点
graph.add_node("check_info", check_order)
graph.add_node("deal_return", handle_return)
# 设置入口
graph.set_entry_point("check_info")
# 条件分支:有订单号走处理流程,无订单号直接结束等待用户输入
def route(state: CustomerState):
    if state.get("order_id"):
        return "deal_return"
    return END

graph.add_conditional_edges("check_info", route)
graph.add_edge("deal_return", END)

# 编译运行图
workflow = graph.compile()
# 第一次用户只发了退货,没给订单号,触发循环询问
result = workflow.invoke({"user_input": "我要退货", "order_id": ""})
print(result["user_input"])
  1. LangChain 线性链无法实现 “缺信息重新询问” 的循环逻辑,LangGraph 通过 State 状态 + 条件边轻松实现;
  2. 所有节点共享全局状态,对话、订单数据全程保存,不用自己写数据库存上下文;
  3. 复杂多智能体、自动工具调用、人工介入系统都基于这套图结构开发。

3.4 LangChain vs LangGraph 怎么选?

  1. 简单线性任务(单次问答、简单 RAG)→ LangChain 足够;
  2. 需要循环、分支、多轮状态、人工介入、复杂 AI 代理 → LangGraph;
  3. 两者互补:LangGraph 节点内可以直接调用 LangChain 的 Chain。

四.AI 时代程序员的正确学习路线

4.1 三者学习顺序(循序渐进)

  1. 先吃透 Vibe Coding:熟练使用 AI 辅助写基础代码,掌握提示词技巧;
  2. 再系统学习 LangChain:掌握组件、RAG、Chain,能独立开发知识库问答机器人;
  3. 进阶 LangGraph:实现复杂 AI 代理、多分支业务工作流;
  4. 持续补充:系统架构、代码安全、大模型微调、向量数据库。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐