ai_prep_search функция

Область применения:Отмечено «Да» Databricks SQL Отмечено «Да» Databricks Runtime

Это важно

Эта функция доступна в бета-версии. Администраторы рабочей области могут управлять доступом к этой функции на странице "Предварительные версии ". См. предварительные версии Manage Azure Databricks.

Эта функция преобразует содержимое ai_prep_search() документа в формат, оптимизированный для систем векторного поиска и информационного поиска RAG. Он принимает либо структурированный вывод, ai_parse_document либо обычный текст и разметочный STRING контент. Для каждого входного документа функция разбивает содержимое на семантические блоки, расширяет каждый блок с контекстом уровня документа, таким как название документа, заголовки разделов, ссылки на страницы и создает представление, готовое для внедрения.

Безопасность данных

Данные документа обрабатываются в периметре безопасности Databricks. Databricks не хранит параметры, передаваемые в вызовы функций AI, но сохраняет детали запуска метаданных, такие как используемая версия Databricks Runtime.

Требования

  • Databricks Runtime 18.2 или более поздней версии.
  • При использовании бессерверных вычислений также требуется следующее:
    • Версия бессерверной среды должна иметь значение 3 или более поздней, так как это обеспечивает такие функции, как VARIANT.
    • Необходимо использовать Python или SQL. Дополнительные бессерверные функции и ограничения см. в разделе об ограничениях бессерверных вычислений.
  • Эта ai_prep_search функция доступна с помощью записных книжек Databricks, редактора SQL, рабочих процессов, заданий или конвейеров Lakeflow.

Синтаксис

ai_prep_search(parsed [, options])

Аргументы

  • parsed: Документируйте содержимое для подготовки к поиску. Один из следующих продуктов:
    • ВыражениеVARIANT, представляющее структурированный выход .ai_parse_document
    • Выражение, содержащее простой текст или markdown STRING . JSON-строки, не являющиеся структурированными ai_parse_document (или связанными) выводами, рассматриваются как буквальный текст и фрагментируются одинаково.
  • options: необязательный MAP<STRING, STRING>. Поддерживаемые ключи:
    • 'version': версия используемой выходной схемы.

Возвраты

Блоки VARIANT документа, отформатированные для индексирования векторного поиска. Каждая строка в выходных данных представляет один входной документ.

Схема выходных данных:

{
  "document": {
    "contents": [
      {
        "chunk_id": STRING,       // Unique identifier composed of the document ID and chunk position
        "chunk_position": INT,    // 0-based position of the chunk within the document
        "chunk_to_retrieve": STRING,  // Raw text content of the chunk
        "chunk_to_embed": STRING, // Context-enriched text prepared for embedding; see chunk_to_embed format
        "pages": [
          {
            "page_id": INT,       // Page index that this chunk appears on
            "image_uri": STRING   // Path to the page image for multi-modal retrieval
          }
        ]
      }
    ],
    "pages": [
      {
        "id": INT,           // 0-based page index
        "image_uri": STRING  // Path to the rendered page image, populated when
                             // imageOutputPath is set in ai_parse_document
      }
    ],
    "source_uri": STRING   // Source document URI
  },
  "error_status": {...}
}

Это важно

Схема выходных данных функции версионируется с использованием формата основной.второстепенной. Databricks может обновить поддерживаемую или по умолчанию версию, чтобы отразить улучшенные представления на основе текущих исследований.

  • Дополнительные обновления версий являются обратно совместимыми и могут вводить только новые поля.
  • Обновления основных версий могут включать критические изменения, такие как дополнения полей, удаление или переименование.

формат chunk_to_embed

Поле chunk_to_embed является одной строкой, созданной на блок, путем объединения необработанного текста блока с контекстом уровня документа для улучшения качества извлечения во время семантического поиска.

Строка состоит из следующих частей:

  • Метаданные документа: Document Title, Page Header, Page Footer, Section HeaderCaption, , Footnote. Page Number Извлекается непосредственно из структуры синтаксического документа.
  • Поля документа, обнаруженные LLM: дополнительный ключ: строки значений для полей уровня документа автоматически обнаруженные LLM, такие как "Компания", "Тип документа", "Финансовый год", "Идентификатор пациента" или "Номер контракта". Имена полей выбираются для каждого документа моделью и различаются в разных документах.
  • Предложение контекста документа: одно предложение, в котором приводится сводка сведений о документе, созданном LLM.
  • Содержимое: необработанный фрагмент текста. То же значение, что chunk_to_retrieve и поле для блока.
  • Сводка таблицы: короткий парафраз, созданный LLM, содержимого оглавлений. Для блоков, содержащих таблицу, функция добавляет эту сводку таблицы и набор связанных вопросов естественного языка, которые таблица может ответить.
  • Связанные вопросы: вопросы естественного языка, которые таблица может отвечать, используется для улучшения отзыва для содержимого таблицы.

