LangChain 概述与生态

第1课:LangChain 概述与生态

本课目标

学完本课后,你应该能够:

  • 说清楚为什么只会调用大模型 API 还不够。
  • 用一句话解释 LangChain 是什么。
  • 区分 LangChain、LangGraph、LangSmith、Deep Agents 分别解决什么问题。
  • 理解 LangChain 1.x 为什么以 create_agent() 作为主线。
  • 看懂 langchainlangchain-core、模型 Provider 包、社区集成包的大致分工。
  • 配好后续课程需要的 Python 开发环境。

1、为什么需要 LangChain?

1.1 从"调用模型"到"构建 AI 应用"

很多同学刚接触大模型时,写的第一段代码通常是这样的:

ini 复制代码
from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
    model="your-model-name",
    messages=[
        {"role": "user", "content": "你好,请介绍一下你自己"}
    ]
)

print(response.choices[0].message.content)

这段代码当然没有问题。它完成了一件事情:把一句话交给模型,再拿回模型的回答。

但是,真实业务中的 AI 应用通常不止"问一句、答一句"。

举例1:企业知识库问答助手

用户问:

公司今年的报销标准是什么?

如果只让模型直接回答,它可能根本不知道你们公司的制度,甚至会一本正经地编一个答案。

一个真正可用的知识库助手,至少要做到:

  1. 从 PDF、Word、网页或数据库中读取企业资料。
  2. 在资料中检索与问题最相关的内容。
  3. 把检索结果连同用户问题一起交给模型。
  4. 让模型基于资料回答,并给出来源。
  5. 当资料里没有答案时,明确回答"不知道",而不是编造。
  6. 记录用户上下文,支持连续追问。
  7. 必要时调用工具,例如查数据库、发送邮件、创建工单。

问题:这些能力是大模型天生就有的吗?

回答:不是。大模型擅长理解、生成和推理,但它不会天然访问你的文件、数据库、搜索引擎或业务系统;更不会天然管理状态、控制工具权限和处理复杂执行流程。

所以,真正的 AI 应用不是"一个模型接口",而是一套围绕模型构建的系统。


1.2 单一 LLM 的典型局限

我们可以把大模型理解成一个"知识很广、表达能力很强,但不能直接动手做事的实习生"。

它的局限主要包括以下几类:

局限 表现 业务后果
知识有截止时间 不知道训练数据之后的新信息 无法回答最新政策、实时新闻、库存数据等
不知道私有数据 没见过企业内部文档和数据库 无法直接回答公司制度、客户信息等问题
可能产生幻觉 在不知道答案时仍可能生成看似合理的内容 业务决策可能被误导
无法直接操作外部系统 不能天然查天气、访问数据库、发邮件 无法完成真实任务闭环
上下文有限 对话或文档太长时,信息可能丢失或成本上升 多轮对话和长文档问答体验变差
输出不稳定 同一个需求可能有不同自然语言表述 程序难以稳定解析和接入下游系统

1.3 LangChain 解决什么问题?

LangChain 的核心作用不是"让模型变聪明",而是让模型可以被更稳定地接入真实应用。

痛点:不同模型厂商的调用方式、消息格式、工具调用格式不完全一样。

功能:提供相对统一的模型、消息、工具等抽象,让你可以减少切换模型时的业务代码改动。

痛点:模型不知道企业私有知识,也不能直接访问实时数据。

功能:通过文档加载、检索、工具调用等能力,把外部知识和系统能力接给模型。

痛点:模型只能生成文本,无法可靠完成多步骤任务。

功能:通过 Agent 循环,让模型根据任务自主决定是否调用工具、调用什么工具、何时结束。

痛点:真实系统需要记忆、护栏、重试、权限与人工审批。

功能:通过中间件、状态与底层运行时能力,为 Agent 增加工程化控制。

一句话总结:

LangChain 的价值,不是替你写一个 Prompt,而是提供一套把模型、工具、数据和执行逻辑组装成 AI 应用的开发框架。


2、LangChain 是什么?

2.1 官方定位

