Elasticsearch:RAG 和 grounding 的价值

作者:来自 Elastic Tomás Murúa

了解 RAG、grounding,以及如何通过将 LLM 连接到你的文档来减少幻觉。

更多阅读:Elasticsearch:在 Elastic 中玩转 DeepSeek R1 来实现 RAG 应用

想获得 Elastic 认证吗?查看下一期 Elasticsearch Engineer 培训的时间!

Elasticsearch 拥有大量新功能,帮助你为你的使用场景构建最佳搜索方案。深入学习我们的示例 notebook,了解更多信息,开始免费的 cloud 试用,或者现在就在你的本地机器上尝试 Elastic 吧。


大型语言模型(LLM)能够生成连贯的回答,但当你需要真实且更新的信息时,它们可能会产生幻觉(编造数据)并给出不可靠的答案。为防止这种情况,我们使用 grounding 来为模型提供专门的、针对特定使用场景的、相关的上下文信息,超越 LLM 的训练内容。

Grounding 是将特定数据源连接到模型的过程,用于将其 “接地” 到真实内容,而不是仅依赖模型训练时学到的模式,从而提供更可靠和更准确的答案。

Grounding 有助于减少模型幻觉,根据你的数据源生成响应,并通过提供引用让你能够审查回答内容。

检索增强生成( Retrieval Augmented Generation - RAG )是一种 grounding 技术,它使用搜索算法从外部来源检索相关信息,然后将这些信息作为上下文提供给 LLM,最后模型结合增强后的上下文和其原始训练数据生成答案。

RAG 的工作流程图如下:

RAG 让你可以通过更新或扩展模型可访问的外部数据源来轻松扩展系统。同时,它也是一种相较于微调 LLMs 更具性价比的替代方案,因为你只需添加数据,无需大量定制。

而且由于 RAG 可以访问并使用最新信息,它非常适合那些对最新信息要求较高的使用场景。

幻觉示例

在这个例子中,我们将使用 DeepSeek 并提问:“Who is the author who won the Chilean National Literature Prize in 1932?” 这是一个有陷阱的问题,因为这个奖项是在 1942 年才设立的。让我们看看模型是如何回答的:

如你所见,由于 AI 没有完整的信息,它产生了幻觉并给出了一个编造的答案。尽管作者和作品是真实存在的,但回答中的其他部分是错误的。

现在,我们来看看当我们使用 RAG 进行 grounding 后,模型的表现如何。为此,我们将上传关于智利国家文学奖的 Wikipedia 页面:

现在,让我们再次提出同样的问题并检查答案:

如你所见,使用 RAG 后我们得到了正确的答案。它指出 1932 年没有颁发该奖项,并请求用户进一步澄清问题。

在 Playground 中使用 RAG

通过使用 Elasticsearch,你可以轻松扩展,唯一的限制是集群容量。你可以使用不同的数据源和连接器(connectors)来获取所需数据。此外,你完全拥有你的数据,因为它保留在你的基础设施中,不会上传到第三方服务;如果你运行本地 LLM,你的数据甚至不会离开你的网络。最后,你可以通过设计查询和基于访问控制( RBAC )的过滤方式来控制搜索过程。

我们将使用 Playground,这是我们的低代码平台,它可以让你快速简单地使用 Elasticsearch 内容创建 RAG 应用。

以下是一个逐步指南,教你如何将 PDF 或其他文档上传到 Playground。你也可以在这里查看更多信息,并在这里试用 Playground。

上传 PDF

我们将把与 DeepSeek 提供的相同 PDF 文件索引到 Kibana 中。如果你按照上面文章中的步骤操作并创建了 semantic_text 字段,你将创建一个带有相应嵌入的向量数据库,准备好供使用。

提问

提问以下问题:

“Who is the author who won the Chilean National Literature Prize in 1932?”

Playground 将此查询发送到 Elasticsearch,Elasticsearch 运行语义搜索并定位与问题相关的信息片段。然后,这些片段作为上下文被包含在发送给 LLM 的提示中,以便将答案与我们提供的信息源进行 grounding。

最后,Playground 生成的答案说明 1932 年没有颁发奖项,并提供相关片段的引用作为证据。

Playground 还提供了两个非常有用的功能,以帮助理解 RAG 系统的底层组件:

