LangChain是一个主流的大语言模型(LLM)应用开发框架,核心功能是连接大模型与外部资源/工具。

LangChain 核心组件全览

LangChain 是目前最主流的 LLM 应用开发框架,核心定位是**"连接大模型与外部资源/工具的桥梁"**,其"家族组件"围绕 LLM Agent 全生命周期设计,可拆解为 **9大核心模块**(按使用逻辑排序)。以下是各组件的功能、核心类/API、使用场景及实操示例,覆盖从基础到进阶的全维度:

一、核心组件总览(按执行链路)

```mermaid

graph LR

A[模型层<br>Models] --> B[提示层<br>Prompts]

B --> C[链层<br>Chains]

C --> D[智能体层<br>Agents]

C --> E[记忆层<br>Memory]

D --> F[工具层<br>Tools]

G[数据连接层<br>Document Loaders+Indexes] --> C

H[输出解析层<br>Output Parsers] --> C

I[回调/日志层<br>Callbacks] --> 所有模块

```

二、逐模块详解(功能+场景+示例)

1. Models(模型层)

**核心作用**:对接各类大模型(闭源/开源),统一调用接口,屏蔽不同模型的API差异。

  • **核心组件**:

  • `ChatModel`:对接对话型模型(如GPT-3.5/4、通义千问、文心一言、Llama 3);

  • `LLM`:对接文本生成型模型(如GPT-3、Claude);

  • `Embeddings`:对接嵌入模型(如text-embedding-ada-002、BGE、m3e),用于文本向量化。

  • **使用场景**:所有需要调用大模型的基础场景(生成、嵌入、对话)。

  • **极简示例**:

```Python

1. 调用OpenAI对话模型

from langchain_openai import ChatOpenAI

chat_model = ChatOpenAI(model="gpt-3.5-turbo", temperature=0, api_key="你的密钥")

response = chat_model.invoke("介绍下LangChain")

print(response.content)

2. 调用嵌入模型

from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()

vector = embeddings.embed_query("LangChain组件") # 输出768维向量

```

2. Prompts(提示层)

**核心作用**:管理Prompt模板,支持动态填充变量、模板复用、提示优化(如Few-shot)。

  • **核心组件**:

  • `PromptTemplate`:基础模板(支持变量替换);

  • `ChatPromptTemplate`:对话场景模板(区分system/user/assistant角色);

  • `FewShotPromptTemplate`:少样本提示(注入示例提升模型效果)。

  • **使用场景**:需要标准化Prompt、动态传参的场景(如客服话术、工具调用引导)。

  • **示例**:

```Python

from langchain_core.prompts import ChatPromptTemplate

定义对话模板(system设定角色,user为动态输入)

prompt = ChatPromptTemplate.from_messages([

("system", "你是{role},回答要简洁,不超过50字"),

("user", "{question}")

])

填充变量并生成Prompt

formatted_prompt = prompt.format_messages(role="Python编程助手", question="什么是装饰器")

print(formatted_prompt) # 输出标准化的Prompt消息列表

```

3. Output Parsers(输出解析层)

**核心作用**:将LLM的非结构化输出(文本)转为结构化数据(JSON、列表、自定义类),解决"模型输出不可控"问题。

  • **核心组件**:

  • `JsonOutputParser`:解析为JSON;

  • `PydanticOutputParser`:解析为自定义Python类(强类型);

  • `ListOutputParser`:解析为列表。

  • **使用场景**:工具调用(需解析JSON格式的工具指令)、数据提取(如从文本中提取订单信息)。

  • **示例(解析为JSON)**:

```Python

from langchain_core.output_parsers import JsonOutputParser

from langchain_core.prompts import PromptTemplate

定义解析器

parser = JsonOutputParser()

Prompt中引导模型输出JSON

prompt = PromptTemplate(

template="提取以下文本的关键信息,输出JSON格式:{text}\n{format_instructions}",

input_variables=["text"],

partial_variables={"format_instructions": parser.get_format_instructions()}

)

调用模型+解析

chain = prompt | chat_model | parser

result = chain.invoke({"text": "用户张三,年龄25,手机号13800138000"})

print(result) # 输出:{"姓名":"张三","年龄":25,"手机号":"13800138000"}

```

4. Chains(链层)

