LangChain完全指南:从核心组件到RAG与Agent实战

前言

大语言模型(LLM)正在改变软件开发的方式,而 LangChain 作为连接LLM与外部世界的桥梁,已成为开发者必备的工具之一。自2022年10月发布以来,它迅速成为GitHub上最热门的AI框架之一(139k Star)。

如果你正打算开发基于大模型的应用,无论是智能客服、文档问答,还是自动化工作流,LangChain都能让你事半功倍。本文将从零开始,系统介绍LangChain的核心概念、六大模块、两种主流架构(RAG与Agent),并通过完整代码带你快速上手。


一、LangChain是什么?

LangChain是一个开源框架 ,用于构建由大语言模型(LLMs)驱动的应用程序。它本身不提供模型,而是帮你更高效地使用各种模型(OpenAI、DeepSeek、Claude、本地模型等)。

它的核心价值在于:

  • 连接:将LLM与外部数据(PDF、网页、数据库)、工具(搜索、计算器、API)无缝对接。

  • 编排:把多个调用组合成"链"(Chain),实现复杂逻辑。

  • 记忆:管理对话上下文,让应用具备长期记忆能力。

简单比喻:大模型是聪明但健忘且没有工具的大脑 ,而LangChain则给它配备了手、眼、耳和记事本


二、为什么需要LangChain?

直接调用API不香吗?

当然可以!比如你用DeepSeek或OpenAI的API直接开发,完全可行。但当你的应用越来越复杂时,会遇到这些问题:

挑战 LangChain的解决方案
切换模型(比如从OpenAI换到Claude)需要重写调用代码 统一Model I/O接口,换模型只需改配置
多个API调用(检索+生成+工具)难以编排 内置Chain和Agent,结构化组合
缺乏对话记忆 Memory模块开箱即用
无法访问私有数据 Retrieval模块(RAG)轻松集成向量检索
需要调用外部工具(搜索、日历、数据库) Tools模块统一管理

LangChain能帮你做什么?

  • 文档问答:基于内部手册、技术文档的问答系统

  • 智能客服:上下文感知的对话机器人

  • 自动化报告生成:从数据中提取洞察并生成自然语言摘要

  • 多步推理任务:让Agent自主调用工具完成复杂目标


三、LangChain的六大核心组件

学习LangChain,首先需要理解它的架构。官方将组件分为六大模块(参考v0.2架构):

模块 功能描述 重要程度
Model I/O 管理模型输入输出(Prompt模板、模型调用、输出解析) ★★★★★
Chains 将多个步骤串联为完整流程 ★★★★★
Memory 存储对话历史或长期知识 ★★★★
Retrieval 实现RAG:加载、分割、向量化、检索外部数据 ★★★★★
Agents 自主决策并调用工具 ★★★★
Callbacks 日志、监控、流式输出 ★★★

1. Model I/O ------ 最常用模块

  • Format :使用PromptTemplate构建动态输入

  • Predict:统一接口调用LLM(支持DeepSeek、OpenAI、本地模型等)

  • Parse :通过OutputParser将模型输出转为JSON等结构化格式

2. Chains ------ 编排引擎

一个LLMChain就是最简单的链:Prompt → LLM → OutputParser。复杂的链可以组合多个步骤,比如RetrievalQA链自动执行检索+生成。

3. Memory ------ 记忆管理

  • ConversationBufferMemory:完整历史

  • ConversationSummaryMemory:摘要压缩(适合长对话)

  • VectorStoreRetrieverMemory:用向量库长期存储

4. Retrieval ------ RAG基石

包含:文档加载器(Loader)→ 文本分割器(Splitter)→ 嵌入模型(Embeddings)→ 向量存储(VectorStore)→ 检索器(Retriever)。这是企业落地最广的场景。

5. Agents ------ 智能体

Agent = LLM + Memory + Tools + Planning + Action。它让模型自主决定下一步该做什么,比如"先搜索,再计算,最后生成报告"。

6. Callbacks ------ 可观测性

