将 Document AI 布局解析器与 Vertex AI RAG Engine 搭配使用

本页介绍了 Document AI 布局解析器及其与 RAG 引擎的搭配使用方式。

Document AI

Document AI 是一个文档处理和文档理解平台,可从文档中获取非结构化数据,并将这些非结构化数据转换为适合存储在数据库中的字段。结构化数据可让您理解、分析和使用数据。

Document AI 基于 Vertex AI 中的多款产品构建而成,并采用生成式 AI 技术,可帮助您构建可扩缩的端到端云端文档处理应用。无需具备专门的机器学习专业知识,即可使用这些产品。

Document AI 布局解析器

布局解析器会从文档中提取内容元素,例如文本、表格和列表。然后,布局解析器会创建内容感知数据块,以便生成式 AI 和发现应用从中检索信息。

当用于检索和 LLM 生成时,系统会在分块过程中考虑文档的布局,这有助于提高语义一致性并减少内容中的噪声。分块中的所有文本都来自同一布局实体,例如标题、副标题或列表。

如需了解布局检测所使用的文件类型,请参阅按文件类型进行布局检测

在 Vertex AI RAG 中使用布局解析器

ImportRagFiles API 支持布局解析器,但存在以下限制:

  • 输入所有文件类型的文件大小上限(20 MB)。
  • 每个 PDF 文件的页数上限为 500 页。

适用 Document AI 配额价格

启用 Document AI API

您必须为项目启用 Document AI API。如需详细了解如何启用 API,请参阅 Service Usage 文档

Enable the Document AI API.

Enable the API

开启布局解析器

如需开启布局解析器,请按以下步骤操作:

  1. 按照创建和管理处理器中的说明创建布局解析器。

    处理器类型名称为 LAYOUT_PARSER_PROCESSOR

  2. 按照启用处理器中的说明启用布局解析器。

您的 RAG 知识库(语料库)

如果您没有 RAG 语料库,请创建一个 RAG 语料库。例如,请参阅创建 RAG 语料库示例

如果您已经有 RAG 语料库,则在使用布局解析器导入文件时,系统不会重新导入未使用布局解析器导入的现有文件。如果您想对文件使用布局解析器,请先删除这些文件。例如,请参阅删除 RAG 文件示例

使用布局解析器导入文件

您可以使用布局解析器导入来自各种来源的文件和文件夹。

REST

该代码示例展示了如何使用布局解析器导入 Cloud Storage 文件。如需了解更多配置选项(包括从其他来源导入文件),请参阅 ImportRagFilesConfig 参考文档

在使用任何请求数据之前,请先替换代码示例中使用的以下变量:

  • PROJECT_ID:您的项目 ID。
  • LOCATION:处理请求的区域。
  • RAG_CORPUS_ID:RAG 语料库资源的 ID。
  • GCS_URIS:Cloud Storage 位置列表。例如:"gs://my-bucket1""gs://my-bucket2"
  • LAYOUT_PARSER_PROCESSOR_NAME:指向创建的布局解析器处理器的资源路径。例如:"projects/{project}/locations/{location}/processors/{processor_id}"
  • CHUNK_SIZE(可选):每个分块应具有的词元数。
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/ragCorpora/RAG_CORPUS_ID/ragFiles:import

请求 JSON 正文:

{
  "import_rag_files_config": {
    "gcs_source": {
      "uris": "GCS_URIS"
    },
    "rag_file_parsing_config": {
      "layout_parser": {
        "processor_name": "LAYOUT_PARSER_PROCESSOR_NAME"
      }
    },
    "rag_file_transformation_config": {
      "rag_file_chunking_config": {
        "fixed_length_chunking": {
          "chunk_size": CHUNK_SIZE
        }
      }
    },
  }
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后运行以下命令:

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/ragCorpora/RAG_CORPUS_ID/ragFiles:import"

Powershell

将请求正文保存在名为 request.json 的文件中,然后运行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/ragCorpora/RAG_CORPUS_ID/ragFiles:import" | Select-Object -Expand Content

Python

如需了解如何安装或更新 Vertex AI SDK for Python,请参阅安装 Vertex AI SDK for Python。如需了解详情,请参阅 Python API 参考文档

替换代码示例中使用的以下变量:

  • PROJECT_ID:您的项目 ID。
  • LOCATION:处理请求的区域。
  • RAG_CORPUS_ID:RAG 语料库资源的 ID。
  • GCS_URIS:Cloud Storage 位置列表。例如:"gs://my-bucket1""gs://my-bucket2"
  • LAYOUT_PARSER_PROCESSOR_NAME:指向创建的布局解析器处理器的资源路径。例如:"projects/{project}/locations/{location}/processors/{processor_id}"
  • CHUNK_SIZE(可选):每个分块应具有的词元数。
from vertexai import rag
import vertexai

PROJECT_ID = "PROJECT_ID"
corpus_name = "projects/{PROJECT_ID}/locations/LOCATION/ragCorpora/RAG_CORPUS_ID"
# paths = ["https://drive.google.com/file/123", "gs://my_bucket/my_files_dir"]
# Supports Cloud Storage and Google Drive links
layout_parser_processor_name = "LAYOUT_PARSER_PROCESSOR_NAME"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location="LOCATION")

response = rag.import_files(
    corpus_name=corpus_name,
    paths=paths,
    transformation_config = rag.TransformationConfig(
        chunking_config=rag.ChunkingConfig(
            chunk_size=512,  # Optional
            chunk_overlap=100,  # Optional
        ),
    ),
    max_embedding_requests_per_min=900,  # Optional
    parser=rag.LayoutParserConfig(
        processor_name=layout_parser_processor_name,
        max_parsing_requests_per_min=120,  # Optional
    )
)
print(f"Imported {response.imported_rag_files_count} files.")
# Example response:
# Imported 2 files.

检索查询

当用户提问或提供问题时,RAG 中的检索组件会搜索其知识库,以查找与查询相关的信息。

如需查看根据查询文本从语料库中检索 RAG 文件的示例,请参阅检索查询

预测

预测结果会使用检索到的上下文生成有依据的回答。如需查看示例,请参阅生成

后续步骤