Udostępnij za pośrednictwem


Dane wyjściowe ze strukturą w usłudze Azure Databricks

Ważne

Ta funkcja jest dostępna w publicznej wersji zapoznawczej i jest obsługiwana zarówno w interfejsach API modelu foundation pay-per-token, jak i w punktach końcowych aprowizowanej przepływności.

W tym artykule opisano ustrukturyzowane dane wyjściowe w usłudze Azure Databricks i sposób ich używania w ramach przepływów pracy aplikacji generowania sztucznej inteligencji. Dane wyjściowe ze strukturą są zgodne z technologią OpenAI i są dostępne tylko podczas korzystania z modelu w ramach interfejsów API modelu foundation.

Co to są dane wyjściowe ze strukturą?

Dane wyjściowe ze strukturą umożliwiają generate danych strukturalnych w postaci obiektów JSON z danych wejściowych. Możesz wybrać generate tekst, obiekty JSON bez struktury i obiekty JSON zgodne z określonym schemaJSON. Dane wyjściowe ze strukturą są obsługiwane w przypadku modeli czatów obsługiwanych przy użyciu interfejsów API modelu foundation pay-per-token i aprowizowanych punktów końcowych przepływności.

Usługa Databricks zaleca używanie danych wyjściowych ze strukturą w następujących scenariuszach:

  • Wyodrębnianie danych z dużych ilości dokumentów. Na przykład identyfikowanie i klasyfikowanie opinii o recenzji produktu jako negatywne, pozytywne lub neutralne.
  • Zadania wnioskowania wsadowego, które wymagają danych wyjściowych w określonym formacie.
  • Przetwarzanie danych, takie jak przekształcanie danych bez struktury na dane ustrukturyzowane.

Używanie danych wyjściowych ze strukturą

Określ ustrukturyzowane dane wyjściowe przy użyciu response_format w żądaniu czatu. Zobacz Dokumentacja interfejsu API REST modelu programu Foundation.

Poniżej przedstawiono przykład wyodrębniania danych z dokumentów badawczych do określonego schemaJSON.

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))

Poniżej przedstawiono przykład wyodrębniania JSON, ale JSON schema nie jest znany z góry.

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))

schema JSON

Interfejsy API modelu foundation obsługują ogólnie ustrukturyzowane dane wyjściowe akceptowane przez interfejs OpenAI. Jednak użycie prostszego schema JSON dla definicji schema JSON powoduje generowanie JSON o wyższej jakości. Aby podwyższyć jakość generowania, interfejsy API modelu bazowego obsługują tylko podzestaw specyfikacji JSON schema.

Następujące klucze definicji wywołań funkcji nie są obsługiwane:

  • Wyrażenia regularne używające polecenia pattern.
  • Kompleksowe zagnieżdżenie lub kompozycja schema i walidacja przy użyciu: anyOf, oneOf, allOf, prefixItemslub $ref.
  • Listy typów z wyjątkiem specjalnego przypadku [type, “null”]where jeden typ w list jest prawidłowym typem JSON, a drugi jest "null"

Użycie tokenu

Iniekcja monitów i inne techniki są używane w celu zwiększenia jakości ustrukturyzowanych danych wyjściowych. Ma to wpływ na liczbę tokenów wejściowych i wyjściowych używanych przez model, co z kolei powoduje implikacje dotyczące rozliczeń.

Ograniczenia

  • Maksymalna liczba kluczy w JSON schema została określona jako 64.
  • Interfejsy API modelu foundation nie wymuszają ograniczeń dotyczących długości ani rozmiaru obiektów i tablic.
    • Obejmuje to słowa kluczowe, takie jak maxProperties, minPropertiesi maxLength.
  • Silnie zagnieżdżone schematy JSON powodują generowanie niższej jakości. Jeśli to możliwe, spróbuj spłaszczać schema JSON, aby uzyskać lepsze wyniki.