O blog da AWS

Integração entre Amazon Alexa e Amazon Bedrock

Por Cristiano Scandura, Arquiteto de Soluções no Setor Público (WWPS), AWS;

e Gabriel Martini, Arquiteto de Soluções no Setor Público (WWPS), AWS

Do Prompt ao SQL: Veja neste artigo como a IA Generativa transforma perguntas feitas na Alexa em consultas precisas a dados usando SQL.

A Inteligência Artificial Generativa (IA Generativa) é baseada em grandes Modelos de Fundação (FM), com muitos conteúdos utilizados para o seu treinamento e capaz de gerar texto, imagens, áudio, código e muito mais. Entretanto, esses dados podem estar desatualizados ou sem contexto, além da dificuldade que os modelos possuem em processar dados estruturados e gerar respostas mais determinísticas. Essa dificuldade pode ser chamada de alucinações, onde o modelo gera saídas que não condiz com os dados de entrada ou conhecimento factual. Por exemplo, ao tentar somar valores em uma tabela, o modelo pode simplesmente “inventar” números aleatórios ou inconsistentes, em vez de realizar os cálculos corretamente.

Está incapacidade de interpretar adequadamente a estrutura de linhas, colunas e células, bem como as relações complexas entre eles, pode levar a erros na identificação de valores máximos, mínimos e outras operações matemáticas. Os problemas de alucinação e imprecisão são especialmente críticos quando se trata de dados sensíveis, como informações financeiras, médicas ou científicas, onde a exatidão é fundamental, comprometendo a confiabilidade de uma aplicação que usa IA Generativa.

Uma forma de lidar com o problema de alucinações ao responder perguntas com contexto de dados estruturados é usar os modelos para gerarem consultas SQL (Structured Query Language). Ao invés de tentar interpretar diretamente tabelas e realizar operações matemáticas, pode-se utilizar um modelo treinado para gerar consultas SQL com base em linguagem natural.

A Anthropic, uma empresa fundada para criar o LLM (Large Language Model) mais seguro e capaz do mundo, criou o Claude 3, capaz de interpretar grandes janelas de contexto. Utilizando técnicas de engenharia de prompt, o modelo pode aliar a compreensão da linguagem natural aos conhecimentos especializados em SQL e estruturas de banco de dados. Para auxiliar, a Anthropic possui uma biblioteca de prompts, com vários exemplos para diferentes casos de uso, incluindo o prompt SQL Sorcerer para gerar consultas SQL. Com essa abordagem é possível gerar um código SQL com linguagem natural e orquestrar a execução dessa query utilizando serviços de banco de dados e por fim gerando uma resposta amigável para o usuário final. Veja como essa solução pode ser implementada no desenho de arquitetura abaixo:

Imagem 1: Arquitetura da solução de integração da Alexa com Amazon Bedrock

Nesta solução os usuários poderão fazer perguntas aos dados através da Alexa com a utilização de uma Skill. E utilizaremos o Amazon Bedrock, um serviço totalmente gerenciado que oferece várias opções de FMs de alta performance das principais empresas de IA, como AI21 Labs, Anthropic, Cohere, Meta, Mistral AI, Stability AI e Amazon, por meio de uma única API, além de um amplo conjunto de recursos necessários como KnowledgeBases, Agents e Guardrails para criar aplicações de IA Generativa com segurança, privacidade e responsabilidade.

O fluxo da arquitetura é descrito abaixo:

  1. O processo inicia-se com usuários fazendo perguntas em linguagem natural através da Alexa. Essas perguntas são encaminhadas para uma função AWS Lambda, um serviço para execução de códigos sem servidor e orientado a eventos. A função irá interagir com o LLM da Anthropic, mais especificamente o modelo Claude 3 Haiku, por meio das chamadas de APIs do Bedrock.
  2. O Claude 3 Haiku recebe como contexto a estrutura do banco de dados, como a descrição das tabelas e dos campos, através da pergunta do usuário e da estrutura do banco o modelo gera um código SQL. A consulta SQL gerada é então executada no Amazon Athena, que busca os dados em arquivos estruturados no formato CSV armazenados no Amazon S3. O Athena utiliza os metadados do catálogo de dados gerenciado pelo AWS Glue Data Catalog.
  3. Os dados retornados após a execução da consulta SQL são utilizados com contexto em uma nova chamada de API ao Bedrock para que o Claude 3 Haiku agora gere uma resposta em formato de texto, explicando os dados da consulta de forma natural e compreensível. Essa resposta é então retornada pela função Lambda para a Alexa que faz a conversão para áudio e responde ao usuário.
  4. Para manter a solução atualizada caso existam mudanças estruturais no banco, existe uma regra criada no Amazon Eventbridge que é acionada toda vez que os dados são atualizados no Amazon S3 e disparará uma função Lambda que atualiza os catálogos de dados no Glue executando o AWS Glue Crawler e atualizando os arquivos de contexto da solução.

