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

前言

大型语言模型(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.rhkb.cn/news/316167.html

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

相关文章

leetcode 221 最大正方形面积

示例 3: 输入:matrix [["0"]] 输出:0 # 最大正方形面积 def max_square(matrix):m len(matrix)n len(matrix[0])if m 0 or n 0::return Nonemax_side 1dp [[0] * (n 1) for _ in range(m 1)]for i in range(1, m 1):fo…

Linux进程——进程的概念(PCB的理解)

前言:在了解完冯诺依曼体系结构和操作系统之后,我们进入了Linux的下一篇章Linux进程,但在学习Linux进程之前,一定要阅读理解上一篇内容,理解“先描述,再组织”才能更好的理解进程的含义。 Linux进程学习基…

Unity 数字字符串逗号千分位

使用InputField时处理输入的数字型字符串千分位自动添加逗号,且自动保留两位有效数字 输入:123 输出:123.00 输入:12345 输出:12,345.00 代码非常简单 using UnityEngine; using TMPro;public class …

Elcomsoft iOS Forensics Toolkit: iPhone/iPad/iPod 设备取证工具包

天津鸿萌科贸发展有限公司是 ElcomSoft 系列取证软件的授权代理商。 Elcomsoft iOS Forensics Toolkit 软件工具包适用于取证工作,对 iPhone、iPad 和 iPod Touch 设备执行完整文件系统和逻辑数据采集。对设备文件系统制作镜像,提取设备机密&#xff08…

Linux网络-文件传输协议之FTP服务(附带命令及截图)

目录 一.FTP简介 二.FTP的数据模式 1.主动模式 2.被动模式 3.两种模式比较 三.安装配置vsftpd 1.安装vsftpd 1.1.安装前关闭防火墙 1.2.安装vsftpd 1.3.查看 1.4.备份 2.配置 3.重启后生效 四.相关实验 1.以win为例 1.1.设置并测试测试连通性 1.2.在终端里创建…

(mac)Prometheus监控之Node_exporter(CPU、内存、磁盘、网络等)

完整步骤 1.启动 Prometheus 普罗米修斯 prometheus --config.file/usr/local/etc/prometheus.yml 浏览器访问 http://localhost:9090/targets 2.启动Node_exporter node_exporter 访问:http://localhost:9100 3.启动grafana brew services start grafana 访问…

Pulsar【部署 02】Pulsar可视化工具Manager安装使用

Pulsar Manager 是一个基于 web 的 GUI 管理和监视工具,可帮助管理员和用户管理和监视租户、命名空间、主题、订阅、代理、集群等,并支持对多个环境进行动态配置。 可视化工具Manager安装使用 1.Docker1.1 拉取镜像并启动1.2 设置用户名密码1.3 登录并添…

基于SpringBoot+Vue高校实习管理系统的设计与实现

项目介绍: 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统高校实习管理系统信息管理难度大&#xf…

阿里开源黑白图片上色算法DDColor的部署与测试并将模型转onnx后用c++推理

阿里开源黑白图片上色算法DDColor的部署与测试并将模型转onnx后用c推理 文章目录 阿里开源黑白图片上色算法DDColor的部署与测试并将模型转onnx后用c推理简介环境部署下载源码安装环境下载模型 测试一下看看效果模型转onnx测试一下生成的onnx模型看看效果C 推理 简介 DDColor是…

Java集合框架-Collection-List-vector(遗留类)

目录 一、vector层次结构图二、概述三、底层数据结构四、常用方法五、和ArrayList的对比 一、vector层次结构图 二、概述 Vector类是单列集合List接口的一个实现类。与ArrayList类似,Vector也实现了一个可以动态修改的数组,两者最本质的区别在于——Vec…

Swish和H-Swish激活函数:提升模型训练效率

文章目录 Swish激活函数H-Swish激活函数实现总结参考 在深度学习领域,激活函数是神经网络中的关键组成部分,它决定了网络的输出和性能。近年来,研究人员提出了许多新的激活函数,其中Swish激活函数因其独特的性能优势而备受关注。这…

gateway全局token过滤器

添加gateway依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>创建一个tokenFilter 实现全局过滤器GlobalFilter,并且实现fitler方法 Value("${…

基于SpringBoot的合家云社区物业管理平台 - 项目介绍

合家云社区物业管理平台 2.合家云需求&设计 2.1 项目概述 2.1.1 项目介绍 合家云社区物业管理平台是一个全新的 ”智慧物业解决方案“&#xff0c;是一款互联网的专业社区物业管理系统。平台通过社区资产管理、小区管理、访客管理、在线报修、意见投诉等多种功能模块&a…

[iOS]组件化开发

一、组件化开发基础 1.组件定义 在软件开发中&#xff0c;一个组件是指一个独立的、可替换的软件单元&#xff0c;它封装了一组相关的功能。组件通过定义的接口与外界交互&#xff0c;并且这些接口隔离了组件内部的实现细节。在Swift语言中&#xff0c;组件可以是一个模块、一…

基于arcpro3.0.2版的使用深度学习检测对象之椰子树

基于arcpro3.0.2版的使用深度学习检测对象之椰子树 GPU显卡Nivda 1080 训练模型图 (四)检测对象之椰子树 使用深度学习检测对象 打开 detect objects using deep learning,参数 输入栅格为要检测的影像 模型定位为上一步输出的.emd文件 cpu模式Max Overlap Ratio0.4 运行时间…

百面算法工程师 | 分类和聚类

目录 6.1 为什么正确率有时不能有效评估分类算法&#xff1f; 6.2 什么样的分类器最好&#xff1f; 6.3 什么是聚类&#xff0c;你知道哪些聚类算法&#xff1f; 6.4 K-Means聚类算法如何调优? 6.5 K-Means聚类算法如何选择初始点? 6.6 K-Means聚类聚的是特征还是样本 …

服务器数据恢复—StorNext文件系统下raid5阵列数据恢复案例

服务器数据恢复环境&#xff1a; 昆腾某型号存储&#xff0c;8个存放数据的存储柜1个存放元数据的存储柜。 元数据存储&#xff1a;8组RAID1阵列1组RAID10阵列4个全局热备硬盘。 数据存储&#xff1a;32组RAID5阵列&#xff0c;划分2个存储系统。 服务器故障&#xff1a; 数据…

c++初阶——类和对象(中)

大家好&#xff0c;我是小锋&#xff0c;我们今天继续来学习类和对象。 类的6个默认成员函数 我们想一想如果一个类什么都没有那它就是一个空类&#xff0c;但是空类真的什么都没有吗&#xff1f; 其实并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以…

武汉星起航:跨境电商的领航者,全方位孵化助力中国卖家出海

在数字化浪潮的推动下&#xff0c;跨境电商行业蓬勃发展&#xff0c;成为国内外商家争相涌入的新蓝海。武汉星起航电子商务有限公司&#xff0c;作为自营亚马逊跨境电商及卖家孵化服务的佼佼者&#xff0c;以其专业的团队、丰富的经验和卓越的服务品质&#xff0c;在行业中脱颖…

如何一个人,一边上班一边做抖音小店?23岁的他告诉你答案

大家好&#xff0c;我是电商笨笨熊 做抖音小店可以兼职去做吗&#xff1f; 可以。 一个不需要自备货源、自己进货发货也不需要自己直播带货的项目&#xff0c;抖音小店的各方面操作都相比其他传统电商来说更适合普通人做。 换句话说&#xff0c;只要掌握对方法&#xff0c;…