1.1 什么是 LangChain
LangChain 是一个用于构建 LLM 应用的框架。它提供了一套工具和抽象,让开发者能够更轻松地创建基于大语言模型的应用。
面试时被问到"你用过 LangChain 吗"或"说说你对 LangChain 的理解",这道题是必考题!下面这个表格和图解,记住就对了。
💡 一句话理解:LangChain = LLM(大脑)+ Chain(流水线)+ Tools(工具)
🧩 LangChain 的核心组成
| 组件 | 作用 | 打个比方 |
|---|---|---|
| Models | 接入各种大语言模型 | 应用的大脑 |
| Prompts | 管理和优化提示词 | 与大脑对话的方式 |
| Chains | 组合多个组件形成工作流 | 流水线装配 |
| Agents | 让模型自主决策行动 | 能自己思考的机器人 |
| Memory | 保存对话历史和上下文 | 短期/长期记忆 |
| Tools | 扩展模型的能力边界 | 配备的工具箱 |
1.2 为什么需要 LangChain
直接调用 LLM API 看似简单,但当应用变得复杂时,你会遇到各种问题。LangChain 就是为了解决这些问题而生的。
❌ 不用 LangChain 的问题
- 提示词混乱:模板散落在代码各处,难以维护
- 上下文丢失:每次调用都要手动管理对话历史
- 工具调用复杂:需要自己实现搜索、计算等功能的调用逻辑
- 难以调试:无法追踪 LLM 的思考过程和中间结果
- 提供商锁定:换个大模型要重写大量代码
✅ 使用 LangChain 的优势
- 模块化设计:各组件独立,可复用可替换
- 开箱即用:内置大量工具和集成
- 统一接口:一套代码,支持多个 LLM 提供商
- 可观测性:集成 LangSmith,方便调试追踪
- 生态丰富:数千种工具和组件的集成
如果你需要构建复杂的 LLM 应用,比如需要多轮对话、接入外部工具、处理私有知识库、或者需要精细控制调用流程,那么 LangChain 会是一个很好的选择。对于简单的单次调用场景,直接用 SDK 可能更直接。
1.3 LangChain 核心架构
LangChain 的架构可以分为三层,从下往上分别是:模型层、框架层和应用层。
1.3.1 模型层(Model Layer)
这是 LangChain 支持的各种大语言模型。根据使用方式,主要分为两类:
- LLMs:通用语言模型,输入文本,输出文本
- Chat Models:对话模型,输入消息列表,输出消息
这是高频面试题!简单说:LLM 是老一代接口(text-in, text-out),ChatModel 是新接口(messages-in, message-out),支持 System/Human/AI 三种消息角色。
1.3.2 框架层(Framework Layer)
这是 LangChain 的核心,提供了构建 LLM 应用所需的各种组件:
- Chains:将多个组件串联起来,形成完整的工作流
- Agents:让模型自主决定使用哪些工具
- Memory:管理对话历史和上下文
- Tools:扩展模型能力,如搜索、计算、API调用
- Retrievers:从外部数据源检索相关信息
- Callbacks:钩子函数,用于日志、监控等
1.3.3 应用层(Application Layer)
基于框架层构建的具体应用,如聊天机器人、文档问答系统、数据分析工具等。
1.4 环境搭建(面试也要会!)
面试时面试官可能会问"你本地搭过环境吗"或"用过哪些 LangChain 的包",这节内容要眼熟。
1.4.1 安装 Python
LangChain 基于 Python 开发,需要 Python 3.8 或更高版本。
检查 Python 版本
python3 --version
# 应该显示 Python 3.8.x 或更高版本
创建虚拟环境(推荐)
# 使用 venv
python3 -m venv langchain-env
source langchain-env/bin/activate # macOS/Linux
# langchain-env\Scripts\activate # Windows
安装 LangChain
pip install langchain langchain-openai
langchain 是核心包,langchain-openai 提供了 OpenAI 的集成。如果你用其他模型,需要装对应的包:langchain-anthropic(Claude)、langchain-google-vertexai(Gemini)等。
1.4.2 获取 API Key
要使用 LLM,你需要获取相应的 API Key。以下是常用提供商的获取方式:
| 提供商 | API Key 获取地址 | 备注 |
|---|---|---|
| OpenAI | platform.openai.com | 需要信用卡,新账户有免费额度 |
| Anthropic | console.anthropic.com | Claude 系列模型 |
| makersuite.google.com | Gemini 系列模型 |
1.4.3 配置环境变量
为了安全起见,建议将 API Key 设置为环境变量:
# macOS/Linux
export OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxx"
# Windows (PowerShell)
$env:OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxx"
不要将 API Key 直接写在代码里,也不要提交到 Git 仓库。建议使用 .env 文件配合 python-dotenv 库来管理敏感信息。
1.5 5 分钟快速开始
让我们通过几个例子,快速体验 LangChain 的用法。
1.5.1 第一个 LangChain 程序
先用 LangChain 调用 OpenAI 的 GPT 模型:
from langchain_openai import ChatOpenAI
# 初始化模型
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# 调用模型
response = llm.invoke("用一句话解释什么是人工智能")
print(response.content)
人工智能是让计算机具有类似人类智能的能力,包括学习、推理、理解和决策等。
1.5.2 使用 Prompt Template
Prompt Template 可以让我们更方便地管理提示词:
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
# 初始化模型
llm = ChatOpenAI(model="gpt-4o-mini")
# 创建提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一位专业的{subject}老师,用通俗易懂的语言解释概念。"),
("human", "请解释"{concept}"这个概念")
])
# 生成提示词
messages = prompt.invoke({
"subject": "计算机",
"concept": "什么是算法"
})
# 调用模型
response = llm.invoke(messages)
print(response.content)
1.5.3 构建一个简单 Chain
使用 LCEL(LangChain Expression Language)将提示模板和模型串联起来:
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# 初始化组件
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
prompt = ChatPromptTemplate.from_messages([
("system", "你是一位专业的{subject}老师。"),
("human", "用一句话解释:{topic}")
])
output_parser = StrOutputParser()
# 使用 LCEL 构建链
chain = prompt | llm | output_parser
# 调用链
result = chain.invoke({
"subject": "物理学",
"topic": "相对论"
})
print(result)
|(管道)操作符是 LCEL 的核心语法,它将前一个组件的输出传递给下一个组件作为输入。使用这种方式,我们可以轻松组合任意数量的组件。
1.5.4 带对话记忆的聊天
现在让我们加入对话记忆,让模型能够记住之前的对话内容:
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
# 初始化模型和提示
llm = ChatOpenAI(model="gpt-4o-mini")
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个乐于助人的助手。"),
MessagesPlaceholder("history"),
("human", "{message}")
])
# 创建链
chain = prompt | llm
# 创建带记忆的链
store = {} # 简单的内存存储
def get_history(session_id: str):
if session_id not in store:
store[session_id] = InMemoryChatMessageHistory()
return store[session_id]
chain_with_memory = RunnableWithMessageHistory(
chain,
get_history,
input_messages_key="message",
history_messages_key="history"
)
# 对话
response1 = chain_with_memory.invoke(
{"message": "我叫小明"},
config={"configurable": {"session_id": "user123"}}
)
print(response1.content) # 很高兴认识你,小明!
response2 = chain_with_memory.invoke(
{"message": "我叫什么名字?"},
config={"configurable": {"session_id": "user123"}}
)
print(response2.content) # 你叫小明!
1.6 本章小结
在这一章中,我们学习了:
- 什么是 LangChain:一个用于构建 LLM 应用的框架,提供了模型、提示、链、代理、记忆和工具等核心组件。
- 为什么需要 LangChain:解决直接调用 LLM API 时的各种问题,如提示词管理、上下文维护、工具调用等。
- LangChain 的三层架构:应用层、框架层(LangChain)和模型层。
- 环境搭建:安装 Python、LangChain 以及获取 API Key。
- 快速开始:使用 LCEL 构建简单的链,以及带记忆的对话。
📝 面试必备:关键概念速记
| 概念 | 面试怎么答 | 一句话理解 |
|---|---|---|
| LCEL | "用管道符 | 把组件串起来" | 流水线装配语言 |
| Chain | "多个组件组成的工作流" | 组装起来的流水线 |
| Prompt Template | "可复用的提示词模板" | 填空题模板 |
| Memory | "让对话有上下文" | 模型的记忆 |
| Agent | "让模型自己决定用什么工具" | 会思考的机器人 |
现在你已经掌握了 LangChain 的基本概念,可以回答"什么是 LangChain"这个面试必考题了!
在下一章中,我们将深入学习 Prompt 与 Chains,包括更复杂的提示模板设计、各种类型的链(Sequential Chain、Router Chain 等),以及输出解析器的使用。
📱 关注我们
微信公众号
第一时间获取更新
小红书
更多学习干货分享