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)跑通流程;
- 再根据性能、成本、隐私需求逐步替换组件。