ai_classify-Funktion

Gilt für:durch Häkchen mit „Ja“ markiert Databricks SQL durch Häkchen mit „Ja“ markiert Databricks Runtime

Die ai_classify() Funktion klassifiziert Textinhalte entsprechend den von Ihnen bereitgestellten benutzerdefinierten Bezeichnungen. Sie können einfache Bezeichnungsnamen für die grundlegende Klassifizierung verwenden oder Bezeichnungsbeschreibungen und Anweisungen hinzufügen, um die Genauigkeit für Anwendungsfälle wie Kundensupportrouting, Dokumentkategorisierung und Inhaltsanalyse zu verbessern.

Die Funktion akzeptiert Text oder VARIANT Ausgabe von anderen KI-Funktionen wie ai_parse_documentz. B. das Aktivieren von komponierbaren Workflows.

Eine UI-Version zum Durchlaufen ai_classifyfinden Sie unter Klassifizierung.

Anforderungen

Apache 2.0-Lizenz

Die zugrunde liegenden Modelle, die derzeit verwendet werden können, sind unter der Apache 2.0-Lizenz, Copyright © The Apache Software Foundation lizenziert. Kunden sind dafür verantwortlich, die Einhaltung anwendbarer Modelllizenzen sicherzustellen.

Databricks empfiehlt, diese Lizenzen zu überprüfen, um die Einhaltung der geltenden Bedingungen zu gewährleisten. Wenn in Zukunft Modelle entstehen, die gemäß den internen Benchmarks von Databricks besser funktionieren, kann Databricks das Modell (und die Liste der anwendbaren Lizenzen auf dieser Seite) ändern.

Das Modell, das diese Funktion unterstützt, wird mithilfe von Model Serving Foundation Model-APIs verfügbar gemacht. Informationen dazu, welche Modelle für Databricks verfügbar sind, sowie die Lizenzen und Richtlinien, die die Verwendung dieser Modelle regeln, finden Sie unter "Anwendbare Modellbedingungen ".

Wenn Modelle entstehen, die gemäß den internen Benchmarks von Azure Databricks besser funktionieren, können Databricks die Modelle ändern und die Dokumentation aktualisieren.

Tip

Databricks empfiehlt die Verwendung von Version 2.1 für ai_classify. Version 1.0 ist eine ältere Schnittstelle, die diese Funktionen nicht unterstützt und nicht für neue oder Produktionsworkloads empfohlen wird.

Version 2.0 unterstützt:

  • Bezeichnungsbeschreibungen für verbesserte Genauigkeit
  • Klassifizierung mit mehreren Bezeichnungen
  • Globale Anweisungen
  • Bis zu 500 Bezeichnungen im Vergleich zu 20 in Version 1.0
  • VARIANT Eingaben von vorgelagerten KI-Funktionen wie ai_parse_document
  • Gibt eine strukturierte VARIANT Mit Fehlerinformationen zurück.

Version 2.1 unterstützt außerdem Folgendes:

  • Konfidenzbewertungen für jede zurückgegebene Bezeichnung, aktiviert mit enableConfidenceScores
  • Rationales erläutern die einzelnen zurückgegebenen Bezeichnungen, aktiviert mit enableRationales

In Version 2.1 ist jede Klassifizierung response ein Pro-Label-Objekt mit einem value Schlüssel anstelle einer nur-Bezeichnungszeichenfolge. Diese Ausgabe-Shape-Änderung gilt für alle Version 2.1-Aufrufe, auch wenn die neuen Optionen deaktiviert sind. Der Wechsel von Version 2.0 auf 2.1 ist nicht ausgabekompatibel. Aktualisieren Sie Ihre Abfragen und nachgeschalteten Code, um die Bezeichnung aus dem value Schlüssel zu lesen, anstatt sie direkt zu lesen.

Um eine Version explizit anzuheften, übergeben Sie options => map('version', '2.1').

Syntax