配合 LangSmith 可实现链路追踪、调试、评估,是生产级应用的关键。


四、两大应用架构详解

架构一:RAG(检索增强生成)

适用场景:需要基于外部知识库(技术文档、产品手册、代码库)回答的问题。

核心流程

  1. 加载:从多种源(网页、PDF、Markdown)加载文档

  2. 分割:将长文档切成合适大小的块(chunk)

  3. 向量化:用嵌入模型将文本转为向量

  4. 存储:存入向量数据库(如FAISS、Chroma)

  5. 检索:用户提问时,从库中召回最相关的块

  6. 生成:将检索结果与问题组合成Prompt,让LLM回答

技术难点

  • 文件解析(PDF中的表格、图片)

  • 分块策略(固定大小 vs 语义切割)

  • 检索精度(相似度算法 + 重排序Reranker)

架构二:Agent(智能体)

适用场景:需要多步推理、调用外部工具(API、计算器、数据库)的复杂任务。

核心要素

  • LLM:决策中枢

  • 记忆:短期(上下文窗口)与长期(向量库或微调)

  • 工具:扩展能力(搜索、代码执行、业务API)

  • 规划:任务分解(如ReAct、Plan-and-Execute)

  • 行动:执行具体操作


五、开发环境准备

环境要求

  • Python 3.10+

  • 推荐Anaconda管理虚拟环境

  • 开发IDE:PyCharm / VS Code

安装核心依赖

bash

复制代码
# 基础包
pip install langchain langchain-core langchain-community

# 模型接入(以DeepSeek为例)
pip install langchain-deepseek

# 向量库
pip install faiss-cpu  # 或 faiss-gpu

# 本地嵌入模型
pip install sentence-transformers

# 网页加载等工具
pip install beautifulsoup4

配置API密钥

创建 config.py(以DeepSeek为例):

python

复制代码
OPENAI_API_KEY = "sk-xxx"
OPENAI_MODEL = "deepseek-chat"
OPENAI_BASE_URL = "https://api.deepseek.com"

六、从零到一:代码实战

1. 最简单的对话

python

复制代码
from langchain_deepseek import ChatDeepSeek
from langchain_core.messages import HumanMessage
import config

llm = ChatDeepSeek(
    model="deepseek-chat",
    api_key=config.OPENAI_API_KEY,
    temperature=0.7
)
response = llm.invoke([HumanMessage("什么是RAG?")])
print(response.content)

2. 使用Prompt模板 + JSON输出

python

复制代码
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import JsonOutputParser

parser = JsonOutputParser()
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一位技术专家。回答必须仅返回标准JSON格式,不要多余文字。\n{format_instructions}"),
    ("human", "{question}")
]).partial(format_instructions=parser.get_format_instructions())

chain = prompt | llm | parser
result = chain.invoke({"question": "解释Python中的装饰器"})
print(result)

3. RAG完整示例(加载网页文档 → 向量检索 → 问答)

python

复制代码
from langchain_community.document_loaders import WebBaseLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_deepseek import ChatDeepSeek
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
import config

# 1. 加载文档(以Python官方教程为例)
loader = WebBaseLoader("https://docs.python.org/3/tutorial/index.html")
docs = loader.load()

# 2. 分割
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)

# 3. 嵌入与向量存储
embeddings = HuggingFaceEmbeddings(
    model_name="sentence-transformers/all-MiniLM-L6-v2"
)
vector_store = FAISS.from_documents(chunks, embeddings)

# 4. 创建检索器
retriever = vector_store.as_retriever(search_kwargs={"k": 3})

# 5. 构建RAG链
llm = ChatDeepSeek(model="deepseek-chat", api_key=config.OPENAI_API_KEY)
prompt = ChatPromptTemplate.from_template("""
请严格依据下面提供的参考内容回答问题,禁止编造:
【参考上下文】
{context}
【用户问题】
{question}
""")

rag_chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