当前 LangChain 的官方定位是:提供 create_agent,用一个最小化但高度可配置的 Agent Harness(智能体外壳),把模型、工具、提示词和中间件组合成符合业务需要的智能体。 docs.langchain

核心公式:

\\text{Agent} = \\text{Model} + \\text{Harness}

其中:

  • Model:负责理解用户问题、规划、选择工具、生成最终回答。
  • Harness:围绕模型运行的一整套外壳,包括 Prompt、Tools、Middleware、状态和执行循环等。

当人看:

模型像"大脑",负责理解和决策;Harness 像"身体和工作制度",决定它能用什么工具、如何记忆、遇到敏感操作是否要审批、回答不合格时如何处理。

2.2 什么是 Agent?

Agent 可以理解为:模型不是只回答一次,而是在一个循环中决定是否调用工具,直到任务完成。 docs.langchain

一个最基础的 Agent 执行过程如下:

markdown 复制代码
用户提问
   ↓
模型理解问题
   ↓
是否需要工具?
   ├─ 不需要 → 直接回答
   └─ 需要 → 选择工具并生成参数
                  ↓
              执行工具
                  ↓
              工具结果返回模型
                  ↓
              模型继续判断
                  ↓
              生成最终回答

举例2:查询天气

用户说:

帮我查一下北京明天的天气,并提醒我是否带伞。

普通模型可能会根据训练知识猜测天气。

Agent 则可以:

  1. 判断"天气是实时信息,需要查工具"。
  2. 调用天气工具,参数为"北京、明天"。
  3. 获取天气数据。
  4. 根据降雨概率生成"建议带伞"或"无需带伞"的回答。

通俗理解:

LLM 负责"想",Tool 负责"做",Agent 负责把"想"和"做"循环起来。


2.3 LangChain 的核心能力

LangChain 的重要能力可以先记成下面这张图:

scss 复制代码
                    ┌──────────────┐
                    │    Model     │
                    │   模型调用    │
                    └──────┬───────┘
                           │
        ┌──────────────────┼──────────────────┐
        ↓                  ↓                  ↓
   Messages / Prompt      Tools          Structured Output
    消息与提示词          工具             结构化输出
        ↓                  ↓                  ↓
        └──────────────────┼──────────────────┘
                           ↓
                    create_agent()
                           ↓
             Middleware / Memory / State
              中间件 / 记忆 / 状态管理
                           ↓
                    可运行的 AI 应用
能力 解决的问题 后续对应章节
模型抽象 用相对统一的接口接入不同模型厂商 第 2 课
消息与提示词 定义模型角色、输入格式和对话历史 第 3 课
结构化输出 让模型返回可被程序稳定读取的数据 第 4 课
工具 让模型调用搜索、数据库、文件、业务接口 第 5 课
Agent 让模型在工具调用循环中完成任务 第 6 课
中间件与记忆 实现护栏、重试、路由、对话状态等 第 7 课
RAG 能力 连接企业文档、向量库与检索链路 第 8--13 课

注意:LangChain 不是只有 Agent。你当然可以只用它的模型调用、消息、提示词、文档处理或结构化输出能力。只是从 LangChain 1.x 开始,官方将 Agent 作为主要开发主线。create_agent() 是当前构建 Agent 的标准入口。 docs.langchain


3、LangChain 生态全景

3.1 四大核心产品

LangChain 生态不是只有一个 Python 包,而是一组面向不同层次问题的产品。初学者最容易混淆的,就是 LangChain、LangGraph、LangSmith 和 Deep Agents。

产品 定位 核心职责 什么时候使用
LangChain Agent Framework,智能体开发框架 模型、消息、工具、Agent 循环、中间件等高层抽象 大多数标准 Agent、RAG、工具调用应用
LangGraph Agent Runtime,智能体运行时与编排框架 图编排、持久化、流式、人机协同、复杂状态流转 复杂、长时间运行、强流程控制的 Agent
LangSmith 可观测与评估平台 Trace、调试、评测、提示词管理、部署相关能力 调试、评估、监控和生产迭代
Deep Agents 开箱即用的 Agent Harness 规划、子智能体、虚拟文件系统、上下文管理等 长任务、多步骤任务、需要自主规划的场景