Строка следует этому шаблону:

Document Title: {doc_title}
Page Header: {page_header}
Page Footer: {page_footer}
Section Header: {section_header}
Caption: {caption}
Footnote: {footnote}
Page Number: {page_number}
{additional_llm_discovered_fields}

{document_context_sentence}

Table summary: {table_summary}

Content:
{chunk_to_retrieve}

Related questions:
{qa_text}
Пример отрисовки chunk_to_embed
Document Title: Acme Corp 2024 Annual Report
Page Header:
Page Footer:
Section Header: Risk Factors
Caption:
Footnote:
Page Number: 14
Company: Acme Corp
Document Type: 10-K
Fiscal Year: 2024

Acme Corp's 2024 annual report covering financial performance and risk disclosures across global operating segments.

Content:
Our business faces a number of risks, including competition from established providers, evolving regulatory requirements, and concentration in a small number of large customers.

Замечание

Поля фиксированных метаданных всегда отображаются с их меткой, при этом значение остается пустым, если недоступно. Обнаруженные llM поля, предложение контекста документа, сводка таблицы и связанные вопросы опущены полностью, если они недоступны или не применимы. Точную композицию можно обновить в будущих версиях, чтобы улучшить качество извлечения.

Примеры

Подготовьте обычный текст или markdown

Следующий пример готовит обычный текст STRING для индексации поиска:

SELECT ai_prep_search(
  'Quarterly revenue grew twenty percent year over year.',
  map('version', '2.0')
);

Цепочка с ai_parse_document

В следующем примере показано ai_prep_search , как создать блоки, готовые к поиску, ai_parse_document из необработанных документов, хранящихся в томе каталога Unity:

WITH parsed_documents AS (
  SELECT ai_parse_document(content) AS parsed
  FROM READ_FILES('/Volumes/mydata/documents/', format => 'binaryFile')
)
SELECT ai_prep_search(parsed) AS result
FROM parsed_documents;

Создание исходной таблицы векторного поиска

В следующем примере выходные данные объединяются в отдельные строки блоков и записываются в таблицу Delta. Затем таблицу можно использовать в качестве источника для индекса поиска ИИ Databricks , используя chunk_to_embed в качестве столбца внедрения и chunk_id в качестве первичного ключа.

WITH parsed_documents AS (
  SELECT
    path,
    ai_parse_document(content) AS parsed
  FROM READ_FILES('/Volumes/mydata/documents/', format => 'binaryFile')
),
prepped_documents AS (
  SELECT
    path,
    ai_prep_search(parsed) AS result
  FROM parsed_documents
)
SELECT
  chunk.value:chunk_id::STRING AS chunk_id,
  chunk.value:chunk_position::INT AS chunk_position,
  chunk.value:chunk_to_retrieve::STRING AS chunk_to_retrieve,
  chunk.value:chunk_to_embed::STRING AS chunk_to_embed,
  prepped_documents.path AS source_uri
FROM
  prepped_documents,
  LATERAL variant_explode(prepped_documents.result:document.contents) AS chunk;

Результирующая строка имеет следующую схему:

Имя столбца Тип
chunk_id STRING
chunk_position INT
chunk_to_retrieve STRING
chunk_to_embed STRING
source_uri STRING

Включение много модального извлечения

При ai_parse_document вызове с imageOutputPath параметром отрисованные изображения страниц сохраняются в томе каталога Unity, а image_uri поле в массиве блоков pages заполняется. Эти ссылки на изображения можно передать в модель с поддержкой визуального зрения во время запроса, чтобы ответить на вопросы, требующие визуального контекста, таких как блок-схемы, диаграммы или таблицы, которые не полностью представлены в тексте.

WITH parsed_documents AS (
  SELECT ai_parse_document(
    content,
    map(
      'imageOutputPath', '/Volumes/catalog/schema/volume/page_images/',
      'descriptionElementTypes', '*'
    )
  ) AS parsed
  FROM READ_FILES('/Volumes/mydata/documents/', format => 'binaryFile')
),
prepped_documents AS (
  SELECT ai_prep_search(parsed) AS result
  FROM parsed_documents
)
SELECT
  chunk.value:chunk_id::STRING AS chunk_id,
  chunk.value:chunk_to_embed::STRING AS chunk_to_embed,
  chunk.value:pages AS pages
FROM
  prepped_documents,
  LATERAL variant_explode(prepped_documents.result:document.contents) AS chunk;

Ограничения

  • Когда вы проходите VARIANT, используйте допустимый ai_parse_document выход. Передача других VARIANT данных или неподдерживаемой версии схемы может привести к непредвиденным результатам или ошибкам.
  • Когда вы сдаёте STRING, используйте обычный текст или markdown. Строки JSON, которые не являются структурированным разбором, индексируются как буквальный текст, а не отклоняются.
  • Максимальный размер входных данных соответствует максимальному размеру выходных ai_parse_documentданных.