【大模型】LangChain基础学习

2024-08-31 21:28
文章标签 基础 学习 模型 langchain

本文主要是介绍【大模型】LangChain基础学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:LangChain是一个用于构建端到端语言模型应用的框架

目录

  • 1. 基础知识
  • 2. 基本使用
    • 2.1 安装
    • 2.2 启动示例
    • 2.3 使用prompt
    • 2.4 输出解析器
  • 3. 相关应用
    • 3.1 RAG
  • 参考文献

1. 基础知识

六大组件

  • 模型(Models):包含各大语言模型的LangChain接口和调用细节,以及输出解析机制。
  • 提示模板(Prompts):使提示工程流线化,进一步激发大语言模型的潜力。
  • 数据检索(Indexes):构建并操作文档的方法,接受用户的查询并返回最相关的文档,轻松搭建本地知识库。
  • 记忆(Memory):通过短时记忆和长时记忆,在对话过程中存储和检索数据,让ChatBot记住你。
  • 链(Chains):LangChain中的核心机制,以特定方式封装各种功能,并通过一系列的组合,自动而灵活地完成任务。
  • 代理(Agents):另一个LangChain中的核心机制,通过“代理”让大模型自主调用外部工具和内部工具,使智能Agent成为可能。

基本架构
在这里插入图片描述

2. 基本使用

2.1 安装

pip install openai
pip install langchain
pip install langchain-openai

注意

  1. 如果安装后使用langchain报错如下,说明pydantic版本过高,重新安装这个库,降到1.10.13

pydantic.errors.PydanticUserError: If you use @root_validator with pre=False (the default) you MUST specify skip_on_failure=True. Note that @root_validator is deprecated and should be replaced with @model_validator.

  1. langchain-openai安装不上,需要python3.8及以上

安装后需要设置openAI环境变量,可以用以下几种方式:
(1)终端

export OPENAI_API_KEY="..."

(2)python代码设置

os.environ["OPENAI_API_KEY"] = "..."

2.2 启动示例

  • 示例一:
from langchain.llms import OpenAIllm = OpenAI(temperature=0.9)text = "What would be a good company name for a company that makes colorful socks?"
print(llm(text))
  • 示例二:
# 初始化模型
from langchain_openai import ChatOpenAIllm = ChatOpenAI()# 安装并初始化选择的LLM,就可以尝试使用它
llm.invoke(" LangSmith 是什么?")

2.3 使用prompt

from langchain_core.prompts import ChatPromptTemplateprompt = ChatPromptTemplate.from_messages([("system", "You are good at math."),("user", "{input}")
])chain = prompt | llm
print(chain.invoke({"input": "1+1=?"}))

2.4 输出解析器

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser# 初始化模型
llm = ChatOpenAI()# 创建提示模板
prompt = ChatPromptTemplate.from_messages([("system", "您是世界级的技术文档编写者。"),("user", "{input}")
])# 使用输出解析器
output_parser = StrOutputParser()# 将其添加到上一个链中
chain = prompt | llm | output_parser# 调用它并提出同样的问题。答案是一个字符串,而不是ChatMessage
chain.invoke({"input": "Langsmith 如何帮助进行测试?"})

3. 相关应用

3.1 RAG

在这里插入图片描述

  • 加载数据
  • 转为embedding存储
  • 查询操作转为对应的embedding
  • 查找与查询操作最相似的向量

可以与多种数据库结合使用,这里以faiss数据库为例,该数据库利用 Facebook AI 相似性搜索 (FAISS) 库。

  • 安装
pip install faiss-cpu
  • 存储向量
from langchain.document_loaders import TextLoader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import FAISS# 加载文档,将其分割成块,嵌入每个块并将其加载到向量存储中。
raw_documents = TextLoader('../../../state_of_the_union.txt').load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
documents = text_splitter.split_documents(raw_documents)
db = FAISS.from_documents(documents, OpenAIEmbeddings())
  • 相似性搜索
embedding_vector = OpenAIEmbeddings().embed_query(query)
docs = db.similarity_search_by_vector(embedding_vector)
print(docs[0].page_content)
  • 检索链
    该链将接收一个传入的问题,查找数据库中相关文档,然后将这些文档与原始问题一起传递给LLM,要求它回答原始问题。
from langchain.chains.combine_documents import create_stuff_documents_chainprompt = ChatPromptTemplate.from_template("""仅根据提供的上下文回答以下问题:<context>
{context}
</context>Question: {input}""")# 创建链,该链获取文档列表并将它们全部格式化为提示,然后将该提示传递给LLM。它传递所有文档,因此应该确保它适合正在使用的 LLM 上下文窗口
document_chain = create_stuff_documents_chain(llm, prompt)# 可以直接通过传入文档来运行它
from langchain_core.documents import Documenttext ="langsmith can let you visualize test results"
document_chain.invoke({"input": "Langsmith 如何帮助进行测试?","context": [Document(page_content=text)]
})
  • 对话检索链
    该链将接收最新的输入和对话历史记录,并使用 LLM 生成搜索查询。
from langchain.chains import create_history_aware_retriever
from langchain_core.prompts import MessagesPlaceholder# First we need a prompt that we can pass into an LLM to generate this search queryprompt = ChatPromptTemplate.from_messages([MessagesPlaceholder(variable_name="chat_history"),("user", "{input}"),("user", "鉴于上述对话,生成一个搜索查询以查找以获取与对话相关的信息")
])
retriever_chain = create_history_aware_retriever(llm, retriever, prompt)# 通过传入用户提出后续问题来测试
from langchain_core.messages import HumanMessage, AIMessagechat_history = [HumanMessage(content="LangSmith 可以帮助测试我的 LLM 应用程序吗?"), AIMessage(content="Yes!")]
retriever_chain.invoke({"chat_history": chat_history,"input": "告诉我怎么做"
})

参考文献

[1]【LangChain】向量存储(Vector stores)
[2]【AI大模型】初识LangChain的快速入门指南(附入门文档)

这篇关于【大模型】LangChain基础学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125034

相关文章

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4