Freigeben über


Analysieren von Kundenbewertungen mit ai_generate_text() und OpenAI

Wichtig

Dieses Feature befindet sich in der Public Preview.

Warnung

Die KI-Funktion ai_generate_text() ist veraltet. Databricks empfiehlt die Verwendung von ai_query mit externen Modellen.

In diesem Artikel wird erläutert, wie Sie die integrierte Databricks SQL-Funktion ai_generate_text() verwenden, um Kundenbewertungen zu untersuchen und um zu bestimmen, ob eine Antwort generiert werden muss. Weitere Informationen zur Funktion finden Sie unter KI-Funktionen in Azure Databricks.

Das Dataset und die Befehle in diesem Leitfaden stammen aus der Databricks-Demo Umsetzen von Kundenbewertungen im großen Stil mit den KI-Funktionen in Databricks SQL. Die Demo verwendet von OpenAI generierte gefälschte Daten, die Kundenbewertungen für Lebensmittelprodukte nachahmen, die an eine E-Commerce-Website übermittelt werden.

Customer reviews

In diesem Beispiel durchlaufen Sie folgende Schritte:

  • Unterteilen des Freitexts der Kundenbewertung in seine konstituierenden Entitäten
  • Bestimmen der Stimmung für jede Entität und ob eine Antwort an den Kunden erforderlich ist
  • Generieren einer Antwort, in der alternative Produkte erwähnt werden, die den Kunden möglicherweise zufriedenstellen

ai_generate_text data flow

Voraussetzungen

  • Wenn Sie die Befehle in diesem Leitfaden ausführen möchten, benötigen Sie ein Dataset, um es auszuführen. Sie können ein unechtes Dataset im Notebook Generieren unechter Daten mit KI-Funktionen erstellen.
  • Die SQL-Befehle in diesem Leitfaden müssen im Databricks SQL-Abfrage-Editor ausgeführt werden. Sie können nicht direkt in einem Azure Databricks-Notebook mithilfe interaktiver Cluster ausgeführt werden.
  • Die ai_generate_text()-Funktion ist nur in der Public Preview in Pro- oder serverlosen SQL-Warehouses verfügbar.
  • Ein Azure OpenAI-Schlüssel
  • Speichern Sie den Schlüssel unter Databricks-Geheimnisse. In diesem Beispiel speichern Sie den API-Schlüssel in scopetokens und secretazure-openai. Weitere Informationen finden Sie unter Einrichten und Überlegungen zu „ai_generate_text()“.

Äußerungsentwurf

Die Schlüssel zum Abrufen nützlicher Ergebnisse aus einem GPT-Modell sind:

  • Eine wohlgeformte Frage
  • Spezifische Angaben für die Art der erwarteten Antwort

Um Ergebnisse in einem Formular abzurufen, das Sie einfach in einer Tabelle speichern können, können Sie anfordern, dass das Modell das Ergebnis in einer Zeichenfolge zurückgibt, die die Darstellung JSON widerspiegelt, und das erwartete Schema angeben.

Im Folgenden finden Sie die Beispielaufforderung für dieses Szenario:

Ein Kunde hat eine Bewertung hinterlassen. Stellen Sie Nachverfolgungen bezüglich unglücklich wirkender Bewertungen an.

Extrahieren Sie alle erwähnten Entitäten. Für jede Entität:

  • Klassifizieren der Stimmung als ["POSITIVE", "NEUTRAL", "NEGATIVE"]
  • Ob der Kunde kontaktiert werden sollte: Y oder N
  • Grund für die Notwendigkeit einer Nachverfolgung

Gibt NUR JSON zurück, und keinen anderen Text außerhalb des JSON-Codes.

JSON-Format:

{
"entities": [{
    "entity_name": "entity_name",
    "entity_type": "entity_type",
    "entity_sentiment": "entity_sentiment",
    "followup": "Y or N for follow up",
    "followup_reason": "reason for followup"
  }]
}

Überprüfung:

<’insert_review_text_here’>

Erstellen von SQL-Funktionen

In Databricks wird empfohlen, Ihre Fragen in differenzierte SQL-Funktionen zu zerlegen, damit sie für andere Szenarios innerhalb Ihrer Organisation wiederverwendet werden können.

In diesem Abschnitt erstellen Sie SQL-Funktionen, um die Details des ai_generate_text()-Aufrufs von Endbenutzer*innen zu abstrahieren und diese Funktionen als Ihre Schnittstelle für die Interaktion mit Azure OpenAI zu verwenden.

Verarbeiten von Aufrufen von Azure OpenAI

