开启左侧

LangChain介绍与核心包

[复制链接]
kkkzxt 发表于 3 天前 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
作者: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 - 对话模型,接收一组对话消息,然后返回对话消息,类似聊天消息一样。

      LangChain介绍与核心包-1.jpg


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介绍与核心包-2.jpg


      在安装某个包时,无需显式安装该包的依赖(例如langchain-core)。但是,如果需要使用特定版本的依赖中的某一特性,也可以选择手动安装。需要确保与使用的其他集成包的版本兼容。

2.LangChain:

    主程序包
  • 安装
      Pip安装:pip install langchainConda安装:conda install langchain -c conda-forge

  • langchain版本查询
      20260220版本为1.2.10

代码
  1. import langchain
  2. import langchain_core
  3. print("LangChain 主包版本:", langchain.__version__)print("LangChain Core 版本:", langchain_core.__version__)
复制代码
结果
  1. LangChain 主包版本: 1.2.10
  2. 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

代码
  1. from importlib.metadata import version, PackageNotFoundError
  2. try:
  3.     v = version("langgraph")except PackageNotFoundError:import langgraph
  4.     v =getattr(langgraph,"__version__","unknown")print("当前langgraph版本:", v)
复制代码
结果
  1. 当前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-openailangchain-openai包能够使用硅基流动API。
代码
  1. from langchain_openai import ChatOpenAI
  2. llm = ChatOpenAI(
  3.     model='Pro/deepseek-ai/DeepSeek-V3',
  4.     openai_api_key="************",
  5.     openai_api_base='https://api.siliconflow.cn/v1',
  6.     temperature=0.7,
  7.     max_tokens=8000)
  8. 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:

  1. 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:
  1. pip install transformers_stream_generator
复制代码
    需要安装加速库accelerate:pip install accelerate使用hugging face本地Embedding模型需要安装SentenceTransformers库
  1. pip install sentence_transformers
复制代码

  • 可选安装Transformers框架的LoRA技术(建议安装)
      也就是模型能使用load_in_8bit=True参数需要的库:量化用的bitsandbytes库,低秩适配器loralib库,PEFT库。下载安装bitsandbytes datasets loralib库:

  1. 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提供的模型。

  1. 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封装。封装层级:

代码
  1. LangChain接口层
  2.    ↓
  3. HuggingFaceEmbeddings
  4.    ↓
  5. sentence-transformers
  6.    ↓
  7. PyTorch
  8.    ↓
  9. CUDA / CPU
复制代码

  • 确保安装的是GPU版本的langchain-huggingface步骤
      1 安装GPU版PyTorch(1 2步可参考《SentenceTransformers库》):

  1. pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
复制代码
  1. - 2 安装SentenceTransformers:pip install sentence-transformers
  2. - 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。

代码
  1. from langchain_huggingface import HuggingFaceEmbeddings
  2. llm_emb = HuggingFaceEmbeddings(
  3.     model_name="all-MiniLM-L6-v2",
  4.     cache_folder="D:/python/envs/langchain2/hfmodel",
  5.     model_kwargs={"local_files_only":True,"device":"cpu",},)
复制代码
    model_name参数,可以指定模型名称,当指定路径时,就是指定本地模型路径
