Analyser les avis clients avec ai_generate_text() et OpenAI
Aperçu
Cette fonctionnalité est en aperçu public.
La fonction AI, ai_generate_text() est obsolète. Databricks recommande d'utiliser ai_query avec des modèles externes.
Cet article illustre comment utiliser la fonction Databricks SQL intégrée, ai_generate_text(), pour examiner les avis des clients et déterminer si une réponse doit être générée. Pour plus de détails sur la fonction, consultez la section Enrichir des données à l'aide d'AI Functions.
Les commandes et le dataset de ce guide sont issus du blog Databricks : Faire passer à l'échelle les avis clients avec les Databricks SQL AI Functions.

Cet exemple vous guide à travers :
- Décomposition du texte d'avis client de forme libre en ses entités constitutives.
- Pour chaque entité, déterminer le sentiment et si une réponse est requise pour le client.
- Génération d'une réponse mentionnant des produits alternatifs susceptibles de satisfaire le client.

Prérequis
-
Si vous souhaitez exécuter les commandes de ce guide, vous avez besoin d'un dataset pour les exécuter. Découvrez comment générer des données synthétiques.
-
Les commandes SQL de ce guide doivent être exécutées dans l'éditeur de requêtes Databricks SQL. Ils ne peuvent pas être exécutés directement dans un notebook Databricks à l'aide de clusters interactifs.
-
La fonction
ai_generate_text()est uniquement disponible en préversion publique sur les SQL Warehouse Pro ou Serverless.- Pour vous inscrire à la préversion publique, veuillez remplir et soumettre le formulaire d’inscription à la préversion publique des AI Functions.
-
Une clé Azure OpenAI.
-
Stockez la clé dans les secrets Databricks. Dans cet exemple, vous stockez la clé API dans scope
tokenset secretazure-openai. Voir Configuration et considérations pourai_generate_text().
Conception de prompt
Les clés pour obtenir des résultats utiles d'un modèle GPT sont :
- Lui poser une question bien formulée.
- Préciser le type de réponse que vous attendez.
Afin d'obtenir des résultats sous une forme 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 la représentation JSON, et spécifier le schéma attendu.
Voici l'exemple d'invite pour ce scénario :
Un client a laissé un avis. Faites un suivi auprès de toute personne qui semble insatisfaite.
Extraire toutes les entités mentionnées. Pour chaque entité :
- Classer le sentiment comme [“POSITIVE”,”NEUTRAL”,”NEGATIVE”]
- Si le client nécessite un suivi : Oui ou Non
- Motif nécessitant un suivi
Retourner uniquement le JSON. 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'abstraire les détails de l'appel ai_generate_text() des utilisateurs finaux, et vous utilisez ces fonctions comme interface pour interagir avec Azure OpenAI.
Gérer les appels vers 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 y faire référence 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"
);
Analysez les données d'avis clients
La fonction annotate_review() annote votre révision avec les entités, les sentiments d'entité, et si un suivi est requis et pourquoi. Notez que l'invite renvoie une représentation json bien formée, vous pouvez donc demander à la fonction de renvoyer un type struct pour une interrogation plus facile en aval, comme l'insertion 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 les données du dataset d'avis clients pour voir comment la fonction annotate_review() classifie les avis clients sous 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 examiné 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 de produits alternatifs à 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")
);
Ceci génère un exemple de réponse de message pour l'avis d'un client sur les biscuits 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 queries ad-hoc en utilisant votre fonction prompt_handler() nouvellement créée.
Par exemple, vous pourriez souhaiter comprendre si un avis parle de 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;