ai_classify(content, labels [, options])

Version 2

ai_classify(content, labels [, options])

Version 1 (Legacy)

ai_classify(content, labels [, options])

Argumente

  • content: Ein VARIANT- oder STRING-Ausdruck. Akzeptiert entweder:

  • labels: Ein STRING Ausdruck, der die Klassifizierungsbezeichnungen definiert. Dies kann ein Zeichenfolgenliteral oder ein beliebiger SQL-Ausdruck sein, der zu einer STRING, einschließlich einer Delta-Tabellenspalte, ausgewertet wird. Die Bezeichnungen können folgende Sein:

    • Einfache Bezeichnungen: Ein JSON-Array von Bezeichnungsnamen.
      ["urgent", "not_urgent"]
      
    • Bezeichnungen mit Beschreibungen: Eine JSON-Objektzuordnungsbezeichnungsnamen zu Beschreibungen. Bezeichnungsbeschreibungen müssen 0 bis 1000 Zeichen lang sein.
      {
        "billing_error": "Payment, invoice, or refund issues",
        "product_defect": "Any malfunction, bug, or breakage",
        "account_issue": "Login failures, password resets"
      }
      

    Jede Beschriftung muss 1 bis 100 Zeichen lang sein. labels mindestens 2 Etiketten und nicht mehr als 500 Etiketten enthalten. Taxonomien, die größer als 500 Bezeichnungen sind, finden Sie in der Klassifizierung mit 500 Beschriftungen.

  • options: Optional enthaltende MAP<STRING, STRING> Konfigurationsoptionen:

    • version: Versionswechsel zur Unterstützung der Migration ("1.0", "2.0"oder "2.1"). Der Standardwert basiert auf Eingabetypen, fällt jedoch auf "1.0".
    • instructions: Globale Beschreibung der Aufgabe und Domäne zur Verbesserung der Klassifizierungsqualität. Muss kleiner als 20.000 Zeichen sein.
    • multilabel: Legen Sie fest, dass "true" mehrere Bezeichnungen zurückgegeben werden, wenn mehrere Kategorien angewendet werden. Der Standardwert ist "false" (Klassifizierung mit einer bezeichnungsbasierten Bezeichnung).
    • enableConfidenceScores: Legen Sie für "true" jede zurückgegebene Bezeichnung eine confidence_score (0 bis 1) fest. Erfordert Version "2.1". Der Standardwert ist "false".
    • enableRationales: Legen Sie fest, dass "true" sie eine kurze Begründung enthält, die jede zurückgegebene Beschriftung erläutert, die im Eingabetext geerdet wird. Erfordert Version "2.1". Der Standardwert ist "false".

Version 2

  • content: Ein VARIANT- oder STRING-Ausdruck. Akzeptiert entweder:

  • labels: Ein STRING Ausdruck, der die Klassifizierungsbezeichnungen definiert. Dies kann ein Zeichenfolgenliteral oder ein beliebiger SQL-Ausdruck sein, der zu einer STRING, einschließlich einer Delta-Tabellenspalte, ausgewertet wird. Die Bezeichnungen können folgende Sein:

    • Einfache Bezeichnungen: Ein JSON-Array von Bezeichnungsnamen.
      ["urgent", "not_urgent"]
      
    • Bezeichnungen mit Beschreibungen: Eine JSON-Objektzuordnungsbezeichnungsnamen zu Beschreibungen. Bezeichnungsbeschreibungen müssen 0 bis 1000 Zeichen lang sein.
      {
        "billing_error": "Payment, invoice, or refund issues",
        "product_defect": "Any malfunction, bug, or breakage",
        "account_issue": "Login failures, password resets"
      }
      

    Jede Beschriftung muss 1 bis 100 Zeichen lang sein. labels mindestens 2 Etiketten und nicht mehr als 500 Etiketten enthalten. Taxonomien, die größer als 500 Bezeichnungen sind, finden Sie in der Klassifizierung mit 500 Beschriftungen.

  • options: Optional enthaltende MAP<STRING, STRING> Konfigurationsoptionen:

    • version: Version switch to support migration ("1.0" for v1 behavior, "2.0" for v2 behavior). Der Standardwert basiert auf Eingabetypen, fällt jedoch auf "1.0".
    • instructions: Globale Beschreibung der Aufgabe und Domäne zur Verbesserung der Klassifizierungsqualität. Muss kleiner als 20.000 Zeichen sein.
    • multilabel: Legen Sie fest, dass "true" mehrere Bezeichnungen zurückgegeben werden, wenn mehrere Kategorien angewendet werden. Der Standardwert ist "false" (Klassifizierung mit einer bezeichnungsbasierten Bezeichnung).

