AI系列:大语言模型的RAG(检索增强生成)技术(上)

news2024/10/7 19:31:08

前言

大型语言模型(LLM)虽然在生成文本方面表现出色,但仍然存在一些局限性:数据是静态的,而且缺乏垂直细分领域的知识。为了克服这些限制,有时候会进行进一步的模型训练和微调。在实际应用中,我们也常常会运用到RAG技术。

什么是RAG

RAG(Retrieval-Augmented Generation)是一种融合了检索(Retrieval)和生成(Generation)的自然语言处理技术,用于增强大型语言模型(LLM)的性能。RAG的核心思想是让模型在生成回答时,不仅依赖于其内部知识,还能利用外部的信息源,如数据库或知识库,来提供更准确、更丰富的答案。

RAG的基本工作流程通常包括以下几个步骤:

检索(Retrieve):根据用户的查询,从外部知识源检索相关的上下文信息。这通常涉及到使用嵌入模型将用户查询转换为向量,并在向量数据库中执行相似性搜索,以找到最相关的信息。

增强(Augment):将检索到的上下文信息与用户原始查询结合,形成一个新的增强提示(prompt),这个提示将用于引导语言模型生成回答。

生成(Generate):最后,将增强后的提示输入到大型语言模型中,生成最终的回答。

RAG在多种应用场景中都非常有用,包括但不限于问答系统、事实核查、内部工具等。通过RAG,大型语言模型能够提供更加准确和上下文相关的回答,从而提高整体的AI应用性能。

1. 检索(Retrieve)

1.1 检索(Retrieve)之使用搜索引擎

搜索引擎是一种常用的快速检索与查询相关文档的工具,使用搜索引擎可以为语言模型提供更准确的上下文信息,帮助生成更准确的回答。

例如,一些AI厂商在其产品中提供了联网功能,调用搜索引擎进行关键字搜索。用户可以在其产品中输入查询,系统将自动在互联网上进行搜索,并将互联网上的相关结果用于生成回答,极大地丰富了回答的准确性和深度。

下图来自Kimi的网页:

Kimi联网

另外,许多企业级应用也采用搜索引擎(如Elasticsearch)来完成站内的检索任务。Elasticsearch是一个基于Lucene的搜索引擎,通过分布式、RESTful风格的搜索和分析引擎,能够即时地存储、搜索和分析大量数据。

然而,关键字搜索的局限性在于它只能快速检索到与用户查询的相同关键字的文档,而无法处理语义相近但关键字不同的情况。

1.2 检索(Retrieve)之文本嵌入(embedding)技术

为了解决语义识别的问题,文本嵌入(embedding)技术应运而生。

在自然语言处理(NLP)中,文本嵌入技术能够将文本字符串转化为高维空间的向量表示,从而衡量不同文本之间的相似性和相关性。这些向量捕捉了文本的含义,并且可以用于进行比较、搜索和聚类等自然语言处理任务。

embedding模型

以OpenAI为例。OpenAI目前最新的embedding模型为其3代,即text-embedding-3-small和text-embedding-3-large。 默认情况下,对于text-embedding-3-small模型,嵌入向量的维度将是1536;对于text-embedding-3-large模型,维度将是3072。用户可以根据需要通过传递dimensions参数来调整嵌入的维度,以在速度和准确率之间取得平衡。

下图来自OpenAI网站,为embedding接口的返回结果:
在这里插入图片描述

向量数据库

随着AI的发展,处理向量数据的向量数据库变得越来越重要。这些数据库专门设计用于存储、管理和检索向量形式的数据。

使用向量数据库的过程包括分割文档,计算文本段落的embedding,存储原始数据和对应的embedding,并利用用户提出的查询进行相似性搜索。

2. 增强(Augment)

现在我们将检索到的上下文信息与用户原始查询结合,形成一个新的增强提示(prompt),这个提示将用于引导语言模型生成回答。

prompt_template = """
你是一个问答机器人。
你的任务是根据下述给定的已知信息回答用户问题。

已知信息:
{context}

用户问:
{query}

如果已知信息不包含用户问题的答案,或者已知信息不足以回答用户的问题,请直接回复"我无法回答您的问题"。
请不要输出已知信息中不包含的信息或答案。
请用中文回答用户问题。
"""

3. 生成(Generate)

最后,将增强后的提示输入到大型语言模型中,生成最终的回答。

后续

在接下来的文章中,我将使用LlamaIndex技术来实现RAG,进一步探讨RAG在实际应用中的实现。

参考

OpenAI embeddings
OpenAI cookbook - Get embeddings from dataset
OpenAI cookbook - Vector databases

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

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

相关文章

教育机构必备利器:全面解析教培管理系统的关键功能

一个优秀的教培管理系统是培训机构实现高效运营和学员满意度的关键所在。那么,这样的系统应该具备哪些功能呢?今天,我们就来了解一下乔拓云平台开发的教育系统,看看它如何满足这些需求。 乔拓云教育系统的后端功能丰富多样&#x…

百度文库公测智能漫画和智能话本,有兴趣的可以申请一下

百度文库上线智能文库和智能话本功能,目前处于公测中,我刚申请,还在审核中。 智能漫画,参照官网的示例截图,生成的图片看起来不错,没试用过所以不太清楚他的操作模式是什么 智能话本,生成的话…

网站建设企业网站优化

近年来,随着互联网的迅速发展,企业网站已经成为了企业展示自我形象与实力的重要载体之一。然而,单单拥有一个美观、简洁的企业网站并不能让企业在竞争激烈的市场中脱颖而出。因此,在建设企业网站的过程中,我们需要将企…

