Analysez les avis de clients avec ai_generate_text()
et OpenAI
Important
Cette fonctionnalité est disponible en préversion publique.
Avertissement
La fonction IA ai_generate_text()
est déconseillée. Databricks recommande d’utiliser ai_query avec des modèles externes.
Cet article indique comment utiliser la fonction Databricks SQL intégrée, ai_generate_text()
, pour examiner les avis des clients et déterminer si vous devez générer une réponse. Si vous souhaitez obtenir plus d’informations sur la fonction, consultez AI Functions sur Azure Databricks.
Le jeu de données et les commandes de ce guide proviennent de l’action de démonstration Databricks Action Customer Reviews at Scale with Databricks SQL AI Functions. La démonstration utilise de fausses données générées par OpenAI qui imite les avis des clients pour les produits d’épicerie soumis à un site web de commerce électronique.
Cet exemple vous guide à travers les éléments suivants :
- Décomposition de texte d’avis client de forme libre en ses entités constituantes.
- Pour chaque entité, détermination du sentiment et si une réponse au client est nécessaire.
- Génération d’une réponse mentionnant d’autres produits pouvant de satisfaire le client.
Prérequis
- Si vous souhaitez exécuter les commandes de ce guide, vous devez disposer d’un jeu de données pour l’exécuter. Vous pouvez créer un faux jeu de données dans le bloc-notes Générer des données fausses avec AI Functions.
- Les commandes SQL de ce guide doivent être exécutées dans l’éditeur de requêtes SQL Databricks. Elles ne peuvent pas être exécutées directement dans un notebook Azure Databricks en utilisant des clusters interactifs.
- La fonction
ai_generate_text()
n’est disponible qu’en préversion publique sur les entrepôts SQL Pro ou serverless.- Pour vous inscrire à la Préversion publique, veuillez remplir et envoyer le formulaire d’inscription à la Préversion publique d’AI Functions.
- Une clé Azure OpenAI.
- Stockez la clé dans des secrets Databricks. Dans cet exemple, vous stockez la clé API dans l’étendue
tokens
et le secretazure-openai
. Voir Configurer et considérations pour ai_generate_text().
Conception d’invite
Les clés pour obtenir des résultats utiles à partir d’un modèle GPT sont les suivantes :
- Lui poser une question bien formulée.
- Être précis sur le type de réponse attendu.
Pour obtenir des résultats dans un formulaire que vous pouvez facilement stocker dans une table, vous pouvez demander au modèle de renvoyer le résultat dans une chaîne qui reflète une la représentation JSON
et de spécifier le schéma attendu.
Voici l’exemple d’invite pour ce scénario :
Un client a laissé un avis. Suivez les personnes qui paraissent mécontentes.
Extrayez toutes les entités mentionnées. Pour chaque entité :
- Classifier le sentiment comme étant [« POSITIF »,« NEUTRE »,« NÉGATIF »]
- Indique si le client a besoin d’un suivi : O ou N
- Raison de l’exigence d’un suivi
Renvoyer JSON UNIQUEMENT. Aucun autre texte en dehors du JSON.
Format 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"
}]
}
Révision :
<’insert_review_text_here’>
Créer des fonctions SQL
Databricks recommande de décomposer vos questions en fonctions SQL granulaires afin qu’elles puissent être réutilisées pour d’autres scénarios au sein de votre organisation.
Tout au long de cette section, vous créez des fonctions SQL afin d’extraire les détails de l’appel ai_generate_text()
des utilisateurs finaux et d’utiliser ces fonctions comme interface pour interagir avec Azure OpenAI.
Gérer des appels à Azure OpenAI
La fonction wrapper suivante, prompt_handler()
, gère tous vos appels à Azure OpenAI. La clé API Azure OpenAI est stockée dans un secret Databricks et vous pouvez la référencer avec la fonction secret()
. Vous pouvez également lui transmettre le nom de la ressource Azure OpenAI (resourceName
) et le nom de déploiement du modèle (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"
);
Analyser les données d’avis client
La fonction annotate_review()
annote votre révision avec des entités, des sentiments d’entité et indique si un suivi est nécessaire et pourquoi. Notez que l’invite retourne une représentation bien formulée json
, de sorte que vous pouvez demander à la fonction de retourner un type struct
pour faciliter l’interrogation en aval, par exemple l’insérer dans une table 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>>>"
);
Vous pouvez transmettre des données à partir du jeu de données d’avis des clients pour voir comment la fonction annotate_review()
classifie les avis des clients de forme libre.
SELECT review_body,
ANNOTATE_REVIEW(review_body) AS review_annotated
FROM dbdemos.openai_demo.fake_reviews
WHERE product_category = "Grocery"
LIMIT 3;
Générer des réponses avec des recommandations
Après avoir passé en revue les réponses des clients, vous pouvez utiliser la fonction generate_response()
pour générer une réponse à un client en fonction de sa plainte et inclure des recommandations relatives à d’autres produits à essayer.
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")
);
Ce qui suit génère un exemple de message de réponse pour l’avis d’un client sur Country Choice Snacking Cookies.
SELECT GENERATE_RESPONSE("Country Choice Snacking Cookies", "cookies", "Quality issue") AS customer_response
Requêtes ad hoc
Vous pouvez également créer des requêtes ad hoc en utilisant votre fonction nouvellement créée prompt_handler()
.
Par exemple, vous pourriez être intéressé de savoir si un avis évoque des boissons.
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;