官方将 LangChain 定义为提供模型、工具与 Agent Loop 抽象的框架;LangGraph 则是面向长时间、有状态 Agent 的底层编排运行时;Deep Agents 建立在 LangGraph 之上,并补充规划、子智能体与文件系统等更"开箱即用"的能力。 docs.langchain

3.2 用"盖房子"理解四者关系

生活化类比:

  • LangChain:像装修工具箱。提供电钻、扳手、螺丝刀和标准组件,方便你快速组装一个房间。
  • LangGraph:像房屋的结构与管线设计图。它控制复杂流程、状态流转、暂停恢复与人工介入。
  • Deep Agents:像精装房方案。厨房、收纳、规划和基础设施已经配好,适合快速入住。
  • LangSmith:像工程监理和质量检测平台。你可以看到哪里出问题、哪一步慢、哪个回答质量不好。

关系可以简化为:

复制代码
LangSmith:观测、调试、评估、部署
   ↑
LangGraph:复杂流程编排、持久化、人工介入
   ↑
LangChain:模型、工具、提示词、Agent 抽象
   ↑
各种模型、向量库、数据库、搜索与业务系统

注意:LangChain 的 Agent 构建在 LangGraph 之上,因此可以获得持久化、流式输出和人工审批等底层能力;但是刚入门时,你不需要先学会 LangGraph,直接使用 LangChain 即可。 docs.langchain


4、LangChain 能做什么?

4.1 常见应用场景

LangChain 最常见的应用方向包括:

  • RAG 知识库问答:让模型基于企业制度、产品文档、操作手册回答问题。
  • 智能客服:查询订单、物流、产品信息,必要时创建工单。
  • 数据分析助手:调用数据库、执行代码、生成分析报告。
  • 自动化办公:读取邮件、整理文档、生成会议纪要、写入业务系统。
  • 研究与搜索助手:搜索网页、读取资料、归纳结论。
  • 多轮对话应用:支持用户上下文、个性化信息和记忆。
  • 多模态应用:结合文本、图片、音频等输入能力,具体取决于模型 Provider 的支持情况。

4.2 RAG 是什么?

RAG 是 Retrieval-Augmented Generation 的缩写,中文通常叫"检索增强生成"。

痛点:模型并不知道你们公司的私有资料,还可能根据模糊记忆编造答案。

功能:先从知识库中检索相关资料,再让模型基于资料生成答案。

RAG 的基本流程:

复制代码
企业文档
   ↓
文档加载
   ↓
文本切分
   ↓
向量化并存入向量库
   ↓
用户提问
   ↓
检索相关文档片段
   ↓
片段 + 用户问题 → 大模型
   ↓
生成带依据的最终回答

生活化类比:

RAG 就像一场开卷考试。模型不再只凭自己的记忆答题,而是先去资料库里翻到相关内容,再结合题目组织答案。

本课程后半段会完整实现这条链路,并最终把"检索知识库"封装成 Agent 可以自主调用的工具。


5、LangChain 1.x 的主线变化

5.1 为什么要特别强调版本?

你在网上搜索 LangChain 教程时,很容易看到下面这些旧写法:

javascript 复制代码
from langchain.chains import LLMChain
from langchain.agents import initialize_agent
from langgraph.prebuilt import create_react_agent

这些写法可能来自不同历史版本,部分 API 已经迁移、弃用,或被更统一的入口替代。

当前 LangChain 1.x 的重要方向是:

  • 使用 create_agent() 作为创建 Agent 的标准方式。
  • 使用统一的 content_blocks 表达跨模型 Provider 的内容块。
  • 精简 langchain 命名空间,将较多旧功能迁移到 langchain-classicdocs.langchain

5.2 新旧主线对比

