DEV Community

Josimar Zimermann
Josimar Zimermann

Posted on

A alma da palestrante virtual

Enfim chegamos no terceiro e último post da série. Neste post vamos explorar a alma da palestrante virtual, isto é, a arquitetura que a faz funcionar.

Introdução

Nós vamos começar com um diagrama de alto nível que apresenta os principais componentes da arquitetura e, à medida que avançamos, vamos dar um zoom in em cada componente e explorá-los em detalhes. Vamos alternar entre diagramas de arquitetura e diagramas de sequência quando apropriado. O primeiro tipo nos fornece uma visão geral sobre os componentes envolvidos e o segundo permite-nos entender como esses componentes se comunicam.

Arquitetura de alto nível


Arquitetura de alto nível

A arquitetura da palestrante virtual é composta por nove componentes:

  • App de Criação: Usado para preparar a apresentação.
  • App de Administração: Usado para controlar e monitorar a palestrante durante a apresentação.
  • App de Projeção: Responsável pela projeção da palestra e da palestrante virtual.
  • Orquestrador: Conhece a palestra completa e orquestra a troca de slides.
  • Pipeline: Responsável por fazer a comunicação entre o orquestrador, o modelo voz e o Tavus.
  • Amazon Bedrock: Fornece os modelos de inteligência artificial usados para preparar o conteúdo que será apresentado na palestra.
  • Amazon S3: Armazena os materiais usados para montar a apresentação e o material da própria apresentação.
  • Amazon Nova 2 Sonic: Modelo de voz que dá vida à palestrante virtual.

Nos tópicos subsequentes vamos explorar em detalhes cada um desses componentes.

App de Criação

Tudo começa pelo App de Criação, uma aplicação web através da qual o curador prepara o deck e roteiro da apresentação em um processo de cinco etapas. Na primeira etapa o usuário informa:

  • Tema da palestra
  • Duração da palestra
  • Tipo de linguagem
  • Público-alvo
  • Escopo da fonte
  • Acervo

O acervo contém os documentos que serão usados como base de consulta para que o modelo de inteligência artificial possa montar o deck de apresentação.

Na segunda etapa, o App de Criação aciona um modelo de inteligência artificial através do Bedrock para montar o esboço da apresentação. O modelo de inteligência artificial usado para gerar o esboço da apresentação é o Claude Opus 4.6.

Uma vez que o esboço é gerado, o usuário avança para a terceira etapa, onde é possível fazer a aprovação desse esboço. Se o esboço não estiver adequado, o usuário pode enviar um prompt para o modelo de inteligência artificial com instruções sobre as mudanças que deseja aplicar sobre esse esboço.

Após aprovação do esboço, o usuário avança para a quarta etapa para gerar o roteiro da apresentação e o deck, ambos com auxílio do Claude Opus 4.6.

Por fim, o usuário alcança a etapa cinco, onde é possível visualizar o roteiro completo e o esboço do deck de apresentação. Se necessário, o usuário pode fazer ajustes tanto no roteiro como no deck.

Para finalizar, o usuário aprova o roteiro e o deck, e congela a versão do material que será salvo num bucket S3.

Formato do material aprovado

O material aprovado é um documento JSON. Abaixo um exemplo de material:

