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(记忆)
✅ 功能
🔧 常用 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-search
conversational-react-description
-
Tools:
DuckDuckGoSearchRun(网络搜索)
WikipediaQueryRun
PythonREPLTool(慎用!)
- 自定义 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)跑通流程;
- 再根据性能、成本、隐私需求逐步替换组件。