Die folgende Wrapperfunktion prompt_handler() verarbeitet alle Ihre Aufrufe an Azure OpenAI. Der Azure OpenAI-API-Schlüssel wird in einem Databricks-Geheimnis gespeichert, und Sie können mit der secret()-Funktion darauf verweisen. Sie können ihn auch den Namen der Azure OpenAI-Ressource (resourceName) und den Bereitstellungsnamen (deploymentName) des Modells übergeben.

CREATE OR REPLACE FUNCTION PROMPT_HANDLER(prompt STRING)
RETURNS STRING
RETURN AI_GENERATE_TEXT(prompt,
  "azure_openai/gpt-35-turbo",
  "apiKey", SECRET("tokens", "azure-openai"),
  "temperature", CAST(0.0 AS DOUBLE),
  "deploymentName", "llmbricks",
  "apiVersion", "2023-03-15-preview",
  "resourceName", "llmbricks"
);

Analysieren von Kundenbewertungsdaten

Die annotate_review()-Funktion kommentiert Ihre Überprüfung mit Entitäten, Entitätsstimmungen und ob eine Nachverfolgung erforderlich ist und warum. Beachten Sie, dass die Eingabeaufforderung eine wohlgeformte json-Darstellung zurückgibt, sodass Sie die Funktion anweisen können, einen struct-Typ zurückzugeben, um den Downstream zu vereinfachen, z. B. das Einfügen in eine Delta-Tabelle.

CREATE OR REPLACE FUNCTION ANNOTATE_REVIEW(review STRING)
RETURNS STRUCT<entities: ARRAY<STRUCT<entity_name: STRING, entity_type: STRING, entity_sentiment: STRING, followup: STRING, followup_reason: STRING>>>
RETURN FROM_JSON(
  PROMPT_HANDLER(CONCAT(
    'A customer left a review. Follow up with anyone who appears unhappy.
     Extract all entities mentioned. For each entity:
      - classify sentiment as ["POSITIVE","NEUTRAL","NEGATIVE"]
      - whether customer requires a follow-up: Y or N
      - reason for requiring followup

    Return JSON ONLY. No other text outside the JSON. JSON format:
    {
        entities: [{
            "entity_name": <entity name>,
            "entity_type": <entity type>,
            "entity_sentiment": <entity sentiment>,
            "followup": <Y or N for follow up>,
            "followup_reason": <reason for followup>
        }]
    }

    Review:
    ', review)),
  "STRUCT<entities: ARRAY<STRUCT<entity_name: STRING, entity_type: STRING, entity_sentiment: STRING, followup: STRING, followup_reason: STRING>>>"
);

Sie können Daten aus dem Dataset für Kundenbewertungen übergeben, um zu sehen, wie die annotate_review()-Funktion Kundenbewertungen in Freitext klassifiziert.

SELECT review_body,
  ANNOTATE_REVIEW(review_body) AS review_annotated
FROM dbdemos.openai_demo.fake_reviews
WHERE product_category = "Grocery"
LIMIT 3;

Generieren von Antworten mit Empfehlungen

Nachdem Sie die Kundenantworten überprüft haben, können Sie die generate_response()-Funktion verwenden, um eine Antwort an einen Kunden basierend auf seiner Beanstandung zu generieren und Empfehlungen für alternative Produkte einzuschließen.

CREATE OR REPLACE FUNCTION GENERATE_RESPONSE(product STRING, entity STRING, reason STRING)
RETURNS STRING
RETURN PROMPT_HANDLER(
  CONCAT("What alternative products can you recommend for ", product,
    " when a customer had a complaint about ", entity, " because ", reason,
    "Give me a response in the tone of an empathetic message back to the customer; only provide the body")
);

Im Folgenden wird eine Beispielantwort für die Bewertung eines Kunden zu „Country Choice Snacking Cookies“ generiert.

SELECT GENERATE_RESPONSE("Country Choice Snacking Cookies", "cookies", "Quality issue") AS customer_response

Ad-hoc-Abfragen

Sie können auch Ad-hoc-Abfragen mit Ihrer neu erstellten prompt_handler()-Funktion erstellen.

Sie könnten zum Beispiel daran interessiert sein, zu verstehen, ob es in einer Bewertung um Getränke geht.

SELECT review_id,
  PROMPT_HANDLER(
    CONCAT(
      "Does this review discuss beverages? Answer Y or N only, no explanations or notes. Review: ", review_body)
  ) AS discusses_beverages,
  review_body
FROM dbdemos.openai_demo.fake_reviews
WHERE review_id IN ("R9LEFDWWXPDEY", "R27UON10EV9FSV", "R299ZTEFIAHRQD")
ORDER BY discusses_beverages DESC;