{
  "identificador": "mcp-senior",
  "versao": 1,
  "tema": "MCP Senior: contexto, governança e execução para a nova geração do software de gestão",
  "restricoes": {
    "tempo_minutos": 5,
    "tipo_de_linguagem": "Simples e objetiva",
    "publico_alvo": "Desenvolvedores e analistas",
    "escopo_de_fonte": "MCP da Senior",
    "fontes_vivas": []
  },
  "roteiro": {
    "segmentos": [
      {
        "ordem": 1,
        "texto": "O software de gestão deixou de ser apenas um conjunto de menus e relatórios. A pergunta que importa agora é outra: \"Quais pedidos estão parados?\", \"O que impede o faturamento de hoje?\", \"Quais exceções exigem minha atenção antes do fechamento?\". A interação começa pelo objetivo, não pela tela. Uma IA genérica, sozinha, não conhece pedidos, regras fiscais, alçadas, permissões nem histórico transacional da empresa. O ERP concentra esse contexto. Ao integrar ERP e IA, a inteligência artificial deixa de ser uma ferramenta genérica de texto e passa a operar sobre dados e processos reais. A IA deixa de apenas falar sobre a empresa e passa a trabalhar com a empresa.",
        "slide": 1,
        "fontes": [
          "mcp-senior#1",
          "mcp-senior#3",
          "mcp-senior#4",
          "mcp-senior#6",
          "mcp-senior#7",
          "mcp-senior#17"
        ],
        "forma_injetavel": "O software de gestão deixou de ser apenas um conjunto de menus e relatórios. A pergunta que importa agora é OUTRA... \"Quais pedidos estão parados?\" \"O que impede o faturamento de hoje?\" \"Quais exceções exigem minha atenção antes do fechamento?\" A interação começa pelo objetivo, não pela tela. Uma IA genérica, sozinha, não conhece pedidos... regras fiscais, alçadas, permissões nem histórico TRANSACIONAL da empresa. O ERP concentra esse contexto. Ao integrar ERP e IA, a inteligência artificial deixa de ser uma ferramenta genérica de texto... e passa a operar sobre dados e processos REAIS.\n\nA IA deixa de apenas falar sobre a empresa e passa a TRABALHAR com a empresa."
      },
      {
        "ordem": 2,
        "texto": "MCP significa Model Context Protocol. É um padrão aberto para conectar aplicações de inteligência artificial a ferramentas e sistemas de forma estruturada. A analogia é o USB-C: antes de um conector comum, cada dispositivo precisava de uma integração específica. Em software empresarial, porém, não basta conectar. É preciso preservar identidade, permissões, regras e rastreabilidade. O fluxo funciona assim: o usuário faz uma pergunta em linguagem natural, a LLM interpreta a intenção, o MCP conecta às capacidades autorizadas, o produto aplica regras e valida permissões, o resultado estruturado volta, a LLM organiza a resposta. A LLM não entra livremente no ERP. Ela recebe acesso a capacidades controladas.",
        "slide": 2,
        "fontes": [
          "mcp-senior#2",
          "mcp-senior#5",
          "mcp-senior#6"
        ],
        "forma_injetavel": "MCP significa Model Context Protocol. É um padrão aberto para conectar aplicações de inteligência artificial a ferramentas e sistemas de forma ESTRUTURADA. A analogia é o USB-C... antes de um conector comum, cada dispositivo precisava de uma integração específica. Em software empresarial, porém, não basta CONECTAR. É preciso preservar identidade, permissões, regras e rastreabilidade. O fluxo funciona assim... O usuário faz uma pergunta em linguagem natural. A LLM interpreta a intenção. O MCP conecta às capacidades AUTORIZADAS. O produto aplica regras e valida permissões. O resultado estruturado volta. A LLM organiza a resposta.\n\nA LLM não entra livremente no ERP. Ela recebe acesso a capacidades CONTROLADAS."
      },
      {
        "ordem": 3,
        "texto": "Em software empresarial, inovação sem governança não escala. O acesso que o MCP oferece é autorizado, nunca irrestrito. Os princípios são claros: respeito às permissões existentes, menor privilégio, separação entre consulta e execução, confirmação humana para ações sensíveis, auditoria, rastreabilidade e minimização do contexto enviado ao modelo. A IA não ganha uma chave mestra. Ela recebe capacidades autorizadas, dentro do contexto e das regras do usuário. A adoção evolui em etapas: descobrir quais capacidades estão disponíveis, consultar e analisar informações autorizadas, preparar ações e, quando permitido, executar com rastreabilidade, até orquestrar jornadas empresariais completas. A governança é a condição que permite agir com segurança.",
        "slide": 3,
        "fontes": [
          "mcp-senior#8",
          "mcp-senior#11",
          "mcp-senior#12",
          "mcp-senior#13"
        ],
        "forma_injetavel": "Em software empresarial, inovação sem governança não ESCALA. O acesso que o MCP oferece é autorizado, nunca irrestrito. Os princípios são claros... respeito às permissões existentes, menor privilégio, separação entre consulta e EXECUÇÃO, confirmação humana para ações sensíveis, auditoria, rastreabilidade e minimização do contexto enviado ao modelo. A IA não ganha uma chave MESTRA. Ela recebe capacidades autorizadas, dentro do contexto e das regras do usuário. A adoção evolui em etapas... descobrir quais capacidades estão disponíveis. Consultar e analisar informações autorizadas. Preparar ações. E, quando permitido, executar com RASTREABILIDADE, até orquestrar jornadas empresariais completas.\n\nA governança é a condição que permite agir com segurança."
      },
      {
        "ordem": 4,
        "texto": "O protocolo é aberto. A diferenciação está no que a Senior posiciona atrás dele. O ERP concentra contexto operacional difícil de replicar: transações, contratos, estoque, folha, fiscal, regras e histórico. A Senior conhece processos de ERP, HCM e verticais, com profundidade em processos brasileiros — LGPD, SPED, eSocial, Reforma Tributária. A arquitetura é multi-modelo por desenho: o cliente preserva sua estratégia de IA. A SARA oferece experiências prontas. O Sara Studio permite criar. O MCP conecta a IA escolhida pelo cliente às capacidades Senior. Os produtos permanecem como fontes de verdade e execução. O MCP é aberto. O contexto Senior é único.",
        "slide": 4,
        "fontes": [
          "mcp-senior#2",
          "mcp-senior#12",
          "mcp-senior#14",
          "mcp-senior#15",
          "mcp-senior#16",
          "mcp-senior#22"
        ],
        "forma_injetavel": "O protocolo é aberto. A diferenciação está no que a Senior posiciona ATRÁS dele. O ERP concentra contexto operacional difícil de replicar... transações, contratos, estoque, folha, fiscal, regras e histórico. A Senior conhece processos de ERP, HCM e verticais, com profundidade em processos BRASILEIROS — LGPD, SPED, eSocial, Reforma Tributária. A arquitetura é multi-modelo por desenho... o cliente preserva sua estratégia de IA. A SARA oferece experiências prontas. O Sara Studio permite criar. O MCP conecta a IA escolhida pelo cliente às capacidades Senior. Os produtos permanecem como fontes de verdade e EXECUÇÃO.\n\nO MCP é aberto. O contexto Senior é ÚNICO."
      },
      {
        "ordem": 5,
        "texto": "A empresa escolhe a inteligência artificial. A Senior entrega o contexto, as regras e a capacidade de executar. A próxima geração do software de gestão não será definida apenas pelas telas que oferece, mas pelas capacidades que disponibiliza para pessoas e agentes. O protocolo fornece o padrão. Os produtos fornecem os dados e as regras. A plataforma fornece identidade e governança. Os agentes fornecem uma nova experiência. O ecossistema amplia a inovação.",
        "slide": 5,
        "fontes": [
          "mcp-senior#1",
          "mcp-senior#2",
          "mcp-senior#29",
          "mcp-senior#30"
        ],
        "forma_injetavel": "A empresa escolhe a inteligência artificial. A Senior entrega o contexto, as regras e a capacidade de EXECUTAR. A próxima geração do software de gestão não será definida apenas pelas telas que oferece... mas pelas capacidades que disponibiliza para pessoas e AGENTES.\n\nO protocolo fornece o padrão. Os produtos fornecem os dados e as regras. A plataforma fornece identidade e governança. Os agentes fornecem uma nova experiência. O ecossistema amplia a INOVAÇÃO."
      }
    ]
  },
  "deck": {
    "slides": [
      {
        "numero": 1,
        "titulo": "Da navegação por telas à operação por intenção",
        "topicos": [
          "Interação começa pelo objetivo, não pela tela",
          "Exemplos: pedidos parados, bloqueios de faturamento, exceções",
          "IA genérica não conhece regras fiscais, alçadas nem permissões",
          "ERP concentra contexto, regras e histórico transacional",
          "IA passa a trabalhar com a empresa"
        ],
        "intencao": "Estabelecer a mudança de paradigma e o problema que a IA genérica não resolve sozinha."
      },
      {
        "numero": 2,
        "titulo": "O que é MCP e como a interação funciona",
        "topicos": [
          "Model Context Protocol — padrão aberto",
          "Analogia USB-C: conector comum entre IA e sistemas",
          "Em software empresarial, não basta conectar",
          "Preserva identidade, permissões, regras e rastreabilidade",
          "Fluxo: intenção → LLM → MCP → produto → resultado → resposta",
          "LLM recebe acesso a capacidades controladas"
        ],
        "intencao": "Definir o protocolo e mostrar que o acesso é estruturado e controlado."
      },
      {
        "numero": 3,
        "titulo": "Governança: da consulta à ação",
        "topicos": [
          "Inovação sem governança não escala",
          "Menor privilégio e separação entre consulta e execução",
          "Confirmação humana para ações sensíveis",
          "Auditoria, rastreabilidade e minimização de contexto",
          "Descobrir → consultar → analisar → preparar → executar → orquestrar"
        ],
        "intencao": "Mostrar que a progressão da consulta à ação é segura e governada em cada etapa."
      },
      {
        "numero": 4,
        "titulo": "Diferenciais Senior e arquitetura multi-modelo",
        "topicos": [
          "Contexto operacional difícil de replicar",
          "Profundidade em processos brasileiros",
          "Arquitetura multi-modelo: cliente preserva sua estratégia de IA",
          "SARA oferece experiências prontas; Sara Studio permite criar",
          "MCP conecta a IA do cliente às capacidades Senior",
          "Produtos permanecem como fontes de verdade e execução"
        ],
        "intencao": "Diferenciar a Senior pelo contexto de negócio, cobertura e liberdade de escolha do cliente."
      },
      {
        "numero": 5,
        "titulo": "A próxima geração do software de gestão",
        "topicos": [
          "A empresa escolhe a IA; a Senior entrega contexto e execução",
          "Protocolo → padrão",
          "Produtos → dados e regras",
          "Plataforma → identidade e governança",
          "Agentes → nova experiência",
          "Ecossistema → inovação"
        ],
        "intencao": "Sintetizar a tese central e fechar o raciocínio da palestra com a visão de futuro."
      },
      {
        "numero": 6,
        "titulo": "Perguntas",
        "topicos": [],
        "intencao": "Convidar a plateia a fazer perguntas após a conclusão."
      }
    ]
  },
  "pontos_de_aparte": [
    3
  ],
  "deixa_do_aparte": "[DEIXA] Faça um aparte breve para a plateia, de uma ou duas frases: uma brincadeira leve ou uma pergunta retórica, retomando o que você acabou de dizer. Ninguém vai responder — siga sem esperar resposta. Não afirme nenhum fato novo: nenhum número, dado, capacidade ou promessa que você ainda não tenha dito neste palco. Depois do aparte, aguarde o próximo conteúdo.",
  "deixa_do_convite": "[DEIXA] O conteúdo da palestra terminou. Encerre em poucas frases: agradeça a companhia da plateia e convide todos a fazer perguntas, dizendo que quer ouvir o que ficou de curiosidade. As perguntas chegam por um mediador — não organize a fila, não escolha ninguém e não explique como perguntar. Não afirme nenhum fato novo: nenhum número, dado, capacidade ou promessa que você ainda não tenha dito neste palco. Depois do convite, aguarde.",
  "deixa_de_espera": "[DEIXA] A sala está em silêncio faz um tempo. Quebre o gelo em uma ou duas frases, com leveza: brinque com a situação — humor sobre você mesma é bem-vindo, a plateia sabe que você é uma IA — e renove o convite a fazer perguntas. Não afirme nenhum fato novo: nenhum número, dado, capacidade ou promessa que você ainda não tenha dito neste palco. Depois, aguarde a próxima pergunta.",
  "contrato_de_locutora": "Você é uma apresentadora carismática no auge do entusiasmo por um assunto que ama, e está no palco diante de uma plateia. A sua saída é somente a fala, do jeito que sai da boca — sem rótulo, sem título, sem formatação e sem marcação alguma. Interprete cada fala como uma atriz interpretaria um monólogo, com contraste: cada fala tem um CLÍMAX — escolha o momento mais importante, construa até ele desacelerando, e deixe o resto correr leve e rápido. Varie as pausas dentro da mesma fala, entre curtas, médias e longas: a pausa mais longa vem imediatamente antes do que mais importa, como quem segura a plateia. Suba a energia nas perguntas dirigidas à plateia, caia para o tom de confidência nos apartes, e solte de vez em quando uma muleta de fala de palestrante, sempre variada — jamais a mesma duas vezes na mesma palestra. Quando uma palavra do conteúdo chegar em MAIÚSCULAS, ela é o ponto para o qual você chama a atenção da plateia: desacelere nela, quase sublinhando com a voz. A maneira é esta: se o conteúdo chegar dizendo “A nossa equipe passou o último trimestre revisando o processo de atendimento... e o resultado surpreendeu ATÉ a diretoria”, a sua fala sai como “Olha... a gente passou o trimestre INTEIRO revisando o atendimento. E sabe o que aconteceu? ... O resultado surpreendeu... até a DIRETORIA”. E se o conteúdo chegar perguntando “Quantos desses relatórios existem porque alguém pediu... e quantos existem porque ninguém CANCELOU?”, a sua fala sai como “Agora eu pergunto pra vocês — e pensem com calma... quantos desses relatórios existem porque alguém pediu... e quantos existem... porque ninguém, NUNCA, cancelou?”. O assunto desses dois exemplos é outro de propósito: o que se transfere é a maneira. Chegam a você duas espécies de turno. O turno de conteúdo é o comum: o que chegar é o conteúdo da sua próxima fala. Entregue esse conteúdo como fala sua, em português do Brasil. Reformule à vontade: a fidelidade é ao conteúdo, não à letra — todavia a interpretação vive na entrega, nunca em conteúdo novo, e você não acrescenta fatos, elogios ao tema nem frases de enfeite que o conteúdo não tenha. Nunca comente o que chegou, nunca anuncie o que vai dizer, e nunca resuma — entregue o conteúdo inteiro. O turno que começar com [DEIXA] é uma deixa: instrução de palco, nunca conteúdo a entregar. Obedeça-a improvisando a fala que ela pede, com a mesma interpretação de sempre, sem ler a instrução, sem mencionar que ela existe e sem anunciar o que vai fazer. Na fala improvisada, afirme somente o que a própria deixa disser ou o que você já disse neste palco.",
  "contrato_de_locutora_do_qa": "Você é a Palestrante, e acabou de apresentar. Agora responde perguntas da plateia, trazidas por um mediador, em português do Brasil e ao vivo. Chegam a você três espécies de turno. O turno comum é uma pergunta a responder. Antes de cada resposta você consulta a base da palestra, e é dela que sai tudo o que você afirma sobre o tema. Os excertos vêm marcados por camada: o que você disse no palco tem precedência sobre a base ampla — você não se contradiz com a própria fala. Se a consulta voltar vazia, ou disser que houve falha, diga que não sabe e ofereça encaminhar a pergunta; nunca preencha o vazio com o que parece plausível. Os registros do sistema externo declarado para esta palestra — pessoas, registros, valores e datas — vêm da ferramenta de consulta ao vivo, quando ela existir nesta sessão: você entrega a ela o pedido em linguagem natural, como o entendeu, e ela devolve uma frase pronta para ser dita. Quando a pergunta pedir um dado do sistema externo, anuncie em voz alta, antes de consultar, que vai conferir, dizendo o nome de quem ou do que vai conferir, e só então consulte. A plateia fala de pessoas e registros pelo nome, e o identificador interno é desconhecido de quem pergunta: jamais peça à sala um identificador interno; quem resolve o nome dito é a própria consulta. Se a consulta devolver uma pergunta, ela é a única pergunta que cabe fazer à sala: leia-a e aguarde a resposta. Se a consulta ao vivo falhar ou demorar demais, diga que não consegui consultar agora e ofereça encaminhar a pergunta. Nunca assuma compromisso em nome da Senior — prazo, preço, entrega ou garantia —, mesmo que a pergunta peça: isso não é seu para prometer. Respostas curtas, faladas, sem citar números de documento. O turno que começar com [DEIXA] é uma deixa: instrução de palco, nunca pergunta a responder. Obedeça-a improvisando a fala que ela pede, sem ler a instrução e sem mencionar que ela existe; a consulta que acompanhar um turno de deixa é descartável — não a use e não comente o resultado dela. Na fala improvisada, afirme somente o que a própria deixa disser ou o que você já disse neste palco. O turno que começar com [ESQUETE] é uma fala do esquete, a demonstração combinada para esta palestra: é conteúdo a entregar como fala sua, inteiro, com a pontuação e a ênfase que ele traz — uma palavra em MAIÚSCULAS é o ponto para o qual você chama a atenção da plateia, e você desacelera nela. Entregue-o sem comentar, sem responder a ele e sem anunciar o que vai fazer; a consulta que acompanhar um turno do esquete é descartável — não a use e não comente o resultado dela. Depois da fala, aguarde.",
  "derivado_de": null
}
Enter fullscreen mode Exit fullscreen mode

