LangChain 24 对本地文档的搜索RAG检索增强生成Retrieval-augmented generation

LangChain系列文章

  1. LangChain 实现给动物取名字,
  2. LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字
  3. LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄
  4. LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索Indexes for information retrieve
  5. LangChain 5易速鲜花内部问答系统
  6. LangChain 6根据图片生成推广文案HuggingFace中的image-caption模型
  7. LangChain 7 文本模型TextLangChain和聊天模型ChatLangChain
  8. LangChain 8 模型Model I/O:输入提示、调用模型、解析输出
  9. LangChain 9 模型Model I/O 聊天提示词ChatPromptTemplate, 少量样本提示词FewShotPrompt
  10. LangChain 10思维链Chain of Thought一步一步的思考 think step by step
  11. LangChain 11实现思维树Implementing the Tree of Thoughts in LangChain’s Chain
  12. LangChain 12调用模型HuggingFace中的Llama2和Google Flan t5
  13. LangChain 13输出解析Output Parsers 自动修复解析器
  14. LangChain 14 SequencialChain链接不同的组件
  15. LangChain 15根据问题自动路由Router Chain确定用户的意图
  16. LangChain 16 通过Memory记住历史对话的内容
  17. LangChain 17 LangSmith调试、测试、评估和监视基于任何LLM框架构建的链和智能代理
  18. LangChain 18 LangSmith监控评估Agent并创建对应的数据库
  19. LangChain 19 Agents Reason+Action自定义agent处理OpenAI的计算缺陷
  20. LangChain 20 Agents调用google搜索API搜索市场价格 Reason Action:在语言模型中协同推理和行动
  21. LangChain 21 Agents自问自答与搜索 Self-ask with search
  22. LangChain 22 LangServe用于一键部署LangChain应用程序
  23. LangChain 23 Agents中的Tools用于增强和扩展智能代理agent的功能
    在这里插入图片描述

1. RAG检索增强生成Retrieval-augmented generation

RAG 是一种用额外的、通常是私人的或实时的数据增强LLM知识的技术。

LLM可以推理广泛的话题,但它们的知识仅限于它们在特定时间点之前训练的公共数据。如果你想构建可以推理私人数据或模型截止日期之后引入的数据的人工智能应用程序,你需要用模型需要的具体信息增强模型的知识。将适当的信息带入并插入到模型提示中的过程被称为检索增强生成(RAG)。

2. 架构

一个典型的RAG应用程序有两个主要组成部分:

  1. Indexing索引:用于从源中摄取数据并对其进行索引的流水线。这通常是离线进行的。
  2. Retrieval and generation检索和生成:实际的RAG链,它在运行时接收用户查询,从索引中检索相关数据,然后将其传递给模型。

从原始数据到答案的最常见完整序列如下:

2.1 Indexing索引

  1. Load加载:首先我们需要加载我们的数据。我们将使用DocumentLoaders来实现这一点。
  2. Split分割:文本分割器将大型文档分成较小的块。这对于索引数据和将其传递给模型都很有用,因为大块更难搜索,并且不会在模型的有限上下文窗口中。
  3. Store存储:我们需要一个地方来存储和索引我们的分割,以便以后可以进行搜索。这通常使用VectorStore和Embeddings模型来完成。

在这里插入图片描述

2.2 Retrieval and generation 检索和生成

  1. Retrieval检索:根据用户输入,使用检索器从存储中检索相关的拆分。
  2. generate生成:ChatModel / LLM使用包括问题和检索到的数据的提示生成答案。

3. 检索本地文档代码

ChatGPT 生成文本材料

请生成20个水果好处 以下面格式。 水果: 好处

在这里插入图片描述

先生成fruit.txt

苹果:富含纤维和抗氧化剂,有助于消化和心脏健康。
香蕉:富含钾和维生素B6,有助于肌肉功能和能量生产。
橙子:高维生素C含量,增强免疫系统。
草莓:富含维生素C和抗氧化剂,有助于皮肤健康。
蓝莓:富含抗氧化剂,有助于大脑健康和防止记忆衰退。
菠萝:含有消化酶和维生素C,有助于消化和免疫系统。
猕猴桃:高维生素C和E含量,有助于皮肤健康和免疫。
西瓜:高水分含量,有助于保持水分和清凉。
芒果:富含维生素A和C,有助于眼睛健康和免疫力。
梨:高纤维含量,有助于消化和控制血糖。
桃子:含有维生素C和钾,有助于心脏健康和皮肤。
樱桃:含有抗炎和抗氧化成分,有助于减少关节疼痛。
杏:富含维生素A,有助于视力和皮肤健康。
葡萄:含有抗氧化剂,有助于防止心脏病和癌症。
柠檬:高维生素C含量,有助于增强免疫力和消化。
鳄梨:含有健康脂肪和纤维,有助于心脏健康和减肥。
黑莓:富含抗氧化剂和维生素C,有助于大脑健康。
火龙果:富含抗氧化剂,有助于减少炎症和促进消化。
石榴:含有抗氧化剂,有助于减少心脏病风险。
无花果:高纤维含量,有助于消化和血糖控制。