维度 旧版 0.x 常见思路 LangChain 1.x 推荐主线
Agent 创建 多种入口并存,容易混淆 create_agent() 统一入口
核心组织方式 Chains、LCEL、Runnable 常被作为主线 Model、Tools、Agent、Middleware 为主线
包命名空间 内容较多、历史兼容负担较重 聚焦 Agent 基础能力
旧能力处理 大量 API 混在主包中 部分旧功能迁至 langchain-classic
入门路线 先学链式组合 先学模型、工具、Agent 和 RAG

注意:这不代表旧版知识全部失效。LCEL、Runnable 等底层概念在部分项目和历史代码中仍然会遇到;但对于本课程和新项目,咱们以 LangChain 1.x 的 create_agent() 主线学习即可。 docs.langchain


6、LangChain 包结构

6.1 为什么导入路径总是不同?

初学者常常会有一个疑问:

为什么有的类从 langchain 导入,有的从 langchain_core 导入,有的又要安装 langchain-openai

原因是 LangChain 采用了"核心抽象 + Provider 集成 + 社区扩展"的包结构。

主要作用 你可以怎么理解
langchain 高层 Agent API、统一入口与常用能力 主工具箱
langchain-core 消息、模型接口、工具抽象等基础协议 地基和接口规范
langchain-openai OpenAI 模型与 Embedding 集成 OpenAI 专用适配器
langchain-anthropic Anthropic 模型集成 Anthropic 专用适配器
langchain-ollama Ollama 本地模型集成 本地模型适配器
langchain-community 社区维护的第三方集成 扩展插件仓库
langchain-text-splitters 文本切分器 RAG 文档切块工具箱
langchain-classic 旧版链、检索器等历史能力 兼容旧项目的工具箱

LangChain 1.x 中,langchain 命名空间重点暴露 Agent、消息、工具、模型初始化和 Embedding 初始化等能力;其中不少能力本质上来自 langchain-core 的重新导出,目的是让常用导入更集中。 docs.langchain

6.2 常见导入示例

python 复制代码
# 创建 Agent
from langchain.agents import create_agent

# 消息对象
from langchain.messages import HumanMessage, AIMessage, SystemMessage

# 自定义工具
from langchain.tools import tool

# 统一初始化聊天模型
from langchain.chat_models import init_chat_model

# 初始化 Embedding 模型
from langchain.embeddings import init_embeddings

说明:在后续课程里,你也会看到某些对象直接从 langchain_core 或 Provider 包导入。这是正常现象。

例如:

python 复制代码
# Provider 专用模型类
from langchain_openai import ChatOpenAI

# 更底层的消息对象来源
from langchain_core.messages import HumanMessage

建议:刚开始优先跟随官方当前文档与本课程代码。不要因为网上某篇旧教程的导入路径不同,就混着复制使用。


7、开发环境准备

7.1 Python 环境建议

建议为本课程单独创建一个项目和虚拟环境,避免不同项目的依赖版本互相污染。

常见环境管理方式如下:

方式 特点 建议
venv Python 自带、简单通用 初学者可以直接使用
conda 环境隔离较完整,适合科学计算场景 已在使用 Anaconda 的同学可继续使用
uv 依赖管理和安装速度快 希望使用较新工具链的同学可以选择
全局 pip install 上手快,但容易污染环境 不建议用于正式项目

建议:如果你是初学者,选择 venv + pip 就够了;如果你已经在使用 uv,后续可以采用 uv 管理项目依赖。

7.2 使用 venv 创建环境

举例3:创建课程虚拟环境

bash 复制代码
# 创建项目目录
mkdir langchain_course

# 进入项目目录
cd langchain_course

# 创建虚拟环境
python -m venv .venv

激活虚拟环境:

bash 复制代码
# macOS / Linux
source .venv/bin/activate
bash 复制代码
# Windows PowerShell
.venv\Scripts\Activate.ps1

激活成功后,终端前通常会出现类似 .venv 的环境标识。

7.3 安装基础依赖

本课先安装最基础的一组依赖:

复制代码
pip install -U langchain langchain-openai python-dotenv

说明:

  • langchain:LangChain 主包。
  • langchain-openai:用于接入 OpenAI 兼容模型服务。
  • python-dotenv:用于从 .env 文件读取 API Key 等环境变量。

