LangChain使用指南——开发AI智能应用
前言
大模型(LLM)虽强大,但存在无记忆、无外部能力、易幻觉三大缺陷,无法直接落地企业级应用。LangChain 是大模型应用开发的标准框架,通过模块化设计补齐 LLM 短板,让开发者快速搭建聊天机器人、私有知识库、自主智能体等 AI 应用。
相比于LangChain的使用,我认为更重要的是理解Agent和RAG的工作机制,LangChain的各个模块间分别起到了什么作用。
一、LangChain 核心概述
1.1 什么是 LangChain?
LangChain 是基于大语言模型构建 AI 应用的开发框架,核心价值是模块化、流程化、标准化大模型应用开发,屏蔽底层差异,让开发者专注业务逻辑。
1.2 LangChain 能解决什么问题?
- 统一对接各类大模型(GPT、通义千问、文心一言等)
- 给 AI 添加上下文记忆,实现多轮对话
- 接入外部工具(搜索、计算、数据库)
- 搭建私有知识库,解决大模型幻觉
- 实现自主决策智能体,完成复杂任务
1.3 核心架构
LangChain 采用模块化设计,6 大核心组件可自由组合,适配不同业务场景。
二、6 大核心模块
模块 1:Model IO 模型输入输出
1.1 核心作用
LangChain 与大模型的交互入口,负责提示词管理、模型调用、输出解析,统一屏蔽不同 LLM 的 API 差异。
1.2 核心组件
PromptTemplate:提示词模板,动态传参,标准化指令ChatModels:对接各类对话大模型OutputParser:输出解析器,将自由文本转为 JSON / 列表等结构化数据
1.3 实战代码
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
import os
# 配置大模型
os.environ["OPENAI_API_KEY"] = "你的API_KEY"
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# 1. 定义提示词模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是专业的Java后端开发助手,回答简洁专业"),
("user", "{question}")
])
# 2. 定义输出解析器
parser = StrOutputParser()
# 3. 组装链路:提示词 → 模型 → 解析器
chain = prompt | llm | parser
# 调用
result = chain.invoke({"question": "Java后端有哪些常用锁?"})
print(result)
1.4 适用场景
所有 LangChain 应用的基础入口,所有模块都依赖 Model IO 对接大模型。
模块 2:Chains 链式调用
2.1 核心作用
将 Prompt + LLM + 组件 串成固定流程流水线,是 LangChain 最基础的执行单元,适合硬编码、固定顺序的任务。
2.2 核心特点
- 流程固定,执行稳定
- 开发简单,开箱即用
- 与 Agent 的区别:Chain 无自主决策,Agent 可动态规划
2.3 常用 Chain 类型
LLMChain:基础单步调用ConversationChain:带记忆的对话链SimpleSequentialChain:多步骤顺序执行
2.4 实战代码(顺序链)
from langchain.chains import LLMChain, SimpleSequentialChain
# 步骤1:总结技术文章
prompt1 = ChatPromptTemplate.from_template("总结这段技术文章:{text}")
chain1 = LLMChain(llm=llm, prompt=prompt1)
# 步骤2:将总结转为面试题
prompt2 = ChatPromptTemplate.from_template("根据这段总结生成1道面试题:{summary}")
chain2 = LLMChain(llm=llm, prompt=prompt2)
# 组装顺序链(自动传递上一步结果)
total_chain = SimpleSequentialChain(
chains=[chain1, chain2],
verbose=True # 打印执行流程
)
# 执行
total_chain.invoke("Redis分布式锁的实现原理是SETNX+过期时间,Redisson实现可重入和锁续约")
2.5 适用场景
固定步骤的简单任务:文本总结、翻译、格式转换、单轮问答。
模块 3:Memory 记忆模块
3.1 核心作用
大模型本身无记忆,Memory 负责存储对话历史,将历史拼入 Prompt,实现多轮上下文对话。
3.2 核心工作流程
读历史 → 拼 Prompt → 写新历史
3.3 常用记忆类型(企业级选型)
表格
| 记忆类型 | 特点 | 适用场景 |
|---|---|---|
| ConversationBufferMemory | 全量保存对话 | 短对话 |
| ConversationBufferWindowMemory | 保留最近 k 轮 | 普通长对话 |
| ConversationTokenBufferMemory | 按 Token 限制 | 严格控 Token |
| ConversationSummaryBufferMemory | 最新原文 + 旧数据摘要 | 生产环境首选 |
3.4 实战代码(生产级摘要记忆)
from langchain.memory import ConversationSummaryBufferMemory
from langchain.chains import ConversationChain
# 初始化摘要记忆(最大Token限制)
memory = ConversationSummaryBufferMemory(
llm=llm,
max_token_limit=1000 # 超过则自动生成摘要
)
# 创建带记忆的对话链
conversation = ConversationChain(
llm=llm,
memory=memory,
verbose=True
)
# 多轮对话测试
conversation.invoke("我是Java后端开发,正在学LangChain")
conversation.invoke("我适合做什么AI应用?") # 能记住上一轮信息
3.5 适用场景
所有多轮对话应用:智能客服、聊天助手、交互式 AI 工具。
模块 4:Tools 工具模块
4.1 核心作用
给大模型扩展外部能力,打破 LLM 知识边界,让 AI 能联网、计算、查数据库、调用业务接口。
4.2 核心分类
- 内置工具:搜索(Tavily)、计算器(PythonREPL)、代码执行
- 自定义工具:封装业务接口、数据库操作、内部系统
4.3 实战代码(自定义业务工具)
from langchain.tools import Tool
# 自定义工具:Java后端技术推荐
def java_tech_recommend(level: str) -> str:
"""根据开发水平推荐Java后端技术栈"""
if level == "初级":
return "SpringBoot、MyBatis、MySQL、Redis基础"
elif level == "中级":
return "SpringCloud、Redis分布式、MQ、分库分表"
elif level == "高级":
return "微服务架构、ServiceMesh、云原生、可观测性"
else:
return "请输入正确的开发级别"
# 创建工具对象
java_tool = Tool(
name="JavaTechRecommend",
func=java_tech_recommend,
description="用于根据Java开发级别推荐技术栈,参数为初级/中级/高级"
)
# 工具列表
tools = [java_tool]
4.4 适用场景
需要外部能力的 AI 应用:联网问答、数据计算、业务系统对接。
模块 5:LangChain Agents 智能体详解
5.1 核心概念与定位
Agent(智能体)是 LangChain 的高阶核心模块,是以大语言模型 LLM 作为决策大脑,能够自主理解任务、拆解目标、选择工具、规划执行步骤、自主推进并完成复杂任务的系统。
与固定流程的 Chain 不同,Agent 没有写死的执行步骤,而是像人一样思考、决策、行动,处理开放、复杂、无固定规则的任务。
5.2 AI 能力等级类比(自动驾驶分级)
表格
| AI 等级 | 名称 | 特点 | 代表产品 |
|---|---|---|---|
| L1 | Tool | 人类完成全部工作,AI 仅作为工具 | 计算器、普通软件 |
| L2 | Chatbot | 人类主导,AI 仅提供信息 / 回答 | 基础版 ChatGPT |
| L3 | Copilot | 人机协作,AI 辅助完成 | GitHub Copilot、Midjourney |
| L4 | Agent | AI 主导,人类仅监督 | AutoGPT、LangChain Agent |
| L5 | Species | 完全自主,无需人类干预 | 未来通用人工智能 AGI |
5.3 Agent 与 Chain 核心区别
表格
| 特性 | Chain | Agent |
|---|---|---|
| 执行流程 | 固定、硬编码、线性执行 | 动态、自主决策、多步推理 |
| 决策能力 | 无,按顺序执行 | 有推理、反思、规划能力 |
| 任务类型 | 简单、固定、确定流程 | 复杂、多变、开放问题 |
| 依赖外部 | 不需要自主选工具 | 自主选择并调用工具 |
| 灵活性 | 低 | 高 |
5.4 Agent 核心组成(六要素)
- LLM 大脑:推理、决策、规划、判断
- Memory 记忆:短期上下文记忆 + 长期向量记忆
- Tools 工具:搜索、计算、代码、数据库、API
- Planning 规划:拆解任务、反思纠错、多步推进
- Action 执行:调用工具、获取结果、处理信息
- Collaboration 协作:多智能体协同完成复杂任务