# 6. 执行问答(使用中立问题)
query = "Python中的列表推导式是什么?"
result = rag_chain.invoke(query)
print(result)

4. 使用Agent调用检索工具

python

复制代码
from langchain.tools.retriever import create_retriever_tool
from langchain import hub
from langchain.agents import create_openai_functions_agent, AgentExecutor

# 创建工具
tool = create_retriever_tool(
    retriever,
    "PythonDocsRetriever",
    "用于搜索Python官方文档中的信息"
)

# 加载Agent提示模板
prompt = hub.pull("hwchase17/openai-functions-agent")

# 构建Agent
agent = create_openai_functions_agent(llm, [tool], prompt)
executor = AgentExecutor(agent=agent, tools=[tool], verbose=True)

# 运行
response = executor.invoke({"input": "Python的列表和元组有什么区别?"})
print(response["output"])

七、LangChain生态扩展

除了核心库,还有几个重要项目:

项目 作用
LangGraph 基于图的多智能体编排,支持循环、分支等复杂工作流
LangSmith 生产级调试、监控、评估平台,与LangChain深度集成
LangServe 将Chain或Agent部署为REST API服务

LangGraphLangSmith 被认为是未来最有潜力的模块。


八、学习建议与常见问题

推荐学习路径

  1. 先跑通示例代码:感受整个流程,不要只看不练。

  2. 阅读官方文档python.langchain.com 是最权威的参考。

  3. 从简单项目开始:比如一个基于本地PDF的问答系统。

  4. 关注RAG和Agent:这是目前企业应用的两个主要方向。

  5. 多利用测试数据:在做技术选型或优化时,先准备评测集。

常见问题

  • Q:LangChain和LlamaIndex有什么区别?

    • LlamaIndex更专注于索引和检索(RAG),而LangChain更全面,涵盖Agent、Chain等。
  • Q:LangChain支持哪些模型?

    • 几乎所有主流模型(OpenAI、Anthropic、Cohere、DeepSeek、HuggingFace本地模型等),通过langchain-community集成。
  • Q:RAG中的Embedding模型如何选择?

    • 中文场景推荐bge-smalltext2vec;英文可用all-MiniLM-L6-v2;追求精度可用bge-large

结语

LangChain极大地简化了LLM应用开发流程,它不是一个"黑盒",而是一套清晰、可组合的组件库。无论你是构建智能客服、自动化报告工具,还是研究多智能体系统,LangChain都能提供可靠的基础设施。

记住:LangChain的核心思想是"连接"与"编排",而真正的创新在于你如何组合这些组件来解决实际业务问题。

希望本文能帮你快速上手LangChain。如果你在实践中有任何收获或疑问,欢迎在评论区交流讨论!

相关推荐
赵广陆1 天前
RAG进阶
pycharm·langchain
山间小僧1 天前
「AI学习笔记」Loop Engineering 和 Graph Engineering
langchain·agent·ai编程
浮生望1 天前
Milvus向量数据库实战:从零搭建AI日记助手的RAG完整链路
langchain
制造数据与AI践行者老蒋1 天前
LangChain ReAct Agent 嵌套 JSON 报错?args_schema=None 解决 Field required
langchain·react agent·排坑笔记·json嵌套报错·pydantic校验·工具调用排坑
gb42152872 天前
python中unstructured库和langchain-unstructured库在解析pdf文件的时候的区别?
python·langchain·pdf
Tbisnic2 天前
LangChain的 六大核心组件与 RAG 知识库构建
人工智能·python·ai·langchain·rag·langgraph
gb42152872 天前
python中pypdf库和langchain-unstructured库在解析pdf文件的时候的区别?
python·langchain·pdf
badhope2 天前
用RAG做了个智能客服,上线第一天就被用户骂了——我的7天实战复盘
人工智能·langchain
Wang's Blog3 天前
AI Agent白手起家44: LangChain 文档切分实战 — 长度、文本架构与语义切片
人工智能·langchain
jaboo123 天前
postgresql从入门到精通
数据库·postgresql·langchain