上位机图像处理和嵌入式模块部署(树莓派4b开机界面程序自启动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们学习了如何在树莓派4b上面开发qt,也学习了如何用/etc/rc.local启动控制台程序,那今天我们继续学习一下如何利用树莓…

渗透测试流程(一)

文章目录 1、信息收集渗透测试的流程信息收集的内容信息收集的分类Google hacking 信息收集目录扫描信息收集旁站和C段信息收集旁站和C段在线查询地址: 存活资产探测nmap扫描nmap扫描扫描指定的IP开放端口:穿透防火墙扫描:常用命令--2漏洞扫描…

如何用OceanBase的 Load Data 导入CSV文件

0 前言 CSV文件(Comma-Separated Values,字符分隔值)是一种普遍采用的数据存储格式,有不少企业和机构都用它来进行数据的管理和存储。身为开发者,您可能经常遇到这样的需求:需要将CSV的数据导入OceanBase数…

python基础知识(17)面向对象 1

一、面向对象的概念 1、面向对象的两个基本概念 编程语言中,一般有两种编程思维,面向过程和面向对象。 面向过程,看重的是解决问题的过程。 这好比我们解决日常生活问题差不多,分析解决问题的步骤,然后一步一步的解决…

知乎热议:未来几年,AI技术在科研领域将有哪些新的发展趋势或突破?

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 一年多以来,各种国内外的AI模型和应用应接不暇,从刚开始ChatGPT一家独大,到现在的百花齐放,各种AI模型各有千秋,一时…

CVE-2023-48795修复方法

CVE-2023-48795修复方法 1、修复原理2、检测漏洞3、修复漏洞4、成功修复 近期nessus扫描经常出现一个中危漏洞CVE-2023-48795,但网上的修复方法清一色的将openSSH升级到9.6p1版本 而我在升级当中处处碰壁,甚至于差点给服务器都干崩溃,特意研究…

Coursera: An Introduction to American Law 学习笔记 Week 01: Tort Law

An Introduction to American Law 本文是 https://www.coursera.org/programs/career-training-for-nevadans-k7yhc/learn/american-law 这门课的学习笔记。 文章目录 An Introduction to American LawInstructors SyllabusWeek 01: Tort LawKey Tort Law TermsTort Law: Part …

AI写作软件:一键生成原创文案,效率就是高

对于文案创作人员来说,常期的创作都会出现灵感枯竭现象,从而导致文案创作人员写不出文案的问题,那么如何解决文案写不出来的问题呢?别急,本文会给大家分享出好的解决方法!大家要知道,随着人工智…

uniapp微信小程序开发踩坑日记:Vue3 + uniapp项目引入Echarts图表库

一、下载插件包 下载地址如下: lime-echart: 百度图表 echarts,uniapp、taro 使用 echarts 图表,全面兼容各平台小程序、H5、APP、Nvue 将以下两个文件夹放到项目的components里 同样地,将静态资源文件夹下内容放到自己项目的s…

c++高级篇(三) ——Linux下IO多路复用之poll模型

poll模型 前言 poll模型与select的实现原理相近,所以绝大数的原理其实可以参考select,我们这里对二者的相同点不做过多探究,如果有需要可以去看一下博主的上一篇文章: c高级篇(二) ——Linux下IO多路复用之select模型 这里我们只…

全志ARM-蜂鸣器

sh操作准备: 1.使Tab键的缩进和批量对齐为4格 在/etc/vim/vimrc 中添加一项配置 set tabstop 4; 也可以再加一行 set nu显示代码的行数 vim的设置,修改/etc/vim/vimrc文件,需要用超级用户权限 /etc/vim/vimrc set shiftwidth4 设置批量…

OpenTiny开源之夏编程达人集结令:4月30日正式上线,寻找最强代码战士!

五一来袭,OpenTiny 开源之夏编程项目正式上线! 已梦为马,不负韶华 聚焦前端,OpenTiny 喊你来参加编程活动了 10个赛题任你选! 我们诚挚邀请你参与本次 OpenTiny 开源之夏编程活动, 用你的智慧和才能&a…

[移动通讯]【无线感知-P1】[从菲涅尔区模型到CSI模型-5]【The Riemann Mapping Theorem】

前言: mobius变换保角性证明一直困扰我很久.当看完黎曼映射定理以及结合MIT的数学证明 深刻的感触到数学之美,“知之深,情之切”。 黎曼映射(The Riemann Mapping)定理是复分析最深刻的定理之一,也是复变函…

帮助文档更新了

原先的帮助文档比较简单,大家可能对大部分功能都比较陌生, 最近对帮助文档进行了一轮改版,整个帮助文档更加详细了,对新用户更加友好,这里给大家介绍一下最新的帮助中心 大家进入官网(zyjj.cc)的…

【再探】设计模式— 工厂方法、单例及原型模式

创建型设计模式是处理对象创建的设计模式,主要特点是“将对象的创建与业务代码分离”。一共有五种:工厂方法模式、单例模式、原型模式、抽象工厂模式及建造者模式。 1 单例模式 需求: 在整个系统中只需要一个实例。管理共享资源&#xff0…

看见游戏出海赛道的新机会

目前游戏出海的主要地区和国家都已经非常成熟,原有的发行方式方法也基本标配化,除了产品玩法的差异化,多元化渠道及获量新方式是提升竞争力的有效手段 4月24日,在深圳南山区,VERYCLOUD睿鸿股份与罗斯基、热力引擎共同主…

基于Spring Boot的外卖点餐系统设计与实现

基于Spring Boot的外卖点餐系统设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 网站首页界面图,通过进入网站可以查看首页、…