RAG/rag_query_doc.py这段代码使用了Langchain库,以从一个文本文件中检索与查询相关的信息。以下是对每一行代码的解释

# 导入OpenAI模块,用于与OpenAI语言模型交互
from langchain.llms import OpenAI  

# 导入PromptTemplate模块,用于创建和管理提示模板
from langchain.prompts import PromptTemplate  

# 导入ChatOpenAI类,用于创建和管理OpenAI聊天模型的实例
from langchain.chat_models import ChatOpenAI

# 导入TextLoader类,用于从文本文件加载数据
from langchain.document_loaders import TextLoader

# 导入VectorstoreIndexCreator类,用于创建和管理向量存储索引
from langchain.indexes import VectorstoreIndexCreator

# 导入dotenv库,用于加载.env文件中的环境变量
from dotenv import load_dotenv  

# 加载.env文件中的环境变量
load_dotenv()  

# 使用TextLoader加载文本文件,指定文件路径和编码格式
loader = TextLoader('./RAG/fruit.txt', encoding='utf8')

# 使用VectorstoreIndexCreator从加载的数据创建向量存储索引
index = VectorstoreIndexCreator().from_loaders([loader])

# 定义要查询的字符串
query = "蓝莓的好处是啥"

# 使用创建的索引执行查询
result = index.query(query)

# 打印查询结果
print(result)

执行结果

└─[1] <git:(develop 984e07a✱✈) > python RAG/rag_query_doc.py
Number of requested results 4 is greater than number of elements in index 1, updating n_results = 1
 蓝莓富含抗氧化剂,有助于大脑健康和防止记忆衰退。
(.venv) ┌─[zgpeace@zgpeaces-MBP] - [~/Workspace/LLM/langchain-llm-app] - [2023-12-09 03:07:42]
└─[0] <git:(develop 984e07a✱✈) > python RAG/rag_query_doc.py
Number of requested results 4 is greater than number of elements in index 1, updating n_results = 1
 草莓富含维生素C和抗氧化剂,有助于皮肤健康。

代码
https://github.com/zgpeace/pets-name-langchain/tree/develop

参考

https://python.langchain.com/docs/use_cases/question_answering/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【网络安全】vulhub靶场搭建与一个漏洞的简单示例

vulhub是一个经典的靶场&#xff0c;里面大约包含了200个不同的漏洞&#xff0c;可以说是安全从业者必刷。 无需docker知识&#xff0c;简单执行一条命令即可编译、运行一个完整的漏洞靶场镜像。 我的环境是CentOS 7。 先安装docker sudo curl -L "https://github.com…

【漏洞复现】华脉智联指挥调度平台/script_edit/fileread.php文件读取漏洞

Nx01 产品简介 深圳市华脉智联科技有限公司&#xff0c;融合通信系统将公网集群系统、专网宽带集群系统、不同制式、不同频段的短波/超短波对讲、模拟/数字集群系统、办公电话系统、广播系统、集群单兵视频、视频监控系统、视频会议系统等融为一体&#xff0c;集成了专业的有线…

二叉树算法专栏一《理论基础》

下面我会介绍一些我在刷题过程中经常用到的二叉树的一些基础知识&#xff0c;所以我不会教科书式地将二叉树的基础内容通通讲一遍。 二叉树的种类 在我们解题过程中二叉树有两种主要的形式&#xff1a;满二叉树和完全二叉树。 满二叉树 满二叉树是一种特殊的二叉树&#xf…

【头歌系统数据库实验】实验5 SQL的多表查询-1

目录 第1关&#xff1a;等值连接&#xff1a;求S表和J表城市相同的等值连接(列顺序还是按照S、J表) 第2关&#xff1a;查询供应情况&#xff0c;并显示供应商、零件和工程三者的名称 第3关&#xff1a;找出上海厂商供应的所有零件号码 第4关&#xff1a;找出使用上海产的零…

VSCode Keil Assintant 联合开发STM32

文章目录 VSCodeKeil AssistantUV5&#x1f947;软件下载&#x1f947;配置环境&#x1f947;插件安装&#x1f948;C/C Extension Pack&#x1f949;C/C Extension Pack介绍&#x1f949;插件安装 &#x1f948;Keil Assistant&#x1f949;Keil Assistant介绍&#x1f949;插…

CSS-自适应导航栏(flex | grid)

