第1课:LangChain 概述与生态
本课目标
学完本课后,你应该能够:
- 说清楚为什么只会调用大模型 API 还不够。
- 用一句话解释 LangChain 是什么。
- 区分 LangChain、LangGraph、LangSmith、Deep Agents 分别解决什么问题。
- 理解 LangChain 1.x 为什么以
create_agent()作为主线。 - 看懂
langchain、langchain-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:企业知识库问答助手
用户问:
公司今年的报销标准是什么?
如果只让模型直接回答,它可能根本不知道你们公司的制度,甚至会一本正经地编一个答案。
一个真正可用的知识库助手,至少要做到:
- 从 PDF、Word、网页或数据库中读取企业资料。
- 在资料中检索与问题最相关的内容。
- 把检索结果连同用户问题一起交给模型。
- 让模型基于资料回答,并给出来源。
- 当资料里没有答案时,明确回答"不知道",而不是编造。
- 记录用户上下文,支持连续追问。
- 必要时调用工具,例如查数据库、发送邮件、创建工单。
问题:这些能力是大模型天生就有的吗?
回答:不是。大模型擅长理解、生成和推理,但它不会天然访问你的文件、数据库、搜索引擎或业务系统;更不会天然管理状态、控制工具权限和处理复杂执行流程。
所以,真正的 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 则可以:
- 判断"天气是实时信息,需要查工具"。
- 调用天气工具,参数为"北京、明天"。
- 获取天气数据。
- 根据降雨概率生成"建议带伞"或"无需带伞"的回答。
通俗理解:
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-classic。 docs.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℃。
说明:这段代码先不要求你完全看懂。你现在只需要抓住四件事:
model:指定 Agent 使用哪个大模型。tools:把 Python 函数交给 Agent 使用。system_prompt:定义 Agent 的角色和行为规则。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。
课后练习
- 用自己的话解释:为什么大模型不能直接替代企业知识库问答系统?
- 分别用一句话说明 LangChain、LangGraph、LangSmith、Deep Agents 的定位。
- 创建一个 Python 虚拟环境,完成
langchain的安装,并运行check_env.py。 - 思考:如果要做"智能客服系统",除了模型以外,你认为还需要哪些工具或外部系统?
- 预习第 2 课:模型的创建与调用。思考一下:如果未来要从一个模型 Provider 切换到另一个,业务代码应该怎样尽量少改?