使用LlamaIndex和ChatGPT的无代码检索增强生成(RAG)

自从ChatGPT和类似的LLM推出以来,出现了大量的RAG工具和库。人们需要了解如何使用LlamaIndex和ChatGPT的无代码RAG。

检索增强生成(RAG)是使用大型语言模型(LLM)的关键工具。RAG使LLM能够将外部文档合并到它们的响应中,从而更紧密地与用户需求保持一致。这个功能在传统上使用LLM犹豫不决的领域尤其有益,尤其是在事实很重要的时候。

自从ChatGPT和类似的LLM推出以来,出现了大量的RAG工具和库。以下是需要了解的关于RAG如何工作以及如何开始使用它与ChatGPT、Claude或选择的LLM。

RAG提供的好处

当开发人员与大型语言模型交互时,它会利用其训练数据中嵌入的知识来制定响应。然而,规模庞大的训练数据往往超过模型的参数,导致响应可能不完全准确。此外,训练中使用的各种信息可能会导致LLM混淆细节,可能提供看似合理但不正确的答案,这种现象被称为“幻觉”。

在某些情况下,开发人员可能希望LLM使用未包含在其训练数据中的信息,例如最近发布的新闻文章、学术论文或专有公司文档。这就是RAG发挥重要作用的地方。

RAG通过在LLM生成响应之前为其提供相关信息来解决这些问题。这包括从外部源检索文档(因此得名),并将其内容插入到对话中,以向LLM提供场景。

这一过程增强了模型的准确性,并使其能够根据提供的内容制定响应。实验表明,RAG能显著减少“幻觉”。在需要最新或客户特定信息的应用程序中,它也被证明是有益的,这些信息不包括在训练数据集中。

简单地说,标准LLM和支持RAG的LLM之间的区别可以比喻成两个人回答问题。标准LLM就像一个人根据记忆做出回应,而支持RAG的LLM则像获得文件的另一个人,可以根据文件内容阅读和回答问题。

RAG是如何工作的

RAG的工作原理很简单。它标识与查询相关的一个或多个文档,将它们合并到提示中,并修改提示以包含模型基于这些文档的响应的说明。

开发人员可以手动实现RAG,其方法是将文档的内容复制粘贴到提示中,并指示模型根据该文档制定响应。

RAG管道将这一过程实现自动化以提高效率。它首先将用户的提示与文档数据库进行比较,检索与主题最相关的提示。然后,RAG管道将它们的内容集成到提示符中,并添加指令以确保LLM符合文档的内容。

RAG管道需要什么?

图1使用嵌入和矢量数据库检索相关文档

虽然RAG是一个直观的概念,但它的执行需要多个组件的无缝集成。

首先,需要生成响应的主要语言模型。除此之外,还需要一个嵌入模型将文档和用户提示编码为表示其语义内容的数字列表或“嵌入”。

接下来,需要一个矢量数据库来存储这些文档嵌入,并在每次收到用户查询时检索最相关的文档嵌入。在某些情况下,排序模型还有助于进一步细化向量数据库提供的文档的顺序。

对于某些应用程序,开发人员可能希望合并一种额外的机制,将用户提示分为几个部分。这些部分中的每一个都需要自己独特的嵌入和文档,从而提高所生成响应的准确性和相关性。

如何在无代码的情况下开始使用RAG

图2无代码RAG与LlamaIndex和ChatGPT

LlamaIndex最近发布了一个开源工具,它允许开发人员开发基本的RAG应用程序,几乎不需要编写代码。虽然目前仅限于单个文件的使用,但未来的增强功能可能包括对多个文件和矢量数据库的支持。

这个名为RAG的项目建立在Streamlit web应用程序框架和LlamaIndex之上,LlamaIndex是一个强大的Python库,对RAG特别有用。如果开发人员熟悉GitHub和Python,其安装很简单:只需克隆存储库,运行安装命令,然后将OpenAI API令牌添加到自述文档中指定的配置文件中。

目前,RAG被配置为与OpenAI模型一起工作。但是,可以修改代码以使用其他模型,例如Anthropic Claude、Cohere模型或服务器上托管的开源模型(如Llama 2)。LlamaIndex支持所有这些模型。

