LangChain 是一个 **大语言模型(LLM)应用开发框架**
LangChain 是一个 大语言模型(LLM)应用开发框架,核心目标是解决 LLM 与外部工具、数据、流程的“连接与协同”问题,让开发者快速构建复杂的 AI 应用(而非仅调用单轮 LLM API)。其核心价值是“模块化”和“可组合性”,将 LLM 应用的关键组件拆分为独立模块,再通过“链(Chain)”和“代理(Agent)”串联成端到端流程。
一、LangChain 核心定位
- 解决 LLM 的原生局限:LLM 上下文有限、无法实时联网、不能直接操作外部工具(数据库、API)、缺乏长程记忆等。
- 核心能力:连接外部资源(数据、工具)+ 编排复杂流程(多步推理、记忆管理)。
- 适用场景:聊天机器人、问答系统(RAG)、数据分析、自动化工作流、智能代理等。
二、核心组件与核心使用场景
LangChain 的组件设计围绕“LLM 应用的全生命周期”展开,核心组件及对应使用场景如下:
1. 基础组件(必学)
| 组件 | 作用 | 常用工具/示例 |
|---|---|---|
| 模型(Models) | 接入 LLM(OpenAI、Anthropic、本地模型如 Llama 3)、嵌入模型(Embedding) | ChatOpenAI、LlamaCpp、OpenAIEmbeddings |
| 提示词(Prompts) | 管理提示词模板、动态填充变量、优化 LLM 输出 | PromptTemplate、FewShotPromptTemplate |
| 链(Chains) | 将“提示词 + 模型 + 输出处理”串联成多步流程(避免单轮调用) | LLMChain(基础链)、SequentialChain(顺序链) |
| 记忆(Memory) | 保存对话历史/上下文,支持多轮交互(如聊天机器人记住前文) | ConversationBufferMemory、ConversationSummaryMemory |
| 工具(Tools) | 让 LLM 调用外部工具(API、数据库、搜索引擎、代码解释器) | SerpAPI(搜索)、SQLDatabaseToolkit(数据库)、PythonREPLTool |
| 代理(Agents) | 让 LLM 自主决策“调用哪些工具、按什么顺序调用”(处理未知复杂任务) | AgentType.ZERO_SHOT_REACT_DESCRIPTION(零样本代理) |
| 文档加载与处理(Document Loaders/Processors) | 加载外部文档(PDF、CSV、网页)、分割文本(用于 RAG) | PyPDFLoader、RecursiveCharacterTextSplitter |
| 向量存储(Vector Stores) | 存储文档嵌入向量,支持相似性检索(RAG 核心) | Chroma(轻量本地)、Pinecone(云端) |
2. 高频核心使用场景(附极简示例)
场景 1:基础 LLM 调用 + 提示词模板(告别硬编码提示词)
核心需求:固定提示词结构,动态传入变量(如“根据产品名生成营销文案”)。
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain# 1. 初始化 LLM(需配置 OpenAI API 密钥)
llm = ChatOpenAI(model="gpt-3.5-turbo", api_key="your-api-key")# 2. 定义提示词模板({product} 为动态变量)
prompt = PromptTemplate(input_variables=["product"],template="为产品「{product}」写一段 50 字内的电商营销文案,突出性价比和实用性。"
)# 3. 构建链(串联模板 + LLM)
chain = LLMChain(llm=llm, prompt=prompt)# 4. 运行(传入变量)
result = chain.run(product="无线快充充电宝")
print(result)
# 输出示例:“20W无线快充,10000mAh大容量,小巧便携不占地!兼容多数机型,性价比拉满,出门再也不怕没电~”
场景 2:多轮对话(带记忆功能的聊天机器人)
核心需求:让 LLM 记住对话历史(如用户先问“推荐手机”,再问“它的价格”,LLM 知道“它”指推荐的手机)。
from langchain_openai import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain# 1. 初始化 LLM 和记忆(ConversationBufferMemory 保存完整历史)
llm = ChatOpenAI(model="gpt-3.5-turbo", api_key="your-api-key")
memory = ConversationBufferMemory()# 2. 构建对话链(集成记忆)
conversation_chain = ConversationChain(llm=llm, memory=memory, verbose=True)# 3. 多轮交互
print(conversation_chain.run("推荐一款适合学生党的性价比手机"))
# 输出:推荐红米 Note 13 Pro...(略)print(conversation_chain.run("它的起售价是多少?"))
# 输出:红米 Note 13 Pro 起售价约 1799 元(8+256GB 版本),学生党预算友好...(LLM 记住了“它”指前序推荐的手机)
场景 3:检索增强生成(RAG)—— 基于私有文档问答
核心需求:让 LLM 基于你的私有数据(如公司文档、PDF)回答问题(LLM 本身没见过这些数据)。
RAG 核心流程:加载文档 → 分割文本 → 生成嵌入向量 → 存储到向量库 → 检索相关文本 → 拼接提示词 → LLM 生成答案。
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA# 1. 加载并分割文档(以 PDF 为例)
loader = PyPDFLoader("公司产品手册.pdf") # 你的私有 PDF 路径
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) # 分割成小块
splits = text_splitter.split_documents(documents)# 2. 生成嵌入并存储到向量库(Chroma 本地轻量向量库)
embeddings = OpenAIEmbeddings(api_key="your-api-key")
vector_db = Chroma.from_documents(documents=splits, embedding=embeddings, persist_directory="./chroma_db")
vector_db.persist()# 3. 构建检索链(检索相关文本 + LLM 回答)
llm = ChatOpenAI(model="gpt-3.5-turbo", api_key="your-api-key")
qa_chain = RetrievalQA.from_chain_type(llm=llm,chain_type="stuff", # 直接将检索到的文本拼接进提示词retriever=vector_db.as_retriever(k=3) # 检索最相关的 3 个文本块
)# 4. 基于私有文档问答
result = qa_chain.run("公司这款产品的核心功能有哪些?")
print(result)
# 输出:基于 PDF 内容的核心功能总结(LLM 仅用检索到的文档信息回答,不编造)
场景 4:智能代理(Agent)—— 让 LLM 自主调用工具
核心需求:让 LLM 自主决策处理复杂任务(如“查询今天北京的气温,再计算它与昨天的温差”—— 需要先调用搜索工具查气温,再做计算)。
from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, Tool
from langchain.tools import SerpAPIWrapper # 搜索引擎工具(需 SerpAPI 密钥)# 1. 配置工具(这里用搜索引擎工具,可替换为数据库、API 等)
serp_api_key = "your-serpapi-key" # 从 SerpAPI 官网申请
search = SerpAPIWrapper(serpapi_api_key=serp_api_key)
tools = [Tool(name="Search",func=search.run,description="用于查询实时信息(如天气、新闻、股价等)")
]# 2. 初始化 LLM 和代理
llm = ChatOpenAI(model="gpt-3.5-turbo", api_key="your-api-key")
agent = initialize_agent(tools=tools,llm=llm,agent="zero-shot-react-description", # 零样本代理(无需示例,仅靠描述决策)verbose=True # 打印思考过程(便于调试)
)# 3. 运行复杂任务
agent.run("查询今天北京的最高气温,再查昨天的最高气温,计算两者的温差")
# 代理思考过程:
# 1. 需要先查今天北京最高气温 → 调用 Search 工具
# 2. 再查昨天北京最高气温 → 调用 Search 工具
# 3. 计算温差 → 直接计算(无需工具)
# 输出:今天北京最高气温 25℃,昨天 20℃,温差为 5℃。
三、LangChain 关键优势
- 生态丰富:支持主流 LLM(OpenAI、Anthropic、Google Gemini)、向量库(Chroma、Pinecone)、工具(SerpAPI、SQL、Slack)。
- 降低开发成本:无需从零实现记忆、检索、工具调用逻辑,直接组合组件。
- 可扩展性强:支持自定义组件(如自定义工具、提示词模板),适配复杂场景。
- 支持多语言:核心是 Python 库,也有 JavaScript/TypeScript 版本(LangChain.js)。
四、学习与实践建议
- 入门顺序:先掌握「Prompt + LLM + Chain」→ 再学「Memory」(对话场景)→ 重点突破「RAG」(企业常用)→ 最后学「Agent」(复杂任务)。
- 环境准备:
- 安装核心库:
pip install langchain langchain-openai chromadb pypdf(根据场景安装依赖) - 申请 API 密钥:OpenAI API、SerpAPI(搜索引擎)、Pinecone(云端向量库,可选)。
- 安装核心库:
- 避坑点:
- Agent 稳定性:复杂任务中 Agent 可能决策失误,需通过「提示词优化」「工具限制」「多轮校验」提升可靠性。
- RAG 效果:文本分割粒度、嵌入模型、检索策略会影响问答准确性,需调试优化。
- 成本控制:LLM API 和向量库存储有费用,测试时注意限制请求量。
总结
LangChain 不是替代 LLM,而是让 LLM “更有用”—— 它把 LLM 从“单轮文本生成工具”升级为“能联网、能操作工具、能记忆、能处理复杂流程的 AI 应用核心”。无论是快速搭建一个聊天机器人,还是开发企业级的私有文档问答系统,LangChain 都是目前最主流的选择之一。
