Share via


Klantbeoordelingen analyseren met ai_generate_text() en OpenAI

Belangrijk

Deze functie is beschikbaar als openbare preview.

Waarschuwing

De AI-functie ai_generate_text() is afgeschaft. Databricks raadt het gebruik van ai_query aan met externe modellen.

In dit artikel wordt beschreven hoe u de ingebouwde Databricks SQL-functie gebruikt om ai_generate_text() klantbeoordelingen te onderzoeken en te bepalen of er een antwoord moet worden gegenereerd. Zie AI-functies in Azure Databricks voor meer informatie over de functie.

De gegevensset en opdrachten in deze handleiding zijn afkomstig uit de databricks demo action customer reviews at scale met Databricks SQL AI Functions. De demo maakt gebruik van valse gegevens die zijn gegenereerd door OpenAI die klantbeoordelingen nabootst voor supermarktproducten die zijn ingediend op een e-commercewebsite.

Customer reviews

In dit voorbeeld wordt u stapsgewijs begeleid:

  • Het opsplitsen van vrije klantbeoordelingstekst in de samenstellende entiteiten.
  • Voor elke entiteit bepaalt u het gevoel en of een antwoord moet worden teruggestuurd naar de klant.
  • Het genereren van een antwoord met alternatieve producten die aan de klant kunnen voldoen.

ai_generate_text data flow

Vereisten

Promptontwerp

De sleutels voor het ophalen van nuttige resultaten van een GPT-model zijn:

  • Het stellen van een goed gevormde vraag.
  • Specifiek zijn over het type antwoord dat u verwacht.

Als u resultaten wilt ophalen in een formulier dat u eenvoudig in een tabel kunt opslaan, kunt u het model vragen het resultaat te retourneren in een tekenreeks die de weergave weerspiegelt JSON en het verwachte schema opgeeft.

Hier volgt een voorbeeldprompt voor dit scenario:

Een klant heeft een beoordeling achtergelaten. Neem contact op met iedereen die ongelukkig lijkt.

Pak alle vermelde entiteiten uit. Voor elke entiteit:

  • Sentiment classificeren als ["POSITIEF","NEUTRAAL","NEGATIEF"]
  • Of de klant nu een vervolg nodig heeft: Y of N
  • Reden voor opvolgen

Alleen JSON retourneren. Geen andere tekst buiten de JSON.

JSON-indeling:

{
"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"
  }]
}

Controleren:

<'insert_review_text_here'>

SQL-functies maken

Databricks raadt u aan uw vragen op te vouwen in gedetailleerde SQL-functies, zodat ze opnieuw kunnen worden gebruikt voor andere scenario's binnen uw organisatie.

In deze sectie maakt u SQL-functies om de details van de ai_generate_text() aanroep van de eindgebruikers te abstraheren en deze functies te gebruiken als uw interface voor interactie met Azure OpenAI.

Aanroepen naar Azure OpenAI verwerken

Met de volgende wrapper-functie prompt_handler()worden al uw aanroepen naar Azure OpenAI verwerkt. De Azure OpenAI API-sleutel wordt opgeslagen in een Databricks-geheim en u kunt ernaar verwijzen met de secret() functie. U kunt deze ook doorgeven aan de azure OpenAI-resourcenaam (resourceName) en de implementatienaam van het model (deploymentName).

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

Klantbeoordelingsgegevens analyseren

De annotate_review() functie annotateert uw beoordeling met entiteiten, entiteitsentimenten en of een opvolging vereist is en waarom. U ziet dat de prompt een goed opgemaakte json weergave retourneert, zodat u de functie kunt instrueren een struct type te retourneren voor eenvoudigere query's in downstream, zoals het invoegen ervan in een Delta-tabel.

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

U kunt gegevens doorgeven uit de gegevensset voor klantbeoordelingen om te zien hoe de annotate_review() functie beoordelingen van klanten in vrije vorm classificeert.

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

Antwoorden genereren met aanbevelingen

Nadat u de reacties van de klant hebt bekeken, kunt u de generate_response() functie gebruiken om een antwoord te genereren op basis van hun klacht en aanbevelingen voor alternatieve producten om te proberen.

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

Hieronder wordt een voorbeeldberichtantwoord gegenereerd voor de beoordeling van een klant over Country Choice Snacking Cookies.

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

Adhoc-query's

U kunt ook ad-hocquery's maken met behulp van uw zojuist gemaakte prompt_handler() functie.

U bent bijvoorbeeld geïnteresseerd in het begrijpen of een beoordeling dranken bespreekt.

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;