查询

你可以查看 Elasticsearch 正在运行的查询,以检索相关文档,并根据需要启用/禁用字段。

查看代码

如果你可以部署你的 RAG 应用,Playground 为你提供支持。在 "View Code" 标签下,你可以查看用于创建整个 RAG 工作流的底层代码。你可以选择两种 Python 方案:使用 Elasticsearch 客户端与 OpenAI,或基于 Langchain 的实现。

如果你想定制体验并将代码部署到其他地方,你可以使用这个代码片段作为起点。

结论

Grounding 是一个将 LLM 连接到外部数据源的过程,使它们能够超越训练内容,提供更准确和可信的答案。检索增强生成(RAG)是一种 grounding 方法,它具有可扩展性、性价比高,并确保可以访问最新的信息。

像 Playground 这样的工具通过启用大规模索引、定制搜索和带有引用的响应,简化了 RAG 的实施,这使你能够轻松验证答案并确保获得准确和可信的结果。

如果你想关于 RAG 特性的深入文章,可以从这篇开始,获得 RAG 的更技术性定义。你还可以查看《Rag vs. fine-tuning: When RAG is the best decision》,《How to leverage document security using RAG》以及《RAG systems in production》。

原文:RAG and the value of grounding - Elasticsearch Labs

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

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

相关文章

【黑马JavaWeb+AI知识梳理】后端Web基础01 - Maven

Maven Maven核心 Maven概述 定义: Maven是一款用于管理和构建Java项目的工具,是apache旗下的一个开源项目,基于项目对象模型(POM,project object model)的概念,通过一小段描述信息来管理项目的…

C语言易混淆知识点详解

C语言中容易混淆的知识点详解 C语言作为一门基础且强大的编程语言,有许多容易混淆的概念和特性。以下是C语言中一些常见易混淆知识点的详细解析: 1. 指针与数组 相似点: c 复制 下载 int arr[10]; int *ptr arr; 都可以使用[]运算符访…

MCP原理详解及实战案例(动嘴出UI稿、3D建模)

文章目录 MCP 原理介绍架构核心组件协议层传输层连接生命周期MCP与function calling: 互补关系 MCP python SDKMCP的优点 怎么用MCP:天气服务参考应用项目: REF 24年11月份,claude推出了模型上下文协议( MCP),作为一种潜在的解决方案&#xf…

2025年深圳杯数学建模(东三省)B题【颜色转换】原论文讲解(含完整python代码)

大家好呀,从发布赛题一直到现在,总算完成了2025年深圳杯数学建模(东三省)B题【颜色转换】完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成…

cpp学习笔记1--class

2年前学过cpp,但是一直没有用到,现在要读研了,终于要用到了,重新拿出来看一看,觉得很多东西都能在c和python上看到影子。 #include "iostream" class Person { private:std::string name;int age;public://…

基于YOLOv的目标检测训练数据构建方法研究—图像采集、标注、划分与增强一体化流程设计

在目标检测任务中,高质量的训练数据是模型性能提升的关键。本文围绕 YOLOv 系列模型,系统性地研究了目标检测训练数据的构建方法,提出了一套从图像采集、标注、数据集划分到数据增强的一体化流程设计 。通过多源图像采集策略确保样本多样性,结合 LabelImg 工具完成 VOC 格式…

SQL数据库操作大全:从基础到高级查询技巧

大家好,欢迎来到程序视点!我是你们的老朋友.小二! SQL数据库操作核心语法精要 数据库基础操作 创建/删除数据库:CREATE DATABASE / DROP DATABASE 备份SQL Server:使用sp_addumpdevice和BACKUP DATABASE命令 数据库…

[2025]MySQL的事务机制是什么样的?redolog,undolog、binog三种日志的区别?二阶段提交是什么?ACID怎么保证的?主从复制的过程?

MySQL事务机制与日志系统详解 一、MySQL事务机制 1. 事务特性(ACID) 特性实现机制原子性(Atomicity)undo log回滚,(事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行)。一致性(Consistency)约束…

LLama-v2 权重下载

地址:llama模型 官方github仓库:llama仓库 注意点 网络代理位置:美国下面的国家选择 United States 克隆仓库后 运行bash download.sh输入邮箱收到的URL选择要下载的权重等待下载完成即可 有问题留言!!&#xff01…

