LangChain 是一个用于构建基于大语言模型(LLM)的应用程序的开源框架,它提供了一套工具、组件和接口, 可以将 LLM 模型、向量数据库、交互层 Prompt、外部知识、外部工具整合到一起,进而可以自由构建 LLM 应用。
LangChain 主要能做这些事:
1. 连接外部数据:大语言模型的训练数据有时间限制,且无法直接访问实时信息或私有数据。LangChain 可以连接数据库、文档(PDF、Word 等)、网页等外部数据源,让模型能基于最新或专有数据生成回答。例如,让模型结合公司内部文档回答员工问题,或结合实时新闻分析市场动态。2. 调用外部工具:除了处理文本,LangChain 能让模型调用各种外部工具完成任务,比如调用计算器做数学运算、调用地图 API 获取地理位置信息、调用代码解释器执行代码、甚至调用搜索引擎获取实时数据。例如,让模型帮你查询天气、预订机票,或根据数据生成图表。3. 构建复杂工作流:对于多步骤的任务,LangChain 支持将多个操作(如 “先查询数据→再分析数据→最后生成报告”)组合成一个连贯的工作流,让模型按步骤完成复杂任务。例如,自动生成市场调研报告:先调用工具收集行业数据,再让模型分析数据,最后生成结构化报告。4. 实现记忆功能:在对话场景中,LangChain 可以帮助模型 “记住” 之前的对话内容,让对话更连贯自然。比如聊天机器人能根据历史对话上下文理解用户的潜在需求。5. 支持多模态交互:除了文本,LangChain 还能扩展到大语言模型与图像、音频等其他模态数据的交互,构建多模态应用。
langchain核心组件包括:
模型(Models):封装各类 LLM(如 GPT、Claude)和嵌入模型(用于数据向量化);
提示(Prompts):提示词模板、输出解析器(规范模型输出格式);
Indexes(索引):从外部数据中高效查找与问题相关的信息;
链(Chains):将多个组件按逻辑串联(如 “提示→模型调用→结果处理”);
记忆(Memory):保存对话上下文,支持多轮交互;
智能体(Agents):让模型自主决策调用哪些工具或组件完成任务。
LangChain组件讲解
1. Models(模型)
langchain的模型核心类型有
① LLM(大语言模型)
单轮文本生成、摘要, 常用于内容创作、简单问答②ChatModel(聊天模型)
多轮对话、上下文交互, 常用于聊天机器人、客服系统
ps: 聊天模型与传统 LLM(输入输出均为纯文本)不同,ChatModel 的输入是结构化的消息列表(包含角色和内容),输出是单一的消息对象。
聊天模型天然适合多轮对话,通过在消息列表中保留历史对话,模型可以理解上下文逻辑(例如 “它”“这个” 等代词指代的内容)。
LLM是 “文本生成工具”,ChatModel是 “对话交互引擎”③Embedding Model (嵌入模型)
文本语义编码、相似度计算,用于文档检索(RAG)、聚类分析
2.Prompts(提示词)
在 LangChain 中,Prompts(提示词)是连接用户输入与语言模型的核心桥梁,它定义了模型的输入格式、任务目标和输出要求。
Prompts 的核心作用
明确任务目标:告诉模型需要完成什么任务(如 “总结文本”“翻译句子”“生成代码”)。
规范输入输出:定义用户输入的格式和模型输出的格式(如 “用 JSON 返回结果”“分点回答”)。
注入背景信息:提供上下文、约束条件或示例,帮助模型更准确地理解需求(如 “你是一名医生,请用专业术语回答”)。Prompts 的关键组件:
① PromptTemplate(提示模板): 最基础的提示词组件,用于定义包含变量的模板,运行时动态替换变量值。
② ChatPromptTemplate(聊天提示模板): 专为ChatModel设计,支持多角色消息(如SystemMessage、HumanMessage)的模板化。
③ FewShotPromptTemplate(少样本提示模板):通过提供示例(few-shot examples)引导模型输出格式,适合需要严格格式约束的任务(如分类、提取)。
④ OutputParser输出解析器)配合提示词使用,将模型的原始输出转换为结构化格式(如 JSON、列表),方便后续处理。
3.Indexes(索引)
Indexes(索引)是处理和组织外部数据(如文档、文本)的核心模块,其主要作用是将原始数据转换为可高效检索的格式,为后续的检索增强生成(RAG)等功能提供支持。
Indexes 的核心功能
①数据加载(Loading):从多种来源加载数据(如 PDF、TXT、网页、数据库等)。
②文本分割(Splitting):将长文档拆分为小块(chunks),避免超出模型的上下文长度限制。
③嵌入生成(Embedding):将文本块转换为向量(通过Embedding Model),捕捉语义信息。
④向量存储(Vector Stores):将向量存入专门的数据库(如 Chroma、Pinecone),支持高效的相似度检索。Indexes 的核心组件
①文档加载器(Document Loaders)
负责从不同来源加载数据,并统一转换为 LangChain 的Document对象(包含page_content文本内容和metadata元数据)。
常用加载器:PyPDFLoader:加载 PDF 文件;TextLoader:加载 TXT 文件;WebBaseLoader:加载网页内容;DirectoryLoader:批量加载文件夹中的文件。②文本分割器(Text Splitters)
将长文档分割为语义连贯的小块(chunks),平衡 “上下文完整性” 和 “检索精度”。
核心分割器:
RecursiveCharacterTextSplitter(推荐):按标点符号、空格等递归分割,适合大多数文本;
CharacterTextSplitter:按固定字符数分割,简单但可能破坏语义;
TokenTextSplitter:按模型 token 数分割,精准控制长度。③向量存储(Vector Stores)
存储文本块的向量表示,支持高效的相似度检索(如余弦相似度)
LangChain 集成了很多常用的向量数据库,包括 Faiss、Milvus、Pinecone、Chroma 等④检索器(Retrievers)
主要用于从海量文档中快速找到与当前问题最相关的信息,是实现 “检索增强生成(RAG)” 的核心工具。
LangChain 提供了多种检索器:
VectorStoreRetriever(向量存储检索器): 基于向量相似度检索
BM25Retriever(关键词检索器):基于传统的 TF-IDF(词频 - 逆文档频率)算法,通过关键词匹配检索文档,不依赖向量嵌入。
ContextualCompressionRetriever(上下文压缩检索器): 在基础检索结果(如向量检索)的基础上,用 LLM 对文档片段进行 “压缩” 或 “过滤”,保留与问题最相关的核心信息。
ToolRetriever(工具检索器): 将检索能力封装为工具,供智能体(Agent)调用,支持动态决定何时检索(如 “不确定答案时自动检索”)。
4. Chains(链)
Chains(链)是将多个组件(如模型、提示词、工具、检索器等)按特定逻辑组合起来的核心机制,用于实现复杂任务的自动化流程。
Chains 的核心价值
组件协同:将独立的组件(如PromptTemplate→LLM→OutputParser)串联起来,形成完整的任务流水线。
流程自动化:支持多步骤任务(如 “检索文档→生成回答→格式化输出”),无需手动干预。
抽象复杂度:隐藏组件交互的细节,开发者只需关注整体逻辑(如 “调用链→获取结果”)。Chains 的主要类型
LangChain 提供了数十种链,按功能可分为基础链、组合链和专用链三大类
基础链:单一功能的简单组合
LLMChain: 最基础的链,将PromptTemplate与LLM/ChatModel组合,实现 “提示词→模型调用” 的简单流程。
SimpleSequentialChain: 按顺序执行多个链,前一个链的输出作为后一个链的输入(仅支持单输入单输出)。组合链:多步骤复杂流程
SequentialChain: 支持多输入多输出的顺序链,可指定每个链的输入来源和输出目标(更灵活)。
RouterChain: 根据输入动态选择执行哪个链(类似 “路由” 功能),适合需要分支逻辑的场景。专用链:针对特定场景优化
RetrievalQA: 结合检索器(Retriever)和模型,实现 “检索相关文档→生成回答” 的 RAG(检索增强生成)流程。
ConversationalRetrievalChain: 在RetrievalQA基础上增加对话记忆,支持 “多轮对话 + 检索”适用场景
单步骤任务(如生成文本、翻译)→ 用LLMChain;
固定流程的多步骤任务(如 “生成标题→写摘要→翻译”)→ 用SequentialChain;
动态分支任务(如 “根据问题类型选择专家”)→ 用RouterChain;
基于文档的问答→ 用RetrievalQA;
多轮对话 + 检索→ 用ConversationalRetrievalChain
5. Memory(记忆)
Memory(记忆)是用于存储和管理对话历史的核心组件,它让语言模型能够 “记住” 之前的交互内容,从而实现连贯的多轮对话。没有记忆组件,模型每次调用都相当于 “全新对话”,就无法理解上下文关联
Memory 的核心作用
保存对话历史:存储用户与 AI 的交互记录(问题和回答)。
提供上下文:将相关历史对话传入模型,让模型理解当前对话的背景。
支持多轮交互:让对话能够自然延续(如 “上一个问题你提到…,再详细说说”)。
langchain 提供了不同的 Memory 组件
①ConversationBufferMemory(基础缓冲记忆)
完整保存所有对话历史(用户消息 + AI 回复)。
简单直观单,但历史过长时会超出模型上下文长度限制②ConversationBufferWindowMemory(窗口记忆)
只保留最近的k轮对话(k为窗口大小),避免历史过长③ ConversationSummaryMemory(摘要记忆)
用 LLM 将对话历史总结为摘要,只保留摘要而非完整对话。
大幅压缩历史长度,适合超长对话。可能丢失细节(取决于摘要质量)。④ ConversationSummaryBufferMemory(摘要缓存记忆)
积核摘要记忆并使用token长度来确定何时刷新交互。⑤ ConversationKGMemory(知识图谱记忆)
从对话中提取实体和关系,构建简单知识图谱。
结构化存储关键信息,适合需要提取实体关系的场景(如客户咨询)。⑥ VectorStoreRetrieverMemory向量存储记忆
它是将所有之前的对话通过向量的方式存储到 VectorDB(向量数据库)中,
在每一轮新的对话中,会根据用户的输入信息,匹配向量数据库中最相似的 K 组对话。
6.Agents(代理)
在 LangChain 中,Agent(智能体)是一种能够自主决策、调用工具并逐步解决复杂任务的高级组件,
它赋予大型语言模型(LLM)决策和行动能力。Agent 能够根据用户输入动态选择并调用工具(Tools)、处理复杂任务、维护状态,并通过迭代推理(如 ReAct 框架)逐步解决问题。
Agent 的本质是 LLM(大脑) + 工具集(Tools) + 决策逻辑(Executor)
关键组件
LLM/ChatModel:作为 “大脑”,负责推理、决策和生成指令(如 GPT-4、Claude 等)
Agent: 决策中枢,选择工具或返回答案 如: ZeroShotAgent, ReActAgent
Tools: 可执行的外部函数 例如: 搜索工具、计算器、自定义 API
AgentExecutor: 运行代理的循环控制器 例如: 处理迭代、错误、超时
Memory: 存储对话/任务状态 例如: ConversationBufferMemory
常用 Agent 类型
① zero-shot-react-description
基于工具描述直接决定调用哪个工具(无记忆)
适用简单工具调用、单轮任务② structured-chat-zero-shot-react-description
支持结构化输出(如 JSON),适合复杂工具参数
适用需要精确控制工具输入的场景③ chat-conversational-react-description
结合对话记忆,支持多轮交互
适用聊天式任务、需要上下文的工具调用④self-ask-with-search
通过 “自问自答” 分解问题,逐步调用工具
适用复杂推理任务(如多步数学题
Agent 的工作流程
1. 接收问题:理解用户需要 例如计算质数之和。
2. 思考决策:是否需要工具? 选择哪个工具? (因涉及数学计算所以判断出需要调用Python_REPL工具)。
3. 生成工具调用:构造 Python 代码(如编写质数判断函数并求和)。
4.执行工具:运行代码并获取结果(1060)。
5.整理回答:将工具返回的结果用自然语言解释给用户。