ai_parse_document 函数

适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime

Important

此功能在 Beta 版中。

ai_parse_document() 函数从 Databricks 基础模型 API 调用最先进的生成 AI 模型,以从非结构化文档中提取结构化内容。

Requirements

Important

支持此函数的模型是 Llama 系列模型的一部分,并使用马赛克 AI 模型服务基础模型 API 提供。 请参阅 适用的模型开发人员许可证和条款 ,了解 Databricks 上提供哪些 Llama 模型以及管理这些模型的使用许可证和策略的信息。 如果将来出现根据 Databricks 的内部基准性能更好的模型,Databricks 可能会更改模型并更新文档。

  • 支持针对批量推理优化的 AI 函数的区域中的工作区。
  • 已启用 Mosaic AI Agent Bricks 测试版。
  • Databricks Runtime 16.4 LTS 或更高版本。
  • 如果使用无服务器计算,则还需要满足以下条件:
    • 必须与 Databricks Runtime 16.4 或更高版本兼容。
    • 无服务器环境版本必须设置为 2,因为这样可以启用这样的 VARIANT功能。
    • 必须使用 Python 或 SQL。 有关其他无服务器功能和限制,请参阅 无服务器计算限制
  • ai_parse_document 函数可通过 Databricks 笔记本、SQL 编辑器、Databricks 工作流、作业或 Lakeflow 声明式管道使用。
  • 有关计费详细信息,请参阅 Beta 产品定价页

Data security

文档数据在 Databricks 安全外围内进行处理。 Databricks 不存储传入 ai_parse_document function 调用的参数,但会保留元数据运行详细信息,例如使用的 Databricks Runtime 版本。

支持的输入文件格式

输入数据文件必须以字节为单位存储为 Blob 数据,这意味着数据帧或 Delta 表中的二进制类型列。 如果源文档存储在 Unity 目录卷中,则可以使用 Spark binaryFile 格式读取器生成二进制类型列。

支持以下文件格式:

  • PDF
  • JPG / JPEG
  • PNG

Syntax

ai_parse_document(content)
ai_parse_document(content, Map("version" -> "1.0"))

Arguments

  • content:表示 BINARY 输入字节数组数据的表达式。
  • version:输出架构的版本,支持:“1.0”。

Returns

ai_parse_document函数从文档中提取上下文布局元数据,例如page_numberheaderfooter 它还提取文档的内容(如文本段落或表格),并在 markdown 中表示它。 输出的类型是VARIANT

Important

函数输出架构使用 major.minor 格式(如“1.0”)进行版本控制。 Databricks 可能会升级受支持的或默认版本,以反映基于正在进行的研究改进的表示形式。

  • 次要版本升级向后兼容,可能只会引入新字段。
  • 主要版本升级可能包括重大更改,例如字段添加、删除或重命名。

下面是输出架构:

{
  "document": {
    "pages": [
      {
        "id": INT,                 // 0-based page index
        "page_number": STRING,     // Extracted page number (NULL if not found)
        "header": STRING,          // Extracted page header (NULL if not found)
        "footer": STRING,          // Extracted page footer (NULL if not found)
        "content": STRING          // Text content (markdown) of the entire page
      }
    ],
    "elements": [
      {
        "id": INT,                 // 0-based element index
        "type": STRING,            // Supported: text, table, figure
        "content": STRING,         // Text content (markdown) of the target element
        "page_id": INT             // 0-based page index where the element appears
      }
    ],
  },
  "corrupted_data": [
    {
      "malformed_response": STRING  // The response in malformed json format
      "page_id": INT                // 0-based page index
    }
  ],
  "error_status": [
    {
      "error_message": STRING       // The detailed error message
      "page_id": INT                // 0-based page index
    }
  ],
  "metadata": {
    "version": STRING,              // The version of the output schema
    "backend_id": STRING            // The backend id where the document is parsed
  }
}

Examples

以下示例使用 ai_parse_document 从 Unity Catalog 卷中的文件提取文档布局作为 VARIANT 输出。

SQL

SELECT
  path,
  ai_parse_document(content)
FROM READ_FILES('/Volumes/path/to/your/directory', format => 'binaryFile');

Python

from pyspark.sql.functions import *


df = spark.read.format("binaryFile") \
  .load("/Volumes/path/to/your/directory") \
  .withColumn(
    "parsed",
    expr("ai_parse_document(content)"))
display(df)

Scala

import org.apache.spark.sql.functions._


val df = spark.read.format("binaryFile")
  .load("/Volumes/path/to/your/directory")
  .withColumn(
    "parsed",
    ai_parse_document($"content"))
display(df)

以下示例使用 ai_parse_document 从单个文件提取文档布局作为 VARIANT 输出。

SQL

SELECT
  path,
  ai_parse_document(content)
FROM READ_FILES('/Volumes/path/to/source/file.pdf', format => 'binaryFile');

Python

from pyspark.sql.functions import *


df = spark.read.format("binaryFile") \
  .load("/Volumes/path/to/source/file.pdf") \
  .withColumn(
    "parsed",
    ai_parse_document("content"))
display(df)

Scala

import org.apache.spark.sql.functions._


val df = spark.read.format("binaryFile")
  .load("/Volumes/path/to/source/file.pdf")
  .withColumn(
    "parsed",
    ai_parse_document($"content"))
display(df)

以下示例用于ai_parse_document将输出的每个顶级字段(例如,document.pagesdocument.elementscorrupted_dataerror_statusmetadata)分隔到各个列中。

SQL

WITH corpus AS (
  SELECT
    path,
    ai_parse_document(content) AS parsed
  FROM
    READ_FILES('/Volumes/path/to/source/file.pdf', format => 'binaryFile')
)
SELECT
  path,
  parsed:document:pages,
  parsed:document:elements,
  parsed:corrupted_data,
  parsed:error_status,
  parsed:metadata
FROM corpus;

Python

from pyspark.sql.functions import *


df = spark.read.format("binaryFile") \
 .load("/Volumes/path/to/source/file.pdf") \
 .withColumn(
   "parsed",
   ai_parse_document("content")) \
 .withColumn(
   "parsed_json",
   parse_json(col("parsed").cast("string"))) \
 .selectExpr(
   "path",
   "parsed_json:document:pages",
   "parsed_json:document:elements",
   "parsed_json:corrupted_data",
   "parsed_json:error_status",
   "parsed_json:metadata")
display(df)

Scala


import com.databricks.sql.catalyst.unstructured.DocumentParseResultV1_0
import org.apache.spark.sql.functions._


val df = spark.read.format("binaryFile")
 .load("/Volumes/path/to/source/file.pdf")
 .withColumn(
   "parsed",
   ai_parse_document($"content").cast(DocumentParseResultV1_0.SCHEMA))
 .select(
   $"path",
   $"parsed.*")
display(df)

Limitations

  • 虽然 Databricks 不断致力于改进其所有功能,但 LLM 是一项新兴技术,可能会产生错误。
  • ai_parse_document 函数可能需要一段时间来提取文档内容,同时保留结构信息,尤其是对于包含高度密集内容或分辨率不佳内容的文档。 在某些情况下,函数可能需要一段时间才能运行或忽略内容。 Databricks 持续工作,以提高延迟。
  • 请参阅 支持的输入文件格式。 Databricks 欢迎对组织而言最重要的其他格式的反馈。
  • 不支持为ai_parse_document自定义模型或为ai_parse_document使用客户提供的模型。
  • 使用非拉丁字母表(如日语或朝鲜语)的文本处理图像时,基础模型可能无法以最佳方式执行。
  • 无法准确处理具有数字签名的文档。