应用程序的初始运行需要设置RAG代理。这涉及到确定设置,包括文件、将文件分成块的大小,以及为每个提示检索的块的数量。

块在RAG中起着至关重要的作用。当处理一个大文件时,例如一本书或一篇多页的研究论文,有必要把它分解成可管理的块,例如500个令牌。这允许RAG代理定位文档中与提示相关的特定部分。

在完成这些步骤之后,应用程序将为RAG代理创建一个配置文件,并用它来运行代码。RAG是一个有价值的工具,可以从增强检索开始并在此基础上进行构建。人们可以在相关网站上找到完整的指南。

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

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

相关文章

Servlet要点总结

一、什么是 Servlet Servlet 在开发动态 WEB 工程中,得到广泛的应用,掌握好 Servlet 非常重要了 , Servlet( 基 石 ) 是 SpringMVC 的基础 Servlet(java 服务器小程序 ) ,它的特点 : 1. 他是由服务器端调用和执行的 ( 一句话&…

RTC时钟

目录 一、STM32F407内部RTC硬件框图,主要由五大部分组成: 二、硬件相关引脚 三、具体代码设置步骤 四、了解其它知识点 一、STM32F407内部RTC硬件框图,主要由五大部分组成: ① 时钟源 (1)LSE:一般我们选择 LSE&am…

【EI稳定检索会议】第五届大数据、人工智能与软件工程国际研讨会(ICBASE 2024)

#往届均已成功检索# 投稿时邀请码请填H8053 第五届大数据、人工智能与软件工程国际研讨会(ICBASE 2024) 2024 5th International Conference on Big Data & Artificial Intelligence & Software Engineering 2024年09月20-22日 | 中国温州 &g…

16.Qt 工具栏生成

目录 前言: 技能: 内容: 1. 界面添加 2. 信号槽 功能实现 参考: 前言: 基于QMainWindow,生成菜单下面的工具栏,可以当作菜单功能的快捷键,也可以完成新的功能 直接在UI文件中…

Java并发基础:ConcurrentSkipListSet全面解析!

内容概要 ConcurrentSkipListSet类在多线程环境下,它能够轻松应对大量的插入、删除和查找操作,同时保持数据的完整性和一致性,其内部基于跳表数据结构的实现,确保了即使在处理大规模数据时,也能具有出色的性能表现。 …

第二篇【传奇开心果系列】Python的文本和语音相互转换库技术点案例示例:深度解读pyttsx3支持多种语音引擎

传奇开心果短博文系列 系列短博文目录Python的文本和语音相互转换库技术点案例示例系列 短博文目录前言一、三种语音引擎支持介绍和示例代码二、SAPI5引擎适用场景介绍和示例代码三、nsss引擎适用场景介绍和示例代码四、eSpeak适用场景介绍和示例代码五、归纳总结 系列短博文目…

计算机丢失mfc140.dll怎么安装?多种方法轻松搞定mfc140.dll问题

​Mfc140.dll文件的丢失可能会引发一系列系统运行问题。作为Microsoft Visual C Redistributable Package的重要组成部分,Mfc140.dll在许多应用程序的正常运行中扮演着关键角色。当这个动态链接库文件缺失时,可能会导致软件启动失败、运行不稳定、功能受…

.NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库

一、效果 记录日志为文档 记录日志到数据库 二、添加NuGet包 三、log4net.config代码配置 <?xml version"1.0" encoding"utf-8" ?> <log4net><!-- Debug日志 --><appender name"RollingFileDebug" type"log4net…

林浩然与杨凌芸的Java集合奇遇记

林浩然与杨凌芸的Java集合奇遇记 The Java Collection Chronicles of Lin Haoran and Yang Lingyun 在一个充满代码香气的午后&#xff0c;程序员男主角林浩然正在他的编程世界里挥舞着键盘剑&#xff0c;探索Java王国中的神秘宝藏——集合。而我们的女主角杨凌芸&#xff0c;作…

基于Spring Boot的协力服装厂服装生产管理系统,计算机毕业设计(带源码+论文)

源码获取地址&#xff1a; 码呢-一个专注于技术分享的博客平台一个专注于技术分享的博客平台,大家以共同学习,乐于分享,拥抱开源的价值观进行学习交流http://www.xmbiao.cn/resource-details/1759135037462228993

缩小ppt文件大小的办法

之前用别人模版做了个PPT&#xff0c;100多M,文件存在卡顿问题 解决办法&#xff1a; 1.找到ppt中哪个文件过大&#xff0c;针对解决 2.寻找视频/音频文件&#xff0c;减少体积 3.字体文件是不是过多的问题。 一、文件寻找的内容步骤&#xff1a; 步骤&#xff1a; 1.把p…

在beforeUpdate中调用了请求数据接口,修改了初始数据造成死循环

在beforeUpdate中调用了请求数据接口&#xff0c;修改了初始数据造成死循环 问题&#xff1a; 不要在beforeUpdate和updated中更改数据&#xff0c;会造成死循环&#xff1b; 原因&#xff1a; 当数据更改就会走这个钩子&#xff0c;而你在里面进行数据更改又会走这个钩子&…

定制你的【Spring Boot Starter】,加速开发效率

摘要&#xff1a; 本文将介绍如何创建一个自定义的 Spring Boot Starter&#xff0c;让您可以封装常用功能和配置&#xff0c;并在多个 Spring Boot 项目中共享和重用。 1. 简介 Spring Boot Starter 是 Spring Boot 框架中的一种特殊的依赖项&#xff0c;它用于快速启动和配置…

机器学习 | 实现图像加密解密与数字水印处理

目录 实现窗口可视化 数字图像加密 窗口布局设置 基于混沌Logistic的图像加密 基于三重DES的图像加密 数字图像解密 窗口布局设置 基于混沌Logistic的图像解密 基于三重DES的图像解密 基于LSB的数字水印提取 窗口布局设置 水印的嵌入与提取 实现窗口可视化 这里…

【IO流】FileInputStream 字节输入流

FileInputStream 字节输入流 1. 概述2. 作用3. 书写步骤4. 读取方法5. 文件拷贝6. 注意事项 1. 概述 FileInputStream 是 Java IO 包中的一个类&#xff0c;它是字节输入流的一种。它用于从文件中读取数据&#xff0c;以字节为单位进行读取。 使用 FileInputStream 可以完成以…

数据分析(一) 理解数据

1. 描述性统计&#xff08;summary&#xff09; 对于一个新数据集&#xff0c;首先通过观察来熟悉它&#xff0c;可以打印数据相关信息来大致观察数据的常规特点&#xff0c;比如数据规模&#xff08;行数列数&#xff09;、数据类型、类别数量&#xff08;变量数目、取值范围…

C++--Linux基础使用

文章目录 几个简单命令开机关机重启查看当前目录切换当前目录列出当前目录下的目录和文件列出指定目录下的目录和文件清屏查看/设置时间 目录和文件目录概要目录详细说明相对路径和绝对路径 上古神器vi创建/打开文件vi 的两种模式vi 的常用命令 用户管理组管理用户管理修改用户…

【C++学习手札】多态:掌握面向对象编程的动态绑定与继承机制(初识)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;世界上的另一个我 1:02━━━━━━️&#x1f49f;──────── 3:58 &#x1f504; ◀️ ⏸ ▶️ ☰ &am…

上门回收小程序开发,互联网下发展机遇

在当下生活水平大幅度上升发展下&#xff0c;回收成为了人们日常生活中的一部分。 如今&#xff0c;随着互联网的快速发展&#xff0c;回收行业也进行了升级换代&#xff0c;由传统的线下回收门店到回收箱在到当下的线上互联网回收模式&#xff0c;迈向了“互联网废品回收”的…

Android下SF合成流程重学习之GPU合成

Android下SF合成流程重学习之GPU合成 引言 SurfaceFlinger中的图层选择GPU合成(CLIENT合成方式)时&#xff0c;会把待合成的图层Layers通过renderengine(SkiaGLRenderEngine)绘制到一块GraphicBuffer中&#xff0c;然后把这块GraphicBuffer图形缓存通过调用setClientTarget传递…