快速入门:什么是 LangChain

面试官:「聊聊 LangChain 吧。」

你:「它是一个框架,用来构建 LLM 应用。核心是 Chain,把 Prompt、Model、Output Parser 串起来...」

面试官:「那它怎么实现 Agent 的?Tool Calling 了解吗?」

🤔 卡壳了?这一章,就是来救场的。用图说话,让你面试再也不慌。

1.1 什么是 LangChain

LangChain 是一个用于构建 LLM 应用的框架。它提供了一套工具和抽象,让开发者能够更轻松地创建基于大语言模型的应用。

🎯 面试加分项

面试时被问到"你用过 LangChain 吗"或"说说你对 LangChain 的理解",这道题是必考题!下面这个表格和图解,记住就对了。

💡 一句话理解:LangChain = LLM(大脑)+ Chain(流水线)+ Tools(工具)

🧩 LangChain 的核心组成

组件 作用 打个比方
Models 接入各种大语言模型 应用的大脑
Prompts 管理和优化提示词 与大脑对话的方式
Chains 组合多个组件形成工作流 流水线装配
Agents 让模型自主决策行动 能自己思考的机器人
Memory 保存对话历史和上下文 短期/长期记忆
Tools 扩展模型的能力边界 配备的工具箱
图 1-1:LangChain 核心组件全景图
LangChain 框架 Models LLM / Chat Model Prompts Template / Parser Chains LCEL / Sequential Agents ReAct / Tool Calling Memory Buffer / Summary Tools Search / Calculator

1.2 为什么需要 LangChain

直接调用 LLM API 看似简单,但当应用变得复杂时,你会遇到各种问题。LangChain 就是为了解决这些问题而生的。

❌ 不用 LangChain 的问题

  • 提示词混乱:模板散落在代码各处,难以维护
  • 上下文丢失:每次调用都要手动管理对话历史
  • 工具调用复杂:需要自己实现搜索、计算等功能的调用逻辑
  • 难以调试:无法追踪 LLM 的思考过程和中间结果
  • 提供商锁定:换个大模型要重写大量代码

✅ 使用 LangChain 的优势

  • 模块化设计:各组件独立,可复用可替换
  • 开箱即用:内置大量工具和集成
  • 统一接口:一套代码,支持多个 LLM 提供商
  • 可观测性:集成 LangSmith,方便调试追踪
  • 生态丰富:数千种工具和组件的集成
💡 什么时候用 LangChain?

如果你需要构建复杂的 LLM 应用,比如需要多轮对话、接入外部工具、处理私有知识库、或者需要精细控制调用流程,那么 LangChain 会是一个很好的选择。对于简单的单次调用场景,直接用 SDK 可能更直接。

1.3 LangChain 核心架构

LangChain 的架构可以分为三层,从下往上分别是:模型层、框架层和应用层。

图 1-2:LangChain 三层架构
应用层 Application Layer 聊天机器人 文档问答 数据分析 自动化流程 RAG ... 框架层 Framework Layer (LangChain) Chains Agents Memory Tools Retrievers Callbacks 模型层 Model Layer OpenAI Anthropic Google HuggingFace Cohere 本地模型

1.3.1 模型层(Model Layer)

这是 LangChain 支持的各种大语言模型。根据使用方式,主要分为两类:

  • LLMs:通用语言模型,输入文本,输出文本
  • Chat Models:对话模型,输入消息列表,输出消息
💡 面试被问到"LLM 和 ChatModel 的区别"

这是高频面试题!简单说: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 系列模型
Google 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 模型:

python basic_llm.py
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 可以让我们更方便地管理提示词:

python prompt_template.py
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)将提示模板和模型串联起来:

图 1-3:简单 Chain 的工作流程
Prompt Template 输入: {subject, topic} 输出: messages LLM gpt-4o-mini 输出: AIMessage Output Parser StrOutputParser 输出: str | 操作符连接
python simple_chain.py
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 小知识

|(管道)操作符是 LCEL 的核心语法,它将前一个组件的输出传递给下一个组件作为输入。使用这种方式,我们可以轻松组合任意数量的组件。

1.5.4 带对话记忆的聊天

现在让我们加入对话记忆,让模型能够记住之前的对话内容:

图 1-4:带记忆的对话流程
Memory 对话历史 Prompt + 历史消息 LLM 生成回复 保存新对话 第一轮: Human: 你好! AI: 你好!有什么... 第二轮: Human: 刚才说什么了? AI: 我刚才说"你好"...
python chat_with_memory.py
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 等),以及输出解析器的使用。