Condividi tramite


Analizzare le recensioni dei clienti con ai_generate_text() e OpenAI

Importante

Questa funzionalità è disponibile in anteprima pubblica.

Avviso

La funzione di IA ai_generate_text() è deprecata. Databricks consiglia di usare ai_query con modelli esterni.

Questo articolo illustra come usare la funzione SQL predefinita di Databricks per ai_generate_text() esaminare le revisioni dei clienti e determinare se è necessario generare una risposta. Per altri dettagli sulla funzione, vedere Funzioni di intelligenza artificiale in Azure Databricks .

Il set di dati e i comandi in questa guida provengono dalla demo di Analisi dei clienti delle azioni di Databricks su larga scala con Funzioni di intelligenza artificiale SQL di Databricks. La demo usa dati falsi generati da OpenAI che simula le recensioni dei clienti per i prodotti alimentari inviati a un sito Web di e-commerce.

Recensioni dei clienti

Questo esempio illustra i passaggi seguenti:

  • Suddividendo il testo di revisione del cliente in formato libero nelle entità costitutive.
  • Per ogni entità, determinare il sentiment e se è necessaria una risposta al cliente.
  • Generazione di una risposta che indica prodotti alternativi che possono soddisfare il cliente.

flusso di dati ai_generate_text

Prerequisiti

  • Se si vogliono eseguire i comandi in questa guida, è necessario un set di dati per eseguirlo. È possibile creare un set di dati falso nel notebook Genera dati falsi con Funzioni di intelligenza artificiale.
  • I comandi SQL in questa guida devono essere eseguiti nell'editor di query SQL di Databricks. Non possono essere eseguiti direttamente in un notebook di Azure Databricks usando cluster interattivi.
  • La ai_generate_text() funzione è disponibile solo in anteprima pubblica nei data warehouse SQL pro o serverless.
    • Per eseguire la registrazione nell'anteprima pubblica, compilare e inviare il modulo di registrazione anteprima pubblica di Funzioni di intelligenza artificiale.
  • Una chiave OpenAI di Azure.
  • Archiviare la chiave nei segreti di Databricks. In questo esempio si archivia la chiave API nell'ambito tokens e nel segreto azure-openai. Vedere Configurare e considerazioni per ai_generate_text().

Progettazione della richiesta

Le chiavi per ottenere risultati utili da un modello GPT sono:

  • Porre una domanda ben formata.
  • Specificare il tipo di risposta che ci si aspetta.

Per ottenere risultati in un modulo che è possibile archiviare facilmente in una tabella, è possibile chiedere al modello di restituire il risultato in una stringa che riflette JSON la rappresentazione e specificare lo schema previsto.

Di seguito è riportato il prompt di esempio per questo scenario:

Un cliente ha lasciato una recensione. Segui con qualcuno che appare infelice.

Estrarre tutte le entità indicate. Per ogni entità:

  • Classificare il sentiment come ["POSITIVE","NEUTRAL","NEGATIVE"]
  • Indica se il cliente richiede un follow-up: Y o N
  • Motivo della richiesta di followup

Restituisce SOLO JSON. Nessun altro testo all'esterno del codice JSON.

Formato JSON:

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

Revisione:

<'insert_review_text_here'>

Creare funzioni SQL

Databricks consiglia di scomporre le domande in funzioni SQL granulari in modo che possano essere riutilizzate per altri scenari all'interno dell'organizzazione.

In questa sezione vengono create funzioni SQL per astrarre i dettagli della ai_generate_text() chiamata dagli utenti finali e usare tali funzioni come interfaccia per interagire con Azure OpenAI.

Gestire le chiamate ad Azure OpenAI

La funzione wrapper seguente, prompt_handler(), gestisce tutte le chiamate ad Azure OpenAI. La chiave API OpenAI di Azure viene archiviata in un segreto databricks ed è possibile farvi riferimento con la secret() funzione . È anche possibile passarlo il nome della risorsa OpenAI di Azure (resourceName) e il nome della distribuzione del modello (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"
);

Analizzare i dati delle revisioni dei clienti

La annotate_review() funzione annota la revisione con entità, sentimenti di entità e se è necessario un follow-up e perché. Si noti che il prompt restituisce una rappresentazione ben formata json , pertanto è possibile indicare alla funzione di restituire un struct tipo per semplificare l'esecuzione di query a valle, ad esempio inserendola in una tabella Delta.

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

È possibile passare dati dal set di dati delle recensioni dei clienti per vedere come la annotate_review() funzione classifica le recensioni dei clienti a mano libera.

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

Generare risposte con raccomandazioni

Dopo aver esaminato le risposte dei clienti, è possibile usare la generate_response() funzione per generare una risposta a un cliente in base al reclamo e includere raccomandazioni per i prodotti alternativi da provare.

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

Di seguito viene generata una risposta di messaggio di esempio per la revisione di un cliente in Country Choice Snacking Cookies.The following generate a sample message response for a customer's review on Country Choice Snacking Cookies.

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

Query ad hoc

È anche possibile creare query ad hoc usando la funzione appena creata prompt_handler() .

Ad esempio, potresti essere interessato a capire se una recensione discute di bevande.

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;