Version 1 (Legacy)

  • content: Ein STRING Ausdruck, der den zu klassifizierenden Text enthält.

  • labels: Ein ARRAY<STRING> Literal mit den erwarteten Ausgabeklassifizierungsbezeichnungen. Muss mindestens 2 Elemente und höchstens 20 Elemente enthalten. Jede Beschriftung muss 1 bis 50 Zeichen lang sein.

  • options: Optional enthaltende MAP<STRING, STRING> Konfigurationsoptionen:

    • version: Version switch to support migration ("1.0" for v1 behavior, "2.0" for v2 behavior). Der Standardwert basiert auf Eingabetypen, fällt jedoch auf "1.0".

Rückgaben

Gibt einen enthaltenden Wert zurück VARIANT :

{
  "response": [{ "value": "label_name", "confidence_score": 0.97, "rationale": "Short justification for the label." }],
  "metadata": {
    "version": "2.1"
  },
  "error_message": null // null on success, or error message on failure
}

Jedes Element in response ist ein Pro-Label-Objekt mit einem value Schlüssel anstelle einer nur-Beschriftungszeichenfolge. Ist enableConfidenceScores dies "true"der Zeitpunkt, enthält jedes Objekt auch ein confidence_score (0-1). Wenn enableRationales dies der Zeitpunkt ist "true", enthält jedes Objekt auch ein rationale. Wenn beide Optionen aktiviert sind, lautet valuedie Schlüsselreihenfolge in jedem Objekt , confidence_scoreund dann rationale.

Das response Feld enthält:

  • Einzelbeschriftungsmodus (Standard): Ein Array mit einem Element, das die beste übereinstimmende Bezeichnung enthält
  • Modus mit mehreren Bezeichnungen (multilabel: "true"): Ein Array mit mehreren Bezeichnungen, wenn mehrere Kategorien angewendet werden
  • Bezeichnungsnamen stimmen exakt mit denen überein, die labels im Parameter angegeben sind.

Gibt zurück NULL , wenn contentNULL der Inhalt nicht klassifiziert werden kann.

Version 2

Gibt einen enthaltenden Wert zurück VARIANT :

{
  "response": ["label_name"], // Array with single label (or multiple if multilabel=true)
  "metadata": {
    "version": "2.0"
  },
  "error_message": null // null on success, or error message on failure
}

Das response Feld enthält:

  • Einzelbeschriftungsmodus (Standard): Ein Array mit einem Element, das die beste übereinstimmende Bezeichnung enthält
  • Modus mit mehreren Bezeichnungen (multilabel: "true"): Ein Array mit mehreren Bezeichnungen, wenn mehrere Kategorien angewendet werden
  • Bezeichnungsnamen stimmen exakt mit denen überein, die labels im Parameter angegeben sind.

Gibt zurück NULL , wenn contentNULL der Inhalt nicht klassifiziert werden kann.

Version 1 (Legacy)

Gibt ein STRING. Der Wert stimmt mit einer der Zeichenfolgen überein, die im labels-Argument angegeben sind.

Gibt zurück NULL , wenn contentNULL der Inhalt nicht klassifiziert werden kann.

Beispiele