Esta solução surgiu da necessidade do Instituto Federal de São Paulo — IFSP, que hoje tem mais de 50 mil alunos, para otimizar a tomada de decisão dos gestores administrativos, em um ambiente cada vez mais dinâmico e que precisa de rápidas decisões orçamentárias e educacionais, baseada em uma grande quantidade de dados. O IFSP trabalhou no desenvolvimento da skill Alexa em colaboração com a AWS, possibilitando assim a interação por linguagem natural com um conjunto complexo de dados presentes na Plataforma Nilo Peçanha, oferecendo à alta gestão um meio de acesso aos dados e indicadores educacionais para apoiar a tomada de decisões com o correto alinhamento da instituição as suas demandas estratégicas e sociais.

Os dados foram importados e armazenados em uma arquitetura de Data Lake Serverless na AWS, utilizando o S3 como camada de armazenamento o Glue e Athena para catálogo e consulta dos dados. Foram testados diferentes prompts no Claude 3 Haiku, utilizando técnicas como zero-shot e few-shot. Abaixo está o prompt que melhor atendeu esse caso de uso:

Human:
Transforme essa pergunta em linguagem natural em uma query para o AWS Athena. Responda somente com a query SQL em uma única linha. Na query o nome da tabela e das colunas devem estar entre aspas. APENAS no nome da tabela deve ter ‘”AwsDataCatalog”.”s3″.’. Não gere queries relacionadas a qualquer alterações no banco de dados gere apenas a perguntas de consulta. Assuma que o banco de dados tem as seguintes tabelas e colunas:

Tabela: RelacaoAlunoProfessorRAP
-ano (INT)
-regiao (VARCHAR)
-uf (VARCHAR)
-estado (VARCHAR)
-organizacao_academica (VARCHAR)
-instituicao (VARCHAR)
-instituicao_nome (VARCHAR)
-rap (FLOAT)
-matriculas_equivalentes_rap (INT)
-professor_equivalente_rap (INT)

Tabela: TaxaEvasao
-ano (INT)
-regiao (VARCHAR)
-uf (VARCHAR)
-estado (VARCHAR)
-organizacao_academica (VARCHAR)
-instituicao (VARCHAR)
-instituicao_nome (VARCHAR)
-nome_curso (VARCHAR)
-tipo_curso (VARCHAR)
-tipo_eixo_tecnologico (VARCHAR)
-subeixo_tecnologico (VARCHAR)
-tipo_oferta (VARCHAR)
-turno_curso (VARCHAR)
-modalidade_ensino (VARCHAR)
-nome_fonte_financiamento (VARCHAR)
-numero_de_matriculas (INT)
-matriculas_numero_de_evadidos (INT)
-matriculas_taxa_de_evasao_perc (FLOAT)

<outras tabelas…>

Observações importantes, em todas as tabelas, as colunas instituicao se refere a instituição de ensino ou instituto ou instituto federal ou cefet.

Para perguntas relacionadas a Taxa de Evasão, tabela TaxaEvasao, considere que o calculo da taxa de evasão é a somatória da coluna numero_de_matriculas divido pela somatória da coluna matriculas_numero_de_evadidos, além disto, o número tem que ser no formato decimal, sendo que o Athena vai apresentar decimal se as duas somatórias tenham um CAST para decimal. Por exemplo, para listar as taxas de evasão de 2022 a query correta seria essa:
SELECT instituicao, sum(numero_de_matriculas) as MAT, sum(matriculas_numero_de_evadidos) as EVD, CAST ((sum(numero_de_matriculas)) AS decimal(10,2))/CAST ((sum(matriculas_numero_de_evadidos)) AS decimal(10,2)) FROM “AwsDataCatalog”.”s3″.”TaxaEvasao” WHERE “ano” = 2022 GROUP BY instituicao ORDER BY “instituicao” DESC;

<outras instruções sobre as tabelas…>

Assistant:
Identifique a query gerada na sua resposta e coloque ela entre as tags <query></query>

Código 1: Prompt com o contexto das tabelas

Através desse prompt e conforme a pergunta do usuário, o Claude 3 Haiku responde com o código SQL. Por exemplo, para a seguinte pergunta “Liste a relação aluno professor do ano de 2022, só os 3 maiores.” o resultado foi:

SELECT instituicao_nome, rap
FROM “AwsDataCatalog”.”s3″.”RelacaoAlunoProfessorRAP”
WHERE ano = 2021 ORDER BY rap DESC LIMIT 3;

Código 2: SQL gerado pelo LLM

Por fim, com a query feita no Data Lake, é gerada a resposta final ao usuário de forma dinâmica utilizando novamente o LLM. O resultado retornado é:

Imagem 2: Exemplo de perguntas e respostas em testes no console de desenvolvedor da Alexa

Você pode baixar o código-fonte desta solução e rodar a sua versão da Alexa Skill acessando o exemplo publicado no repositório de exemplos oficial da AWS no endereço https://github.com/aws-samples/alexa-and-bedrock-integration

Segurança, Privacidade e Proteção