**核心作用**:将"Prompt→Model→Output Parser"等步骤串联成可复用的流水线,支持多步骤任务(如"向量化→检索→生成")。

  • **核心组件**:

  • `LLMChain`:基础链(Prompt+Model);

  • `SequentialChain`:串行链(多链按顺序执行,前一个输出作为后一个输入);

  • `RetrievalQAChain`:检索增强生成(RAG)链(检索+生成);

  • `RouterChain`:路由链(根据输入选择不同链执行)。

  • **使用场景**:所有多步骤任务(如RAG、多轮对话、数据处理+生成)。

  • **示例(RAG基础链)**:

```Python

from langchain.chains import RetrievalQA

from langchain_community.vectorstores import FAISS

1. 构建向量库(模拟文档)

texts = ["LangChain是LLM应用开发框架", "LangChain支持RAG、Agent等功能"]

vectors = embeddings.embed_documents(texts)

db = FAISS.from_texts(texts, embeddings)

2. 构建RAG链(检索+生成)

rag_chain = RetrievalQA.from_chain_type(

llm=chat_model,

chain_type="stuff", # 简单拼接检索结果到Prompt

retriever=db.as_retriever()

)

3. 执行

result = rag_chain.invoke({"query": "LangChain能做什么"})

print(result["result"]) # 输出包含检索信息的回答

```

5. Memory(记忆层)

**核心作用**:管理对话/任务的上下文记忆,解决LLM"无状态"问题(默认不记得历史对话)。

  • **核心组件**:

  • `ConversationBufferMemory`:简单缓存所有对话(适合短对话);

  • `ConversationSummaryMemory`:总结对话内容(适合长对话,减少Token消耗);

  • `VectorStoreRetrieverMemory`:向量库记忆(检索相关历史,适合超长对话);

  • `EntityMemory`:实体记忆(跟踪实体信息,如"用户张三的地址是北京")。

  • **使用场景**:多轮对话(客服、智能助手)、长任务执行(如连续的数据分析)。

  • **示例(对话缓存记忆)**:

```Python

from langchain.chains import ConversationChain

from langchain.memory import ConversationBufferMemory

构建带记忆的对话链

memory = ConversationBufferMemory()

conversation_chain = ConversationChain(

llm=chat_model,

memory=memory,

verbose=True

)

多轮对话

conversation_chain.invoke({"input": "我叫张三"})

conversation_chain.invoke({"input": "记住我的名字了吗"}) # 模型能回答"记住了,你是张三"

```

6. Tools & Toolkits(工具层)

**核心作用**:扩展LLM的能力边界(如调用搜索引擎、计算器、API、数据库),是Agent的核心依赖。

  • **核心组件**:

  • `Tool`:自定义工具(封装函数+描述);

  • `BaseToolkit`:工具集(如SQLDatabaseToolkit、PythonREPLToolkit);

  • 内置工具:`SerpAPIWrapper`(搜索引擎)、`PythonREPLTool`(代码执行)、`CalculatorTool`(计算器)。

  • **使用场景**:Agent工具调用、需要外部能力的任务(如查天气、算数据、查数据库)。

  • **示例(自定义工具)**:

```Python

from langchain_core.tools import Tool

定义自定义工具(查天气)

def get_weather(city):

模拟接口返回

return f"{city}今天天气:晴,温度20℃"

tools = [

Tool(

name="WeatherTool", # 工具名(LLM识别用)

func=get_weather, # 执行函数

description="查询指定城市的天气,输入参数为城市名(如北京、上海)" # 关键:描述要清晰

)

]

```

7. Agents(智能体层)

**核心作用**:让LLM具备"自主决策+调用工具+执行任务"的能力,是LangChain的核心高阶组件。

  • **核心组件**:

  • `AgentExecutor`:Agent执行器(核心驱动);

  • `create_openai_functions_agent`:OpenAI函数调用型Agent(最常用);

  • `create_react_agent`:ReAct范式Agent(思考+行动);

  • `MultiAgentExecutor`:多Agent执行器(多智能体协作)。

  • **使用场景**:复杂自主任务(如"订机票""调研行业报告""数据分析+生成报告")。

  • **示例(基础工具调用Agent)**:

```Python

from langchain.agents import create_openai_functions_agent, AgentExecutor

from langchain_core.prompts import ChatPromptTemplate

1. 定义Prompt(引导Agent思考+调用工具)

prompt = ChatPromptTemplate.from_messages([

("system", "你是智能助手,根据需求调用合适的工具,不需要工具时直接回答"),

("user", "{input}"),

("placeholder", "{agent_scratchpad}") # 存放Agent的思考/工具调用记录

])

2. 创建Agent

agent = create_openai_functions_agent(chat_model, tools, prompt)

agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

3. 执行(调用天气工具)

result = agent_executor.invoke({"input": "查下上海今天的天气"})

print(result["output"]) # 输出:上海今天天气:晴,温度20℃

```