Einfache Bezeichnungen – nur Bezeichnungsnamen

In Version 2.1 ist jede Klassifizierung ein Pro-Label-Objekt mit einem value Schlüssel anstelle einer einfachen Zeichenfolge, auch wenn die neuen Optionen deaktiviert sind.

> SELECT ai_classify(
    'My password is leaked.',
    '["urgent", "not_urgent"]',
    MAP('version', '2.1')
  );
 {
   "response": [{"value": "urgent"}],
   "metadata": {
     "version": "2.1"
   },
   "error_message": null
 }

Mit Konfidenzergebnissen

> SELECT ai_classify(
    'My password is leaked.',
    '["urgent", "not_urgent"]',
    MAP('version', '2.1', 'enableConfidenceScores', 'true')
  );
 {
   "response": [{"value": "urgent", "confidence_score": 0.97}],
   "metadata": {
     "version": "2.1"
   },
   "error_message": null
 }

Mit Rationalen

> SELECT ai_classify(
    'My password is leaked.',
    '["urgent", "not_urgent"]',
    MAP('version', '2.1', 'enableRationales', 'true')
  );
 {
   "response": [{"value": "urgent", "rationale": "A leaked password is a security incident requiring immediate action."}],
   "metadata": {
     "version": "2.1"
   },
   "error_message": null
 }

Mit Konfidenzergebnissen und Rationalen (Multibezeichnung)

> SELECT ai_classify(
    'Customer wants refund and reports product arrived broken.',
    '{
      "billing_issue": "Payment or refund requests",
      "product_defect": "Damaged or malfunctioning items"
    }',
    MAP('version', '2.1', 'multilabel', 'true', 'enableConfidenceScores', 'true', 'enableRationales', 'true')
  );
 {
   "response": [
     {"value": "billing_issue", "confidence_score": 0.91, "rationale": "Customer explicitly requests a refund."},
     {"value": "product_defect", "confidence_score": 0.88, "rationale": "Reports the product arrived broken."}
   ],
   "metadata": {
     "version": "2.1"
   },
   "error_message": null
 }

Kompositierbarkeit mit ai_parse_document

> WITH parsed_docs AS (
    SELECT
      path,
      ai_parse_document(
        content,
        MAP('version', '2.0')
      ) AS parsed_content
    FROM READ_FILES('/Volumes/support/tickets/', format => 'binaryFile')
  )
  SELECT
    path,
    ai_classify(
      parsed_content,
      '["billing_error", "product_defect", "account_issue", "feature_request"]',
      MAP('version', '2.1', 'instructions', 'Customer support ticket classification.')
    ) AS ticket_category
  FROM parsed_docs;

Batchklassifizierung

> SELECT
    description,
    ai_classify(
      description,
      '["clothing", "shoes", "accessories", "furniture", "electronics"]',
      MAP('version', '2.1')
    ) AS category
  FROM products
  LIMIT 10;

Klassifizierung mit 500+ Bezeichnungen

Um mit mehr als 500 Bezeichnungen zu klassifizieren, empfehlen wir, Ihre Dokumente und Bezeichnungen einzubetten, die obersten K-Etiketten pro Dokument abzurufen und dann auf der kleineren Teilmenge ausgeführt zu ai_classify werden.

Siehe Lernprogramm: Klassifizieren von Dokumenten mit 500 Beschriftungen für eine schrittweise exemplarische Vorgehensweise.

Version 2

Einfache Bezeichnungen – nur Bezeichnungsnamen

> SELECT ai_classify(
    'My password is leaked.',
    '["urgent", "not_urgent"]'
  );
 {
   "response": ["urgent"],
   "metadata": {
     "version": "2.0"
   },
   "error_message": null
 }

Bezeichnungen mit Beschreibungen

