使用 Aryn DocPrep、DocParse 和 Elasticsearch 向量数据库实现高质量 RAG
作者:来自 Elastic Hemant Malik 及 Jonathan Fritz
组织依靠自然语言查询从非结构化数据中获取见解,但要获得高质量的答案,首先要进行有效的数据准备。Aryn DocParse 和 DocPrep通过将复杂文档转换为结构化 JSON 或 markdown 来简化此过程,为混合搜索和检索增强生成 (RAG) 应用程序提供高达 6 倍的数据分块和 2 倍的召回率。这些工具由开源 Aryn Partitioner 和在 80K+ 企业文档上训练的有效深度学习 DETR AI 模型提供支持,与现成的解决方案相比,它们可确保更高的准确性和相关性。
在本博客中,我们将演示如何使用 DocParse 和 DocPrep 为 RAG 应用程序准备和加载复杂 PDF 数据集到 Elasticsearch 中。我们将使用美国国家运输安全委员会 (NTSB) 提供的约 75 份有关飞机事故的 PDF 报告。此处提供了该集合中的一个示例文档。
什么是 Aryn DocParse 和 DocPrep
Aryn DocParse 可对文档进行分段和标记,提取表格和图像,并进行 OCR 操作,将 30 多种文档类型转换为结构化 JSON。它运行开源 Aryn Partitioner 及其 开源深度学习 DETR AI 模型,该模型已在 80,000 多份企业文档上进行训练。与现成的系统相比, 这可使数据分块准确率提高 6 倍,混合搜索或 RAG 的召回率提高 2 倍。
Aryn DocPrep 是一种用于创建文档 ETL 管道的工具,用于准备这些数据并将其加载到向量数据库和混合搜索索引(如 Elasticsearch)中。管道的第一步是使用 DocParse 处理每个文档。DocPrep 使用 Sycamore(一个开源、可扩展、由 LLM 提供支持的文档 ETL 库)创建 Python 代码。尽管 DocPrep 可以轻松使用 Sycamore 代码创建 ETL 管道,但你可能需要使用其他 Sycamore 数据转换、分块/合并、提取和清理功能来自定义管道。
可以看出,这些文档很复杂,包含表格、图像、章节标题和复杂的布局。让我们开始吧!
构建高质量 RAG 应用
启动 Elasticsearch 向量数据库容器
我们将使用 Docker 容器在本地安装 Elasticsearch,用于演示 RAG 应用程序。请按照以下说明进行部署。
使用 Aryn DocPrep 和 DocParse 对数据进行分块并加载 Elasticsearch
Aryn DocPrep 是一款用于创建文档 ETL 管道的工具,该管道用于准备数据并将其加载到向量数据库和混合搜索索引(如 Elasticsearch)中。管道的第一步是使用 DocParse 处理每个文档。
我们将使用 Aryn Cloud 中的 Aryn DocParse 来生成我们的初始 ETL 管道代码。你可以免费注册使用 Aryn Cloud 并转到 Aryn Cloud 控制台中的 DocPrep UI。
你还可以编写 ETL 管道并在本地运行 Aryn Partitioner 的一个版本(用于 DocParse)。访问 Sycamore 文档以了解更多信息。
使用 DocPrep 创建 ETL 管道
DocPrep 使用 Sycamore(一个开源、可扩展、由 LLM 提供支持的文档 ETL 库)创建 Python 代码。虽然 DocPrep 可以使用 Sycamore 代码轻松创建 ETL 管道,但你可能需要使用其他 Sycamore 数据转换、提取和清理功能进一步自定义管道。
DocPrep 简化了基本 ETL 管道的创建,以便为 RAG 和语义搜索准备非结构化数据。
首先,我们在 Amazon S3 中提供文档类型 (PDF) 和 PDF 的源位置 (s3://aryn-public/ntsb/):

接下来,我们将选择 MiniLM 作为我们的嵌入模型,以在本地创建向量嵌入。DocPrep 使用 DocParse 进行文档分割、提取和其他处理,但我们不需要更改默认配置。

最后,我们选择 Elasticsearch 作为目标数据库,并添加主机 URL 和索引名称。
请注意,URL 设置为 “localhost”,因为我们在本地运行 Elasticsearch。我们还将在本地运行 DocPrep/Sycamore ETL 管道,以便它可以轻松加载集群。

现在,单击 “Generate pipeline” 以创建 ETL 管道。单击下一页上的 “Download notebook” 以将代码下载为 Jupyter 笔记本文件。
安装 Jupyter 和 Sycamore
我们将在 Jupyter 笔记本中本地运行 ETL 管道并使用 Sycamore 文档 ETL 库。首先,使用 Elasticsearch 连接器和本地推理库安装 Jupyter 和 Sycamore 以创建向量嵌入。
pip install jupyter
pip install 'sycamore-ai[elasticsearch,local-inference]'
运行 pipeline
Jupyter 并打开包含前面步骤中下载的 ETL 管道的笔记本。
如果你尚未将 Aryn Cloud API 密钥设置为名为 ARYN_API_KEY 的环境变量,则可以直接在笔记本中设置它。
在倒数第二个单元格中,更新 Elasticsearch 加载配置。将设置 Elasticsearch 密码的 es_client_args 替换为容器中的 Elasticsearch 基本身份验证配置:
es_client_args={"basic_auth": (“<YOUR-USERNAME>”, os.getenv("ELASTIC_PASSWORD"))}
如果密码未设置为环境变量,你可以直接在此处添加。
现在,运行笔记本中的单元格。大约 75 个 PDF 中的每一个都被发送到 DocParse 进行处理,管道中的这一步将需要几分钟。其中一个单元格将输出带有边界框的三页文档,以显示 DocParse 如何分段数据。
最后一个单元格运行读取查询以验证数据是否已正确加载。现在,你可以将 Elasticsearch 索引中准备好的数据与你的 RAG 应用程序一起使用。
添加额外的数据丰富和转换。
DocPrep 中生成的代码非常适合基本的 ETL 管道,但是,你可能希望提取元数据并执行数据清理。管道代码是完全可定制的,你可以在 Sycamore 或任意 Python 代码中使用额外的转换。
这是一个示例笔记本,其中包含额外的数据转换、元数据提取和数据清理步骤。你可以在 RAG 应用程序中使用此元数据来过滤结果。
结论
本博客使用 Aryn DocParse、DocPrep 和 Sycamore 解析、提取、丰富、清理、嵌入和加载数据到 Elasticsearch 矢量数据库中的矢量和关键字索引中。我们使用 DocPrep 创建初始 ETL 管道,然后使用带有额外 Sycamore 代码的笔记本来演示额外的数据丰富和清理。
你的文档的解析、丰富和处理方式会显著影响你的 RAG 查询的质量。使用本博客文章中的示例,你可以快速轻松地使用 Aryn 和 Elasticsearch 构建自己的 RAG 系统,并在构建 GenAI 应用程序时迭代处理和检索策略。
以下是一些后续步骤的资源:
- 使用 Aryn DataPrep 和 Elasticsearch 的示例笔记本
- 使用 Elasticsearch 向量数据库启动本地
- 开始使用 Aryn Cloud DocPrep
- Sycamore 文档
- Elasticsearch 向量数据库生态系统集成
Elasticsearch 包含许多新功能,可帮助你为你的用例构建最佳搜索解决方案。深入了解我们的示例笔记本以了解更多信息,开始免费云试用,或立即在你的本地机器上试用 Elastic。
High Quality RAG with Aryn DocPrep, DocParse and Elasticsearch vector database - Elasticsearch Labs原文:
相关文章:

使用 Aryn DocPrep、DocParse 和 Elasticsearch 向量数据库实现高质量 RAG
作者:来自 Elastic Hemant Malik 及 Jonathan Fritz 组织依靠自然语言查询从非结构化数据中获取见解,但要获得高质量的答案,首先要进行有效的数据准备。Aryn DocParse 和 DocPrep通过将复杂文档转换为结构化 JSON 或 markdown 来简化此过程&a…...

Couchbase UI: Server
在 Couchbase UI 中的 Server(服务器)标签页主要用于管理和监控集群中的各个节点。以下是 Server 标签页的主要内容和功能介绍: 1. 节点列表 显示集群中所有节点的列表,每个节点的详细信息包括: 节点地址࿱…...

Web3.0时代的挑战与机遇:以开源2+1链动模式AI智能名片S2B2C商城小程序为例的深度探讨
摘要:Web3.0作为互联网的下一代形态,承载着去中心化、开放性和安全性的重要愿景。然而,其高门槛、用户体验差等问题阻碍了Web3.0的主流化进程。本文旨在深入探讨Web3.0面临的挑战,并提出利用开源21链动模式、AI智能名片及S2B2C商城…...

langchain基础(一)
模型又可分为语言模型(擅长文本补全,输入和输出都是字符串)和聊天模型(擅长对话,输入时消息列表,输出是一个消息)两大类。 以调用openai的聊天模型为例,先安装langchain_openai库 1…...

【Android】布局文件layout.xml文件使用控件属性android:layout_weight使布局较为美观,以RadioButton为例
目录 说明举例 说明 简单来说,android:layout_weight为当前控件按比例分配剩余空间。且单个控件该属性的具体数值不重要,而是多个控件的属性值之比发挥作用,例如有2个控件,各自的android:layout_weight的值设为0.5和0.5࿰…...

RabbitMQ 架构分析
文章目录 前言一、RabbitMQ架构分析1、Broker2、Vhost3、Producer4、Messages5、Connections6、Channel7、Exchange7、Queue8、Consumer 二、消息路由机制1、Direct Exchange2、Topic Exchange3、Fanout Exchange4、Headers Exchange5、notice5.1、备用交换机(Alter…...
Qt Enter和HoverEnter事件
介绍 做PC开发的过程中或多或少都会接触到鼠标的悬停事件,Qt中处理鼠标悬停有Enter和HoverEnter两种事件 相同点 QEvent::Enter对应QEnterEvent,描述的是鼠标进入控件坐标范围之内的行为,QEnterEvent可以抓取鼠标的位置;QEvent…...

大语言模型之prompt工程
前言 随着人工智能的快速发展,我们正慢慢进入AIGC的新时代,其中对自然语言的处理成为了智能化的关键一环,在这个大背景下,“Prompt工程”由此产生,并且正逐渐成为有力的工具... LLM (Large Language Mode…...

WPF基础 | WPF 常用控件实战:Button、TextBox 等的基础应用
WPF基础 | WPF 常用控件实战:Button、TextBox 等的基础应用 一、前言二、Button 控件基础2.1 Button 的基本定义与显示2.2 按钮样式设置2.3 按钮大小与布局 三、Button 的交互功能3.1 点击事件处理3.2 鼠标悬停与离开效果3.3 按钮禁用与启用 四、TextBox 控件基础4.…...

[笔记] 极狐GitLab实例 : 手动备份步骤总结
官方备份文档 : 备份和恢复极狐GitLab 一. 要求 为了能够进行备份和恢复,请确保您系统已安装 Rsync。 如果您安装了极狐GitLab: 如果您使用 Omnibus 软件包,则无需额外操作。如果您使用源代码安装,您需要确定是否安装了 rsync。…...
随笔十七、eth0单网卡绑定双ip的问题
在调试语音对讲过程中遇到过一个“奇怪”问题:泰山派作为一端,可以收到对方发来的语音,而对方不能收到泰山派发出的语音。 用wireshark抓包UDP发现,泰山派发送的地址是192.168.1.30,而给泰山派实际设置的静态地址是19…...

逻辑复制parallel并发参数测试
逻辑复制parallel并发参数测试 一、测试结果、测试环境描述 1.1、测试结果 cpu表中有1000万条数据,大小为1652MB,当更新的数据量多于10万条的时候有明显变化,多余30万条的时候相差2倍。 更新的数据量较多时,逻辑复制使用并发参数相比于使用…...

Cursor 帮你写一个小程序
Cursor注册地址 首先下载客户端 点击链接下载 1 打开微信开发者工具创建一个小程序项目 选择TS-基础模版 官方 2 然后使用Cursor打开小程序创建的项目 3 在CHAT聊天框输入自己的需求 比如 小程序功能描述:吃什么助手 项目名称: 吃什么小程序 功能目标…...

WordPress免费证书插件
为了在您的网站上启用HTTPS,您可以使用本插件快速获取Let’s Encrypt免费证书。 主要功能: 支持快速申请Let’s Encrypt免费证书支持通配符证书申请,每个证书最多可以绑定100个域名支持自动续期证书支持重颁发证书,证书过期或失…...

Linux:多线程[2] 线程控制
了解: Linux底层提供创建轻量级进程/进程的接口clone,通过选择是否共享资源创建。 vfork和fork都调用的clone进行实现,vfork和父进程共享地址空间-轻量级进程。 库函数pthread_create调用的也是底层的clone。 POSIX线程库 与线程有关的函数构…...

C++——list的了解和使用
目录 引言 forward_list与list 标准库中的list 一、list的常用接口 1.list的迭代器 2.list的初始化 3.list的容量操作 4.list的访问操作 5.list的修改操作 6.list的其他操作 二、list与vector的对比 结束语 引言 本篇博客要介绍的是STL中的list。 求点赞收藏评论…...

Agent群舞,在亚马逊云科技搭建数字营销多代理(Multi-Agent)(下篇)
在本系列的上篇中,小李哥为大家介绍了如何在亚马逊云科技上给社交数字营销场景创建AI代理的方案,用于社交动态的生成和对文章进行推广曝光。在本篇中小李哥将继续本系列的介绍,为大家介绍如何创建主代理,将多个子代理挂载到主代理…...

DBeaver连接MySQL数据库
打开DBeaver,点击“新建数据库连接”选项。 点击“测试连接”,首次连接mysql会提示下载对应的JDBC驱动,点击下载即可。 填写服务器地址(这里是本地测试)、mysql的用户名(root)和密码ÿ…...
Leetcode40: 组合总和 II
题目描述: 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 代码思路ÿ…...

win32汇编环境,对话框程序中使用进度条控件
;运行效果 ;win32汇编环境,对话框程序中使用进度条控件 ;进度条控件主要涉及的是长度单位,每步步长,推进的时间。 ;比如你的长度是1000,步长是100,每秒走1次,则10秒走完全程 ;比如你的长度是1000,步长是10,每秒走1次,则100秒走完全程,但每格格子的长度与上面一样 ;以下…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...