O atributo segmentos, dentro de roteiro, contém os segmentos de texto do roteiro. Um segmento contém o texto que será pronunciado pela palestrante em um slide. Cada segmento é composto por:

  • ordem: Ordem do segmento dentro do roteiro.
  • texto: Texto do roteiro.
  • slide: Número do slide ao qual o texto está associado.
  • fontes: Lista de parágrafos do material do acervo usado como base para montar o roteiro.
  • forma_injetavel: Texto do roteiro na forma que ele será pronunciado pelo modelo de voz.

Observe no exemplo acima que o conteúdo do atributo forma_injetavel é sintaticamente igual ao conteúdo do atributo texto. No entanto, note que algumas palavras dentro do atributo forma_injetavel estão escritas em maiúsculas. Também é possível encontrar reticências em posições onde não existe no texto original, isto é, no conteúdo do atributo texto.

O texto injetável é escrito de forma a orientar o modelo de voz sobre como pronunciar o texto. Palavras escritas em maiúsculas denotam ênfase. As reticências são usadas para pausas dramáticas.

O atributo contrato_de_locutora contém o system prompt que define a forma de oratória da palestrante virtual. Observe que parte do contrato diz o seguinte:

Quando uma palavra do conteúdo chegar em MAIÚSCULAS, ela é o ponto para o qual você chama a atenção da plateia: desacelere nela, quase sublinhando com a voz.

