Compartir a través de


Análisis de las reseñas de los clientes con ai_generate_text() y OpenAI

Importante

Esta característica está en versión preliminar pública.

Advertencia

La función de IA, ai_generate_text() está en desuso. Databricks recomienda usar ai_query con modelos externos.

Aprenda a usar la función SQL integrada de Databricks, ai_generate_text(), para examinar las reseñas de los clientes y determinar si es necesario generar una respuesta. Consulte AI Functions en Azure Databricks para más información sobre la función.

El conjunto de datos y los comandos de esta guía proceden de la demostración de acción de Databricks: reseñas de clientes a escala con AI Functions de Databricks SQL. La demostración usa datos ficticios generados por OpenAI que imitan las reseñas de los clientes para los productos de comestibles enviados a un sitio web de comercio electrónico.

Reseñas de los clientes

En este ejemplo se describen los pasos siguientes:

  • Descomponer el texto libre de reseñas de clientes en sus entidades constituyentes.
  • Para cada entidad, determinar la opinión y si se requiere una respuesta al cliente.
  • Generar una respuesta que mencione productos alternativos que puedan satisfacer al cliente.

ai_generate_text data flow

Requisitos previos

Diseño de la solicitud

Las claves para obtener resultados útiles de un modelo GPT son:

  • Formularle una pregunta bien formada.
  • Especificar de forma concreta el tipo de respuesta que espera.

Para obtener resultados en un formulario que pueda almacenar fácilmente en una tabla, puede pedir al modelo que devuelva el resultado en una cadena que refleje la representación JSON y especificar el esquema esperado.

A continuación se muestra una solicitud de ejemplo para este escenario:

Un cliente dejó una reseña. Haz un seguimiento con cualquier persona que parezca infeliz.

Extrae todas las entidades mencionadas. Para cada entidad:

  • Clasifica el sentimiento como ["POSITIVO","NEUTRAL","NEGATIVO"]
  • Indica si el cliente requiere un seguimiento: S o N
  • Motivo para requerir el seguimiento

Devuelve SOLO JSON. Y ningún otro tipo de texto que no sea 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"
  }]
}

Revisión:

<’insert_review_text_here’>

Creación de funciones SQL

Databricks recomienda descomponer las preguntas en funciones de SQL pormenorizadas para que se puedan reutilizar en otros escenarios de la organización.

En esta sección, creará funciones SQL para ocultar los detalles de la llamada ai_generate_text() a los usuarios finales y usar esas funciones como interfaz para interactuar con Azure OpenAI.

Control de llamadas a Azure OpenAI

La siguiente función contenedora, prompt_handler(), controla todas las llamadas a Azure OpenAI. La clave de API de Azure OpenAI se almacena en un secreto de Databricks y puede hacer referencia a ella con la función secret(). También puede pasarle el nombre del recurso de Azure OpenAI (resourceName) y el nombre de implementación del modelo (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"
);

Análisis de datos de reseñas de clientes

La función annotate_review() anota la reseña con entidades, opiniones de entidades y si se requiere un seguimiento y por qué. Observe que la solicitud devuelve una representación json bien formada, por lo que puede indicar a la función que devuelva un tipo struct para facilitar la consulta de bajada, como insertarla en una tabla 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>>>"
);

Puede pasar datos del conjunto de datos de reseñas de clientes para ver cómo la función annotate_review() clasifica las reseñas de clientes en texto libre.

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

Generación de respuestas con recomendaciones

Después de revisar las respuestas de los clientes, puede usar la función generate_response() para generar una respuesta a un cliente en función de su queja e incluir recomendaciones para productos alternativos que probar.

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

A continuación, se genera una respuesta de mensaje de ejemplo para la reseña de un cliente en Country Choice Snacking Cookies.

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

Solicitudes específicas

También puede crear consultas específicas mediante la función prompt_handler() que acaba de crear.

Por ejemplo, puede que le interese comprender si una reseña trata de bebidas.

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;