> SELECT ai_classify(
    'Customer cannot complete checkout due to payment processing error.',
    '{
      "billing_error": "Payment, invoice, or refund issues",
      "product_defect": "Any malfunction, bug, or breakage",
      "account_issue": "Login failures, password resets",
      "feature_request": "Customer suggestions for improvements"
    }'
  );
 {
   "response": ["billing_error"],
   "metadata": {
     "version": "2.0"
   },
   "error_message": null
 }

Beschriftungen aus Delta-Tabelle

Übergeben Sie Bezeichnungen aus einer Delta-Tabelle, indem Sie sie in eine JSON-Zeichenfolge konvertieren. Wenn Sie beispielsweise eine Bezeichnungstabelle mit Schema news_topics(topic STRING, description STRING)verwenden, können Sie Ihre Bezeichnungen ai_classify wie folgt übergeben:

SELECT
  ai_classify(
    "Leicester City Wins Premier League Title at 5000-1 Odds",
    l.labels,
    MAP('version', '2.0')
  ) AS classification
FROM (
  SELECT to_json(map_from_entries(collect_list(struct(topic, description)))) AS labels
  FROM news_topics
) l;

Verwenden globaler Anweisungen

> SELECT ai_classify(
    'User reports app crashes on startup after update.',
    '["critical", "high", "medium", "low"]',
    MAP('instructions', 'Classify bug severity based on user impact and frequency.')
  );
 {
   "response": ["critical"],
   "metadata": {
     "version": "2.0"
   },
   "error_message": null
 }

Klassifizierung mit mehreren Bezeichnungen

> SELECT ai_classify(
    'Customer wants refund and reports product arrived broken.',
    '{
      "billing_issue": "Payment or refund requests",
      "product_defect": "Damaged or malfunctioning items",
      "shipping_issue": "Delivery problems"
    }',
    MAP('version', '2.0','multilabel', 'true')
  );
 {
   "response": ["billing_issue", "product_defect"],
   "metadata": {
     "version": "2.0"
   },
   "error_message": null
 }

Version 1 (Legacy)

> SELECT ai_classify("My password is leaked.", ARRAY("urgent", "not urgent"));
  urgent

> SELECT
    description,
    ai_classify(description, ARRAY('clothing', 'shoes', 'accessories', 'furniture')) AS category
  FROM
    products
  LIMIT 10;

Einschränkungen

Einschränkungen für Version 2.1:

  • Diese Funktion ist für Azure Databricks SQL Classic nicht verfügbar.

  • Diese Funktion kann nicht mit Ansichten verwendet werden.

  • Bezeichnungsnamen müssen jeweils 1 bis 100 Zeichen lang sein.

  • Der labels Parameter muss zwischen 2 und 500 eindeutigen Bezeichnungen enthalten.

  • Bezeichnungsbeschreibungen müssen jeweils 0 bis 1.000 Zeichen lang sein.

  • Die maximale Gesamtkontextgröße beträgt 128.000 Token.

Version 2

Einschränkungen der Version 2:

  • Diese Funktion ist für Azure Databricks SQL Classic nicht verfügbar.

  • Diese Funktion kann nicht mit Ansichten verwendet werden.

  • Bezeichnungsnamen müssen jeweils 1 bis 100 Zeichen lang sein.

  • Der labels Parameter muss zwischen 2 und 500 eindeutigen Bezeichnungen enthalten.

  • Bezeichnungsbeschreibungen müssen jeweils 0 bis 1.000 Zeichen lang sein.

  • Die maximale Gesamtkontextgröße beträgt 128.000 Token.

Version 1 (Legacy)

Einschränkungen der Version 1 (Legacy):

  • Diese Funktion ist für Azure Databricks SQL Classic nicht verfügbar.

  • Diese Funktion kann nicht mit Ansichten verwendet werden.

  • Bezeichnungsnamen müssen jeweils 1 bis 50 Zeichen lang sein.

  • Das labels Array muss zwischen 2 und 20 Bezeichnungen enthalten.

  • Die content Eingabe muss kleiner als 128.000 Token sein (ca. 300.000 Zeichen).