Pular para o conteúdo principal

Analise as avaliações dos clientes com ai_generate_text() e OpenAI

info

Visualização

Esse recurso está em Public Preview.

atenção

A função AI, ai_generate_text(), está obsoleta. A Databricks recomenda o uso do ai_query com modelos externos.

Este artigo ilustra como usar a função integrada Databricks SQL, ai_generate_text() para examinar as avaliações dos clientes e determinar se é necessário gerar uma resposta. Consulte Aplicar AI em uso de dados Databricks AI Functionspara obter mais detalhes sobre a função.

O dataset e o comando neste guia são dos blogs Databricks Action Customer Reviews at escala with Databricks SQL AI Functions .

Avaliações de clientes

Este exemplo mostra como você:

  • Dividindo o texto de avaliação de clientes em formato livre em suas entidades constituintes.
  • Para cada entidade, determinar o sentimento e se é necessária uma resposta ao cliente.
  • Gerar uma resposta mencionando produtos alternativos que possam satisfazer o cliente.

Fluxo de dados AI_generate_text

Pré-requisitos

Design rápido

O segredo para obter resultados úteis de um modelo GPT é o seguinte:

  • Fazer uma pergunta bem formulada.
  • Ser específico sobre o tipo de resposta que você espera.

Para obter resultados em um formato que possa ser facilmente armazenado em uma tabela, o senhor pode solicitar ao modelo que retorne o resultado em uma cadeia de caracteres que reflita a representação JSON e especifique o esquema esperado.

Veja a seguir um exemplo de solicitação 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 exigir acompanhamento

Retorna SOMENTE JSON. Nenhum outro texto fora do JSON.

Formato JSON:

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"
}
]
}

Resenha :

\ < 'insert_review_text_here' >

Criar funções SQL

A 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, o senhor 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.

Gerenciar chamadas para o Azure OpenAI

A seguinte função de wrapper, prompt_handler(), lida com todas as suas chamadas para o Azure OpenAI. O Azure OpenAI API key é armazenado em um segredo Databricks, e o senhor pode fazer referência a ele com a função secret(). O senhor também pode passar a ele o nome do recurso Azure OpenAI (resourceName) e o nome da implantação do modelo (deploymentName).

SQL
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 de clientes

A função annotate_review() anota sua análise com as entidades, os sentimentos das entidades e se é necessário um acompanhamento e por quê. Observe que o prompt retorna uma representação json bem formada, de modo que o senhor pode instruir a função a retornar um tipo struct para facilitar a consulta posterior, como inseri-lo em uma tabela Delta.

SQL
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>>>"
);

O senhor pode passar os dados das avaliações de clientes dataset para ver como a função annotate_review() classifica as avaliações de clientes de forma livre.

SQL
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 dos clientes, o senhor 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 a serem experimentados.

SQL
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 Country Choice Snacking Cookies.

SQL
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 prompt_handler() recém-criada.

Por exemplo, talvez você esteja interessado em saber se uma avaliação aborda bebidas.

SQL
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;