代码
  1. from langchain_huggingface import HuggingFaceEmbeddings
  2. llm_emb = HuggingFaceEmbeddings(
  3.     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包
  1. 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=“************”
    然后,初始化模型:
代码
  1. from langchain_openai import ChatOpenAI
  2. llm = ChatOpenAI()
复制代码
3.使用LLM 构建简单的链(chains)

    通过提示模板(prompt template)生成提示词,用于向模型发送prompt。使用|链接prompt和LLM模型,返回链条使用链条的invoke()方法,传入问题作为参数,返回问题答案。
代码
  1. from langchain_core.prompts import ChatPromptTemplate
  2. # 创建一个提示模板prompt template# 消息模板定义两条消息,system消息告诉模型扮演的角色,user消息代表用户输入的问题# 用了一个占位符{input} 代表接受一个模版参数input。
  3. prompt = ChatPromptTemplate.from_messages([("system","你是世界级的技术专家"),("user","{input}")])# 基于LCEL表达式构建LLM链,lcel语法类似linux的管道语法|,从左到右按顺序执行# 编排了一个简单的工作流:# 首先执行prompt完成提示词模板(prompt template)格式化处理# 然后将格式化后的prompt传递给llm模型执行,最终返回llm执行结果
  4. chain = prompt | llm
  5. # 调用LLM链并设置模板参数input# invoke会把调用参数传递给prompt提示模板,开始chain定义的步骤开始逐步执行。
  6. chain.invoke({"input":"帮我写一篇关于AI的技术文章,100个字"})
复制代码
4.输出转换

    链的默认输出是对象。可以使用输出解析器,将LLM输出的消息转换为字符串。
代码
  1. from langchain_core.output_parsers import StrOutputParser
  2. # 创建一个字符串输出解析器
  3. output_parser = StrOutputParser()# LLM链的最后一步将llm模型输出的结果传递给output_parser进行格式转换
  4. chain = prompt | llm | output_parser
  5. # 调用LLM链并提出问题
  6. chain.invoke({"input":"帮我写一篇langchain的技术文章,100个字"})
复制代码
五、LangChain/LangGraph更新接口

1.LangChain的hub接口更新:

    新版本LangChain已经弃用了hub。改在langsmith库中获取。
旧代码
  1. from langchain import hub
  2. prompt = hub.pull("hwchase17/react")
复制代码
新代码
  1. from langsmith import Client
  2. client = Client()
  3. prompt = client.pull_prompt("hwchase17/react")
复制代码
2.LangChain的create_react_agent和AgentEXecutor接口更新:


  • 新版本LangChain已经弃用了create_react_agent, AgentExecutor。
      如需使用需要旧方法,需要安装库:pip install langchain_classic

旧代码
  1. from langchain.agents import create_react_agent, AgentExecutor
  2. from langchain.agents.react import agent
  3. from langchain.agents.agent import AgentExecutor
  4. # agent = agent.create_react_agent(...)
复制代码
新代码
  1. from langchain_classic.agents import create_react_agent, AgentExecutor
  2. from langchain_classic.agents.react import agent
  3. 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定义输出。

旧代码
  1. from langchain_community.agent_toolkits.sql.toolkit import SQLDatabaseToolkit
  2. from langchain_community.utilities import SQLDatabase
  3. from langchain_openai import ChatOpenAI
  4. from langsmith import Client
  5. from langchain_classic.agents import AgentExecutor, create_react_agent
  6. model = ChatOpenAI(
  7.     model="Pro/deepseek-ai/DeepSeek-V3",
  8.     openai_api_key="************",
  9.     openai_api_base="https://api.siliconflow.cn/v1",
  10.     temperature=0,
  11.     max_tokens=8000,)
  12. db = SQLDatabase.from_uri(
  13.     database_uri=r"sqlite:///D:\python\envs\langchain2\db\database.db")
  14. toolkit = SQLDatabaseToolkit(db=db, llm=model)
  15. sql_tools = toolkit.get_tools()
  16. client = Client()
  17. prompt = client.pull_prompt("hwchase17/react")
  18. text_agent = create_react_agent(
  19.     llm=model,
  20.     tools=sql_tools,
  21.     prompt=prompt,)
  22. agent_executor = AgentExecutor(agent=text_agent, tools=sql_tools)input="请执行SQL语句统计sqlite数据库中student表的总行数,给出具体的数字答案"
  23. result = agent_executor.invoke({"input":input})print(result)
复制代码
新代码
  1. from langchain_community.agent_toolkits.sql.toolkit import SQLDatabaseToolkit
  2. from langchain_community.utilities import SQLDatabase
  3. from langchain_openai import ChatOpenAI
  4. from langsmith import Client
  5. from langchain.agents import create_agent
  6. model = ChatOpenAI(
  7.     model="Pro/deepseek-ai/DeepSeek-V3",
  8.     openai_api_key="************",
  9.     openai_api_base="https://api.siliconflow.cn/v1",
  10.     temperature=0,
  11.     max_tokens=8000,)
  12. db = SQLDatabase.from_uri(
  13.     database_uri=r"sqlite:///D:\python\envs\langchain2\db\database.db")
  14. toolkit = SQLDatabaseToolkit(db=db, llm=model)
  15. sql_tools = toolkit.get_tools()
  16. client = Client()
  17. prompt = client.pull_prompt("hwchase17/react")
  18. agent = create_agent(
  19.     model=model,
  20.     tools=sql_tools,
  21.     system_prompt=("你是一个 SQLite 数据库助手。""当用户询问数据库内容时,先查看可用表和表结构,再生成正确的 SQL。""如果工具返回了查询结果,就基于结果直接给出最终答案。"),)input="请执行SQL语句统计sqlite数据库中student表的总行数,给出具体的数字答案"
  22. result = agent.invoke({"messages":[{"role":"user","content":input}]})print(result)
复制代码
3.LangChain的text_splitter接口更新:


  • 新版本LangChain已经弃用了langchain.text_splitter。改成了使用langchain_text_splitters库
      安装langchain_text_splitters库:

  1. pip install langchain-text-splitters
复制代码
旧代码
  1. from langchain.text_splitter import MarkdownTextSplitter
  2. from langchain.text_splitter import CharacterTextSplitter
  3. from langchain.text_splitter import TokenTextSplitter
  4. from langchain.text_splitter import RecursiveCharacterTextSplitter
复制代码
新代码
  1. from langchain_text_splitters import MarkdownTextSplitter
  2. from langchain_text_splitters import CharacterTextSplitter
  3. from langchain_text_splitters import TokenTextSplitter
  4. from langchain_text_splitters import RecursiveCharacterTextSplitter
复制代码
4.LangChain的TavilySearch接口更新:


  • 新版本LangChain已经弃用了langchain_community.tools.tavily_search。改成了使用langchain_tavily库
      安装langchain_tavily库:pip install langchain_tavily

旧代码
  1. from langchain_community.tools.tavily_search import TavilySearchResults
  2. # 工具对象
  3. web_search = TavilySearchResults(
  4.     max_results=2,
  5.     tavily_api_key="************")
复制代码
新代码
  1. from langchain_tavily import TavilySearch  # Tavily网络搜索工具# 工具对象
  2. web_search = TavilySearch(
  3.     tavily_api_key="************",# Tavily密钥
  4.     max_results=2,# 限制搜索结果数量,减少冗余
  5.     search_depth="basic"# 基础搜索模式(速度快,适合通用问题))
复制代码
5.LangGraph的AgentState状态结构体废弃:

    from langgraph.prebuilt.chat_agent_executor import AgentState 已经属于旧路径,新版本LangGraph中不建议继续使用,未来大概率会废弃AgentState是LangGraph的create_react_agent()的状态结构体。代替方案:自己定义类似的状态结构体代替
旧代码
  1. from langgraph.prebuilt.chat_agent_executor import AgentState
  2. """
  3. AgentState的状态结构体
  4. class AgentState(TypedDict):
  5.     messages: Annotated[Sequence[BaseMessage], add_messages]
  6.     remaining_steps: NotRequired[RemainingSteps]    # 定义最多的思考次数
  7. """
复制代码
新代码
  1. from typing_extensions import TypedDict
  2. from typing import Annotated
  3. from langgraph.graph.message import add_messages
  4. from langchain_core.messages import BaseMessage
  5. classMyAgentState(TypedDict):
  6.     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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝0

帖子2

发布主题
阅读排行更多+

Powered by Discuz! X3.4© 2001-2013 Discuz Team.( 京ICP备17022993号-3 )