Azure Databricks의 구조적 출력
Important
이 기능은 공개 미리 보기로 제공되며, 토큰당 종량제 및 프로비전된 처리량 엔드포인트 모두에서 지원됩니다.
이 문서에서는 Azure Databricks의 구조화된 출력과 이를 생성 AI 애플리케이션 워크플로의 일부로 사용하는 방법을 설명합니다. 구조적 출력은 OpenAI와 호환되며 파운데이션 모델 API의 일부로 사용되는 모델 중에만 사용할 수 있습니다.
구조화된 출력이란?
구조적 출력은 입력 데이터에서 JSON 개체의 형태로 구조화된 데이터를 생성하는 방법을 제공합니다. 텍스트, 구조화되지 않은 JSON 개체 및 특정 JSON 스키마를 준수하는 JSON 개체를 생성하도록 선택할 수 있습니다. 구조적 출력은 토큰당 종량제 및 프로비전된 처리량 엔드포인트를 사용하여 제공되는 채팅 모델에 대해 지원됩니다.
Databricks는 다음 시나리오에 대해 구조화된 출력을 사용하는 것이 좋습니다.
- 대량의 문서에서 데이터를 추출합니다. 예를 들어 제품 검토 피드백을 부정, 긍정 또는 중립으로 식별하고 분류합니다.
- 출력이 지정된 형식이어야 하는 일괄 처리 유추 작업입니다.
- 구조화되지 않은 데이터를 구조화된 데이터로 전환하는 것과 같은 데이터 처리입니다.
구조화된 출력 사용
채팅 요청에 사용하여 response_format
구조화된 출력을 지정합니다. Foundation 모델 REST API 참조를 참조하세요.
다음은 특정 JSON 스키마에 대한 연구 논문의 데이터 추출 예제입니다.
import os
import json
from openai import OpenAI
DATABRICKS_TOKEN = os.environ.get('YOUR_DATABRICKS_TOKEN')
DATABRICKS_BASE_URL = os.environ.get('YOUR_DATABRICKS_BASE_URL')
client = OpenAI(
api_key=DATABRICKS_TOKEN,
base_url=DATABRICKS_BASE_URL
)
response_format = {
"type": "json_schema",
"json_schema": {
"name": "research_paper_extraction",
"schema": {
"type": "object",
"properties": {
"title": { "type": "string" },
"authors": {
"type": "array",
"items": { "type": "string" }
},
"abstract": { "type": "string" },
"keywords": {
"type": "array",
"items": { "type": "string" }
}
},
},
"strict": True
}
}
messages = [{
"role": "system",
"content": "You are an expert at structured data extraction. You will be given unstructured text from a research paper and should convert it into the given structure."
},
{
"role": "user",
"content": "..."
}]
response = client.chat.completions.create(
model="databricks-meta-llama-3-1-70b-instruct",
messages=messages,
response_format=response_format
)
print(json.dumps(response.choices[0].message.model_dump()['content'], indent=2))
다음은 JSON 추출의 예이지만 JSON 스키마는 미리 알 수 없습니다.
import os
import json
from openai import OpenAI
DATABRICKS_TOKEN = os.environ.get('YOUR_DATABRICKS_TOKEN')
DATABRICKS_BASE_URL = os.environ.get('YOUR_DATABRICKS_BASE_URL')
client = OpenAI(
api_key=DATABRICKS_TOKEN,
base_url=DATABRICKS_BASE_URL
)
response_format = {
"type": "json_object",
}
messages = [
{
"role": "user",
"content": "Extract the name, size, price, and color from this product description as a JSON object:\n<description>\nThe SmartHome Mini is a compact smart home assistant available in black or white for only $49.99. It's 5 inches wide.\n</description>"
}]
response = client.chat.completions.create(
model="databricks-meta-llama-3-1-70b-instruct",
messages=messages,
response_format=response_format
)
print(json.dumps(response.choices[0].message.model_dump()['content'], indent=2))
JSON 스키마
파운데이션 모델 API는 OpenAI에서 허용하는 구조적 출력을 광범위하게 지원합니다. 그러나 JSON 스키마 정의에 더 간단한 JSON 스키마를 사용하면 고품질 JSON 생성이 발생합니다. 더 높은 품질의 생성을 촉진하기 위해 Foundation Model API는 JSON 스키마 사양의 하위 집합만 지원합니다.
다음 함수 호출 정의 키는 지원되지 않습니다.
pattern
을 사용한 정규식.- 다음을 사용하는 복합 중첩 또는 스키마 컴퍼지션 및 유효성 검사:
anyOf
,oneOf
,allOf
,prefixItems
, 또는$ref
. - 목록의 한 형식이 유효한 JSON 형식이고 다른 형식이
"null"
인 특수한 경우[type, “null”]
를 제외한 형식 목록
토큰 사용량
프롬프트 주입 및 기타 기술은 구조화된 출력의 품질을 향상시키는 데 사용됩니다. 이렇게 하면 모델에서 사용하는 입력 및 출력 토큰의 수에 영향을 미치므로 청구에 영향을 줍니다.
제한 사항
- JSON 스키마에 지정된 최대 키 수는
64
입니다. - 파운데이션 모델 API는 개체 및 배열에 대한 길이 또는 크기 제약 조건을 적용하지 않습니다.
- 여기에는
maxProperties
,minProperties
및maxLength
와 같은 키워드가 포함됩니다.
- 여기에는
- 중첩된 JSON 스키마는 품질이 저하됩니다. 가능한 경우 더 나은 결과를 위해 JSON 스키마를 평면화해 봅니다.