LangChain介绍与核心包
·
LangChain系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 LangChain 简介和核心包;第二章 LangChain 提示词工程;第三章 LangChain 工作流
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
本文主要整理 LangChain 的简介、框架组成、核心概念、核心包安装、第三方包安装、简易操作,以及 LangChain/LangGraph 新旧接口更新等内容。
提示:以下是本篇文章正文内容,下面案例可供参考
LangChain介绍与核心包
一、LangChain简介
1.LangChain特性
- LLM和提示(Prompt):LangChain对所有LLM大模型进行了API抽象,统一了大模型访问API,同时提供了Prompt提示模板管理机制。
- 链(Chain):Langchain对一些常见的场景封装了一些现成的模块,例如:基于上下文信息的问答系统,自然语言生成SQL查询等等,因为实现这些任务的过程就像工作流一样,一步一步的执行,所以叫链(chain)。
- LCEL:LangChain Expression Language (LCEL),langchain新版本的核心特性,用于解决工作流编排问题,通过LCEL表达式,可以灵活的自定义AI任务处理流程,也就是灵活自定义链(Chain)。
- 数据增强生成(RAG):因为大模型(LLM)不了解新的信息,无法回答新的问题,所以可以将新的信息导入到LLM,用于增强LLM生成内容的质量,这种模式叫做RAG模式(Retrieval Augmented Generation)。
- Agents:是一种基于大模型(LLM)的应用设计模式,利用LLM的自然语言理解和推理能力(LLM作为大脑)),根据用户的需求自动调用外部系统或设备共同去完成任务,例如:用户输入“明天请假一天”,大模型(LLM)自动调用请假系统,发起一个请假申请。
- 模型记忆(memory):让大模型(llm)记住之前的对话内容,这种能力。
2.LangChain框架组成
- LangChain库:Python和JavaScript库。包含接口和集成多种组件的运行时基础,以及现成的链和代理的实现。
- LangChain模板:Langchain官方提供的一些AI任务模板。
- LangServe:基于FastAPI可以将Langchain定义的链 (Chain),发布成为REST API。
- LangSmith:开发平台,是个云服务,支持Langchain debug、任务监控。
3.LangChain(Libraries)库组成
- langchain-core:基础抽象和LangChain表达语言。
- langchain-community:第三方集成,主要包括langchain集成的第三方组件。
- langchain:主要包括链(chain)、代理(agent)和检索策略。
4.langchain任务处理流程
- langChain提供一套提示词模板(prompt template)管理工具,负责处理提示词,然后传递给大模型处理,最后处理大模型返回的结果。
- LangChain对大模型的封装主要包括LLM和Chat Model两种类型。
- LLM - 问答模型,模型接收一个文本输入,然后返回一个文本结果。
- Chat Model - 对话模型,接收一组对话消息,然后返回对话消息,类似聊天消息一样。

5.核心概念
- LLMs:LangChain封装的基础模型,模型接收一个文本输入,然后返回一个文本结果。
- Chat Models:聊天模型(对话模型),与LLMs不同,聊天模型专为对话场景而设计。模型可以接收一组对话消息,然后返回对话消息,类似聊天消息一样。
- 消息(Message):聊天模型(Chat Models)的消息内容,消息类型包括包括HumanMessage、AIMessage、SystemMessage、FunctionMessage和ToolMessage等多种类型的消息。
- 提示(prompts):LangChain封装了一组专门用于提示词(prompts)管理的工具类,方便格式化提示词(prompts)内容。
- 输出解析器(Output Parsers):Langchain接受大模型(llm)返回的文本内容之后,可以使用专门的输出解析器对文本内容进行格式化,解析成json格式、xml格式或者python对象。
- Retrievers:为了将私有数据导入到大模型(LLM), 提高模型回答问题的质量,LangChain封装了检索框架(Retrievers),用于加载文档数据、切割文档数据、存储和检索文档数据。
- 向量存储(Vector stores):为支持私有数据的语义相似搜索,langchain支持多种向量数据库。
- Agents:智能体(Agents)是指以大模型(LLM)作为决策引擎,根据用户输入的任务,自动调用外部系统或硬件设备共同完成用户的任务,是一种以大模型(LLM)为核心的应用设计模式。
6.应用场景
- 对话机器人:构建智能的对话助手、客服机器人、聊天机器人等。
- 知识库问答:结合知识图谱, 进行开放域问题的问答服务。
- 智能写作:如文章写作、创意写作、文本摘要等。
二、LangChain核心包安装
1.LangChain生态系统是由多个不同的包组成
- LangChain与各种模型提供商、数据存储等的集成。默认情况下,所需的依赖项不会自动安装,需要单独安装这些依赖项。
- 生态系统包
-
除了langSmith外,LangChain生态系统中的所有包都依赖于langchain-core,其中包含基础类和抽象概念。包间的依赖关系:

