Analysera kundrecensioner med ai_generate_text()
och OpenAI
Viktigt!
Den här funktionen finns som allmänt tillgänglig förhandsversion.
Varning
AI-funktionen ai_generate_text()
är inaktuell. Databricks rekommenderar att du använder ai_query med externa modeller.
Den här artikeln visar hur du använder den inbyggda Databricks SQL-funktionen för ai_generate_text()
att undersöka kundgranskningar och avgöra om ett svar behöver genereras. Se tillämpa AI på data med hjälp av Azure Databricks AI Functions för mer information om funktionen.
Datauppsättningen och kommandona i den här guiden kommer från Databricks-bloggen Åtgärdskundgranskningar i stor skala med Databricks SQL AI Functions.
Det här exemplet vägleder dig genom:
- Dela upp den kostnadsfria kundgranskningstexten i dess ingående entiteter.
- För varje entitet avgör du attityd och om ett svar krävs tillbaka till kunden.
- Genererar ett svar som nämner alternativa produkter som kan tillfredsställa kunden.
Förutsättningar
- Om du vill köra kommandona i den här guiden behöver du en datauppsättning för att köra den. Lär dig hur du generera syntetiska data.
- SQL-kommandona i den här guiden måste köras i Databricks SQL-frågeredigeraren. De kan inte köras direkt i en Azure Databricks-notebook-fil med hjälp av interaktiva kluster.
- Funktionen
ai_generate_text()
är endast tillgänglig i offentlig förhandsversion på pro- eller serverlösa SQL-lager.- Om du vill registrera dig i den offentliga förhandsversionen fyller du i och skickar registreringsformuläret för den offentliga förhandsversionen av AI Functions.
- En Azure OpenAI-nyckel.
- Lagra nyckeln i Databricks-hemligheter. I det här exemplet lagrar du API-nyckeln i scope
tokens
och secretazure-openai
. Se Inställningar och överväganden förai_generate_text()
.
Utformning av prompts
Nycklarna till att få användbara resultat tillbaka från en GPT-modell är:
- Ställa en välformulerad fråga.
- Att vara specifik om vilken typ av svar du förväntar dig.
För att få resultat i ett formulär som du enkelt kan lagra i en tabell kan du be modellen att returnera resultatet i en sträng som återspeglar JSON
representation och ange det förväntade schemat.
Följande är exempelprompten för det här scenariot:
En kund lämnade en granskning. Följ upp med alla som verkar olyckliga.
Extrahera alla nämnda entiteter. För varje entitet:
- Klassificera sentiment som ["POSITIVE","NEUTRAL","NEGATIVE"]
- Om kunden behöver en uppföljning: Y eller N
- Orsak till att kräva uppföljning
Returnera ENDAST JSON. Ingen annan text utanför 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"
}
]
}
Granska:
<”insert_review_text_here”>
Skapa SQL-funktioner
Databricks rekommenderar att dina frågor delas in i detaljerade SQL-funktioner så att de kan återanvändas för andra scenarier i din organisation.
I det här avsnittet skapar du SQL-funktioner för att sammanfatta informationen om anropet ai_generate_text()
från slutanvändarna och använda dessa funktioner som gränssnitt för att interagera med Azure OpenAI.
Hantera anrop till Azure OpenAI
Följande omslutningsfunktion, prompt_handler()
, hanterar alla dina anrop till Azure OpenAI. Azure OpenAI API-nyckeln lagras i en Databricks-hemlighet och du kan referera till den med funktionen secret()
. Du kan också skicka azure OpenAI-resursnamnet (resourceName
) och modellens distributionsnamn (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"
);
Analysera kundgranskningsdata
Funktionen annotate_review()
kommenterar din granskning med entiteter, entitetssentiment och om en uppföljning krävs och varför. Observera att prompten returnerar en välformulerad json
representation, så att du kan instruera funktionen att returnera en struct
typ för enklare frågor nedströms, till exempel infoga den i en Delta-tabell.
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>>>"
);
Du kan skicka in data från kundgranskningsdatauppsättningen annotate_review()
för att se hur funktionen klassificerar kundrecensioner med frihandsformulär.
SELECT review_body,
ANNOTATE_REVIEW(review_body) AS review_annotated
FROM dbdemos.openai_demo.fake_reviews
WHERE product_category = "Grocery"
LIMIT 3;
Generera svar med rekommendationer
När du har granskat kundsvaren kan du använda funktionen generate_response()
för att generera ett svar till en kund baserat på deras klagomål och inkludera rekommendationer för alternativa produkter att prova.
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")
);
Följande genererar ett exempelmeddelandesvar för en kunds granskning på Country Choice Snacking Cookies.
SELECT GENERATE_RESPONSE("Country Choice Snacking Cookies", "cookies", "Quality issue") AS customer_response
Adhoc-frågor
Du kan också skapa ad hoc-frågor med hjälp av din nyligen skapade prompt_handler()
funktion.
Du kan till exempel vara intresserad av att förstå om en recension diskuterar drycker.
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;