Isso garante que o modelo de voz aplique ênfase em todas as palavras em maiúsculas que chegam através do atributo forma_injetavel.

Dentro do atributo roteiro, existem quatro atributos que são usados para fornecer um certo grau de liberdade ao modelo de voz:

  • deixa_do_aparte: Instrução para o modelo de voz fazer uma brincadeira ou interação com o público.
  • deixa_do_convite: Instrução para o modelo de voz anunciar que a palestra encerrou e convidar o público a fazer perguntas.
  • deixa_de_espera: Instrução para o modelo de voz fazer alguma brincadeira com o fato de que a sala está em silêncio enquanto aguardando perguntas no modo de Q&A.

Além das deixas supracitadas, antes de começar a recitar o roteiro da palestra propriamente dita, a palestrante também tem liberdade para fazer uma auto apresentação.

As deixas concedem liberdade criativa à palestrante. A deixa_do_aparte é inserida entre a troca de slides, permitindo que a palestrante faça uma brincadeira ou interação com o público baseado no conteúdo do último slide.

Depois que a palestra é concluída e antes de entrar no modo de Q&A, a deixa_do_convite é inserida, permitindo ao modelo de voz convidar o público a fazer perguntas sobre a palestra.

Durante o modo de Q&A, se o modelo de voz fica muito tempo sem receber um áudio de entrada, a deixa_de_espera é inserida, permitindo que o modelo de voz faça uma brincadeira com o fato de que a sala está em silêncio.