-
在安装某个包时,无需显式安装该包的依赖(例如langchain-core)。但是,如果需要使用特定版本的依赖中的某一特性,也可以选择手动安装。需要确保与使用的其他集成包的版本兼容。
-
2.LangChain:
- 主程序包
- 安装
- Pip安装:pip install langchain
- Conda安装:conda install langchain -c conda-forge
- langchain版本查询
- 20260220版本为1.2.10
代码
import langchain
import langchain_core
print("LangChain 主包版本:", langchain.__version__)
print("LangChain Core 版本:", langchain_core.__version__)
结果
LangChain 主包版本: 1.2.10
LangChain Core 版本: 1.2.14
3.LangChain-core
- langchain-core包包含了LangChain生态系统的基础抽象和表达语言。这是langchain自动安装的,不过也可以单独使用。
- 安装:pip install langchain-core
4.LangChain-community
- langchain-community包包含第三方集成。
- 安装:pip install langchain-community
5.LangGraph
- langGraph是一个用于构建有状态、多参与者应用程序的库,与LangChain无缝集成,但也可以独立使用。
- 安装:pip install langgraph
- langGraph版本查询
- 20260220版本为1.0.9
代码
from importlib.metadata import version, PackageNotFoundError
try:
v = version("langgraph")
except PackageNotFoundError:
import langgraph
v = getattr(langgraph, "__version__", "unknown")
print("当前langgraph版本:", v)
结果
当前langgraph版本: 0.6.4
6.LangChain-cli
- LangChain-cli用于处理LangChain模板和其他LangServe项目。
- 安装:pip install langchain-cli
7.LangServe
- LangServe帮助开发者将LangChain可运行项和链部署为REST API。
- LangServe通过LangChain CLI会自动安装。
- 如果不使用LangChain CLI,可命令安装:
- 包括客户端和服务器端依赖安装:pip install langserve[all]
- 只客户端安装:pip install langserve[client]
- 只服务端安装:pip install langserve[server]
8.LangSmith
- LangSmith SDK由LangChain自动安装。但它不依赖于langchain-core,可以独立安装和使用。
- 如果不使用LangChain,可命令安装:pip install langsmith
9.LangChain-experimental
- langchain-experimental包用于实验性代码,适用于研究和实验用途。
- 安装:pip install langchain-experimental
三、LangChain第三方包安装
1.langchain-openai包
- 能够使用openai接口(或openai接口格式),读取该格式模型。
- 安装langchain-openai包:pip install langchain-openai
- langchain-openai包能够使用硅基流动API。
代码
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model='Pro/deepseek-ai/DeepSeek-V3',
openai_api_key="************",
openai_api_base='https://api.siliconflow.cn/v1',
temperature=0.7,
max_tokens=8000
)
response = llm.invoke("帮我写一篇关于AI的技术文章,100个字")
print(response.content)
2.langchain-chroma包
- 能够使用chroma,作为向量数据库。
- langchain-chroma库包括了chroma库。
- 安装:pip install langchain-chroma
- 导入:from langchain_chroma import Chroma
- 独立版本Chroma(旧)
- 之前在LangChain中使用Chroma,是需要安装独立版本的Chroma。
- 独立版本Chroma将在LangChain 1.0彻底移除,改为使用langchain-chroma库。所以LangChain或LangGraph都应该使用langchain-chroma库。
- 独立版本Chroma安装:pip install chromadb
- 独立版本导入:from langchain_community.vectorstores import Chroma
3.FAISS包
- 能够使用faiss,作为向量数据库。安装包有两个版本:cpu或gpu。
- 安装cpu版本:pip install faiss-cpu
- 安装gpu版本(Windows不支持):pip install faiss-gpu
4.Transformers框架
- 使用huggingface的transformers的模型。可使用githug上的transformers下载安装,可参考《transformer》章节。也可以以下安装:
- 先下载pytorch:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
- 直接安装最新版本transformers:pip install -U transformers
- 需要安装SentencePiece:pip install sentencepiece
- 需要安装transformers_stream_generator:
pip install transformers_stream_generator
- 需要安装加速库accelerate:pip install accelerate
- 使用hugging face本地Embedding模型需要安装SentenceTransformers库
pip install sentence_transformers
- 可选安装Transformers框架的LoRA技术(建议安装)
- 也就是模型能使用load_in_8bit=True参数
- 需要的库:量化用的bitsandbytes库,低秩适配器loralib库,PEFT库。
- 下载安装bitsandbytes datasets loralib库:
pip install bitsandbytes datasets loralib
- 下载安装最新版本PEFT库:pip install -U peft
- 可选安装Transformers框架对GPTQ模型的本地化支持(建议安装)
- 也是hugging face下载的safetensors或bin模型。但是指明了是GPTQ。
- 安装AutoGPTQ代码库和optimum:pip install optimum
- 在Transformers中运行GPTQ模型与其他safetensors或bin模型一样
- 需要安装langchain-huggingface包
- 使得langchain能够使用huggingface提供的模型。
pip install langchain-huggingface
5.langchain-huggingface包只需单独支持Embedding模型
- 如果不安装Transformers框架,只使用huggingface提供的Embedding模型。
- 如果安装了Transformers框架,是已经包括了Embedding模型的支持。
- langchain-huggingface库包括了huggingface的大部分库。
- 安装GPU版本:
- langchain-huggingface里的HuggingFaceEmbeddings本质上就是对Sentence Transformers/Hugging Face模型加载的一层LangChain封装。封装层级:
代码
LangChain接口层
↓
HuggingFaceEmbeddings
↓
sentence-transformers
↓
PyTorch
↓
CUDA / CPU
- 确保安装的是GPU版本的langchain-huggingface步骤
- 1 安装GPU版PyTorch(1 2步可参考《SentenceTransformers库》):
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
- 2 安装SentenceTransformers:pip install sentence-transformers
- 3 安装langchain-huggingface:pip install langchain-huggingface
- 安装CPU版本:
- 如无需确保GPU版可直接安装:pip install langchain-huggingface
- 其他依赖
- hf_xet是Hugging Face提供的一个优化包,用于加速模型的下载和存储。可以下载也可以不下载。
- 自动安装的模型保存目录
- Windows目录:C:\Users{用户名}.cache\huggingface\hub
- Linux目录:~/.cache/huggingface/hub
- 示例
- cache_folder参数,可以指定模型保存目录
- model_kwargs参数的local_files_only,是否只用本地文件,不下载。
- model_kwargs参数的trust_remote_code,是否允许模型执行其自定义代码,这是加载该模型所必需的
- model_kwargs参数的device,是否使用cpu或cuda,默认cpu。
代码
from langchain_huggingface import HuggingFaceEmbeddings
llm_emb = HuggingFaceEmbeddings(
model_name="all-MiniLM-L6-v2",
cache_folder="D:/python/envs/langchain2/hfmodel",
model_kwargs={
"local_files_only": True,
"device": "cpu",
},
)
- model_name参数,可以指定模型名称,当指定路径时,就是指定本地模型路径
代码
from langchain_huggingface import HuggingFaceEmbeddings
llm_emb = HuggingFaceEmbeddings(
model_name="D:/python/envs/langchain2/hfmodel/sentence-transformers/all-MiniLM-L6-v2",
)
6.Redis包
- 外部需要已有的redis服务。
- 内部安装redis的python操作库:pip install redis
7.使用通义千问API模型
- 安装tongyi库:pip install tongyi
- 安装dashscope库:pip install dashscope
8.langchain-ollama包
- 使用ollama接口,就要安装langchain-ollama包
pip install langchain_ollama
四、LangChain简易操作
1.安装LangChain
- 安装LangChain:pip install langchain
- 安装LangChain-openai:pip install langchain-openai
2.初始化模型
- 在LangChain使用OpenAI接口需要导入OpenAI包,并设置API密钥作为环境变量或直接传递给OpenAI LLM类。
- 将API密钥设置为环境变量:export OPENAI_API_KEY=“************”
- 然后,初始化模型:
代码
from langchain_openai import ChatOpenAI
llm = ChatOpenAI()
3.使用LLM 构建简单的链(chains)
- 通过提示模板(prompt template)生成提示词,用于向模型发送prompt。
- 使用|链接prompt和LLM模型,返回链条
- 使用链条的invoke()方法,传入问题作为参数,返回问题答案。
代码
from langchain_core.prompts import ChatPromptTemplate
# 创建一个提示模板prompt template
# 消息模板定义两条消息,system消息告诉模型扮演的角色,user消息代表用户输入的问题
# 用了一个占位符{input} 代表接受一个模版参数input。
prompt = ChatPromptTemplate.from_messages([
("system", "你是世界级的技术专家"),
("user", "{input}")
])
# 基于LCEL表达式构建LLM链,lcel语法类似linux的管道语法|,从左到右按顺序执行
# 编排了一个简单的工作流:
# 首先执行prompt完成提示词模板(prompt template)格式化处理
# 然后将格式化后的prompt传递给llm模型执行,最终返回llm执行结果
chain = prompt | llm
# 调用LLM链并设置模板参数input
# invoke会把调用参数传递给prompt提示模板,开始chain定义的步骤开始逐步执行。
chain.invoke({"input": "帮我写一篇关于AI的技术文章,100个字"})
4.输出转换
- 链的默认输出是对象。
- 可以使用输出解析器,将LLM输出的消息转换为字符串。
代码
from langchain_core.output_parsers import StrOutputParser
# 创建一个字符串输出解析器
output_parser = StrOutputParser()
# LLM链的最后一步将llm模型输出的结果传递给output_parser进行格式转换
chain = prompt | llm | output_parser
# 调用LLM链并提出问题
chain.invoke({"input": "帮我写一篇langchain的技术文章,100个字"})
五、LangChain/LangGraph更新接口
1.LangChain的hub接口更新:
- 新版本LangChain已经弃用了hub。改在langsmith库中获取。
旧代码
from langchain import hub
prompt = hub.pull("hwchase17/react")
新代码
from langsmith import Client
client = Client()
prompt = client.pull_prompt("hwchase17/react")
2.LangChain的create_react_agent和AgentEXecutor接口更新:
- 新版本LangChain已经弃用了create_react_agent, AgentExecutor。
- 如需使用需要旧方法,需要安装库:pip install langchain_classic
旧代码
from langchain.agents import create_react_agent, AgentExecutor
from langchain.agents.react import agent
from langchain.agents.agent import AgentExecutor
# agent = agent.create_react_agent(...)
新代码
from langchain_classic.agents import create_react_agent, AgentExecutor
from langchain_classic.agents.react import agent
from langchain_classic.agents.agent import AgentExecutor
- 弃用了LangChain的create_react_agent和AgentExecutor,也废弃了LangGraph的create_react_agent改用create_agent代替。
- 之前create_react_agent()需要的prompt参数,需要输入一个指导模型如何使用工具的提示词对象,其中有input变量,用于输入。
- create_agent()无需指导模型。类似langgraph的create_react_agent()
- create_agent()返回的就是一个工具代理执行器。
- create_agent()方法参数:
- model:指定要用的模型
- tools:给agent可用工具
- system_prompt:给agent一个系统级角色说明
- response_format:要求agent以结构化格式输出。可用pydantic定义输出。
旧代码
from langchain_community.agent_toolkits.sql.toolkit import SQLDatabaseToolkit
from langchain_community.utilities import SQLDatabase
from langchain_openai import ChatOpenAI
from langsmith import Client
from langchain_classic.agents import AgentExecutor, create_react_agent
model = ChatOpenAI(
model="Pro/deepseek-ai/DeepSeek-V3",
openai_api_key="************",
openai_api_base="https://api.siliconflow.cn/v1",
temperature=0,
max_tokens=8000,
)
db = SQLDatabase.from_uri(
database_uri=r"sqlite:///D:\python\envs\langchain2\db\database.db"
)
toolkit = SQLDatabaseToolkit(db=db, llm=model)
sql_tools = toolkit.get_tools()
client = Client()
prompt = client.pull_prompt("hwchase17/react")
text_agent = create_react_agent(
llm=model,
tools=sql_tools,
prompt=prompt,
)
agent_executor = AgentExecutor(agent=text_agent, tools=sql_tools)
input = "请执行SQL语句统计sqlite数据库中student表的总行数,给出具体的数字答案"
result = agent_executor.invoke({"input": input})
print(result)
新代码
from langchain_community.agent_toolkits.sql.toolkit import SQLDatabaseToolkit
from langchain_community.utilities import SQLDatabase
from langchain_openai import ChatOpenAI
from langsmith import Client
from langchain.agents import create_agent
model = ChatOpenAI(
model="Pro/deepseek-ai/DeepSeek-V3",
openai_api_key="************",
openai_api_base="https://api.siliconflow.cn/v1",
temperature=0,
max_tokens=8000,
)
db = SQLDatabase.from_uri(
database_uri=r"sqlite:///D:\python\envs\langchain2\db\database.db"
)
toolkit = SQLDatabaseToolkit(db=db, llm=model)
sql_tools = toolkit.get_tools()
client = Client()
prompt = client.pull_prompt("hwchase17/react")
agent = create_agent(
model=model,
tools=sql_tools,
system_prompt=(
"你是一个 SQLite 数据库助手。"
"当用户询问数据库内容时,先查看可用表和表结构,再生成正确的 SQL。"
"如果工具返回了查询结果,就基于结果直接给出最终答案。"
),
)
input = "请执行SQL语句统计sqlite数据库中student表的总行数,给出具体的数字答案"
result = agent.invoke({"messages": [{"role": "user", "content": input}]})
print(result)
3.LangChain的text_splitter接口更新:
- 新版本LangChain已经弃用了langchain.text_splitter。改成了使用langchain_text_splitters库
- 安装langchain_text_splitters库:
pip install langchain-text-splitters
旧代码
from langchain.text_splitter import MarkdownTextSplitter
from langchain.text_splitter import CharacterTextSplitter
from langchain.text_splitter import TokenTextSplitter
from langchain.text_splitter import RecursiveCharacterTextSplitter
新代码
from langchain_text_splitters import MarkdownTextSplitter
from langchain_text_splitters import CharacterTextSplitter
from langchain_text_splitters import TokenTextSplitter
from langchain_text_splitters import RecursiveCharacterTextSplitter
4.LangChain的TavilySearch接口更新:
- 新版本LangChain已经弃用了langchain_community.tools.tavily_search。改成了使用langchain_tavily库
- 安装langchain_tavily库:pip install langchain_tavily
旧代码
from langchain_community.tools.tavily_search import TavilySearchResults
# 工具对象
web_search = TavilySearchResults(
max_results=2,
tavily_api_key="************"
)
新代码
from langchain_tavily import TavilySearch # Tavily网络搜索工具
# 工具对象
web_search = TavilySearch(
tavily_api_key="************", # Tavily密钥
max_results=2, # 限制搜索结果数量,减少冗余
search_depth="basic" # 基础搜索模式(速度快,适合通用问题)
)
5.LangGraph的AgentState状态结构体废弃:
- from langgraph.prebuilt.chat_agent_executor import AgentState 已经属于旧路径,新版本LangGraph中不建议继续使用,未来大概率会废弃
- AgentState是LangGraph的create_react_agent()的状态结构体。
- 代替方案:自己定义类似的状态结构体代替
旧代码
from langgraph.prebuilt.chat_agent_executor import AgentState
"""
AgentState的状态结构体
class AgentState(TypedDict):
messages: Annotated[Sequence[BaseMessage], add_messages]
remaining_steps: NotRequired[RemainingSteps] # 定义最多的思考次数
"""
新代码
from typing_extensions import TypedDict
from typing import Annotated
from langgraph.graph.message import add_messages
from langchain_core.messages import BaseMessage
class MyAgentState(TypedDict):
messages: Annotated[list[BaseMessage], add_messages]
# 可增加另外需要的状态键
总结
本文整理了 LangChain 的基础概念与核心包生态,包括 langchain-core、langchain-community、langchain、LangGraph、LangServe、LangSmith,以及常用第三方集成包的安装方式。实际开发中,建议根据项目需要按需安装模型、向量数据库、Embedding、检索、Agent 等相关依赖,并注意新版本 LangChain/LangGraph 的接口变化,避免继续使用已废弃的旧接口。
更多推荐


所有评论(0)