Analise avaliações de clientes com ai_generate_text()
e OpenAI
Importante
Esse recurso está em uma versão prévia.
Aviso
A função IA ai_generate_text()
foi preterida. O Databricks recomenda o uso de ai_query com modelos externos.
Este artigo ilustra como usar a função SQL interna do Databricks ai_generate_text()
examinar as avaliações do cliente e determinar se uma resposta precisa ser gerada. Consulte Funções de IA no Azure Databricks para obter mais detalhes sobre a função.
O conjunto de dados e os comandos neste guia são da demonstração do Databricks Avaliações do cliente em ação em escala com AI Functions do SQL do Databricks. A demonstração usa dados falsos gerados pela OpenAI que imitam avaliações de clientes para produtos de supermercado enviados a um site de comércio eletrônico.
Este exemplo orienta você a:
- Decompor o texto de revisão do cliente de forma livre em suas entidades constituintes.
- Para cada entidade, determinar o sentimento e se uma resposta é necessária de volta ao cliente.
- Gerar uma resposta mencionando produtos alternativos que possam satisfazer o cliente.
Pré-requisitos
- Se você deseja executar os comandos neste guia, você precisa de um conjunto de dados para executá-lo. Você pode criar um conjunto de dados falso no notebookGerar dados falsos com AI Functions.
- Os comandos SQL neste guia devem ser executados no editor de consultas SQL do Databricks. Eles não podem ser executados diretamente em um bloco de anotações do Azure Databricks usando clusters interativos.
- A função
ai_generate_text()
só está disponível na visualização pública em warehouses SQL profissionais ou sem servidor.- Para se inscrever na Visualização Pública, preencha e envie o formulário de inscrição do Visualização Pública do AI Functions.
- Uma chave Azure OpenAI.
- Armazene a chave em segredos do Databricks. Neste exemplo, você armazena a chave de API em escopo
tokens
e segredoazure-openai
. Consulte Configuração e considerações para ai_generate_text().
Design de prompt
As chaves para obter resultados úteis de um modelo GPT são:
- Fazendo uma pergunta bem formada.
- Ser específico sobre o tipo de resposta que você está esperando.
Para obter resultados em um formulário que você pode armazenar facilmente em uma tabela, você pode pedir ao modelo para retornar o resultado em uma cadeia de caracteres que reflita a representação JSON
e especificar o esquema esperado.
A seguir está o prompt de exemplo para esse cenário:
Um cliente deixou um comentário. Acompanhe quem parecer infeliz.
Extraia todas as entidades mencionadas. Para cada entidade:
- Classifique o sentimento como ["POSITIVO","NEUTRO","NEGATIVO"]
- Se o cliente precisa de um acompanhamento: S ou N
- Motivo da necessidade de acompanhamento
Retornar JSON APENAS. Nenhum outro texto fora do 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"
}]
}
Revisão:
<’insert_review_text_here’>
Criar funções SQL
O Databricks recomenda decompor suas perguntas em funções SQL granulares para que elas possam ser reutilizadas para outros cenários em sua organização.
Ao longo desta seção, você cria funções SQL para abstrair os detalhes da chamada ai_generate_text()
dos usuários finais e usa essas funções como sua interface para interagir com o Azure OpenAI.
Manipular chamadas para o Azure OpenAI
A função wrapper a seguir, prompt_handler()
, manipula todas as suas chamadas para o Azure OpenAI. A chave da API do Azure OpenAI é armazenada em um segredo do Databricks e você pode fazer referência a ela com a função secret()
. Você também pode passar o nome do recurso do Azure OpenAI (resourceName
) e o nome de implantação (deploymentName
) do modelo.
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"
);
Analisar dados de avaliação de clientes
A função annotate_review()
anota sua revisão com entidades, sentimentos de entidades e se um acompanhamento é necessário e por quê. Observe que o prompt retorna uma representação json
bem formada, para que você possa instruir a função a retornar um tipo de struct
para facilitar a consulta downstream, como inserí-la em uma tabela 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>>>"
);
Você pode passar dados do conjunto de dados de avaliações de clientes para ver como a função annotate_review()
classifica as avaliações de clientes de forma livre.
SELECT review_body,
ANNOTATE_REVIEW(review_body) AS review_annotated
FROM dbdemos.openai_demo.fake_reviews
WHERE product_category = "Grocery"
LIMIT 3;
Gere respostas com recomendações
Depois de analisar as respostas do cliente, você pode usar a função generate_response()
para gerar uma resposta a um cliente com base em sua reclamação e incluir recomendações de produtos alternativos para experimentar.
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")
);
O seguinte gera uma resposta de mensagem de exemplo para a avaliação de um cliente sobre Country Choice Snacking Cookies.
SELECT GENERATE_RESPONSE("Country Choice Snacking Cookies", "cookies", "Quality issue") AS customer_response
Consultas adhoc
Você também pode criar consultas ad-hoc usando sua função prompt_handler()
recém-criada.
Por exemplo, você pode estar interessado em entender se uma revisão discute 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;