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.
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.
Requisitos previos
- Si desea ejecutar los comandos de esta guía, necesita un conjunto de datos. Puede crear un conjunto de datos ficticio en el cuaderno Generar datos ficticios con AI Functions.
- Los comandos SQL de esta guía deben ejecutarse en el editor de consultas SQL de Databricks. No se pueden ejecutar directamente en un cuaderno de Azure Databricks mediante clústeres interactivos.
- La función
ai_generate_text()
solo está disponible en versión preliminar pública en almacenes de SQL profesionales o sin servidor.- Para inscribirse en la vista previa pública, rellene y envíe el formulario de inscripción a la vista previa pública de AI Functions.
- Una clave de Azure OpenAI.
- Guarde la clave en secretos de Databricks. En este ejemplo se almacena la clave de API en el ámbito
tokens
y en el secretoazure-openai
. Ver Configuración y consideraciones para ai_generate_text().
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;