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

ops/2025/2/11 17:11:05/

前言

大型语言模型(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.ppmy.cn/ops/30356.html

相关文章

php7文件加密方法

文件加密 php5php7的加密方法 tp3,使用php5, 使用的加密工具是 zend guard 操作流程:在window下加密源码,FTP上传到linux服务器,根据已经装好的Zend guard 扩展自动解析加密后的文件。 加密步骤: 3.1:win…

【matplot】【matlab】绘制简洁美观二维坐标系的一个例子

觉得下图不错美观大方,现仿制下图: import numpy as np import matplotlib.pyplot as pltdef sigmoid(x):return 1 / (1 np.exp(-x))def sigmoid_derivative(x):return sigmoid(x) * (1 - sigmoid(x))# 设置中文字体 plt.rcParams[font.family] [Tim…

基本排序算法

Java 中有多种排序算法,包括冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序等。这些算法在复杂度、稳定性和适用性上有所不同。以下是一些基本排序算法的 Java 实现: 1、冒泡排序 (Bubble Sort) 冒泡排序是一种简单的排序算法&#xff0…

【深度学习】第二门课 改善深层神经网络 Week 1 深度学习的实践层面

🚀Write In Front🚀 📝个人主页:令夏二十三 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:深度学习 💬总结:希望你看完之后,能对…

cmd查看局域网内所有设备ip

说明:最近碰到一个新问题,就是有一个安卓设备,安装了一个app导致死机了,app设置了开机重启,所以,无论重启还是关机,都是进来就白屏, 这可把人愁坏了,直接死循环了 无论…

深度学习之基于多模态融合的商品分类方法研究与实现

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 项目简介:深度学习之基于多模态融合的商品分类方法研究与实现 一、项目背景与目标 随着电子商务的快速…

docker 基础命令

docker 安装 更新系统 sudo apt update sudo apt -y dist-upgrade安装docker sudo apt-get -y install ca-certificates curl gnupg lsb-release sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/…

使用yumdownloader或repotrack等工具在有网络的环境中下载所需的RPM包及其依赖项,然后将其复制到离线环境中进行安装

使用yumdownloader或repotrack等工具在有网络的环境中下载所需的RPM包及其依赖项,然后将其复制到离线环境中进行安装是一个很好的方法。以下是详细的步骤: 使用yumdownloader 安装yumdownloader: 如果系统中没有安装yumdownloader&#xff…