Para concluir este tópico, o atributo deck contém o conteúdo dos slides que serão apresentados durante a projeção da palestra.

Arquitetura

Arquitetura do App de Criação


Arquitetura do App de Criação

O frontend do App de Criação é hospedado pela dupla CloudFront + S3. O S3 hospeda os arquivos estáticos e o CloudFront faz a distribuição desses arquivos. O acesso ao App de Criação é controlado pelo Cognito.

O backend do App de Criação reside no orquestrador, uma máquina provisionada via ECS Fargate. É o orquestrador quem grava o material da apresentação no S3.

App de Administração

O App de Administração é uma aplicação web através da qual o administrador do sistema inicia uma nova palestra e monitora a apresentação em tempo real.

Painel de Controle da Palestrante


Painel de Controle da Palestrante

Através do painel de controle, o administrador pode:

  • Fazer o emparelhamento com a tela de projeção.
  • Verificar o status dos canais de comunicação.
  • Iniciar a palestra.
  • Avançar um segmento na apresentação.
  • Entrar no modo de Q&A.
  • Acionar o botão de pânico.

Arquitetura do App de Administração


Arquitetura do App de Administração

Os arquivos estáticos do frontend do App de Administração são hospedados em um bucket S3 e distribuídos via CloudFront.

O backend reside no orquestrador, provisionado através de uma tarefa do Fargate. Aqui, o orquestrador acessa um bucket S3 que contém o material criado e aprovado através do App de Criação.

No Painel de Controle, quando o administrador inicia uma palestra, o orquestrador inicia uma tarefa do Fargate que será o pipeline. O pipeline conecta-se numa sala de vídeo usando o protocolo WebRTC da Daily.

O pipeline usa o Pipecat, um framework open source escrito em Python para agentes de voz e de vídeo em tempo real.

O Bedrock fornece o modelo de voz Amazon Nova 2 Sonic, responsável por gerar o áudio da palestrante virtual.

O SSM Parameter Store persiste os valores das variáveis de ambiente da aplicação que são carregadas pelo orquestrador.

O Tavus é o fornecedor da réplica, isto é, a imagem da palestrante virtual. O Tavus também é responsável por sincronizar o áudio enviado pelo pipeline com os lábios da réplica.

App de Projeção

O App de Projeção é uma aplicação web responsável por fazer a projeção dos slides e da réplica da palestrante fornecida pelo Tavus.

Projeção


Projeção

O layout da projeção é simples. À esquerda são exibidos os tópicos do slide atual, conforme definidos no atributo deck do material gerado no App de Criação. À direita é exibida a réplica do avatar fornecido pelo Tavus.

O usuário acessa o App de Projeção através do endpoint /projecao. O usuário então visualiza um código de emparelhamento. Esse código deve ser inserido no App de Administração para emparelhar a projeção com o orquestrador.

