Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция
Область применения:
Databricks SQL
Databricks Runtime
Внимание
Эта функция доступна в общедоступной предварительной версии и соответствии HIPAA.
Во время предварительной версии:
- Базовая языковая модель может обрабатывать несколько языков, но эта функция ИИ настраивается для английского языка.
- См. сведения о функциях с ограниченной региональной доступностью для региона "Функции ИИ".
Функция ai_extract() извлекает структурированные данные из текста и документов в соответствии с предоставленной схемой. Вы можете использовать простые имена полей для базового извлечения или определить сложные схемы с вложенными объектами, массивами, проверкой типов и описаниями полей для бизнес-документов, таких как счета, контракты и финансовые заявки.
Функция принимает текст или VARIANT выходные данные из других функций ИИ, например ai_parse_documentвключение составных рабочих процессов для комплексной обработки документов.
Визуальный пользовательский интерфейс для проверки и итерации результатов ai_extractсм. в разделе "Извлечение информации".
Требования
Лицензия Apache 2.0
Базовые модели, которые могут использоваться в настоящее время, лицензируются в соответствии с лицензией Apache 2.0, авторским правом © Apache Software Foundation. Клиенты отвечают за обеспечение соответствия применимым лицензиям модели.
Databricks рекомендует просматривать эти лицензии, чтобы обеспечить соответствие любым применимым условиям. Если модели появляются в будущем, которые лучше работают в соответствии с внутренними тестами Databricks, Databricks может изменить модель (и список применимых лицензий, предоставленных на этой странице).
Модель, работающая с этой функцией, становится доступной с помощью API модели обслуживания модели. Сведения о моделях, доступных в Databricks, и лицензиях и политиках, которые управляют использованием этих моделей, см. в применимых условиях модели.
Если модели появляются в будущем, которые лучше работают в соответствии с внутренними тестами Databricks, Databricks может изменить модели и обновить документацию.
- Эта функция доступна только в некоторых регионах, см. сведения о доступности функций ИИ.
- Эта функция недоступна в Azure Databricks классической версии SQL.
- Проверьте страницу цен на Databricks SQL.
- В Databricks Runtime 15.1 и более поздних версиях эта функция поддерживается в записных книжках Databricks, включая записные книжки, которые выполняются как задача в рабочем процессе Databricks.
- Для повышения производительности рабочих нагрузок пакетного вывода требуется Среда выполнения Databricks Runtime 15.4 ML LTS.
Синтаксис
Databricks рекомендует использовать версию 2 этой функции, так как она поддерживает извлечение и описание вложенных полей.
Версия 2.1 (рекомендуется)
ai_extract(
content VARIANT | STRING,
schema STRING,
[options MAP<STRING, STRING>]
) RETURNS VARIANT
Версия 2
ai_extract(
content VARIANT | STRING,
schema STRING,
[options MAP<STRING, STRING>]
) RETURNS VARIANT
Версия 1
ai_extract(
content STRING,
labels ARRAY<STRING>,
[options MAP<STRING, STRING>]
) RETURNS STRUCT
Аргументы
Версия 2.1 (рекомендуется)
content: ВыражениеVARIANTилиSTRING. Принимает любую из них:- Необработанный текст в виде
STRING - Создается
VARIANTдругой функцией ИИ (напримерai_parse_document)
- Необработанный текст в виде
schema: литералSTRING, определяющий схему JSON для извлечения. Схема может быть следующей:- Простая схема: массив JSON имен полей (предполагается, что это строки)
"[\"vendor_name\", \"invoice_id\", \"total_amount\"]" - Расширенная схема: объект JSON с сведениями о типах, описаниями и вложенными структурами
- Поддерживает
string, ,integernumberbooleanиenumтипы. Выполняет проверку типа. Недопустимые значения приводят к ошибке. Не более 500 значений перечисления. - Поддерживает вложенные объекты с помощью
"type": "object""properties" - Поддерживает массивы примитивов или объектов, использующихся
"type": "array"с"items" - Необязательное
"description"поле для каждого свойства для руководства по качеству извлечения
- Поддерживает
- Простая схема: массив JSON имен полей (предполагается, что это строки)
options: необязательный,MAP<STRING, STRING>содержащий параметры конфигурации:-
version: параметр версии для поддержки миграции ("2.1","2.0", )."1.0"Значение по умолчанию основано на типах входных данных. -
instructions: глобальное описание задачи и домена для повышения качества извлечения. Должно быть меньше 20 000 символов. -
enableCitations: еслиtrueвыходные данные для каждого поля в схеме извлечения содержат список нулевых или более ссылок, который указывает в документе извлеченные выходные данные. -
enableConfidenceScores: еслиtrueвыходные данные для каждого поля в схеме извлечения включают оценку достоверности от 0 до 1, указывая, как определенная модель относится к такому значению. Соответствующее пороговое значение достоверности зависит от конкретного варианта использования, и вы должны выбрать отрезок, соответствующий вашей терпимости к риску и ошибке.
-
Версия 2
content: ВыражениеVARIANTилиSTRING. Принимает любую из них:- Необработанный текст в виде
STRING - Создается
VARIANTдругой функцией ИИ (напримерai_parse_document)
- Необработанный текст в виде
schema: литералSTRING, определяющий схему JSON для извлечения. Схема может быть следующей:- Простая схема: массив JSON имен полей (предполагается, что это строки)
"[\"vendor_name\", \"invoice_id\", \"total_amount\"]" - Расширенная схема: объект JSON с сведениями о типах, описаниями и вложенными структурами
- Поддерживает
string, ,integernumberbooleanиenumтипы. Выполняет проверку типа. Недопустимые значения приводят к ошибке. Не более 500 значений перечисления. - Поддерживает вложенные объекты с помощью
"type": "object""properties" - Поддерживает массивы примитивов или объектов, использующихся
"type": "array"с"items" - Необязательное
"description"поле для каждого свойства для руководства по качеству извлечения
- Поддерживает
- Простая схема: массив JSON имен полей (предполагается, что это строки)
options: необязательный,MAP<STRING, STRING>содержащий параметры конфигурации:-
version: параметр версии для поддержки миграции ("1.0"для поведения"2.0"версии 1 для поведения версии 2). Значение по умолчанию основано на типах входных данных, но возвращается обратно"1.0". -
instructions: глобальное описание задачи и домена для повышения качества извлечения. Должно быть меньше 20 000 символов.
-
Версия 1
contentSTRING: выражение, содержащее необработанный текст.labels: это литералARRAY<STRING>. Каждый элемент — это тип извлекаемой сущности.options: необязательный,MAP<STRING, STRING>содержащий параметры конфигурации:-
version: параметр версии для поддержки миграции ("1.0"для поведения"2.0"версии 1 для поведения версии 2). Значение по умолчанию основано на типах входных данных, но будет возвращаться к"1.0".
-
Возвраты
Версия 2.1 (рекомендуется)
VARIANT Возвращает содержащийся:
{
"response": {...}, // Extracted data matching the provided schema. Each leaf is returned as a Field object (see below).
"error_message": null, // null on success, or error message on failure
"metadata": { ... } // Metadata about the response, including unfurled citation ids.
}
Поле response содержит структурированные данные, извлеченные в соответствии со схемой:
- Имена полей и типы соответствуют определению схемы
- Структура схемы сохраняется в ответе: вложенные объекты и массивы сохраняют исходную форму. Каждое поле скалярного поля в схеме извлечения имеет выходной объект со следующими полями:
-
value: извлеченное значение, типизированное в соответствии со схемой.Значение , если поле не может быть извлечено. -
citation_ids: присутствует только в томtrueслучаеenableCitations. Массив идентификаторов, индексированных вmetadata.citations. -
confidence_score: присутствует только в томtrueслучаеenableConfidenceScores. Плавающее значение от 0 до 1.
-
- Проверка типов применяется для целых чисел, чисел, логических и перечислений
- Если
contentравноNULL, то результат –NULL.
Поле metadata содержит метаданные ответа. Если enableCitations есть true, metadata поле содержит сведения о каждом идентификаторе ссылки в response поле, которое трассирует извлеченное значение обратно в его расположение в входных данных.
В зависимости от типа входных данных ссылки могут иметь один из двух типов:
- Для входных данных необработанного текста (STRING) ссылка — это диапазон текста в исходном вводе. Каждый объект в metadata.citations содержит следующее:
-
id: целое число, соответствующее citation_ids записи в поле. -
start: инклюзивное смещение символов на основе 0 в входную строку. -
stop: эксклюзивное смещение символов на основе 0 в входную строку.
-
- Для PDF-документов и изображений (при использовании
ai_extractнижеai_parse_document) ссылка является ограничивающим полем в исходном входном коде. Каждый объект вmetadata.citationsнем:-
id: целое число, соответствующееcitation_idsзаписи в поле. -
bbox: массив объектов, идентичный фигуре элемента.bbox вai_parse_documentвыходных{coord, page_id}данных.coord— координаты пикселей на изображении страницы, как[x0, y0, x1, y1]; page_idи индекс страницы на основе 0.
-
Версия 2
VARIANT Возвращает содержащийся:
{
"response": { ... }, // Extracted data matching the provided schema
"error_message": null // null on success, or error message on failure
}
Поле response содержит структурированные данные, извлеченные в соответствии со схемой:
- Имена полей и типы соответствуют определению схемы
- Вложенные объекты и массивы сохраняются в структуре
- Поля могут быть
nullне найдены. - Проверка типов применяется для
integerтипов ,numberbooleanиenumтипов
Если content равно NULL, то результат – NULL.
Версия 1
Возвращает место, где каждое STRUCT поле соответствует типу сущности, указанному в labels. Каждое поле содержит строку, представляющую извлеченную сущность. Если функция находит несколько кандидатов для любого типа сущности, она возвращает только одну.
Примеры
Версия 2.1 (рекомендуется)
Простая схема — только имена полей
> SELECT ai_extract(
'Invoice #12345 from Acme Corp for $1,250.00 dated 2024-01-15',
'["invoice_id", "vendor_name", "total_amount", "invoice_date"]',
options => map('version', '2.1')
);
{
"response": {
"invoice_id": {"value": "12345"},
"vendor_name": {"value": "Acme Corp"},
"total_amount": {"value": "1250.00"},
"invoice_date": {"value": "2024-01-15"}
},
"error_message": null
}
Расширенная схема — с типами и описаниями
> SELECT ai_extract(
'Invoice #12345 from Acme Corp for $1,250.00 dated 2024-01-15',
'{
"invoice_id": {"type": "string", "description": "Unique invoice identifier"},
"vendor_name": {"type": "string", "description": "Legal business name"},
"total_amount": {"type": "number", "description": "Total invoice amount"},
"invoice_date": {"type": "string", "description": "Date in YYYY-MM-DD format"}
}',
options => map('version', '2.1')
);
{
"response": {
"invoice_id": {"value": "12345"},
"vendor_name": {"value": "Acme Corp"},
"total_amount": {"value": 1250.00},
"invoice_date": {"value": "2024-01-15"}
},
"error_message": null
}
Вложенные объекты и массивы
> SELECT ai_extract(
'Invoice #12345 from Acme Corp
Line 1: Widget A, qty 10, $50.00 each
Line 2: Widget B, qty 5, $100.00 each
Subtotal: $1,000.00, Tax: $80.00, Total: $1,080.00',
'{
"invoice_header": {
"type": "object",
"properties": {
"invoice_id": {"type": "string"},
"vendor_name": {"type": "string"}
}
},
"line_items": {
"type": "array",
"description": "List of invoiced products",
"items": {
"type": "object",
"properties": {
"description": {"type": "string"},
"quantity": {"type": "integer"},
"unit_price": {"type": "number"}
}
}
},
"totals": {
"type": "object",
"properties": {
"subtotal": {"type": "number"},
"tax_amount": {"type": "number"},
"total_amount": {"type": "number"}
}
}
}',
options => map('version', '2.1')
);
{
"response": {
"invoice_header": {
"invoice_id": {"value": "12345"},
"vendor_name": {"value": "Acme Corp"}
},
"line_items": [
{"description": {"value": "Widget A"}, "quantity": {"value": 10}, "unit_price": {"value": 50.00}},
{"description": {"value": "Widget B"}, "quantity": {"value": 5}, "unit_price": {"value": 100.00}}
],
"totals": {
"subtotal": {"value": 1000.00},
"tax_amount": {"value": 80.00},
"total_amount": {"value": 1080.00}
}
},
"error_message": null
}
Возможность создания с помощью ai_parse_document
> WITH parsed_docs AS (
SELECT
path,
ai_parse_document(
content,
MAP('version', '2.0')
) AS parsed_content
FROM READ_FILES('/Volumes/finance/invoices/', format => 'binaryFile')
)
SELECT
path,
ai_extract(
parsed_content,
'["invoice_id", "vendor_name", "total_amount"]',
MAP('version', '2.1', 'instructions', 'These are vendor invoices.')
) AS invoice_data
FROM parsed_docs;
Использование перечислений
> SELECT ai_extract(
'Invoice #12345 from Acme Corp, amount: $1,250.00 USD',
'{
"invoice_id": {"type": "string"},
"vendor_name": {"type": "string"},
"total_amount": {"type": "number"},
"currency": {
"type": "enum",
"labels": ["USD", "EUR", "GBP", "CAD", "AUD"],
"description": "Currency code"
},
"payment_terms": {"type": "string"}
}',
options => map('version', '2.1')
);
{
"response": {
"invoice_id": {"value": "12345"},
"vendor_name": {"value": "Acme Corp"},
"total_amount": {"value": 1250.00},
"currency": {"value": "USD"},
"payment_terms": {"value": null}
},
"error_message": null
}
Ссылки (входные данные STRING, ссылки SPAN)
> SELECT ai_extract(
'Invoice #12345 from Acme Corp for $1,250.00 dated 2024-01-15',
'{
"invoice_id": {"type": "string", "description": "Unique invoice identifier"},
"vendor_name": {"type": "string", "description": "Legal business name"},
"total_amount": {"type": "number", "description": "Total invoice amount"},
"invoice_date": {"type": "string", "description": "Date in YYYY-MM-DD format"}
}',
options => map(
'version', '2.1',
'enableCitations', 'true'
)
);
{
"response": {
"invoice_id": {"citation_ids": [0], "value": "12345"},
"vendor_name": {"citation_ids": [0], "value": "Acme Corp"},
"total_amount": {"citation_ids": [1], "value": 1250.00},
"invoice_date": {"citation_ids": [1], "value": "2024-01-15"}
},
"metadata": {
"chunk_type": "span",
"citations": [
{"id": 0, "start": 0, "stop": 29},
{"id": 1, "start": 29, "stop": 60}
]
},
"error_message": null
}
Ссылки (VARIANT из ai_parse_document, ссылки BBOX)
> WITH parsed AS (
SELECT ai_parse_document(
content,
map('imageOutputPath', '/Volumes/main/default/parsed_images/') // necessary for rendering bboxes
) AS doc
FROM READ_FILES('/Volumes/main/default/invoices/invoice.pdf', format => 'binaryFile')
)
SELECT ai_extract(
doc,
'{"invoice_id":{"type":"string"}, "total_amount":{"type":"number"}}',
options => map('version','2.1','enableCitations','true')
) AS extracted
FROM parsed;
{
"response": {
"invoice_id": {"citation_ids": [0], "value": "12345"},
"total_amount": {"citation_ids": [1], "value": 1250.00}
},
"metadata": {
"chunk_type": "bbox",
"citations": [
{"id": 0, "bbox": [{"coord": [120, 80, 240, 110], "page_id": 0}]},
{"id": 1, "bbox": [{"coord": [400, 500, 560, 530], "page_id": 0}]}
],
"pages": [{"id": 0, "image_uri": "/Volumes/main/default/parsed_images/6077ca79...f8efdb2ed05.jpg"}]
},
"error_message": null
}
Оценки достоверности
> SELECT ai_extract(
'Invoice #12345 from Acme Corp for $1,250.00 dated 2024-01-15',
'{
"invoice_id": {"type": "string", "description": "Unique invoice identifier"},
"vendor_name": {"type": "string", "description": "Legal business name"},
"total_amount": {"type": "number", "description": "Total invoice amount"},
"invoice_date": {"type": "string", "description": "Date in YYYY-MM-DD format"}
}',
options => map(
'version', '2.1',
'enableConfidenceScores', 'true'
)
);
{
"response": {
"invoice_id": {"confidence_score": 0.95, "value": "12345"},
"vendor_name": {"confidence_score": 0.62, "value": "Acme Corp"},
"total_amount": {"confidence_score": 1.0, "value": 1250.00},
"invoice_date": {"confidence_score": 0.99, "value": "2024-01-15"}
},
"error_message": null
}
Пример записной книжки
Следующая записная книжка предоставляет визуальный интерфейс отладки для анализа выходных ai_extract данных ссылки функции. В нем показано, как отображать метаданные ссылки в виде фрагментов фрагментов подстроки (строковые входные данные) или ограничивающих прямоугольных наложений (входных данных VARIANT), а также присоединять ai_extract ссылки обратно к ai_parse_document элементам в SQL, чтобы можно было пометить извлечение с низкой достоверностью для ручной проверки.
Записная книжка для отрисовки ссылок
Версия 2
Простая схема — только имена полей
> SELECT ai_extract(
'Invoice #12345 from Acme Corp for $1,250.00 dated 2024-01-15',
'["invoice_id", "vendor_name", "total_amount", "invoice_date"]'
);
{
"response": {
"invoice_id": "12345",
"vendor_name": "Acme Corp",
"total_amount": "1250.00",
"invoice_date": "2024-01-15"
},
"error_message": null
}
Расширенная схема — с типами и описаниями
> SELECT ai_extract(
'Invoice #12345 from Acme Corp for $1,250.00 dated 2024-01-15',
'{
"invoice_id": {"type": "string", "description": "Unique invoice identifier"},
"vendor_name": {"type": "string", "description": "Legal business name"},
"total_amount": {"type": "number", "description": "Total invoice amount"},
"invoice_date": {"type": "string", "description": "Date in YYYY-MM-DD format"}
}'
);
{
"response": {
"invoice_id": "12345",
"vendor_name": "Acme Corp",
"total_amount": 1250.00,
"invoice_date": "2024-01-15"
},
"error_message": null
}
Вложенные объекты и массивы
> SELECT ai_extract(
'Invoice #12345 from Acme Corp
Line 1: Widget A, qty 10, $50.00 each
Line 2: Widget B, qty 5, $100.00 each
Subtotal: $1,000.00, Tax: $80.00, Total: $1,080.00',
'{
"invoice_header": {
"type": "object",
"properties": {
"invoice_id": {"type": "string"},
"vendor_name": {"type": "string"}
}
},
"line_items": {
"type": "array",
"description": "List of invoiced products",
"items": {
"type": "object",
"properties": {
"description": {"type": "string"},
"quantity": {"type": "integer"},
"unit_price": {"type": "number"}
}
}
},
"totals": {
"type": "object",
"properties": {
"subtotal": {"type": "number"},
"tax_amount": {"type": "number"},
"total_amount": {"type": "number"}
}
}
}'
);
{
"response": {
"invoice_header": {
"invoice_id": "12345",
"vendor_name": "Acme Corp"
},
"line_items": [
{"description": "Widget A", "quantity": 10, "unit_price": 50.00},
{"description": "Widget B", "quantity": 5, "unit_price": 100.00}
],
"totals": {
"subtotal": 1000.00,
"tax_amount": 80.00,
"total_amount": 1080.00
}
},
"error": null
}
Возможность создания с помощью ai_parse_document
> WITH parsed_docs AS (
SELECT
path,
ai_parse_document(
content,
MAP('version', '2.0')
) AS parsed_content
FROM READ_FILES('/Volumes/finance/invoices/', format => 'binaryFile')
)
SELECT
path,
ai_extract(
parsed_content,
'["invoice_id", "vendor_name", "total_amount"]',
MAP('instructions', 'These are vendor invoices.')
) AS invoice_data
FROM parsed_docs;
Использование перечислений
> SELECT ai_extract(
'Invoice #12345 from Acme Corp, amount: $1,250.00 USD',
'{
"invoice_id": {"type": "string"},
"vendor_name": {"type": "string"},
"total_amount": {"type": "number"},
"currency": {
"type": "enum",
"labels": ["USD", "EUR", "GBP", "CAD", "AUD"],
"description": "Currency code"
},
"payment_terms": {"type": "string"}
}'
);
{
"response": {
"invoice_id": "12345",
"vendor_name": "Acme Corp",
"total_amount": 1250.00,
"currency": "USD",
"payment_terms": null
},
"error": null
}
Версия 1
> SELECT ai_extract(
'John Doe lives in New York and works for Acme Corp.',
array('person', 'location', 'organization')
);
{"person": "John Doe", "location": "New York", "organization": "Acme Corp."}
> SELECT ai_extract(
'Send an email to jane.doe@example.com about the meeting at 10am.',
array('email', 'time')
);
{"email": "jane.doe@example.com", "time": "10am"}
Ограничения
Версия 2.1 (рекомендуется)
- Эта функция недоступна в Azure Databricks классической версии SQL.
- Эту функцию нельзя использовать с представлениями.
- Схема поддерживает не более 128 полей.
- Имена полей могут содержать до 150 символов.
- Схемы поддерживают до семи уровней вложения для вложенных полей.
- Поля перечисления поддерживают не более 500 значений.
- Проверка типов применяется для
integerтипов ,numberbooleanиenumтипов. Если значение не соответствует указанному типу, функция возвращает ошибку. - Максимальный общий размер контекста составляет 128 000 маркеров.
Версия 2
- Эта функция недоступна в Azure Databricks классической версии SQL.
- Эту функцию нельзя использовать с представлениями.
- Схема поддерживает не более 128 полей.
- Имена полей могут содержать до 150 символов.
- Схемы поддерживают до семи уровней вложения для вложенных полей.
- Поля перечисления поддерживают не более 500 значений.
- Проверка типов применяется для
integerтипов ,numberbooleanиenumтипов. Если значение не соответствует указанному типу, функция возвращает ошибку. - Максимальный общий размер контекста составляет 128 000 маркеров.
Версия 1
- Эта функция недоступна в Azure Databricks классической версии SQL.
- Эту функцию нельзя использовать с представлениями.
- Если в содержимом найдено несколько кандидатов для типа сущности, возвращается только одно значение.