O blog da AWS

Construa fluxos de trabalho confiáveis de análise de voz com funções duráveis do AWS Lambda e Amazon Bedrock

Por Mehdi Amrane, Sr. Solutions Architect na Amazon Web Services.

Centros de contato lidam com milhões de interações de voz mensalmente, mas transformar gravações brutas de chamadas em insights acionáveis permanece um processo manual e frágil. Com fluxos de trabalho de análise de voz, você pode diminuir o tempo médio de atendimento de uma chamada de voz de minutos para segundos e aumentar a eficiência e produtividade de seus agentes de suporte.

Hoje, esses fluxos de trabalho frequentemente requerem código personalizado para lidar com requisitos não funcionais, como lógica de repetição, gerenciamento de estado e tratamento de falhas em múltiplos serviços. Além disso, como a seleção/determinação de insights é derivada de objetivos de negócios específicos, frequentemente precisa ser personalizada para cada organização.

Nesta publicação, mostramos uma solução usando funções duráveis do AWS Lambda para criar os seguintes insights: resumo, análise de sentimento e tópicos-chave. Funções duráveis do AWS Lambda é uma capacidade do AWS Lambda, que simplifica a construção de aplicações de múltiplas etapas e fluxos de trabalho de IA. Ela permite que você escreva código sequencial com pontos de verificação automáticos, repetições integradas e tratamento de erros simplificado, para que você possa se concentrar na lógica de negócios em vez de gerenciar a orquestração.

A solução também simplifica a visualização das transcrições de conversas e insights, com uma aplicação web.

Visão geral da solução

Nesta publicação, fornecemos uma visão geral operacional da solução e, em seguida, descrevemos como configurá-la com os seguintes serviços:

A arquitetura da solução está ilustrada no seguinte diagrama:

Diagrama de arquitetura mostrando os componentes da solução e fluxo de dados para análise de voz com funções duráveis do AWS Lambda e Amazon Bedrock

Etapa 1 (Opção 1): Segmentos de transcrição são enviados por um sistema externo. Os segmentos são armazenados em um stream (Amazon Kinesis Streams).

Etapa 1 (Opção 2): Chamadas de voz são enviadas por um sistema externo para o Contact Lens Connector na AWS. As chamadas de voz são então transcritas usando Amazon Connect Contact Lens, para gerar transcrições e enviar essas transcrições para o stream.

  • Etapa 1a: O sistema externo envia uma cópia da chamada de voz para um Contact Lens Connector.
  • Etapa 1b: O Contact Lens Connector roteia a chamada de voz para o Amazon Connect Contact Lens.
  • Etapa 1c: Amazon Connect Contact Lens gera transcrições a partir de uma chamada de voz.
  • Etapa 1d: Os segmentos de transcrição são armazenados em um stream (Amazon Kinesis Streams).

Etapa 2: Uma função processadora de transcrição (função AWS Lambda) consome segmentos de transcrição do stream.

Etapa 3: A função processadora de transcrição (função AWS Lambda) armazena segmentos de transcrição em uma tabela de transcrição no Amazon DynamoDB.

Etapa 4: Uma função durável (função durável do AWS Lambda) é acionada quando novos segmentos de transcrição são armazenados na tabela de transcrição (o gatilho é implementado usando Amazon DynamoDB Streams). Ela orquestra o processamento de transcrições em 5 etapas.

  • Etapa 4a: A função durável busca os segmentos recebidos para uma determinada transcrição. Se todos os segmentos da chamada de voz estiverem disponíveis, o processamento continua para a Etapa 4b. Caso contrário, a função Lambda é interrompida (já que a transcrição ainda não está completa).
  • Etapa 4b: A função durável resume a transcrição de voz usando Amazon Bedrock.
  • Etapa 4c: A função durável gera análise de sentimento para a transcrição de voz usando Amazon Bedrock.
  • Etapa 4d: A função durável extrai tópicos-chave da transcrição de voz usando Amazon Bedrock.
  • Etapa 4e: A função durável armazena os insights conversacionais em uma tabela de análise no Amazon DynamoDB.

Etapas 5 e 6: O usuário acessa a aplicação web e se autentica.

Etapa 7: Amazon Cognito valida os detalhes de autenticação.

Etapa 8: Uma vez que o usuário está logado, a aplicação web envia uma solicitação para uma API (Amazon API Gateway) para buscar as transcrições de voz e insights conversacionais.

