利用大模型实时提取和检索多模态数据探索-利用 Indexify 进行文档分析

概览

传统的文本提取方法常常无法理解非结构化内容,因此提取数据的数据往往是错误的。本文将探讨使用 Indexify,一个用于实时多模态数据提取的开源框架,来更好地分析pdf等非结构化文件。我将介绍如何设置 Indexify,包括服务器设置、提取graph创建、文档导入和数据查询,以及如何创建自定义提取器。通过 Indexify 可以增强文档分析,从而获得更准确的见解、做出更好的决策并简化管理流程。

Indexify 介绍

Indexify 是一个开源的导入和提取引擎,旨在为实时 LLM 应用提供支持。它能够以极低的延迟从非结构化来源进行实时数据提取。它还支持可应用于各种用例的多模态提取工作流程,包括从文档中提取实体和嵌入、音频转录、摘要以及从图像甚至视频中检测对象。

它还支持高效地索引、存储和检索数据,使其成为可扩展实时 RAG 系统的工具。

任何工作流程都可以通过 4 个基本步骤轻松实现:

  1. 启动 Indexify 服务器和提取器。
  2. 创建提取graph。
  3. 导入需要处理的数据(视频、图像、音频、PDF 等)。
  4. 检索提取的数据。

提取器

提取器模块是 Indexify 的核心功能。提取器可以从任何模态的非结构化数据中提取和返回结构化信息。例如,从 PDF 中以 JSON 格式获取特定信息,将数据转换为嵌入,以及识别视频中的面部或物体。

提取器通常接收非结构化数据作为输入,并生成内容对象列表和特征作为输出。来自非结构化数据的原始字节存储在 Blob 存储中,而提取的特征存储在向量数据库和结构化存储中以供检索。任何用于处理非结构化数据的模型或算法都可以通过扩展提取器 SDK 中提供的抽象类来实现为提取器。

协调器

Indexify中有一个高性能任务调度器。当数据开始被导入时,它们将任务分配给提取器,从而帮助实现卓越的速度和性能。

开始教程

对于本教程,需要有 Python 3.11 或更高版本以获得最佳性能。其他安装说明将在后面给出。

我将使用 Groq 作为 LLM 引擎。要开始,请访问此页面并创建一个 API 密钥。
在这里插入图片描述

然后安装sdk

pip install groq

对于数据,我已经准备了一些经典论文作为 PDF 文件。当然你也可以使用自己的文档集。

安装和配置 Indexify

在 Linux 系统上设置 Indexify 很容易。只需要 3 个运行的终端窗口。

  • 终端 1:用于下载和运行 Indexify 服务。
  • 终端 2:用于运行 Indexify 提取器,这些提取器处理结构化提取、分块和嵌入。
  • 终端 3:用于运行 Python 脚本以从 Indexify 服务加载和查询数据。

这里可以使用以下命令启动和运行 Indexify 服务。

终端 1

curl https://getindexify.ai | sh
./indexify server -d

服务将在 http://localhost:8900 上运行。接下来,创建一个 Python 环境并安装所有必要的库和提取器。

终端 2

pip3 install indexify-extractor-sdk indexify wikipedia
indexify-extractor download tensorlake/paddleocr_extractor
indexify-extractor download tensorlake/minilm-l6
indexify-extractor download tensorlake/chunk-extractor

下载完成后,使用以下命令运行提取器服务:

终端 2

indexify-extractor join-server

经过以上两个步骤环境就准备好了。在本教程中,我将保持这两个终端运行。

准备文档集

第一步是整理文档集。在本工作流程中,我将使用 PDF 文档。对于多个文档,你可以像这样构建目录:将所有文档作为 PDF 添加到 data 目录。对于其他文件类型,你必须使用其他提取器或定义自定义提取器,我将在本文中稍后讨论。

└──  data
 ├── doc1
 ├── doc2
 ├── doc3
 ├── doc4
├── venv
├── indexify file
├── ingest_document.py
├──  query_doc.py
└──  setup_extraction_graph.py

使用 Indexify 导入和处理文档

设置提取graph

Indexify 可以使用其核心功能(提取器)处理和存储来自任何模态的数据。这些提取器旨在从大量非结构化数据中提取内容。通过将不同的提取器链接在一起,我们可以创建一个pipeline,简化整个数据提取和存储过程。此过程通过创建提取graph来管理。

在本教程中,我将构建以下提取graph:

  • paddle_ocr:用于识别和提取论文中的文本。
  • chunk_extract:用于将数据划分为块以进行 RAG。
  • minilm-l6:用于将数据转换为嵌入。

在这里插入图片描述

配置 Indexify 客户端并以 YAML 格式定义流程,如下所示。

# setup_extraction_graph.py

from indexify import ExtractionGraph, IndexifyClient
client = IndexifyClient()
extraction_graph_spec = """
  name: 'propertyQA'
  extraction_policies:
    - extractor: 'tensorlake/paddleocr_extractor'
      name: 'textextract'
    - extractor: 'tensorlake/chunk-extractor'
      name: 'chunker'
      input_params:
          chunk_size: 1000
          overlap: 100
      content_source: 'textextract'
    - extractor: 'tensorlake/minilm-l6'
      name: 'pdfembedding'
      content_source: 'chunker'
"""
extraction_graph = ExtractionGraph.from_yaml(extraction_graph_spec)
client.create_extraction_graph(extraction_graph)

终端 3

运行命令以创建提取graph。

python3 ./setup_extraction_graph.py

自定义提取器

为了捕获复杂数据,我可以创建自定义提取器并将其添加到我们的提取graph中。你可以使用以下模板定义它们。

from pydantic import BaseModel
from typing import List
from indexify_extractor_sdk import Extractor, Content, Feature
from indexify_extractor_sdk.base_extractor import Content
import json

class InputParams(BaseModel):
    a: int = 0
    b: str = ""

class MyExtractor(Extractor):
    name = "your-docker-hub-username/MyExtractor"
    description = "Description of the extractor goes here."

    # Any python dependencies included in the extractor must be listed here.
    python_dependencies = ["torch", "transformers"]

    # Any system dependencies that the python code here depends on needs to be listed here. We use Ubuntu base images, so any ubuntu package can be installed here.

    system_dependencies = []

    input_mime_types = ["text/plain"]

    def __init__(self):
        super().__init__()

    def extract(self, content
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liugddx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值