LangChain 是一个用于构建基于大语言模型(LLM)应用的框架,其核心思想是"组合可复用的组件 "来构建复杂链式逻辑。LangChain 的架构模块化清晰,主要包括以下 六大核心组件:
🧩 一、LangChain 六大核心组件概览
| 组件 | 功能说明 | 主要子模块/工具 |
|---|---|---|
| 1. Models(模型) | 调用 LLM 或 Embedding 模型 | ChatOpenAI, HuggingFaceLLM, Ollama, AzureChatOpenAI 等 |
| 2. Prompts(提示) | 构建和管理提示模板 | PromptTemplate, ChatPromptTemplate, FewShotPromptTemplate |
| 3. Chains(链) | 组合多个步骤形成工作流 | LLMChain, RetrievalQA, ConversationalRetrievalChain, SequentialChain |
| 4. Memory(记忆) | 在对话中保持上下文状态 | ConversationBufferMemory, ConversationSummaryMemory, RedisChatMessageHistory |
| 5. Indexes & Retrievers(索引与检索器) | 文档加载、切分、向量化、检索 | Document Loaders, Text Splitters, Vectorstores, Retrievers |
| 6. Agents(代理) | 让 LLM 调用工具自主决策 | Zero-shot ReAct Agent, Self-ask Agent, Tool(如搜索、计算器等) |
下面对每个组件进行 详细展开 + 可用工具 + 优缺点对比。
1️⃣ Models(模型)
✅ 功能
- 封装 LLM(生成)和 Embedding(向量化)模型的调用接口。
- 统一 API,支持切换不同后端。
🔧 常用工具(按类型)
A. Chat/Completion Models
| 工具 | 所属包 | 说明 |
|---|---|---|
ChatOpenAI |
langchain_openai |
OpenAI GPT 系列(gpt-4, gpt-3.5-turbo) |
ChatAnthropic |
langchain_anthropic |
Claude 系列 |
ChatOllama |
langchain_ollama |
本地运行开源模型(Llama3, Mistral 等) |
HuggingFacePipeline |
langchain_huggingface |
本地 Hugging Face Transformers 模型 |
AzureChatOpenAI |
langchain_openai |
Azure OpenAI 服务 |
B. Embedding Models
| 工具 | 说明 |
|---|---|
OpenAIEmbeddings |
OpenAI text-embedding-ada-002 |
HuggingFaceEmbeddings |
开源模型(如 all-MiniLM-L6-v2) |
OllamaEmbeddings |
通过 Ollama 使用本地嵌入模型 |
⚖️ 优缺点对比
| 方案 | 优点 | 缺点 |
|---|---|---|
| OpenAI / Anthropic | 效果好、API 稳定、低延迟 | 付费、需网络、数据隐私风险 |
| Ollama / HuggingFace(本地) | 数据私有、免费、可离线 | 需 GPU/CPU 资源、部署复杂、效果略弱 |
| Azure OpenAI | 企业合规、私有部署选项 | 配置复杂、成本高 |
💡 建议:开发阶段用 OpenAI 快速验证,生产环境考虑 Ollama + 开源模型保安全。
2️⃣ Prompts(提示模板)
✅ 功能
- 结构化构建提示,支持变量注入、示例填充、多轮对话格式。
🔧 常用工具
PromptTemplate:基础字符串模板ChatPromptTemplate:支持HumanMessage/AIMessage格式(推荐用于聊天模型)FewShotPromptTemplate:带少量示例的提示(提升小模型效果)PipelinePromptTemplate:组合多个子模板
⚖️ 优缺点
| 类型 | 优点 | 缺点 |
|---|---|---|
PromptTemplate |
简单直接 | 不适合聊天模型 |
ChatPromptTemplate |
符合现代 LLM 对话格式,支持系统消息 | 略复杂 |
FewShot... |
提升 zero-shot 性能 | 占用 token,成本高 |
✅ 最佳实践 :始终使用
ChatPromptTemplate+SystemMessage定义角色。
3️⃣ Chains(链)
✅ 功能
- 将多个操作(如 prompt → LLM → parse → call tool)串联成 pipeline。
🔧 常用 Chain
| Chain | 用途 |
|---|---|
LLMChain |
最基础:prompt + LLM |
RetrievalQA |
RAG:检索 + 问答 |
ConversationalRetrievalChain |
带历史的 RAG |
SequentialChain / SimpleSequentialChain |
多步骤顺序执行 |
TransformChain |
自定义函数处理输入/输出 |
⚖️ 优缺点
| Chain | 优点 | 缺点 |
|---|---|---|
RetrievalQA |
开箱即用 RAG | 无法精细控制检索-生成交互 |
ConversationalRetrievalChain |
支持对话历史 | 内存消耗大 |
| 自定义 Chain | 灵活 | 需手动编写逻辑 |
💡 LangChain Expression Language(LCEL)正在取代传统 Chain,更灵活(见 v0.1+)。
4️⃣ Memory(记忆)
✅ 功能
- 在多轮对话中保存上下文,避免 LLM "失忆"。
🔧 常用 Memory 类型
| Memory | 特点 |
|---|---|
ConversationBufferMemory |
保存全部历史(简单但占 token) |
ConversationSummaryMemory |
用 LLM 压缩历史为摘要 |
ConversationBufferWindowMemory |
只保留最近 N 轮 |
RedisChatMessageHistory |
外部存储(支持多用户会话持久化) |
⚖️ 优缺点
| 类型 | 优点 | 缺点 |
|---|---|---|
| Buffer | 精确还原上下文 | token 成本高,长对话失效 |
| Summary | 节省 token | 摘要可能丢失细节 |
| Window | 平衡 | 可能切断关键上下文 |
| Redis/DB | 可扩展、多用户 | 需额外基础设施 |
✅ 生产建议 :用
Window+ 外部存储(如 Redis)组合。
5️⃣ Indexes & Retrievers(索引与检索)
✅ 功能
- 从非结构化数据(PDF、MD、网页等)构建可检索的知识库。
🔧 子组件与工具
A. Document Loaders
TextLoader,UnstructuredMarkdownLoader,PyPDFLoader,WebBaseLoader,DirectoryLoader
B. Text Splitters
RecursiveCharacterTextSplitter(最常用)MarkdownHeaderTextSplitter(保留标题结构)TokenTextSplitter(按 token 切分)
C. Vectorstores(向量数据库)
FAISS,Chroma,Qdrant,Pinecone,Weaviate(见前文对比)
D. Retrievers
vectorstore.as_retriever()MultiQueryRetriever(生成多个查询提升召回)ContextualCompressionRetriever(压缩冗余内容)
⚖️ 优缺点(整体流程)
| 环节 | 挑战 | 优化建议 |
|---|---|---|
| 加载 | 格式兼容性差 | 优先用 unstructured |
| 切分 | 语义断裂 | 用 MarkdownHeaderTextSplitter + overlap |
| 向量库 | 过滤能力弱(如 FAISS) | 选 Qdrant/Pinecone 支持 metadata filter |
| 检索 | 召回率低 | 用 MultiQueryRetriever + 重排序(CohereRerank) |
6️⃣ Agents(代理)
✅ 功能
- 让 LLM 自主决定是否调用工具(如搜索、计算、查数据库),实现动态推理。
🔧 核心组成
-
Agent Type:
zero-shot-react-description(最常用)self-ask-with-searchconversational-react-description
-
Tools:
DuckDuckGoSearchRun(网络搜索)WikipediaQueryRunPythonREPLTool(慎用!)- 自定义 Tool(继承
BaseTool)
⚖️ 优缺点
| 方面 | 优点 | 缺点 |
|---|---|---|
| 能力 | 可解决复杂、开放问题 | 执行慢(多轮 LLM 调用) |
| 可控性 | 可限制可用工具 | LLM 可能误用或死循环 |
| 安全性 | ------ | 若允许代码执行,有安全风险 |
⚠️ 生产建议 :严格限制工具权限,避免
PythonREPLTool;用max_iterations防止死循环。
📌 总结:LangChain 组件选型建议
| 场景 | 推荐配置 |
|---|---|
| 快速 RAG Demo | Chroma + OpenAI + RetrievalQA + BufferMemory |
| 企业私有知识库 | Qdrant + Ollama(Llama3)+ MarkdownHeaderTextSplitter + RedisMemory |
| 多轮智能客服 | ConversationalRetrievalChain + WindowMemory + Pinecone |
| 复杂任务自动化 | Agent(ReAct) + DuckDuckGo + 自定义安全工具 |
LangChain 的优势在于 高度模块化,但也带来"选择困难"。建议:
- 先用默认组合(如 Chroma + OpenAI)跑通流程;
- 再根据性能、成本、隐私需求逐步替换组件。