5.5 Agent 两大核心工作模式
5.5.1 ReAct 模式(最通用)
全称:Reasoning + Acting原理:先思考推理,再行动调用工具,用自然语言描述思考过程。
- 优点:通用性强、所有模型都支持、可解释性好
- 缺点:速度稍慢、依赖格式解析
典型类型:
- ZERO_SHOT_REACT_DESCRIPTION(零样本推理)
- CONVERSATIONAL_REACT_DESCRIPTION(对话记忆版)
- STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION
5.5.2 Tool Calling 模式(高效)
原理:LLM 直接输出结构化 JSON,指定调用哪个工具、传什么参数。
- 优点:速度快、格式稳定、不易出错
- 缺点:需要模型原生支持工具调用能力
典型类型:
- OPENAI_TOOLS
- OPENAI_MULTI_TOOLS
表格
| 特性 | ReAct | Tool Calling |
|---|---|---|
| 输出格式 | 自然文本 | 结构化 JSON |
| 执行速度 | 较慢 | 快 |
| 模型支持 | 全部模型 | 支持工具调用的模型 |
| 稳定性 | 一般,需解析 | 高,不易乱 |
| 可解释性 | 高,能看完整思考 | 低,仅保留调用记录 |
5.6 Agent 关键组件详解
5.6.1 Tool(工具)
工具是 Agent 与外部世界交互的接口:
- 联网搜索:TavilySearch、DuckDuckGo
- 数学计算:Calculator、PythonREPL
- 代码执行:Python、Shell
- 自定义能力:API、数据库、文件操作、企业内部系统接口
必备三要素:
name:工具名称func:具体执行函数description:功能描述(Agent 依靠描述自主选择工具)
5.6.2 Memory(记忆)
- ConversationBufferMemory(原始完整记忆)
- ConversationSummaryMemory(摘要压缩记忆)
- ConversationBufferWindowMemory(滑动窗口记忆)
- VectorStoreRetrieverMemory(长期向量持久记忆)
5.6.3 AgentExecutor(执行器)
- 运行 Agent 实例
- 调度工具流转
- 维护思考 - 行动 - 观察循环
- 错误捕获、格式容错
- 控制最大迭代次数,防止死循环
5.7 Agent 创建方式
5.7.1 传统快速方式(initialize_agent)
agent_executor = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True,
memory=memory,
handle_parsing_errors=True
)
5.7.2 通用灵活方式
prompt = hub.pull("hwchase17/react")//直接拉取提示词
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
5.8 执行完整流程
- Thought:自主判断需要做什么、是否调用工具
- Action:选定工具并传入参数
- Observation:接收工具返回结果
- 循环多轮 → 信息足够
- Final Answer:输出最终答案
5.9 关键参数详解
verbose=True:打印完整思考链,调试必开handle_parsing_errors=True:解析失败自动修复,生产必备max_iterations=3:限制循环次数,避免死循环return_intermediate_steps=True:返回中间思考过程
5.10 带记忆的多轮对话 Agent(完整代码)
from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, AgentType
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain.memory import ConversationBufferMemory
import os
# 配置密钥
os.environ["TAVILY_API_KEY"] = "你的密钥"
os.environ["OPENAI_API_KEY"] = "你的密钥"
# 1. 工具
search = TavilySearchResults(max_results=2)
tools = [search]
# 2. 记忆
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
# 3. 大模型
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# 4. 创建Agent
agent_executor = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
memory=memory,
verbose=True,
handle_parsing_errors=True
)
# 5. 多轮对话
agent_executor.invoke("2026年人工智能发展趋势")
agent_executor.invoke("有哪些对应的大模型")
agent_executor.invoke("这些模型如何用于后端开发")
5.11 典型应用场景
- 智能问答(联网搜索 + 多步推理)
- 自动化信息收集、总结、分析
- 代码自动编写、调试、运行
- 股票 / 行业数据分析(搜索 + 计算)
- 智能客服、任务机器人、决策助手
- 复杂业务流程自动化
5.12 优势与价值
- 无需硬编码流程,自适应多变任务
- 可独立完成人类才能处理的复杂任务
- 降低开发成本,提升系统智能上限
- 可扩展、可记忆、可反思、可协作
模块六:Retrieval 检索增强 RAG(最详细完整版)
6.1、RAG 到底是什么?
RAG = Retrieval-Augmented Generation检索增强生成。
大白话:先去私有知识库检索相关内容 → 把内容塞给大模型 → 让大模型只根据检索到的内容回答。
作用:
- 解决大模型幻觉(胡编乱造)
- 接入私有数据(PDF、Excel、Word、知识库)
- 保证答案真实、可追溯、可更新
6.2、RAG 标准六步流程(必背)
1. Source 数据源
支持:PDF、Word、CSV、JSON、TXT、HTML、Markdown、数据库、网页
2. Load 文档加载
用 DocumentLoader 把文件转成 LangChain 统一的 Document 对象。
常见加载器:
- TextLoader:txt
- PyPDFLoader:PDF
- CSVLoader:表格
- JSONLoader:JSON
- UnstructuredXXXLoader:Word/HTML/Markdown
3. Transform 文本切分(最关键)
长文本切成小块(chunk),才能向量化。
常用切分器:
- RecursiveCharacterTextSplitter(最常用、最通用)
- CharacterTextSplitter(按字符切)
- TokenTextSplitter(按 Token 切)
- MarkdownTextSplitter / HTMLHeaderTextSplitter(结构化文档)
- SemanticChunker(语义切分,效果最好)
4. Embed 文本转向量
把文本块变成 向量(embedding)。
常用嵌入模型:
- text-embedding-ada-002(OpenAI)
- text-embedding-3-large
- 开源:BGE、m3e、bge-m3
5. Store 向量存储
把向量存入 向量数据库。
常用向量库:
- FAISS(本地内存,简单)
- Chroma(轻量持久化)
- Milvus、Pinecone、Redis、ES
6. Retrieve 检索召回
用户提问 → 转向量 → 在向量库找最相似的文本块 → 塞给模型回答。
6.3、RAG 核心组件超详细讲解
1. DocumentLoader(文档加载器)
作用:把任何文件 → 统一的 Document 对象。
Document 只有两个东西:
- page_content:文本内容
- metadata:来源、页码、行数等
示例(加载 PDF):
loader = PyPDFLoader("xxx.pdf")
documents = loader.load()
2. Text Splitter(文本切分器)
为什么要切分?
- 模型有 Token 限制
- 太长检索不精准
最常用:RecursiveCharacterTextSplitter
按 段落 → 换行 → 空格 → 字符 递归切分,尽可能保持语义完整。
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500, # 每块最大长度
chunk_overlap=50, # 重叠字符,避免切断语义
separators=["\n\n", "\n", "。", "!", "?", ""]
)
texts = text_splitter.split_documents(documents)
3. Embedding Model(向量模型)
把文本变成高维向量。
相似文本 → 向量距离近。
embedding = OpenAIEmbeddings(model="text-embedding-3-large")
4. Vector Store(向量数据库)
存储向量 + 快速相似度检索。
FAISS(最简单)
db = FAISS.from_documents(texts, embedding)
Chroma(持久化)
db = Chroma.from_documents(
texts,
embedding,
persist_directory="./chroma_db"
)
5. Retriever(检索器)
从向量库获取相关文本块。
retriever = db.as_retriever(
search_kwargs={"k": 3} # 返回最相似3条
)
检索方式
- similarity_search:普通相似度
- similarity_score_threshold:分数阈值过滤
- max_marginal_relevance_search(MMR):平衡相似度 + 多样性
6.4、RAG 完整实战代码
# 1. 加载文档
loader = PyPDFLoader("mybook.pdf")
documents = loader.load()
# 2. 切分
splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50
)
chunks = splitter.split_documents(documents)
# 3. 向量模型
embedding = OpenAIEmbeddings()
# 4. 存入向量库
db = FAISS.from_documents(chunks, embedding)
# 5. 获取检索器
retriever = db.as_retriever(search_kwargs={"k=3"})
# 6. 构建RAG问答链
qa = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4o-mini"),
chain_type="stuff",
retriever=retriever,
return_source_documents=True
)
# 7. 提问
result = qa.invoke("分布式锁怎么实现?")
print(result["result"])
三、企业级模块选型速查表
| 业务场景 | 核心模块组合 | 推荐组件 |
|---|---|---|
| 单轮问答 | Model IO + Chains | LLMChain |
| 多轮对话 | Model IO + Chains + Memory | ConversationSummaryBufferMemory |
| 私有知识问答 | Model IO + Chains + Retrieval | RAG 全流程 |
| 联网 / 工具调用 | Model IO + Tools + Agents | ReAct 模式 Agent |
| 自主决策任务 | Model IO + Tools + Agents + Memory | 带记忆的 Conversational Agent |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)