当前位置: 首页 > news >正文

使用 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 管道,以便它可以轻松加载集群。

配置 Elasticsearch 连接器

现在,单击 “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

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

Couchbase UI: Server

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

Web3.0时代的挑战与机遇:以开源2+1链动模式AI智能名片S2B2C商城小程序为例的深度探讨

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

langchain基础(一)

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

【Android】布局文件layout.xml文件使用控件属性android:layout_weight使布局较为美观,以RadioButton为例

目录 说明举例 说明 简单来说&#xff0c;android:layout_weight为当前控件按比例分配剩余空间。且单个控件该属性的具体数值不重要&#xff0c;而是多个控件的属性值之比发挥作用&#xff0c;例如有2个控件&#xff0c;各自的android:layout_weight的值设为0.5和0.5&#xff0…...

RabbitMQ 架构分析

文章目录 前言一、RabbitMQ架构分析1、Broker2、Vhost3、Producer4、Messages5、Connections6、Channel7、Exchange7、Queue8、Consumer 二、消息路由机制1、Direct Exchange2、Topic Exchange3、Fanout Exchange4、Headers Exchange5、notice5.1、备用交换机&#xff08;Alter…...

Qt Enter和HoverEnter事件

介绍 做PC开发的过程中或多或少都会接触到鼠标的悬停事件&#xff0c;Qt中处理鼠标悬停有Enter和HoverEnter两种事件 相同点 QEvent::Enter对应QEnterEvent&#xff0c;描述的是鼠标进入控件坐标范围之内的行为&#xff0c;QEnterEvent可以抓取鼠标的位置&#xff1b;QEvent…...

大语言模型之prompt工程

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

WPF基础 | WPF 常用控件实战:Button、TextBox 等的基础应用

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

[笔记] 极狐GitLab实例 : 手动备份步骤总结

官方备份文档 : 备份和恢复极狐GitLab 一. 要求 为了能够进行备份和恢复&#xff0c;请确保您系统已安装 Rsync。 如果您安装了极狐GitLab&#xff1a; 如果您使用 Omnibus 软件包&#xff0c;则无需额外操作。如果您使用源代码安装&#xff0c;您需要确定是否安装了 rsync。…...

随笔十七、eth0单网卡绑定双ip的问题

在调试语音对讲过程中遇到过一个“奇怪”问题&#xff1a;泰山派作为一端&#xff0c;可以收到对方发来的语音&#xff0c;而对方不能收到泰山派发出的语音。 用wireshark抓包UDP发现&#xff0c;泰山派发送的地址是192.168.1.30&#xff0c;而给泰山派实际设置的静态地址是19…...

逻辑复制parallel并发参数测试

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

Cursor 帮你写一个小程序

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

WordPress免费证书插件

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

Linux:多线程[2] 线程控制

了解&#xff1a; Linux底层提供创建轻量级进程/进程的接口clone&#xff0c;通过选择是否共享资源创建。 vfork和fork都调用的clone进行实现&#xff0c;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)(下篇)

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

DBeaver连接MySQL数据库

打开DBeaver&#xff0c;点击“新建数据库连接”选项。 点击“测试连接”&#xff0c;首次连接mysql会提示下载对应的JDBC驱动&#xff0c;点击下载即可。 填写服务器地址&#xff08;这里是本地测试&#xff09;、mysql的用户名&#xff08;root&#xff09;和密码&#xff…...

Leetcode40: 组合总和 II

题目描述&#xff1a; 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含重复的组合。 代码思路&#xff…...

win32汇编环境,对话框程序中使用进度条控件

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

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...