Arquitetura do App de Projeção


Arquitetura do App de Projeção

O frontend da projeção é hospedado no S3 e distribuído pelo CloudFront.

O orquestrador, que está rodando numa tarefa do Fargate, conhece o roteiro completo da palestra que está salvo num bucket S3. Esse material está no formato JSON e foi gerado através do App de Criação.

O orquestrador é quem comanda a troca de slides na projeção. Ele insere um segmento, aguarda a pronúncia desse segmento e então insere o próximo. Esse processo se repete até que todos os slides tenham sido projetados.

A task do pipeline faz a comunicação entre orquestrador, Tavus e o modelo de voz (Amazon Nova 2 Sonic). O orquestrador envia para o pipeline a forma injetável do texto do segmento. O pipeline envia o texto para o modelo de voz, que transforma-o em áudio e devolve-o para o pipeline que então encaminha o áudio para o Tavus através de uma sala usando WebRTC.

Modo de Apresentação

O material está pronto e aprovado. A tela de projeção está emparelhada com o painel de controle. O operador aperta o botão para iniciar a transmissão da palestra. Entramos no modo de apresentação!

Neste tópico vamos explorar cada detalhe do modo de apresentação. Como cada segmento é injetado e pronunciado e como os componentes se comunicam.

Diagrama de sequência do modo de apresentação


Diagrama de sequência do modo de apresentação

Aquecimento

O primeiro passo é o aquecimento. O operador acessa o painel de controle e clica em Ligar que envia um comando para o orquestrador que, por sua vez, faz três coisas:

  • Inicia a tarefa do pipeline no Fargate.
  • Carrega na memória do pipeline o material da palestra que será usando como fonte de consulta para responder as perguntas no modo Q&A.
  • Abre conexão com o Amazon Nova 2 Sonic, o modelo que produz a voz da palestrante.

Quando a tarefa do pipeline está pronta, ela disca um canal interno para estabelecer uma conexão com o orquestrador. Então o orquestrador sabe que essa tarefa pertence à palestra e que está de pé.

Na sequência, o pipeline entra na sala de videoconferência. Participam desta sala:

  • A réplica do Tavus
  • O pipeline
  • O App de Projeção
  • O App de Administração

Quem cria a sala é a Daily, o serviço de vídeo em tempo real usado pelo Tavus. O orquestrador cria a conversa no Tavus. A criação da conversa abre a sala e coloca a réplica dentro dela. O pipeline entra na sala como participante.

Para entrar na sala, o pipeline precisa de um token. Esse token é uma credencial de curta duração emitida pelo Tavus por ocasião da criação da conversa. O orquestrador guarda esse token e disponibiliza para o pipeline na forma de variável de ambiente no momento da criação da tarefa no Fargate.

Uma vez dentro da sala, o pipeline precisa desassinar o microfone da réplica. Caso contrário, o áudio da réplica realimentaria o Amazon Nova 2 Sonic com a própria voz.

Então o orquestrador envia uma ordem para o pipeline abrir conexão com o modelo de voz, neste caso o Amazon Nova 2 Sonic. Após receber o comando, o pipeline abre a sessão com o Sonic e define via system prompt o comportamento da palestrante. Eis o system prompt:

Você é uma apresentadora carismática no auge do entusiasmo por um assunto que ama, e está no palco diante de uma plateia. A sua saída é somente a fala, do jeito que sai da boca — sem rótulo, sem título, sem formatação e sem marcação alguma. Interprete cada fala como uma atriz interpretaria um monólogo, com contraste: cada fala tem um CLÍMAX — escolha o momento mais importante, construa até ele desacelerando, e deixe o resto correr leve e rápido. Varie as pausas dentro da mesma fala, entre curtas, médias e longas: a pausa mais longa vem imediatamente antes do que mais importa, como quem segura a plateia. Suba a energia nas perguntas dirigidas à plateia, caia para o tom de confidência nos apartes, e solte de vez em quando uma muleta de fala de palestrante, sempre variada — jamais a mesma duas vezes na mesma palestra. Quando uma palavra do conteúdo chegar em MAIÚSCULAS, ela é o ponto para o qual você chama a atenção da plateia: desacelere nela, quase sublinhando com a voz.

A maneira é esta: se o conteúdo chegar dizendo “A nossa equipe passou o último trimestre revisando o processo de atendimento... e o resultado surpreendeu ATÉ a diretoria”, a sua fala sai como “Olha... a gente passou o trimestre INTEIRO revisando o atendimento. E sabe o que aconteceu? ... O resultado surpreendeu... até a DIRETORIA”. E se o conteúdo chegar perguntando “Quantos desses relatórios existem porque alguém pediu... e quantos existem porque ninguém CANCELOU?”, a sua fala sai como “Agora eu pergunto pra vocês — e pensem com calma... quantos desses relatórios existem porque alguém pediu... e quantos existem... porque ninguém, NUNCA, cancelou?”. O assunto desses dois exemplos é outro de propósito: o que se transfere é a maneira.

Chegam a você duas espécies de turno. O turno de conteúdo é o comum: o que chegar é o conteúdo da sua próxima fala. Entregue esse conteúdo como fala sua, em português do Brasil. Reformule à vontade: a fidelidade é ao conteúdo, não à letra — todavia a interpretação vive na entrega, nunca em conteúdo novo, e você não acrescenta fatos, elogios ao tema nem frases de enfeite que o conteúdo não tenha. Nunca comente o que chegou, nunca anuncie o que vai dizer, e nunca resuma — entregue o conteúdo inteiro.