Etapa 9: A API chama um autorizador Lambda para confirmar que o usuário está autorizado a recuperar as transcrições de voz e insights conversacionais.

Etapa 10: A solicitação é enviada da API para uma função recuperadora (função AWS Lambda para recuperar transcrições da tabela de transcrição e insights conversacionais da tabela de análise).

Etapa 11: A função Lambda recupera transcrições da tabela de transcrição e insights conversacionais da tabela de análise.

Após a Etapa 11, o usuário agora pode consultar as transcrições e insights conversacionais da aplicação web.

Pré-requisitos

  • Uma conta AWS.
  • Um dispositivo baseado em Unix (ou dispositivo Windows com WSL configurado para executar scripts bash) com acesso à sua conta AWS com as seguintes ferramentas/bibliotecas instaladas:
    • Node.js e npm instalados.
    • Python 3.12 instalado.
    • Docker (para containerização do front-end).
    • AWS Command Line Interface (AWS CLI) configurado com permissões apropriadas.
    • CDK instalado.
  • Clone o repositório GitHub:
    git clone https://github.com/aws-samples/sample-sca-with-lambda-durable-and-bedrock.git

Configurar infraestrutura de rede e backend

Nesta seção, configuramos os recursos de rede e backend da solução.

Navegue dentro do repositório e complete as seguintes etapas para criar esses recursos:

  1. Instale dependências e construa o projeto:
    npm install
    npm run build
    cdk bootstrap
  2. Crie recursos de infraestrutura de rede (Amazon Virtual Private Cloud (Amazon VPC), sub-redes, funções IAM, grupos de segurança e endpoints VPC):
    cdk deploy ScaNetworkStack
  3. Crie recursos de backend (stream Amazon Kinesis Data Streams, tabelas Amazon DynamoDB, funções AWS Lambda, Amazon API Gateway, Amazon Cognito):
    cdk deploy ScaBackendStack

Criar a aplicação web

Nesta seção, criamos a aplicação web da solução.

Complete as seguintes etapas para criar a aplicação web:

  1. Crie um repositório Amazon Elastic Container Registry (Amazon ECR) para hospedar a imagem de container da aplicação web:
    cdk deploy ScaEcrStack
  2. Construa e implante a imagem de container no repositório Amazon ECR:
    chmod +x scripts/deploy-container.sh
    bash ./scripts/deploy-container.sh us-west-2

    Nota: Substitua us-west-2 pela sua região de implantação.

  3. Implante a aplicação web:
    cdk deploy ScaWebAppStack
  4. Implante a pilha de acesso CloudFront (opcional). Esta pilha adiciona sub-redes públicas, um gateway de internet e uma distribuição Amazon CloudFront. Nota importante: Esta pilha permite acesso à aplicação web a partir de um endpoint público usando uma distribuição Amazon CloudFront. Você pode usar esta pilha se atualmente não conseguir acessar uma aplicação web atrás de um ALB privado com uma conexão privada existente (rede privada virtual (VPN), AWS Direct Connect, etc.).
    cdk deploy ScaCloudFrontAccessStack -c enableCloudFrontAccess=true

A aplicação web agora está disponível para testes.

Se sua aplicação web for privada, a aplicação está implantada atrás de um ALB privado. Acesse-a de dentro da VPC usando o nome DNS do ALB:

aws cloudformation describe-stacks --stack-name ScaWebAppStack --query 'Stacks[0].Outputs[?OutputKey==`AlbDnsName`].OutputValue' --output text

Se sua aplicação web for pública, a aplicação está implantada atrás de uma distribuição Amazon CloudFront. Você pode acessá-la usando a URL da distribuição CloudFront:

aws cloudformation describe-stacks --stack-name ScaCloudFrontAccessStack --query 'Stacks[0].Outputs[?OutputKey==`CloudFrontUrl`].OutputValue' --output text

Configurar o pool de usuários do Amazon Cognito

Nesta seção, criamos um usuário em nosso pool de usuários do Amazon Cognito. Este usuário fará login em nossa aplicação web.

Execute o script setup-test-user.sh para criar o usuário (certifique-se de fornecer seu endereço de e-mail):

chmod +x scripts/setup-test-user.sh
./scripts/setup-test-user.sh your-email@example.com

Nota: Substitua your-email@example.com pelo seu endereço de e-mail.

Após criar o usuário, você deve receber um e-mail com uma senha temporária neste formato: “Seu nome de usuário é #seu-endereço-de-email# e a senha temporária é #senha-temporária#.”

