作者:CSDN博客
LangChain系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 LangChain 简介和核心包;第二章 LangChain 提示词工程;第三章 LangChain 工作流
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
LangChain系列文章目录前言LangChain介绍与核心包一、LangChain简介
1.LangChain特性2.LangChain框架组成3.LangChain(Libraries)库组成4.langchain任务处理流程5.核心概念6.应用场景
二、LangChain核心包安装
1.LangChain生态系统是由多个不同的包组成2.LangChain:3.LangChain-core4.LangChain-community5.LangGraph6.LangChain-cli7.LangServe8.LangSmith9.LangChain-experimental
三、LangChain第三方包安装
1.langchain-openai包2.langchain-chroma包3.FAISS包4.Transformers框架5.langchain-huggingface包只需单独支持Embedding模型6.Redis包7.使用通义千问API模型8.langchain-ollama包
四、LangChain简易操作
1.安装LangChain2.初始化模型3.使用LLM 构建简单的链(chains)4.输出转换
五、LangChain/LangGraph更新接口
1.LangChain的hub接口更新:2.LangChain的create_react_agent和AgentEXecutor接口更新:3.LangChain的text_splitter接口更新:4.LangChain的TavilySearch接口更新:5.LangGraph的AgentState状态结构体废弃:
总结
前言
提示:这里可以添加本文要记录的大概内容:
本文主要整理 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 langchainConda安装:conda install langchain -c conda-forge
- langchain版本查询
代码
- 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版本查询
代码
- from importlib.metadata import version, PackageNotFoundError
- try:
- v = version("langgraph")except PackageNotFoundError:import langgraph
- v =getattr(langgraph,"__version__","unknown")print("当前langgraph版本:", v)
复制代码结果
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-openailangchain-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》章节。也可以以下安装:
- 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\hubLinux目录:~/.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
- classMyAgentState(TypedDict):
- messages: Annotated[list[BaseMessage], add_messages]# 可增加另外需要的状态键
复制代码 总结
本文整理了 LangChain 的基础概念与核心包生态,包括 langchain-core、langchain-community、langchain、LangGraph、LangServe、LangSmith,以及常用第三方集成包的安装方式。实际开发中,建议根据项目需要按需安装模型、向量数据库、Embedding、检索、Agent 等相关依赖,并注意新版本 LangChain/LangGraph 的接口变化,避免继续使用已废弃的旧接口。
原文地址:https://blog.csdn.net/qq_40248599/article/details/160978522 |