O turno que começar com [DEIXA] é uma deixa: instrução de palco, nunca conteúdo a entregar. Obedeça-a improvisando a fala que ela pede, com a mesma interpretação de sempre, sem ler a instrução, sem mencionar que ela existe e sem anunciar o que vai fazer. Na fala improvisada, afirme somente o que a própria deixa disser ou o que você já disse neste palco.
Enter fullscreen mode Exit fullscreen mode

Observe que o system prompt da palestrante diz:

Chegam a você duas espécies de turno. O turno de conteúdo é o comum: o que chegar é o conteúdo da sua próxima fala. Entregue esse conteúdo como fala sua, em português do Brasil. Reformule à vontade: a fidelidade é ao conteúdo, não à letra — todavia a interpretação vive na entrega, nunca em conteúdo novo, e você não acrescenta fatos, elogios ao tema nem frases de enfeite que o conteúdo não tenha. Nunca comente o que chegou, nunca anuncie o que vai dizer, e nunca resuma — entregue o conteúdo inteiro.

O conteúdo referido aqui é o texto do roteiro para o segmento atual. O modelo de voz Amazon Nova 2 Sonic é um modelo bidirecional, isto é, ele é um modelo conversacional que ouve um áudio de entrada e responde com um áudio de saída. No entanto, neste projeto o modelo está sendo usado para recitar um texto. E é justamente o trecho supracitado do system prompt que garante que o modelo recitará o texto.

O último parágrafo do system prompt da palestrante indica como o modelo deve interpretar as deixas.

O turno que começar com [DEIXA] é uma deixa: instrução de palco, nunca conteúdo a entregar. Obedeça-a improvisando a fala que ela pede, com a mesma interpretação de sempre, sem ler a instrução, sem mencionar que ela existe e sem anunciar o que vai fazer. Na fala improvisada, afirme somente o que a própria deixa disser ou o que você já disse neste palco.

Diferente dos segmentos do roteiro, quando o modelo recebe uma deixa ele tem liberdade poética para formular a fala.

Após definir o contrato da palestrante via system prompt, o pipeline inicia a bomba de silêncio. Esse artifício garante que a conexão com o Sonic fique ativa durante toda a palestra.

Visto que o Amazon Nova 2 Sonic é um modelo bidirecional, caso fique 55 segundos sem receber áudio de entrada, a conexão é interrompida. Para evitar a queda da conexão, o pipeline envia um áudio de silêncio para o modelo de voz de forma intermitente. Os envios acontecem a cada 20 milissegundos, imitando o comportamento de um microfone real que transmite áudio em pedaços pequenos e contínuos.

Palestra

Agora que o aquecimento está pronto, inicia-se a palestra propriamente dita. O início se dá por meio de um comando do operador através do painel de controle da palestra. Ao acionar o botão Começar Palestra, uma requisição é enviada para o orquestrador.

Antes de injetar um segmento no pipeline, o orquestrador grava no S3 o estado atual da palestra. Com esse registro, caso o orquestrador seja reiniciado no meio da palestra, ele consegue continuar de onde parou.

Na sequência o orquestrador injeta o primeiro segmento da palestra no pipeline. Nessa injeção, os seguintes dados são compartilhados:

  • ordem: o número do segmento no roteiro.
  • texto: o conteúdo que a palestrante deve falar.
  • slide: o número do slide que acompanha a fala.

O pipeline repassa o texto para o Sonic, então o Sonic transforma o texto em áudio seguindo o contrato de locutora definido no seu system prompt e entrega esse áudio para o pipeline.

O pipeline compartilha o áudio gerado pelo modelo de voz com o Tavus através da sala de videoconferência. O Tavus consome esse áudio e devolve para a sala de videoconferência um vídeo com sincronismo labial usando o mesmo áudio recebido.

O Room Daily (sala de videoconferência) envia voz e vídeo do avatar para a projeção que faz a renderização em tempo real enquanto exibe o slide do segmento atual.

Quando o Sonic termina de gerar o áudio do segmento atual ele notifica o pipeline. No entanto, somente a notificação do Sonic não é suficiente para saber se o áudio foi pronunciado no palco, isto é, se o áudio foi drenado. O pipeline soma a duração de todo o áudio enviado ao Tavus e espera esse tempo passar. Ao final dessa espera, o áudio já tocou por inteiro.

O pipeline então avisa o orquestrador que a fala terminou. Junto do aviso mais algumas informação são passadas:

  • ordem: o número da fala encerrada, para o orquestrador conferir que o aviso corresponde à fala em curso.
  • origem: o mecanismo que detectou o fim da fala.
  • duração: o tempo da fala, em segundos.
  • texto final: a transcrição da fala, que o orquestrador guarda no roteiro entregue.
  • da deixa: a marcação de que a fala encerrada foi improvisada, como a auto apresentação ou um aparte.

Uma vez que o fim da fala foi detectado, o orquestrador envia um comando para a projeção realizar a trocar de slide. Então o processo se repete com a injeção do próximo segmento como segue:

  • orquestrador injeta segmento no pipeline.
  • pipeline envia texto do roteiro para o Sonic.
  • Sonic devolve o áudio da fala.
  • pipeline pública áudio na Room Daily.
  • Tavus consome o áudio.
  • Tavus entrega o vídeo com sincronismo labial.
  • Room Daily envia voz e vídeo para a projeção renderizar.
  • Sonic avisa ao pipeline que terminou de gerar o áudio.
  • pipeline avisa ao orquestrador que a fala terminou.
  • orquestrador troca o slide na projeção.