如果你使用其他模型 Provider,需要额外安装相应的集成包。例如,官方文档展示了通过安装不同 Provider 集成包,并用 provider:model 形式指定模型的方式来切换模型接入。 docs.langchain

注意:模型 Provider 包和模型名称要配套。安装了 langchain-openai,并不代表你可以直接调用任意厂商的模型。

7.4 验证安装

举例4:检查 LangChain 是否安装成功

新建 check_env.py

go 复制代码
import langchain

print("LangChain 安装成功")
print("当前 LangChain 版本:", langchain.__version__)

运行:

复制代码
python check_env.py

输出如下:

复制代码
LangChain 安装成功
当前 LangChain 版本:1.x.x

注意:具体版本号会随着你安装时间不同而变化,只要能正常输出版本号,就说明基础安装成功。

7.5 配置 .env 文件

后续调用模型时,不要把 API Key 直接写进 Python 文件,更不要提交到 Git 仓库。

建议在项目根目录新建 .env 文件:

ini 复制代码
OPENAI_API_KEY=你的_API_KEY
OPENAI_BASE_URL=你的模型服务地址

再新建 .gitignore 文件:

bash 复制代码
.env
.venv/
__pycache__/

注意:

  • .env 只保存在本地,不要上传公开仓库。
  • 不同模型厂商的环境变量名称可能不同。
  • OPENAI_BASE_URL 是否需要配置,取决于你使用的是官方服务还是 OpenAI 兼容服务。
  • 本课程在第 2 课会详细讲解模型初始化、环境变量读取和多 Provider 接入。

8、一个最小 Agent 预览

虽然 Agent 会在第 6 课系统讲解,但这里先看一眼 LangChain 1.x 的核心体验。

举例5:最小工具调用 Agent

python 复制代码
from langchain.agents import create_agent


def get_weather(city: str) -> str:
    """查询指定城市的天气。"""
    return f"{city}今天晴天,气温 25℃。"


agent = create_agent(
    model="openai:your-model-name",
    tools=[get_weather],
    system_prompt="你是一个乐于助人的天气助手。"
)

result = agent.invoke(
    {
        "messages": [
            {
                "role": "user",
                "content": "北京天气怎么样?"
            }
        ]
    }
)

print(result["messages"][-1].content)

输出如下:

复制代码
北京今天晴天,气温 25℃。

说明:这段代码先不要求你完全看懂。你现在只需要抓住四件事:

  1. model:指定 Agent 使用哪个大模型。
  2. tools:把 Python 函数交给 Agent 使用。
  3. system_prompt:定义 Agent 的角色和行为规则。
  4. invoke():输入用户消息并运行 Agent。

当用户询问天气时,模型会识别到自己需要调用 get_weather();工具返回结果后,模型再组织最终语言回答。这个"模型思考 → 调用工具 → 获取结果 → 再回答"的过程,就是 Agent 的基本工作方式。 docs.langchain

注意:示例中的天气结果是本地函数返回的模拟数据,不是真实天气。要查询真实天气,需要接入真实天气 API 或搜索工具。


9、本课程最终项目预览

本课程不是为了让大家背 API,而是为了最终完成一个企业知识库 RAG Agent。

用户可能会这样提问:

员工出差住宿费的报销上限是多少?

最终系统的处理过程如下:

复制代码
用户问题
   ↓
RAG Agent 判断:需要查询企业知识库
   ↓
调用 retrieve_knowledge 工具
   ↓
从向量库检索"差旅报销制度"相关片段
   ↓
必要时重排检索结果
   ↓
模型基于检索内容组织答案
   ↓
返回:答案 + 来源片段 + 置信度

最终交付的系统会具备:

  • 支持加载企业 PDF、Word、TXT 等知识库。
  • 支持文档切分、Embedding 向量化与相似度检索。
  • 支持 Agent 按需调用检索工具。
  • 支持多轮问答记忆。
  • 支持知识库外问题拒答,降低幻觉。
  • 支持答案来源追溯与置信度输出。
  • 支持敏感词、越权问题等基础护栏。

