LangChain 学习笔记:大模型应用开发的“万能钥匙”
LangChain 学习笔记:大模型应用开发的“万能钥匙”
从零开始认识 LangChain,搞懂它解决了什么问题、怎么用、环境怎么搭
一、我为什么要了解 LangChain?
这事得从我第一次用大模型 API 说起。
当时我想做一个简单的“聊天机器人”,想着直接调 OpenAI 的 API 不就完了吗?确实,调个接口返回回答,几行代码就搞定了。但后来需求慢慢变多了——要记住上下文、要能联网搜索、要能查本地文档、输出格式还得是固定的 JSON……
每加一个功能,代码就膨胀一圈。对话历史得自己维护、token 超了得自己截断、模型返回的格式不对得自己写正则去修、换一个模型几乎要重写大半代码。我发现自己 80% 的时间都在处理这些“杂活”,真正写业务逻辑的时间少得可怜。
这时候我才明白:调用 API 和做产品之间,隔着一条很宽的路。
后来我遇到了 LangChain,才算是找到了正确的打开方式。
二、LangChain 是什么?
简单说,LangChain 是一个专门用来开发大模型应用的框架。它把开发过程中那些重复性的、通用的工作都封装好了,让你不用每次都从零开始写。
打个比方:如果你想开发一个 Web 网站,你不会从写 HTTP 服务器开始,而是会用 Spring Boot、Django、Express 这样的框架。LangChain 干的也是同样的事——只不过它服务的对象是大语言模型。
LangChain 是 2022 年 10 月由哈佛大学的 Harrison Chase 发起的开源项目。注意一个有意思的时间点:ChatGPT 是 2022 年 11 月才问世的,LangChain 比 ChatGPT 还早一个月。创始人能在这个时间点就布局大模型应用框架,眼光确实挺准的。
三、LangChain 能帮我省掉哪些麻烦?
对比一下直接调用 API 和使用 LangChain 的区别,你就明白了:
直接调用 API 做一件事,你可以想象一个场景:你想让模型根据你的知识库回答问题。你需要自己去把文档加载进来、切成小块、存到向量数据库、写检索逻辑、拼 prompt、调 API、解析输出……每一步都得自己写代码,还得处理各种边界情况。
用 LangChain,这些事情基本上都是现成的。文档加载有 DocumentLoader,文本切分有 TextSplitter,向量化存贮有 VectorStore,检索有 Retriever,拼接 prompt 有 PromptTemplate……你只需要把这些组件串起来,十几行代码就能搞定。
说白了就是:你可以把精力放在“做什么产品”上,而不是“怎么调接口”上。
具体来说,LangChain 帮我省掉了这些事:
- 对话管理:不用自己维护消息列表、控制 token 上限、做摘要压缩
- 工具调用:不用自己定义函数 schema、解析模型返回的 JSON、处理异常
- RAG(检索增强生成) :整个流程从加载文档到检索到生成答案,一条链搞定
- 模型切换:从 OpenAI 换到 Claude 换到 DeepSeek,改一行配置就行
- 结构化输出:用 Pydantic 定义好格式,框架自动帮你解析和校验
四、LangChain 生态:不只一个包
刚开始接触 LangChain 的时候,我光看文档就有点晕——怎么又是 LangChain 又是 LangGraph 又是 Deep Agents?后来才搞明白,这其实是三层结构,从底层到上层层层构建的关系。
用最简单的话说:
LangGraph 是最底层,它负责“精确控制每一步流程”。你可以把它想象成一个流程图,每个节点做什么、节点之间怎么流转,都由你说了算。适合企业级复杂应用,比如需要审批节点、人工审核、回滚等场景。
LangChain 是中间层,它提供了标准化的抽象组件。你不需要关心底层怎么流转的,只需要把组件组合起来用就行。大部分通用开发场景用这一层就够了。
Deep Agents 是最上层,开箱即用。你只需要告诉它“我要干什么”,它自己规划步骤、调用工具、完成任务。适合快速原型验证。
这三层是层层依赖的:Deep Agents 建立在 LangChain 之上,LangChain 又建立在 LangGraph 之上。你不需要全部掌握,用哪层取决于你的需求有多复杂。
五、核心模块速览
LangChain 的模块分成三层:
基础层(用什么说话)
这一层定义了和模型之间怎么“对话”。包括:
- Messages:标准化的消息格式,比如 SystemMessage(系统指令)、HumanMessage(用户输入)、AIMessage(模型回复)、ToolMessage(工具返回结果)
- Prompts:提示词模板,支持变量插入和复用,比如
"请用{language}介绍{topic}" - Streaming:流式输出,让结果一个字一个字地蹦出来,体验更好
能力层(怎么做)
这一层提供了核心能力组件:
- Models:统一的模型调用接口,所有模型都用
invoke、batch、stream三种方法,换模型不用改代码 - Tools:用
@tool装饰器定义一个函数,模型就能自动识别和调用它 - Memory:管理对话历史,支持短期记忆、长期记忆、摘要压缩
- Structured Output:用 Pydantic 模型约束输出格式,确保返回标准的 JSON
应用层(做什么)
这一层是面向具体业务场景的:
- Chains:用管道符
|把多个组件串成流水线,比如prompt | llm | parser - RAG:从文档加载到向量检索到生成回答的完整链路
- Agents:模型自主规划执行步骤,循环调用工具直到完成任务
六、环境准备(我用的是 uv)
LangChain 是基于 Python 的,所以第一步是搭好 Python 环境。
我为什么不用 conda?
以前我习惯用 conda,但这次我换了 uv。简单对比一下:
- conda 确实什么都能管,但速度慢、体积大
- uv 是 Rust 写的,安装包比 pip 快 10 到 100 倍
- LangChain 的所有包都在 PyPI 上,用 uv 刚好合适
- uv 还能管理 Python 版本,替代了 pyenv 的功能
如果你还在用 conda 做 LangChain 开发,可以考虑换 uv,体验真的不一样。
安装 uv
Windows(PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
macOS / Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
装完验证一下:uv --version
创建项目并安装 LangChain
# 创建项目目录
mkdir langchain-course && cd langchain-course
# 初始化项目(自动创建虚拟环境和 pyproject.toml)
uv init
# 指定 Python 版本
uv python pin 3.12
# 安装核心包
uv add langchain
# 安装你需要的模型集成
uv add langchain-openai # OpenAI
uv add langchain-anthropic # Claude
uv add langchain-deepseek # DeepSeek
uv add langchain-ollama # 本地模型
# 安装常用扩展
uv add python-dotenv # 环境变量管理
uv add langchain-chroma # 向量数据库
理解那几个文件
用 uv 初始化后,目录里会出现几个文件:
- pyproject.toml:项目的“购物清单”,记录了你装了哪些包。你不需要手动编辑,
uv add会自动维护它。 - uv.lock:精确记录了每个包的版本号,包括间接依赖。把这个文件提交到 Git,别人拉下来执行
uv sync就能得到一模一样的环境。 - .venv:虚拟环境文件夹,存放实际安装的包。这个不要提交到 Git,加到
.gitignore里。
配置 API Key
LangChain 本身不提供模型,你需要有自己的 API Key。我目前用的是 CloseAI(国内中转平台,支持支付宝),配置方式很简单:
在项目根目录创建 .env 文件:
OPENAI_API_KEY=你的密钥
OPENAI_BASE_URL=你的代理地址
然后在代码里加载:
from dotenv import load_dotenv
import os
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
记得把 .env 加到 .gitignore,别把密钥传到网上了。
七、第一个程序
环境搭好之后,我写了一个最简单的调用试试水:
from langchain_openai import ChatOpenAI
import os
llm = ChatOpenAI(
model="gpt-4",
api_key=os.getenv("OPENAI_API_KEY"),
base_url=os.getenv("OPENAI_BASE_URL")
)
response = llm.invoke("你好,请用一句话介绍 Python")
print(response.content)
invoke 是最基本的调用方法,传字符串进去,拿回复出来。就这么简单。
后面我还会学到 stream(流式输出)和 batch(批量调用),但这是第一步。
八、接下来我打算学什么
我现在刚把环境搭好、跑通了第一个 demo,接下来准备按这个路线往下走:
- Model I/O:各种模型的调用方式、消息格式、输出解析
- Prompts:提示词模板怎么写、怎么复用
- Chains:怎么把多个步骤串成一条流水线
- Memory:怎么让模型记住上下文
- Tools:怎么让模型调用外部工具
- RAG:检索增强生成,让模型能回答私有数据的问题
- Agents:让模型自主规划执行
九、一点心得
学 LangChain 这件事,我的感受是:它解决的不是“能不能做”的问题,而是“能不能高效地做”的问题。
直接调 API 当然也能实现所有功能,但代码量、维护成本、可读性都会随着需求增加而迅速恶化。LangChain 提供的是一套标准化的“乐高积木”,让你可以快速拼出想要的功能,而不是每次都从烧砖开始。
如果你也在学 LangChain,我的建议是:别只看文档,动手写代码。 从最简单的 invoke 开始,慢慢往上加功能——加 prompt 模板、加输出解析、加工具调用……每一步都跑通,比看十遍文档都管用。
后面学到新东西我再来更新这篇博客。如果你也在学 LangChain,欢迎一起交流。
更多推荐




所有评论(0)