적용 대상:
Databricks SQL
Databricks Runtime
중요함
이 기능은 공개 미리 보기 및 HIPAA 규격에 있습니다.
미리 보기 중:
- 기본 언어 모델은 여러 언어를 처리할 수 있지만 이 AI 함수는 영어로 조정됩니다.
- AI Functions의 지역 가용성에 대한 지역별로 제한된 기능을 참조하세요.
이 함수는 ai_extract() 사용자가 제공하는 스키마에 따라 텍스트 및 문서에서 구조화된 데이터를 추출합니다. 기본 추출에 간단한 필드 이름을 사용하거나, 중첩된 개체, 배열, 형식 유효성 검사 및 청구서, 계약 및 재무 서류와 같은 비즈니스 문서에 대한 필드 설명을 사용하여 복잡한 스키마를 정의할 수 있습니다.
이 함수는 종단 간 문서 처리를 위해 작성 가능한 워크플로를 사용하도록 설정하는 등 VARIANT다른 AI 함수의 텍스트 또는 ai_parse_document 출력을 허용합니다.
결과의 ai_extract유효성을 검사하고 반복하는 시각적 UI는 정보 추출을 참조하세요.
요구 사항
Apache 2.0 라이선스
현재 사용할 수 있는 기본 모델은 Apache 2.0 라이선스인 Copyright © The Apache Software Foundation에 따라 라이선스가 부여됩니다. 고객은 해당 모델 라이선스를 준수할 책임이 있습니다.
Databricks는 해당 조건을 준수하도록 이러한 라이선스를 검토할 것을 권장합니다. Databricks의 내부 벤치마크에 따라 더 나은 성능을 제공하는 모델이 향후에 나타날 경우 Databricks는 모델(및 이 페이지에 제공된 해당 라이선스 목록)을 변경할 수 있습니다.
이 함수를 구동하는 모델은 Model Serving Foundation 모델 API를 사용하여 사용할 수 있습니다. Databricks에서 사용할 수 있는 모델과 해당 모델의 사용을 제어하는 라이선스 및 정책에 대한 자세한 내용은 해당 모델 용어를 참조하세요.
Databricks의 내부 벤치마크에 따라 더 나은 성능을 제공하는 모델이 미래에 등장할 경우 Databricks는 모델을 변경하고 설명서를 업데이트할 수 있습니다.
- 이 함수는 일부 지역에서만 사용할 수 있습니다. AI 함수 가용성을 참조하세요.
- 이 함수는 Azure Databricks SQL 클래식에서 사용할 수 없습니다.
- Databricks SQL 가격 페이지를 확인하세요.
- Databricks Runtime 15.1 이상에서는 이 함수가 Databricks 노트북뿐만 아니라 Databricks 워크플로의 태스크로 실행되는 노트북에서도 지원됩니다.
- 성능 향상을 위해서는 일괄 처리 유추 워크로드에 Databricks Runtime 15.4 ML LTS가 필요합니다.
구문
Databricks는 중첩된 필드 추출 및 설명을 지원하므로 이 함수의 버전 2를 사용하는 것이 좋습니다.
버전 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(권장)
content: AVARIANT또는STRING식입니다. 다음 중 하나를 수락합니다:- 원시 텍스트를
로 -
VARIANT다른 AI 함수(예:ai_parse_document)에 의해 생성된 A
- 원시 텍스트를
schemaSTRING: 추출을 위한 JSON 스키마를 정의하는 리터럴입니다. 스키마는 다음과 같습니다.- 단순 스키마: 필드 이름의 JSON 배열(문자열로 가정)
["vendor_name", "invoice_id", "total_amount"] - 고급 스키마: 형식 정보, 설명 및 중첩 구조체가 있는 JSON 개체
- ,
string,integernumber및boolean형식을enum지원합니다. 형식 유효성 검사를 수행합니다. 잘못된 값으로 인해 오류가 발생합니다. 최대 500개 열거형 값입니다. - 다음을 사용하여 중첩된 개체를
"type": "object"지원합니다."properties" - 를 사용하여 기본 형식 또는 개체의 배열을
"type": "array"지원합니다."items" - 추출 품질을 안내하는 각 속성에 대한 선택적
"description"필드
- ,
- 단순 스키마: 필드 이름의 JSON 배열(문자열로 가정)
options: 구성 옵션을 포함하는 선택 사항MAP<STRING, STRING>:-
version: 마이그레이션을 지원하도록 버전 스위치("1.0"v1 동작의 경우,"2.0"v2 동작의 경우). 기본값은 입력 형식을 기반으로 하지만 ."1.0" -
instructions: 추출 품질을 개선하기 위해 작업 및 도메인에 대한 전역 설명입니다. 20,000자 미만이어야 합니다.
-
버전 1
contentSTRING: 원시 텍스트를 포함하는 식입니다.labels:ARRAY<STRING>리터럴 상수. 각 요소는 추출할 엔터티의 형식입니다.options: 구성 옵션을 포함하는 선택 사항MAP<STRING, STRING>:-
version: 마이그레이션을 지원하도록 버전 스위치("1.0"v1 동작의 경우,"2.0"v2 동작의 경우). 기본값은 입력 형식을 기반으로 하지만 ."1.0"
-
반품
버전 2(권장)
포함하는 항목을 VARIANT 반환합니다.
{
"response": { ... }, // Extracted data matching the provided schema
"error_message": null // null on success, or error message on failure
}
필드에는 response 스키마에 따라 추출된 구조화된 데이터가 포함됩니다.
- 필드 이름 및 형식이 스키마 정의와 일치합니다.
- 중첩된 개체 및 배열은 구조에 유지됩니다.
- 필드를 찾을 수
null없는 경우 - ,
integernumber및boolean형식에 대해enum형식 유효성 검사가 적용됩니다.
content가 NULL이면 결과는 NULL입니다.
버전 1
각 필드가 STRUCT 에 지정된 labels엔터티 형식에 해당하는 위치를 반환합니다. 각 필드에는 추출된 엔터티를 나타내는 문자열이 포함됩니다. 함수가 엔터티 형식에 대해 둘 이상의 후보를 찾으면 하나만 반환합니다.
예제
버전 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(권장)
- 이 함수는 Azure Databricks SQL 클래식에서 사용할 수 없습니다.
- 이 함수는 뷰와 함께 사용할 수 없습니다.
- 스키마는 최대 128개의 필드를 지원합니다.
- 필드 이름은 최대 150자를 포함할 수 있습니다.
- 스키마는 중첩된 필드에 대해 최대 7개의 중첩 수준을 지원합니다.
- 열거형 필드는 최대 500개 값을 지원합니다.
- 형식 유효성 검사는 ,
integer및numberboolean형식에 적용enum됩니다. 값이 지정된 형식과 일치하지 않으면 함수는 오류를 반환합니다. - 최대 총 컨텍스트 크기는 128,000개의 토큰입니다.
버전 1
- 이 함수는 Azure Databricks SQL 클래식에서 사용할 수 없습니다.
- 이 함수는 뷰와 함께 사용할 수 없습니다.
- 콘텐츠에서 엔터티 형식에 대한 후보가 두 개 이상 있으면 하나의 값만 반환됩니다.