8. Document Loaders & Indexes(数据连接层)

**核心作用**:加载/处理外部文档(PDF、Word、数据库、网页),并构建检索索引(向量库),是RAG的基础。

  • **核心组件**:

  • **Loaders**:`PyPDFLoader`(PDF)、`TextLoader`(文本)、`WebBaseLoader`(网页)、`SQLDatabase`(数据库);

  • **Splitters**:`RecursiveCharacterTextSplitter`(文本分块,解决Token限制);

  • **Indexes**:`FAISS`(本地向量库)、`Pinecone`(云端向量库)、`Chroma`(轻量向量库)。

  • **使用场景**:RAG(检索增强生成)、私有知识库问答、文档分析。

  • **示例(加载PDF并构建向量库)**:

```Python

from langchain_community.document_loaders import PyPDFLoader

from langchain_text_splitters import RecursiveCharacterTextSplitter

1. 加载PDF

loader = PyPDFLoader("langchain_doc.pdf")

documents = loader.load()

2. 文本分块

splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)

chunks = splitter.split_documents(documents)

3. 构建向量库

db = FAISS.from_documents(chunks, embeddings)

```

9. Callbacks(回调/日志层)

**核心作用**:监控/记录LLM/Chain/Agent的执行过程(如Token消耗、执行时间、中间输出),支持自定义回调(如日志、监控、存储)。

  • **核心组件**:

  • `CallbackHandler`:自定义回调类;

  • `LangChainTracer`:LangSmith(LangChain监控平台)回调;

  • `StdOutCallbackHandler`:控制台输出回调(调试用)。

  • **使用场景**:调试、监控、计费(按Token统计)、日志存储。

  • **示例(控制台调试回调)**:

```Python

from langchain_core.callbacks import StdOutCallbackHandler

执行Chain时添加回调(打印中间过程)

handler = StdOutCallbackHandler()

result = conversation_chain.invoke(

{"input": "介绍下自己"},

callbacks=[handler]

)

```

三、组件组合使用场景(实战落地)

|业务场景|核心组件组合|

|---|---|

|私有知识库问答(RAG)|Loaders + Splitters + Indexes + RetrievalQAChain|

|智能客服(多轮对话)|ChatPromptTemplate + ConversationBufferMemory + LLMChain|

|数据分析Agent|PythonREPLTool + AgentExecutor + Memory|

|电商订单查询助手|SQLDatabaseToolkit + Agent + OutputParser|

|多Agent协作写报告|CrewAI/LangChain MultiAgent + Tools + Memory|

四、总结

  1. **核心逻辑**:LangChain组件围绕"LLM+外部能力"展开,底层是Models/Prompts,中层是Chains/Memory,高层是Agents/Tools,数据层是Loaders/Indexes,解析/监控是Output Parsers/Callbacks;

  2. **使用原则**:简单任务用"Prompt+LLMChain",需要记忆用Memory,需要外部能力用Tools+Agent,需要私有数据用RAG(Loaders+Indexes+RetrievalQAChain);

  3. **落地建议**:新手从"单轮生成→多轮对话→简单RAG→工具调用Agent"逐步进阶,优先用内置组件,复杂场景再自定义。

如果需要某一具体场景(如"基于LangChain+国产LLM的企业知识库问答系统")的完整可运行代码,我可以针对性编写并注释。

> (注:文档部分内容可能由 AI 生成)

相关推荐
坚持学习前端日记1 小时前
AI 产品开发经验
前端·javascript·人工智能·visual studio
小程故事多_801 小时前
阿里大模型二面深度解析,赋予LLM规划能力的主流方法与实践选型
人工智能·aigc·ai编程
念安jy1 小时前
吴恩达机器学习作业(week1-4)
人工智能·机器学习
rgb2gray1 小时前
论文详解 | HDAM:破解 MAUP 的城市出行需求分析新方法,实现关键驱动精准识别
人工智能·python·llm·大语言模型·需求分析·多模态·maup
___波子 Pro Max.1 小时前
Python容器类型差异操作
python
十铭忘1 小时前
LatentMorph:将隐式潜空间推理融入图像生成
人工智能·计算机视觉
北京耐用通信1 小时前
耐达讯自动化CC linkie转Devicenet网关:架起三菱PLC与电导率仪跨协议“沟通之桥”
人工智能·物联网·网络协议·自动化·信息与通信
weixin199701080161 小时前
淘宝客商品详情页前端性能优化实战
java·前端·python·性能优化