Analise as avaliações dos clientes com ai_generate_text()
e OpenAI
Importante
Esta funcionalidade está em Pré-visualização Pública.
Aviso
A função ai_generate_text()
de IA está obsoleta. A Databricks recomenda o uso de ai_query com modelos externos.
Este artigo ilustra como usar a função ai_generate_text()
interna Databricks SQL para examinar as avaliações dos clientes 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 Action Customer Reviews at Scale with Databricks SQL AI Functions. A demonstração usa dados falsos gerados pela OpenAI que imitam avaliações de clientes de produtos de supermercado enviados para um site de comércio eletrônico.
Este exemplo orienta você:
- Dividir 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 para o cliente.
- Gerar uma resposta mencionando produtos alternativos que possam satisfazer o cliente.
Pré-requisitos
- Se quiser executar os comandos deste guia, você precisa de um conjunto de dados para executá-lo. Você pode criar um conjunto de dados falso no notebook Gerar dados falsos com funções de IA .
- 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
ai_generate_text()
função só está disponível em visualização pública em armazéns SQL profissionais ou sem servidor.- Para se inscrever na Visualização Pública, preencha e envie o formulário de inscrição do AI Functions Public Preview.
- Uma chave OpenAI do Azure.
- Armazene a chave em segredos do Databricks. Neste exemplo, você armazena a chave da API no escopo
tokens
e no segredoazure-openai
. Consulte Configuração e considerações para ai_generate_text().
Design rápido
As chaves para obter resultados úteis de volta de um modelo GPT são:
- Fazendo-lhe 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 JSON
a representação e especificar o esquema esperado.
A seguir está o prompt de exemplo para esse cenário:
Um cliente deixou um comentário. Acompanhe qualquer pessoa que pareça infeliz.
Extraia todas as entidades mencionadas. Para cada entidade:
- Classifique o sentimento como ["POSITIVO","NEUTRO","NEGATIVO"]
- Se o cliente precisa de um acompanhamento: Y ou N
- Motivo para a 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 em outros cenários dentro da sua organização.
Ao longo desta seção, você cria funções SQL para abstrair os detalhes da chamada dos usuários finais e usa essas funções como sua interface para interagir com o ai_generate_text()
Azure OpenAI.
Lidar com chamadas para o Azure OpenAI
A seguinte função de wrapper, prompt_handler()
, lida com 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 secret()
função. Você também pode passar o nome do recurso do Azure OpenAI (resourceName
) e o nome da implantação do 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"
);
Analise os dados de avaliação do cliente
A annotate_review()
função anota sua avaliação com entidades, sentimentos de entidades e se um acompanhamento é necessário e por quê. Observe que o prompt retorna uma representação bem formada json
, para que você possa instruir a função a retornar um struct
tipo para facilitar a consulta a jusante, como inseri-lo 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 classifica as annotate_review()
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;
Gerar respostas com recomendações
Depois de analisar as respostas do cliente, você pode usar a generate_response()
função 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 um exemplo de resposta de mensagem para a avaliação de um cliente sobre os cookies de lanche Country Choice.
SELECT GENERATE_RESPONSE("Country Choice Snacking Cookies", "cookies", "Quality issue") AS customer_response
Consultas ad hoc
Você também pode criar consultas ad-hoc usando sua função recém-criada prompt_handler()
.
Por exemplo, você pode estar interessado em entender se uma avaliaçã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;