【大模型】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

相关文章

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

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门