É muito importante destacar que a solução prevê a segurança dos recursos, todos os dados são criptografados em repouso e em trânsito, nativamente, tanto pelo Bedrock quanto na integração da Alexa com a função Lambda. Nesta solução habilitamos por padrão a criptografia dos dados nos bucket S3 usando chaves que podem ser criadas e gerenciadas no AWS Key Management Services (KMS).

Olhando para o Amazon Bedrock, temos que destacar também, que todos os dados são trabalhados em um contexto privado e nenhum dado é usado para retreinamentos de modelos públicos, ou seja, o serviço mantém total confidencialidade dos dados. O Bedrock está em conformidade com padrões internacionais incluindo ISO, SOC, CSA STAR Nível 2 e elegível para HIPAA, e de leis de proteção de dados como a LGPD.

No desenho abaixo demonstramos como funcionam as permissões de acesso aos serviços e recursos utilizando Roles e Policies criadas e mantidas com o uso do AWS Identity and Access Management (IAM).

Imagem 3: Permissões de acesso a serviços e recursos

Para que a Skill da Alexa possa chamar uma função Lambda será necessário configurar no console de desenvolvimento da Skill o ARN da função Lambda e, por sua vez, será necessário criar uma Resource Policy com o ID da Skill associada a função Lambda que permite ser chamada pela Skill.

É necessário também criar Resources Policy para que a função Lambda quando executada acesse os serviços Bedrock, Athena e ao catálogo do Glue. Apesar da função não acessar diretamente o Glue, a Policy associada a ela permite que, através do Athena, a Lambda acesse recursos armazenados no S3 e a chave de criptografia de dados armazenada no KMS.

Na solução não foi abordada a autorização de acesso aos dados, pois eles são públicos, mas caso você precise limitar o acesso aos dados por usuário, é possível utilizar a funcionalidade de Account Linking do Alexa Skills Kit e granularizar o acesso aos dados em sua aplicação.

Custos

O Amazon Bedrock oferece dois modelos de preços, sob demanda e provisionado. Nesta solução foi utilizada a cobrança sob demanda, que permite o uso de FMs sem a necessidade de compromissos baseados em tempo. Os modelos de geração de texto são cobrados por tokens de entrada processados e por tokens de saída gerados.

Um token compreende alguns caracteres e se refere à unidade básica de texto que um modelo aprende para entender o prompt. Para o Claude, um token representa aproximadamente 3,5 caracteres em inglês, embora o número exato possa variar dependendo do idioma utilizado. Os tokens ficam geralmente ocultos ao interagir com modelos de linguagem no nível “texto”, mas tornam-se relevantes ao examinar as entradas e saídas exatas de um modelo de linguagem.

Nas estimativas de custo com o IFSP, foram estipulados 1000 chamadas mensais e para a redução de custo, o primeiro processamento, onde é gerado a query SQL, utilizamos o LLM Claude 3 Haiku com o prompt de entrada utiliza cerca de 6 mil tokens e gera uma saída com cerca de 400 tokens, a um custo de aproximadamente USD 1.50. Na segunda parte, onde será gerada a resposta final, utilizamos o LLM Claude 3 Sonnet para ter uma resposta mais adequada, e agora com os 400 tokens como entrada e saída de cerca de 150 tokens a um custo de aproximadamente de USD 1.20.

Para informações detalhadas sobre preços, consulte a página de Preços do Amazon Bedrock.

Conclusão

“A interação em linguagem natural com os dados da plataforma Nilo Peçanha é uma evolução necessária para agilizarmos a tomada de decisões estratégicas, embasada em dados e uma inovação pela integração das ferramentas de IA Generativa da AWS no dia-a-dia dos gestores de nossa instituição”.

Bruno Luz — Pró-Reitor de Planejamento e Desenvolvimento Institucional — IFSP

“O uso de IA com a AWS permite que as áreas de TI tenham um papel inovador, abrindo portas no uso de novas tecnologias para a evolução institucional para ambientes mais preparados e ágeis a um custo acessível e compatível com a complexidade tecnológica envolvida”

Leonardo Menzani Silva — Diretor de Tecnologia da Informação — IFSP

A integração de IA Generativa com a Alexa para análise de dados, utilizando modelos avançados como o Claude 3 da Anthropic no Amazon Bedrock, simplifica a interação com dados complexos, transformando consultas em linguagem natural e retornando respostas precisas. Essa solução, exemplificada pelo sucesso no Instituto Federal de São Paulo, demonstra a eficácia da abordagem, tornando a análise de dados mais acessível.

Autores

Cristiano Scandura — Trabalha com TI desde 1998, ingressou na AWS em 2018 atuando em projetos para clientes de grande porte no setor comercial. Atualmente, é Arquiteto de Soluções no segmento de Educação para o setor público.

 

 

 

Gabriel Martini — Com experiência em engenharia de software, arquitetura de solução e ciência de dados trabalha com TI desde 2014 e ingressou na AWS em 2017. Na AWS atuou como Arquiteto de Soluções para grandes clientes, também trabalhou em iniciativas de pesquisa de dados abertos e atualmente atua como Arquiteto Especialista em Inteligência Artificial para o Setor Público, com foco em áreas como IA Generativa, MLOps e Visão Computacional.