【大模型】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的快速入门指南(附入门文档)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/413523.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis从入门到入门(上)

1.Redis概述 文章目录 1.Redis概述1.1 什么是Redis1.2 Redis的应用场景 2.Linux下Redis的安装与使用2.1 Redis下载2.2 Redis的启动2.3 Redis配置2.4 连接Redis 1.1 什么是Redis Redis是用C语言开发的一个开源的高性能键值对&#xff08;key-value&#xff09;数据库&#xff0…

MATLAB生成COE文件

MATLAB代码 % 参数设置 N 4096; % 数据点数量 t linspace(0, 2*pi, N); % 时间向量 width 12; % 位宽% 正弦波&#xff0c;幅度在0到5之间 sine_wave 2.5 * sin(t) 2.5;% 三角波&#xff0c;幅度在0到5之间 tri_wave 5 * (1 - abs(mod(t/(2*pi)*4, 2) - 1));% 方波&…

springboot集成七牛云上传文件

大体思路 上传 前端上传MultipartFile file 文件 进行名字空值校验和格式校验&#xff0c;大概就是判断后缀是不是属于jpg.png 生成唯一uuid名称&#xff0c;然后拿着这个文件名和图片文件File调接口 接口参数为 输入流inputstream&#xff0c;将file化流传输文件名上传t…

多线程+连接池+代理 运行一段时间线程阻塞,如何解决??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

<Rust>egui学习之小部件(四):如何在窗口中添加滚动条Scroll部件?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析&#xff0c;主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统&#xff1a;windows 平台&#xff1a;visual studio code 语言&#xff1a;rust 库&#xff1a;egui、eframe 概述 本文是本专栏的第四篇博…

今日算法:蓝桥杯基础题之“切面条”

你好同学&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏、评论和关注&#xff01;个人知乎 从今天开始&#xff0c;一起了解算法&#xff0c;每日一题&#xff0c;从 JavScript 的技术角度进行解答&#xff0c;如果你对算法也感兴趣&#xff0c;请多多关注哦。 问题描述 一…

【深度学习与NLP】——深度卷积神经网络AlexNet

目录 一、卷积神经网络的发展历程 二、简要介绍 三、代码实现 四、缺点和过时的地方 一、卷积神经网络的发展历程 早期理论基础阶段&#xff08;20 世纪 60 年代 - 80 年代&#xff09;&#xff1a; 1968 年&#xff0c;Hubel 和 Wiesel 通过对猫视觉神经的研究&#xff0…

Hibernate 批量插入速度慢的原因和解决方法

由于业务需要一次性连续写入超过10k条以上的新数据&#xff0c;当对象超过10个成员变量以后&#xff0c;整个写入过程居然需要长达35秒&#xff0c;这个速度是不能接受的&#xff0c;故此研究了一下怎么开启Hibernate批量写入的功能。 我这边使用的是Hibernate 5.6.15 在网上…

Python 从入门到实战3(列表的简单操作)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们通过python小栗子来学习python基础知识语法&#xff…

C语言中的“#”和“##”

目录 开头1.什么是#?2.什么是##?3.#和##的实际应用输出变量的名字把两个符号连接成一个符号输出根据变量的表达式…… 下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。在今天&#xff0c;我们要学一下关于C语言中的#和##的一些知识。 1.什么是#? #&#xff0…

《黑神话:悟空》:30%抽成真相

《黑神话&#xff1a;悟空》自建服务器出售&#xff1f;揭秘游戏界的30%抽成真相&#xff01; 近年来&#xff0c;随着游戏行业的迅猛发展&#xff0c;游戏开发商与发行平台之间的利益分配问题逐渐成为业界关注的焦点。其中&#xff0c;《黑神话&#xff1a;悟空》作为一款备受…

JS基础之【基本数据类型与类型间的隐式显示转换】

&#x1f680; 个人简介&#xff1a;某大型国企高级前端开发工程师&#xff0c;7年研发经验&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码…

streamlit+wordcloud使用pyinstaller打包遇到的一些坑

说明 相比常规的python程序打包&#xff0c;streamlit应用打包需要额外加一层壳&#xff0c;常规app.py应用运行直接使用 python app.py就可以运行程序了&#xff0c;但streamlit应用是需要通过streamlit命令来运行 streamlit app.py所以使用常规的pyinstaller app.py打包是…

云同步的使用

云同步技术是一种在多个设备或系统之间保持数据一致性的技术&#xff0c;它通常依赖于云存储服务来实现。在Java中&#xff0c;实现云同步功能通常需要与云服务提供商的API进行交互&#xff0c;如Amazon S3、Google Cloud Storage、Microsoft Azure Blob Storage等。 以下是一个…

秋风送爽,夏意未央|VELO Prevail Revo坐垫,一骑绿动起来吧~

夏末秋初&#xff0c;当第一片落叶缓缓飘落&#xff0c;是时候骑上你的自行车&#xff0c;迎接新的季节啦。带上维乐Prevail Revo坐垫&#xff0c;因为它独树一帜地采用EVA与回收咖啡渣精制而成的轻量发泡提升了减震性能&#xff0c;可以让你的每一次骑行都充满意义。    “…

虚幻引擎(Unreal Engine)技术使得《黑神话悟空传》大火,现在重视C++的开始吃香了,JAVA,Go,Unity都不能和C++相媲美!

虚幻引擎&#xff08;Unreal Engine&#xff09;火了黑神话游戏。 往后&#xff0c;会有大批量的公司开始模仿这个赛道&#xff01; C 的虚拟引擎技术通常指的是使用 C 语言开发的游戏引擎&#xff0c;如虚幻引擎&#xff08;Unreal Engine&#xff09;等。以下是对 C 虚拟引…

【virtuoso】INV 原理图+前仿真 + 版图 + 后仿真

采用SMIC工艺&#xff0c;不同工艺版图窗口可能有差异 1. 原理图&前仿真 1.1 绘制原理图 PMOS: NMOS宽长比2&#xff1a;1 PMOS开启导通电阻大一点&#xff0c;这样设置&#xff0c;可以使得阈值电压是VDD/2 按 i&#xff0c;可以插入器件按p&#xff0c;可以放置端口 1.2…

【机器学习】聚类算法的基本概念和实例代码以及局部度量学习的概念和实例代码

引言 聚类算法在许多领域都有广泛的应用&#xff0c;例如数据挖掘、生物信息学、图像处理等。 文章目录 引言一、聚类算法1.1 K-Means算法1.2 DBSCAN算法1.3 层次聚类&#xff08;Hierarchical Clustering&#xff09;算法1.4 高斯混合模型&#xff08;Gaussian Mixture Model&…

Web自动化测试实战--博客系统

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;测试&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 1.项目效果展示 2.编写web测试用例 3.自动化测试脚本开发 3.1创建空项目 引…

Web-gpt

AJAX AJAX&#xff08;Asynchronous JavaScript and XML&#xff0c;异步JavaScript和XML&#xff09;是一种用于创建动态网页应用的技术。它允许网页在不重新加载整个页面的情况下&#xff0c;异步地从服务器请求数据&#xff0c;并将这些数据更新到网页上。这提高了用户体验…