Mantenha nota desses detalhes de login (endereço de e-mail e senha temporária) para usar mais tarde ao testar a aplicação web.

Testar a solução

Nesta seção, testamos a solução ingerindo uma transcrição no stream (Amazon Kinesis Data Streams) e visualizamos os resultados na aplicação web.

  1. Execute o script ingest-transcriptions.sh para ingerir uma transcrição de exemplo no stream:
    chmod +x scripts/ingest-transcriptions.sh
    ./scripts/ingest-transcriptions.sh
  2. Abra a URL da aplicação web em seu navegador web (seja a URL da distribuição CloudFront ou o nome DNS do ALB conforme mencionado na seção anterior).
  3. Insira suas informações de login (seu e-mail e a senha temporária que você recebeu anteriormente ao configurar o pool de usuários no Amazon Cognito) e escolha Entrar.

  4. Quando solicitado, insira uma nova senha e escolha Alterar Senha.

  5. Você agora deve ser capaz de ver uma interface web com uma transcrição conforme ilustrado na seguinte captura de tela:Interface web exibindo uma lista de transcrições de voz
  6. Selecione uma transcrição para visualizar os insights conversacionais conforme mostrado na seguinte captura de tela.Visualização detalhada de insights conversacionais mostrando resumo, sentimento e tópicos-chave para uma transcrição selecionada

Se você quiser explorar uma opção alternativa fazendo uma chamada de voz usando Amazon Connect (com Amazon Connect Contact Lens para gerar as transcrições):

Limpeza

Para garantir que nenhum custo adicional seja incorrido, remova os recursos provisionados em sua conta. Certifique-se de estar na conta AWS correta antes de excluir os recursos.

Nota importante: Você deve exercer cautela ao executar as etapas anteriores. Certifique-se de estar excluindo os recursos na conta AWS correta.

Você pode navegar até o console do AWS CloudFormation para excluir as pilhas CloudFormation associadas aos recursos provisionados.

Outra opção é destruir as pilhas usando cdk destroy em ordem reversa de dependência:

  1. Se você implantou a pilha de acesso CloudFront opcional:
    cdk destroy ScaCloudFrontAccessStack -c enableCloudFrontAccess=true
  2. Se você implantou a pilha de integração Connect opcional:
    cdk destroy ScaConnectStack -c enableConnect=true
  3. Para destruir as pilhas principais:
    cdk destroy ScaWebAppStack
    cdk destroy ScaEcrStack
    cdk destroy ScaBackendStack
    cdk destroy ScaNetworkStack

Conclusão

Nesta publicação, percorremos uma solução para criar uma aplicação web para visualizar transcrições de voz e insights conversacionais relacionados. Primeiro, criamos recursos de rede e backend. Em seguida, criamos a aplicação web. Também configuramos um pool de usuários para conceder acesso de um usuário à aplicação web. Finalmente, testamos a solução ingerindo transcrições e depois visualizando-as na aplicação web.

Para mais informações, consulte a documentação dos seguintes serviços: Amazon Bedrock, funções duráveis do AWS Lambda, Amazon ECS, Amazon API Gateway, AWS Lambda, Amazon Kinesis Streams, Amazon DynamoDB e Amazon Cognito.

Para se aprofundar nesta solução, um repositório GitHub está disponível nesta localização.


Este conteúdo foi traduzido do post original do blog, que pode ser encontrado aqui.

Autores

Mehdi Amrane é Sr. Solutions Architect na Amazon Web Services.

 

Tradutores

Daniel Abib é Arquiteto de Soluções Sênior e Especialista em Amazon Bedrock na AWS, com mais de 25 anos trabalhando com gerenciamento de projetos, arquiteturas de soluções escaláveis, desenvolvimento de sistemas e CI/CD, microsserviços, arquitetura Serverless & Containers e especialização em Machine Learning. Ele trabalha apoiando Startups, ajudando-os em sua jornada para a nuvem.
https://www.linkedin.com/in/danielabib/
Nicolas Tarzia é Senior Technical Account Manager na AWS, com mais de 13 anos de experiência, com ampla experiência em arquitetura cloud, engenharia e design de software. Atualmente está habilitando empresas do ramo de ISV (Independent Software Vendors) simplificando a operação na nuvem e otimizando os custos em cloud. Sua área de interesse são tecnologias serverless.
https://www.linkedin.com/in/nicolastarzia