zephyr OS架构下构建Nordic MCU boot

目录 概述 1. 软硬件环境 1.1 软件开发环境 1.2 硬件环境 2 MCU boot 2.1 核心功能 2.2 关键术语 2.3 重要字段介绍 3 VS-Code下创建MCU-BOOT项目 3.1 软件框架结构 3.2 创建测试项目 3.3 编译项目 3.3 固件在Flash中的分布 4 验证 4.1 烧写固件 ​ 4.2 代码…

【Mytais系列】介绍、核心概念

MyBatis 是一款优秀的 持久层框架,它通过简化 JDBC 操作、提供灵活的 SQL 映射能力,成为 Java 开发中处理数据库交互的核心工具之一。以下是 MyBatis 的核心框架和概念解析: 一、MyBatis 框架概述 1. 核心定位 作用:将 Java 对象…

IO模型和多路复用

一、IO模型的基础理解 什么是IO? IO全称是 Input/Output(输入/输出),在计算机科学里主要指程序与外部设备(硬盘、网络、用户终端等)进行数据交换的操作。首要特点是: IO通常很慢(从CPU和内存的视角看)经常需要等待外部设备响应1. 为什么要谈IO模型? 当一个程序需要…

深入理解 Bash 中的 $‘...‘ 字符串语法糖

在 Bash 脚本编程中,字符串处理是不可或缺的一部分。为了让开发者更高效地处理特殊字符和控制字符,Bash 引入了一种独特的字符串语法糖:$(带单引号的 ANSI-C 风格字符串)。这种语法来源于 C 语言的 ANSI-C 标准&#x…

用Python打造自己的专属命令行工具

在日常的开发和使用过程中,我们常常会编写一些实用的Python脚本,比如用来批量处理文件、获取系统信息等。然而,每次都要输入python script_name.py来运行脚本,时间一长难免觉得繁琐。要是能像使用系统自带的命令(如ls、…

【KWDB 创作者计划】KWDB 2.2.0多模融合架构与分布式时序引擎

KWDB介绍 KWDB数据库是由开放原子开源基金会孵化的分布式多模数据库,专为AIoT场景设计,支持时序数据、关系数据和非结构化数据的统一管理。其核心架构采用多模融合引擎,集成列式时序存储、行式关系存储及自适应查询优化器,实现跨模…

学习Linux的第二天

如何在Linux环境下做开发 Linux的一些基操 Tips:平常最表层的是命令行模式,最多见这个默认叫做命令行模式 Vi操作是什么意思呢 就是在提示符输入vi a.c 是可以创建一个a.c这个文件并进入这个输入模式 按i可以输入代码 要退出的时候按esc 再按:(冒号…

链表操作练习

要求 现在有一个双向链表&#xff0c;里面要保存歌曲的名字&#xff1b;例如 蔡琴/渡口.mp3 我们把它定义在一个link.h文件中。 #ifndef LINK_H #define LINK_H #include <stdlib.h> #include <stdio.h> #include <string.h>typedef struct Node {//保存歌…

MATLAB制作散点图:从基础到进阶的三种类型讲解

一、什么是散点图 散点图是一种用来展示两个或多个变量之间关系的图表形式。它可以帮助我们直观地观察变量之间是否存在相关性、趋势或异常值&#xff0c;常用于数据分析的初步探索阶段。 二、三种类型散点图 1. 基本二维散点图&#xff1a;最简单、最常用 基本二维散点图的…

模块方法模式(Module Method Pattern)

&#x1f9e0; 模块方法模式&#xff08;Module Method Pattern&#xff09; 模块方法模式是一种结构型设计模式&#xff0c;它将复杂的操作分解成一系列相对简单、独立且单一职责的模块。每个模块负责完成一种具体的操作&#xff0c;其他模块或系统可以通过调用这些模块的公开…

Python中的JSON库,详细介绍与代码示例

目录 1. 前言 2. json 库基本概念 3. json 的适应场景 4. json 库的基本用法 4.1 导 json入 模块 4.2 将 Python 对象转换为 JSON 字符串 4.3 将 JSON 字符串转换为 Python 对象 4.4 将 Python 对象写入 JSON 文件 4.5 从 JSON 文件读取数据 4.6 json 的其他方法 5.…