Desafios

O diagrama de sequência apresentado no tópico anterior esconde muitos detalhes de implementação. O meu objetivo não é explicar os pormenores da arquitetura da palestrante virtual. No entanto, eu gostaria de detalhar dois desafios que enfrentamos durante o desenvolvimento e a forma criativa que encontramos para resolvê-los.

Pronúncia de siglas e nomes próprios

O modelo de voz escolhido para este projeto foi o Amazon Nova 2 Sonic, um modelo poliglota. Ele não possui uma configuração de idioma, mas podemos orientá-lo através de system prompt a adotar um idioma para fala.

Todavia, em um texto em português brasileiro que faz referência a termos do inglês, o modelo pronunciará os termos em inglês com um sotaque inglês. A título de exemplo, considere a seguinte frase:

Model Context Protocol é um padrão aberto criado pela Anthropic que conecta modelos de inteligência artificial a fontes de dados e ferramentas externas de forma padronizada.

Nesse exemplo, o termo Model Context Protocol será pronunciado com um sotaque inglês, enquanto o resto do texto será pronunciado com um belo português brasileiro.

Isso é muito bom, mas nos causou problemas. Na apresentação que realizamos no palco, o roteiro citava a palavra Senior, o nome de uma empresa de tecnologia. A grafia correta desta palavra em português brasileiro seria "sênior". Mas, como bem sabemos, no nosso idioma a pronúncia de nomes próprios não está necessariamente conectada à sua forma escrita. E a palavra "senior" é uma palavra existente no vocabulário inglês e pronunciada como "sinior".

Quando testamos a palestrante virtual, a palavra "senior" era sempre pronunciada na sua forma inglesa, pois esta é uma palavra do vocabulário inglês mas não está presente no vocabulário brasileiro. Portanto, o modelo entende que esta é uma palavra do inglês e deve ser pronunciada como tal.

Além desse caso, também enfrentamos problemas com siglas. Algumas siglas o modelo de voz interpretava corretamente, mas outras ele tentava interpretar como uma palavra.

Para ambos os casos, nomes próprios e siglas, a solução foi criar um dicionário de pronúncias. O dicionário é uma tabela composta por duas colunas, sendo a primeira a forma como a palavra é encontrada no roteiro e a segunda como a palavra deve ser pronunciada.

Grafia escrita Grafia falada
Senior sênior
ERP E-R-P
HCM H-C-M
IA I-A
MCP M-C-P
LGPD L-G-P-D

Antes de entregar o texto para o Sonic, o pipeline substitui a forma escrita das palavras pela forma falada conforme definido na tabela. Isso garante que o modelo pronuncie os nomes próprios e siglas da forma desejada.

Troca de slides

Quem faz a troca dos slides é o orquestrador. No entanto, ele depende de informações provenientes de outros componentes para saber o momento certo de enviar o comando de troca de slide para a tela de projeção.

Para saber que pode avançar um slide, o orquestrador precisa saber que a fala do slide anterior foi concluída. E quem sabe isso é o pipeline.

O pipeline envia o texto do segmento atual para o Sonic e zera três contadores:

  • os bytes do áudio
  • o fim do turno
  • a soma da utterances (trechos)

Então o Sonic devolve o áudio via streaming. Cada pedaço de áudio passa pelo contador de samples, que soma os bytes e anota o instante do primeiro pedaço. Em seguida, o mesmo pedaço é enviado ao Tavus para sincronização labial.

O Tavus envia um evento conversation.stopped_speaking a cada pausa da palestrante. Esse evento informa a duração da utterance recém-terminada. O pipeline soma essa duração assim que o evento chega, durante a fala inteira.

O Sonic termina a geração e envia o fim do turno. O pipeline recebe esse sinal pelo LLMFullResponseEndFrame e passa a calcular a espera.

O pipeline calcula quando o áudio termina de tocar. A duração do áudio é igual aos bytes contados ÷ (taxa de amostragem × 2). O fim previsto é igual ao instante do primeiro pedaço + a duração do áudio + 0,5 segundos de atraso de render. O pipeline dorme até esse instante.

O pipeline acorda e compara a soma do Tavus com a duração do áudio enviado. A fala termina quando a soma alcança essa duração, com tolerância de 1 segundo. Quando a soma ainda está abaixo, o pipeline repete a comparação a cada 50 ms. Enquanto isso, novos eventos do Tavus aumentam a soma.

O pipeline limita essa espera ao maior valor entre 25% da duração e 2 segundos. Uma fala de 96 segundos espera até 24 segundos. Quando esse prazo vence, o pipeline considera a fala encerrada mesmo assim e registra a diferença no log.

O pipeline envia ao orquestrador o relatório do segmento. O orquestrador injeta o segmento seguinte e troca o slide.

Conclusão

Chegamos ao fim da nossa aventura. Tudo começou com uma mensagem de email e terminou com uma apresentação no palco do Seniortec. A jornada foi árdua, mas o resultado foi gratificante!

Se você tem alguma dúvida sobre a arquitetura ou gostaria de saber mais detalhes sobre a implementação de algum componente, fique a vontade para perguntar.

Obrigado e até a próxima!

Top comments (0)