LangChain 入门指南:基本概念、核心功能与简单示例
- [LangChain 入门指南:基本概念、核心功能与简单示例](#LangChain 入门指南:基本概念、核心功能与简单示例)
-
- [**一、什么是 LangChain?**](#一、什么是 LangChain?)
- [**二、LangChain 的核心功能**](#二、LangChain 的核心功能)
-
- [**1. 模型抽象与集成(Model Abstraction)**](#1. 模型抽象与集成(Model Abstraction))
- [**2. 提示工程(Prompt Engineering)**](#2. 提示工程(Prompt Engineering))
- [**3. 链(Chain):工作流串联**](#3. 链(Chain):工作流串联)
- [**4. 检索增强生成(RAG):结合外部知识**](#4. 检索增强生成(RAG):结合外部知识)
- [**5. 记忆管理(Memory):保持对话上下文**](#5. 记忆管理(Memory):保持对话上下文)
- [**6. 代理(Agent):自主决策与工具调用**](#6. 代理(Agent):自主决策与工具调用)
- [**三、LangChain 的应用场景**](#三、LangChain 的应用场景)
-
- [**1. 基于文档的问答系统(RAG)**](#1. 基于文档的问答系统(RAG))
- [**2. 多轮对话系统(带记忆)**](#2. 多轮对话系统(带记忆))
- [**3. 工具调用代理(Agent + Tool)**](#3. 工具调用代理(Agent + Tool))
- [**4. 自定义工作流(LangGraph)**](#4. 自定义工作流(LangGraph))
- [**四、LangChain 的架构与工作流程**](#四、LangChain 的架构与工作流程)
- [**五、总结:LangChain 的价值**](#五、总结:LangChain 的价值)
)
LangChain 入门指南:基本概念、核心功能与简单示例
一、什么是 LangChain?
LangChain 是一个基于大语言模型(LLM)的应用开发框架 ,旨在帮助开发者快速构建智能、可扩展的 LLM 应用 。它的核心思想是模块化 与可组合性------将 LLM 应用拆解为「模型、提示、工具、记忆」等独立模块,通过统一接口串联成完整的工作流,让开发者像「搭积木」一样快速搭建生产级应用。
LangChain 并不提供 LLM 本身,而是整合、调度、控制 LLM 及其上下游工具的「智能系统框架」。它支持多种 LLM 提供商(如 OpenAI、Anthropic、Ollama 本地模型等),并提供丰富的预构建组件(如提示模板、链、代理、记忆管理等),降低了 LLM 应用的开发门槛。
二、LangChain 的核心功能
LangChain 的功能围绕「让 LLM 应用更易开发、更智能、更可扩展」展开,主要包括以下核心模块:
1. 模型抽象与集成(Model Abstraction)
LangChain 封装了多种 LLM 接口(如 OpenAI 的 ChatOpenAI、Hugging Face 的 HuggingFaceHub、Ollama 的 Ollama),提供统一的调用接口,让开发者无需关心不同 LLM 的 API 差异,只需切换模型名称即可更换底层模型。
示例:
python
from langchain.chat_models import ChatOpenAI
# 初始化 OpenAI 模型
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.7)
response = llm.predict("你好,LangChain 是什么?")
print(response)
功能价值:支持多模型切换,适配不同场景需求(如用本地模型降低成本,用 GPT-4 提升效果)。
2. 提示工程(Prompt Engineering)
提示(Prompt)是 LLM 理解用户需求的关键。LangChain 提供提示模板(PromptTemplate),允许开发者用「变量占位符」定义动态提示,避免重复编写提示词。
示例:
python
from langchain.prompts import PromptTemplate
# 定义提示模板(包含变量 {question})
prompt = PromptTemplate.from_template("请用中文解释:{question}")
# 格式化提示(填充变量)
formatted_prompt = prompt.format(question="什么是 LangChain?")
print(formatted_prompt) # 输出:「请用中文解释:什么是 LangChain?」
功能价值:标准化提示格式,减少重复劳动,提升提示的可维护性。
3. 链(Chain):工作流串联
链是 LangChain 的核心组件之一,用于将多个步骤(如提示模板、模型调用、输出解析)串联成完整的工作流 。最常见的链是 LLMChain(提示模板 + LLM),支持组合多个链实现复杂流程(如「检索文档 → 生成回答」)。
示例:
python
from langchain.chains import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
# 初始化模型和提示模板
llm = ChatOpenAI(model_name="gpt-3.5-turbo")
prompt = PromptTemplate.from_template("请回答:{question}")
# 创建 LLMChain(串联提示模板与模型)
chain = LLMChain(llm=llm, prompt=prompt)
# 运行链(输入问题,得到回答)
response = chain.run("LangChain 的核心功能有哪些?")
print(response)
功能价值:将复杂流程拆解为可复用的链,提升代码的模块化与可读性。
4. 检索增强生成(RAG):结合外部知识
RAG(Retrieval-Augmented Generation)是 LangChain 的重要功能,用于将外部知识(如文档、数据库)与 LLM 结合 ,解决 LLM「知识过时」或「幻觉」问题。其核心流程是:用户问题 → 向量检索(找到相关知识) → 拼接提示 → LLM 生成回答。
示例:
python
from langchain.vectorstores import FAISS
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.chains import RetrievalQA
# 1. 加载本地文档(假设已存在 docs_index 向量库)
embeddings = HuggingFaceEmbeddings()
vectorstore = FAISS.load_local("docs_index", embeddings)
# 2. 创建检索器(从向量库中找相关文档)
retriever = vectorstore.as_retriever()
# 3. 创建 RAG 链(检索 + 生成)
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model_name="gpt-3.5-turbo"),
chain_type="stuff", # 将所有检索结果拼接成一个提示
retriever=retriever
)
# 4. 运行 RAG 链(输入问题,得到基于文档的回答)
response = qa_chain.run("LangChain 的 RAG 流程是怎样的?")
print(response)
功能价值:让 LLM 基于最新外部知识回答问题,提升回答的准确性与可信度。
5. 记忆管理(Memory):保持对话上下文
LangChain 提供记忆组件(Memory) ,用于存储对话历史,让 LLM 应用具备多轮对话能力 。常见的记忆类型包括:ConversationBufferMemory(缓冲对话历史)、ConversationKGMemory(用知识图谱存储对话)。
示例:
python
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
from langchain.chat_models import ChatOpenAI
# 初始化记忆组件(存储对话历史)
memory = ConversationBufferMemory()
# 初始化对话链(包含记忆)
conversation = ConversationChain(
llm=ChatOpenAI(model_name="gpt-3.5-turbo"),
memory=memory
)
# 第一轮对话
response1 = conversation.predict(input="你好,我叫小明。")
print(response1) # 输出:「你好,小明!有什么可以帮你的?」
# 第二轮对话(记忆会保留历史)
response2 = conversation.predict(input="我叫什么名字?")
print(response2) # 输出:「你叫小明。」
功能价值:让 LLM 应用具备「上下文感知」能力,实现自然的多轮对话。
6. 代理(Agent):自主决策与工具调用
代理是 LangChain 最强大的功能之一,用于让 LLM 自主选择调用外部工具(如搜索、数据库、API) ,完成复杂任务。代理的核心是「推理-行动」循环(ReAct 算法):LLM 根据用户输入推理需要调用的工具,执行工具后得到结果,再推理下一步行动,直到完成任务。
示例:
python
from langchain.agents import initialize_agent, Tool
from langchain.chat_models import ChatOpenAI
from langchain.utilities import SerpAPIWrapper
# 1. 定义工具(如搜索工具)
search_tool = Tool(
name="search",
func=SerpAPIWrapper().run, # 使用 SerpAPI 进行搜索
description="当需要获取最新信息时,使用此工具搜索。"
)
# 2. 初始化代理(使用 Zero-Shot React 策略)
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
agent = initialize_agent(
tools=[search_tool],
llm=llm,
agent_type="zero-shot-react-description", # 零样本推理策略
verbose=True # 打印推理过程
)
# 3. 运行代理(输入复杂问题)
response = agent.run("2025 年诺贝尔物理学奖得主是谁?")
print(response)
功能价值:让 LLM 应用具备「自主决策」能力,完成超出 LLM 本身知识的任务(如获取最新新闻、查询数据库)。
三、LangChain 的应用场景
LangChain 的模块化与可组合性使其适用于多种 LLM 应用场景,主要包括:
1. 基于文档的问答系统(RAG)
结合外部文档(如企业内部知识库、PDF 文件),让 LLM 基于文档内容回答问题,解决 LLM「知识过时」问题。例如:企业内部客服系统、学术文献问答。
2. 多轮对话系统(带记忆)
通过记忆组件保持对话上下文,实现自然的多轮对话。例如:智能助手(如 Siri、小爱同学)、心理咨询机器人。
3. 工具调用代理(Agent + Tool)
让 LLM 自主调用外部工具,完成复杂任务。例如:旅行规划(调用地图 API 查询路线)、天气查询(调用天气 API)、代码生成(调用代码执行工具)。
4. 自定义工作流(LangGraph)
通过 LangGraph(LangChain 的扩展)构建复杂的状态机工作流,支持循环、分支、子流程等逻辑。例如:订单处理流程(下单 → 支付 → 发货 → 确认收货)、审批流程(提交 → 审核 → 驳回/通过)。
四、LangChain 的架构与工作流程
LangChain 的架构遵循「输入 → 处理 → 输出」的流程,核心组件包括:
- 输入处理:用户输入问题,通过提示模板格式化为 LLM 可理解的 Prompt。
- 历史注入(可选):通过记忆组件将对话历史拼入 Prompt,保持上下文。
- 模型调用:将 Prompt 发送给 LLM,得到回答。
- 输出解析:对 LLM 的回答进行结构化处理(如提取关键信息、转换为 JSON)。
- 结果返回:将解析后的结果返回给用户,并更新记忆。
架构图(简化版):
用户输入 → 提示模板 → 记忆组件 → LLM → 输出解析 → 结果返回
五、总结:LangChain 的价值
LangChain 作为 LLM 应用开发的框架,其核心价值在于:
- 降低开发门槛:提供预构建组件(如提示模板、链、代理),减少重复劳动。
- 提升应用智能:支持 RAG、代理等功能,让 LLM 应用具备「知识更新」与「自主决策」能力。
- 增强可扩展性:模块化设计允许开发者灵活组合组件,适配不同场景需求。
对于大模型初学者来说,LangChain 是入门 LLM 应用开发的最佳选择之一。通过掌握其核心组件(如提示模板、链、代理),可以快速搭建自己的 LLM 应用,逐步深入理解 LLM 的工作原理与应用场景。