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。如果你在实践中有任何收获或疑问,欢迎在评论区交流讨论!

相关推荐
BraveWang9 小时前
【LangChain 1.x】09、工具进阶|ToolRuntime、Command 与动态工具选择
langchain
早点睡啊Y10 小时前
深入学 LangChain 官方文档(十四)MCP 模型上下文协议首讲
langchain
草莓熊Lotso11 小时前
【LangChain】输出解析器全解:让大模型输出从 “聊天” 变 “机器可读”
服务器·数据库·python·langchain·pip
徐小超11 小时前
从一句 Hello World 到完整 RAG 系统:一个 AI 知识库的架构选型实录
langchain·node.js·ai编程
小白说大模型1 天前
从向量嵌入到复杂 Agent:LLM、LangChain、LangGraph 完整科普
java·开发语言·人工智能·gpt·深度学习·langchain
geo搜搜果数据1 天前
实测AI搜索GEO监测工具:对比DeepSeek与豆包品牌排名差异
人工智能·langchain·embedding·搜搜果
YIAN1 天前
大模型总 "胡说八道"?用 LangChain.js 从零实现 RAG 语义检索系统
javascript·langchain
我叫张小白。1 天前
LangChain 结构化输出(Structured Output)技术文档
java·数据库·langchain
lhxcc_fly1 天前
LangGraph 项目部署知识点总结
ai·langchain·项目部署·langgraph