这就是为什么前面每一课都不是孤立的:模型、提示词、结构化输出、工具、Agent、RAG 和记忆,最后都会组装到同一个项目中。


10、常见误区

错误举例1 ?:LangChain 就是一个模型

复制代码
"我已经会调用某个模型 API 了,所以不需要 LangChain。"

问题:调用模型 API 只是 AI 应用的一小部分。真实应用还需要工具、状态、数据、检索、输出约束、安全控制和观测能力。

正确理解 ?:

复制代码
模型 API 解决"怎么调用模型";
LangChain 更关注"怎么把模型接入应用系统"。

错误举例2 ?:一开始就学习所有生态产品

复制代码
"我要同时学习 LangChain、LangGraph、LangSmith、Deep Agents。"

问题:四者解决的问题不同,同时学习会造成概念混乱。

正确做法 ?:

复制代码
先学 LangChain 主线:
模型 → 消息/提示词 → 结构化输出 → 工具 → Agent → RAG

遇到复杂流程,再学 LangGraph;
需要观测和评估,再接入 LangSmith;
需要长任务自主规划,再考虑 Deep Agents。

错误举例3 ?:照搬旧版代码

javascript 复制代码
from langchain.chains import LLMChain

问题:很多网络教程基于 LangChain 0.x,不一定适用于当前 1.x 主线。

正确做法 ?:

javascript 复制代码
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model

说明:遇到旧 API 时,先确认教程对应的 LangChain 版本;新项目优先参考当前官方文档和 1.x 推荐写法。LangChain 1.x 已将部分历史功能放入 langchain-classic,并将 create_agent() 作为标准 Agent 入口。 docs.langchain


11、小结

本课我们建立了 LangChain 的全局认知:

LangChain = 面向 AI Agent 应用开发的框架,核心是把 Model、Prompt、Tools、Middleware 等能力组合成可运行的 Agent。

你需要记住以下几点:

  • 大模型本身不能直接解决私有知识、实时数据、工具调用和复杂流程控制问题。
  • LangChain 的核心公式是:

\\text{Agent} = \\text{Model} + \\text{Harness}

  • LangChain 负责高层 Agent 开发;LangGraph 负责复杂编排与运行时;LangSmith 负责观测与评估;Deep Agents 提供更开箱即用的复杂 Agent 能力。
  • 本课程以 LangChain 1.x 为主线,重点学习 create_agent()
  • 不要试图记住所有 API;先掌握模型、消息、工具、Agent 与 RAG 这条主线。
  • 最终目标是完成一个企业知识库 RAG Agent。

课后练习

  1. 用自己的话解释:为什么大模型不能直接替代企业知识库问答系统?
  2. 分别用一句话说明 LangChain、LangGraph、LangSmith、Deep Agents 的定位。
  3. 创建一个 Python 虚拟环境,完成 langchain 的安装,并运行 check_env.py
  4. 思考:如果要做"智能客服系统",除了模型以外,你认为还需要哪些工具或外部系统?
  5. 预习第 2 课:模型的创建与调用。思考一下:如果未来要从一个模型 Provider 切换到另一个,业务代码应该怎样尽量少改?
相关推荐
用户250694921612 小时前
优雅的数据隔离:PostgreSQL 行级安全(RLS)
后端
苍何4 小时前
用 WorkBuddy / Codex + Obsidian 搭建自生长的个人知识库实战
后端
堕落年代4 小时前
Ollama CPU 推理大提示词优化实测报告(细致化数据版)
java·后端·spring
橘色的喵5 小时前
ARM-Linux 嵌入式库:内存池与信号量的无锁化改造
后端
SamDeepThinking5 小时前
写代码,到底应该参考优秀作品,还是坚持自己的想法?
后端
cfm_29145 小时前
基于OAuth2.0实现微服务SSO单点登录
后端·spring·微服务·架构
橘色的喵5 小时前
MergeCell 合并机制:双平台事件流去重
后端
予怀9605 小时前
ClickHouse踩坑:一个sum()引发的"数字不一致"悬案
后端