目标&#xff1a;实现左右各有按钮&#xff0c;中间是内容&#xff0c;自适应显示中间的内容导航栏&#xff0c;即 根据中间的宽度大小显示内容。 自适应导航栏 总结&#xff1a;推荐 flex布局 / grid布局 flex布局&#xff1a; 两侧 flex:1; ----->中间自适应 grid布局&…

Docker容器的可视化管理工具—DockerUI本地部署与远程访问

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…

基于单片机智能病床呼叫系统设计

**单片机设计介绍&#xff0c;基于单片机智能病床呼叫系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能病床呼叫系统是一种利用单片机技术设计的医疗设备&#xff0c;它能够帮助病人在住院期间快速、方便…

flask之jinjia模板语法,拉取omdb api

模板主要的语法就是继承母版&#xff0c;集成模块。 继承母版的语法是&#xff1a; {% extends "common/home.html" %} 母版里集成模块的语法是&#xff1a; {% block head %}{% include ./common/header.html %}{% endblock %} 拉取电影资源&#xff0c;网址是&a…

T5论文个人记录

参考&转载自&#xff1a; 介绍Google推出的大一统模型—T5_谷歌大模型_深度之眼的博客-CSDN博客 T5 和 mT5-CSDN博客 T5&#xff1a;Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer&#xff08;万字长文略解T5&#xff09;_t5论文…

【原创创新点】金属工件缺陷检测系统:Efficient Multi-Scale-Conv的改进YOLOv8

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义&#xff1a;金属工件是现代工业生产中不可或缺的重要组成部分。金属工件的质量和性能直接影响到产品的品质和效率&#xff0c;因此对金属工件的研究和改进具有重要…

PyQt6 水平布局Horizontal Layout (QHBoxLayout)

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计41条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

邮件营销软件:10个创新邮件营销策略,提升投资回报率(一)

电子商务和电子邮件营销密不可分。尽管电子商务在蓬勃发展&#xff0c;而很多人对邮件营销颇有微词。但是在电子商务中&#xff0c;邮件营销的确是一种有效营销方式。在本文中&#xff0c;我们将讨论一下邮件营销在电子商务中的有效运用&#xff0c;帮助您的企业在今年尽可能地…

OpenAI在中国,申请GPT-6、GPT-7商标

根据最新商标信息显示&#xff0c;OpenAI已经在中国提交了GPT-6和GPT-7的商标注册信息&#xff0c;分类是科学仪器和网站服务两大类。申请日期是今年的11月2日&#xff0c;目前处于审核状态。 该申请由知识产权代理公司完成&#xff0c;但申请人的地址正是OpenAI在美国公司的地…

智能制造和低代码:打造高效工厂的关键

引言 随着全球制造业进入数字化时代&#xff0c;智能制造和低代码技术已经成为实现高效工厂运营的关键。这两个关键因素的融合为制造业带来了巨大的机会&#xff0c;使企业能够更灵活地应对市场需求、提高生产效率和降低成本。本文将深入探讨智能制造和低代码技术如何共同塑造…

解决electron修改主进程后需要重启才生效

nodemon 是一种工具&#xff0c;可在检测到目录中的文件更改时通过自动重新启动节点应用程序来帮助开发基于 node.js 的应用程序 nodemon 特性 自动重新启动应用程序。检测要监视的默认文件扩展名。默认支持 node&#xff0c;但易于运行任何可执行文件&#xff0c;如 python、…

拨号连接bat命令和拨号错误623,系统无法找到此连接的电话簿项的解决方法

一、拨号bat命令 1、首先创建一个拨号连接&#xff0c;注意连接名称要使用英文 2、创建一个bat文件&#xff0c;里面内容 echo off chcp 65001rem 定义连接参数&#xff0c;第一个是用户名&#xff0c;第二个是密码 set usernameS11111111111 set passwords11111111111 set…

m_map绘制多波束数据

之前&#xff0c;分享了m_map如何绘制本地高程数据&#xff1a;m_map导入本地地形数据。 其实&#xff0c;m_map还可以绘制多波束测深数据。 1. 多波束网站 多波束测深数据可以从https://www.ncei.noaa.gov/maps/grid-extract/或者https://www.ncei.noaa.gov/maps/bathymetr…

数据分析基础之《numpy(1)—介绍》

一、numpy介绍 1、numpy 数值计算库 num - numerical 数值化的 py - python 2、numpy是一个开源的python科学计算库&#xff0c;用于快速处理任意维度的数组 numpy支持常见的数组和矩阵操作。对于同样的数值计算任务&#xff0c;使用numpy比直接使用python要简洁的多 numpy使…

Linux系统调试课:网络性能工具总结

文章目录 一、网络性能指标二、netstat三、route四、iptables沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章一起了解下网络性能工具。 一、网络性能指标 从网络性能指标出发,你更容易把性能工具同系统工作原理关联起来,对性能问题有宏观的认识和把握。这样,…