
Compartilhar:
Kitt é um Engenheiro de Soluções Técnicas da Vonage. Ele gosta de desenvolver integrações com NodeJS em diversos serviços de plataforma em nuvem. Em seu tempo livre, ele gosta de andar de UTV pelas Montanhas Organ e praticar caiaque por todo o território dos EUA.
Agentes de vídeo com IA: Vonage, Pipecat e AgentCore
Introdução
Os desenvolvedores agora podem adicionar participantes de IA conversacional diretamente em sessões de vídeo ao vivo. Em vez de videochamadas passivas, é possível criar agentes de IA que ouvem, respondem e interagem naturalmente durante conversas ao vivo.
Neste tutorial, você implantará um agente de IA para sessões de Video usando o Vonage Video Transport para Pipecat e o AWS Nova Sonic. O repositório oferece duas opções: desenvolvimento local usando o Docker para iterações rápidas e implantação em produção com o agente rodando inteiramente no AWS Bedrock AgentCore Runtime. Este tutorial orienta você em ambas as etapas — comece localmente para validar seu pipeline e, em seguida, implante em produção com o `agentcore deploy` e o AWS App Runner.
O Vonage Video Transport para Pipecat permite que você desenvolva aplicativos baseados em IA que participam de forma integrada das sessões da Video API da Vonage. Esse protocolo de transporte permite que você receba áudio e vídeo dos participantes da sessão e envie de volta à sessão, em tempo real, o áudio e o vídeo processados.
O Pipecat é uma estrutura de código aberto para a criação de aplicativos de IA conversacional de voz e multimodal. O Vonage Video Connector faz a ponte entre o pipeline de processamento de mídia do Pipecat e as sessões da Video API do Vonage, possibilitando uma ampla gama de casos de uso. O AWS Nova Sonic é otimizado para interações de voz conversacionais de baixa latência, tornando-o ideal para sessões de vídeo ao vivo. AWS Bedrock AgentCore Runtime é uma infraestrutura segura e sem servidor, projetada para implantar e escalar agentes de Voice e IA em tempo real e com baixa latência em grande escala, sem a complexidade de gerenciar servidores subjacentes.
Você vai usar:
Transportador WebRTC do Vonage Video Connector para o Pipecat para orquestração de pipelines de IA
AWS Nova Sonic para IA de voz
AWS Bedrock AgentCore permite que os desenvolvedores implantem e dimensionem agentes de IA.
Pule esta parte e encontre o código funcional para este exemplo no GitHub.
O que você vai desenvolver
Ao final deste tutorial, você terá:
Um agente de IA implantado no AWS Bedrock AgentCore Runtime — um contêiner sem servidor totalmente gerenciado que executa seu pipeline do Pipecat
Um endpoint público do App Runner que processa o webhook de acionamento do agente e transmite o contexto da sessão ao AgentCore
Respostas faladas em tempo real da IA usando o AWS Nova Sonic (de voz para voz, sem cadeia de STT/TTS)
Uma arquitetura de produção que não requer EC2, ECS nem ALB — basta a implantação do agentcore e um serviço App Runner
Um fluxo de teste validado utilizando o Vonage Playground antes da integração com o aplicativo de referência Vonage Video React
Pré-requisitos
Antes de começar, certifique-se de ter o seguinte:
A Account da API da Vonage com a Video API ativada
Uma account da AWS com acesso ao Amazon Bedrock para o Nova Sonic (
amazon.nova-2-sonic-v1:0)Python 3.13 necessário para o vonage-video-connector >= 1.0.0
uv gerenciador de pacotes (
brew install uvno macOS)Docker Desktop - necessário porque o SDK do Vonage Video Connector, no momento, roda apenas no Linux
ngrok para desenvolvimento local
AWS CLI configurada (
aws configure --profile profile-name)
Como o Bedrock e o AgentCore funcionam em conjunto
Este projeto utiliza dois serviços complementares da AWS:
Serviço | Função |
|---|---|
Amazon Bedrock (Nova Sonic) | Executa a inferência do modelo para conversas em tempo real de fala para fala |
Amazon Bedrock AgentCore | Ambiente de execução gerenciado que hospeda a lógica do agente implantável — invocado no início da sessão para preparar o agente com contexto, perfil ou acesso a ferramentas |
Como eles funcionam juntos neste repositório:
Bedrock + Agent Core (produto final) — juntos, formam um agente pronto para produção com ferramentas de gerenciamento
Leito rochoso por si só - uma opção mais leve para experimentos rápidos e agentes conversacionais simples
Ampliado - adicionar recursos do mundo real, como RAG, chamadas de API e consultas ao CRM, juntamente com voz de baixa latência
Versão resumida: o Bedrock fornece as respostas; o AgentCore executa a lógica do aplicativo do agente implantável.
Visão geral da arquitetura
A integração segue um fluxo baseado em WebRTC: o agente de IA entra na sessão do Vonage Video como participante, utilizando o SDK do Vonage Video Connector. Em seguida, o Pipecat orquestra o pipeline de IA, encaminhando o áudio pelo AWS Nova Sonic para o processamento de voz para voz. Se configurado, o AgentCore prepara o agente no início da sessão com contexto personalizado ou acesso a ferramentas.
Architecture overview: Vonage Video session → Pipecat pipeline → AWS Nova Sonic → AgentCore.
Desenvolvimento local
Navegador (Vonage Playground) se conecta à sessão de vídeo WebRTC da Vonage.
POST /join {vonage_session_id, vonage_token}é enviada para FastAPI (app/main.py, porta 8000).FastAPI inicia
VonageVideoConnectorTransport(WebRTC), ingressando na sessão como um participante nativo.O Pipecat Pipeline processa a mídia.
AWS Nova Sonic é responsável pelo processamento de IA.
O áudio é transmitido de volta aos participantes da sessão de Video.
Produção
Navegador (Aplicativo de referência do Vonage Video React) envia
POST /answer {vonage_session_id, vonage_token}.App Runner (
answer/server.py— ponto de extremidade HTTPS público) chamaAgentCoreRuntimeClient.generate_presigned_url().Isso é aprovado
vonage_session_id+vonage_tokenpara AgentCore .AgentCore Runtime (
runtime/agent.py, porta 8080, ARM64, Python 3.13) inicializa oBedrockAgentCoreApp.@app.websocket /wsaguardawebsocket.accept().VonageVideoConnectorTransportparticipa da sessão do Vonage Video como participante nativo.O Pipecat Pipeline encaminha o áudio para o AWS Nova Sonic.
O áudio é transmitido de volta aos participantes da sessão de Video.
Componentes principais
Componente | Função | O que o aplicativo faz |
|---|---|---|
Gerenciamento de sessões do navegador e roteamento de mídia | Gerencia a sessão de video com vários participantes e controla o roteamento de mídia entre os participantes. | |
Participante da sessão WebRTC no lado do servidor | Permite que o agente de IA participe da sessão como um participante nativo do WebRTC, enviando e recebendo áudio como um participante humano. | |
Orquestração de mídia e modelos em tempo real | Coordena o fluxo de áudio entre a sessão de Video e o AWS Nova Sonic. | |
Inteligência de conversão de fala para fala de baixa latência | Ouve o áudio dos participantes e gera respostas faladas por IA em tempo real. | |
Ambiente de execução gerenciado para lógica de agente implantável | Uma camada gerenciada opcional utilizada no início da sessão para fornecer ao agente informações de contexto, perfil ou instruções de acesso às ferramentas. |
Antes de começar: crie uma aplicação e uma sessão do Vonage Video
Antes de configurar seu ambiente, você precisa do aplicativo Vonage Video e de um ID de sessão.
Criar um aplicativo de vídeo da Vonage
Faça login no Painel da Vonage
Acesse Applications → Criar um novo aplicativo
Ativar Video de vídeo
Clique Gerar chave pública e privada — isso faz o download
private.keySalve o aplicativo — copie o ID do aplicativo
Criar uma sessão de vídeo do Vonage
No Painel da Vonage, acesse Video → Ferramentas → Playground
Selecione seu aplicativo
Clique em “Criar sessão” — copie o ID da sessão
Use o modo de mídia roteada ao utilizar o Video Connector. Use um função de token de editor para o participante da sessão de IA.
Agora você tem:
VONAGE_APPLICATION_ID— seu ID de aplicativo da VonageVONAGE_SESSION_ID— seu ID de sessão de Video da Vonageprivate.key— baixado para o seu computador
Passo 1: Clonar o repositório
git clone https://github.com/Vonage-Community/vonage-pipecat-aws-agentcore.git
cd vonage-pipecat-aws-agentcoreA estrutura do repositório:
vonage-pipecat-aws-agentcore/
├── app/ # DESENVOLVIMENTO LOCAL — Aplicativo FastAPI (main.py, agent.py), porta 8000
├── runtime/ # PRODUÇÃO — BedrockAgentCoreApp (agent.py), implantação do agentcore, Python 3.13 ARM64
├── answer/ # PRODUÇÃO — manipulador /answer (App Runner)
├── tests/ # Etapas de validação C1–C6
├── docker-compose.yml
├── .env.example
└── README.md
Etapa 2: Configure seu ambiente
Sempre utilize funções do IAM ou credenciais temporárias em ambiente de produção. Nunca insira segredos da AWS diretamente no código nem os envie para o controle de versão.
cp .env.example .envAbrir .env e preencha suas credenciais:
# Vonage Video API
VONAGE_APPLICATION_ID=your-vonage-application-id
VONAGE_PRIVATE_KEY=private.key
VONAGE_SESSION_ID=your-vonage-session-id
# AWS
AWS_PROFILE=your-aws-profile
AWS_DEFAULT_REGION=us-east-1
BEDROCK_MODEL_ID=amazon.nova-2-sonic-v1:0O repositório completo
.env.exampleno repositório contém configurações adicionais para tempos limite, limites de sessão e configurações de produção. As três variáveis acima são tudo o que você precisa para executar a demonstração local.
Configure seu perfil da AWS
aws configure --profile vonage-dev
export AWS_PROFILE=vonage-dev
aws sts get-caller-identity --profile vonage-dev Criar uma sessão de vídeo do Vonage
Para criar uma sessão do Vonage Video, faça login no Painel do Vonage, acesse Video → Ferramentas → Playgrounde crie uma sessão roteada. Copie o ID da sessão para o seu .env arquivo.
Use routed o modo de mídia ao utilizar o Video Connector. Use uma publisher função de token para o participante da sessão de IA.
Etapa 3: Executar localmente com o Docker
O SDK do Vonage Video Connector requer o Linux. No macOS ou no Windows, o Docker cuida disso automaticamente.
Execute o aplicativo completo a partir da raiz do repositório:
docker compose --profile app up --build
Verifique se ele está em execução:
curl http://localhost:8000/
# {"status": "ok"}
curl http://localhost:8000/status
# {"running": true, "connected": false, "last_error": null}O aplicativo se conecta automaticamente VONAGE_SESSION_ID ao ser iniciado. Abra o Vonage Playground, entre na mesma sessão e fale. O agente responde com respostas faladas em tempo real usando o AWS Nova Sonic.
Gerenciamento de sessões:
# Force the agent to leave the session
curl -X POST http://localhost:8000/leave
# Rejoin with a new or existing session
curl -X POST http://localhost:8000/join \
-H "Content-Type: application/json" \
-d '{"session_id": "your-session-id"}'O AWS Nova Sonic tem uma janela de conexão de aproximadamente 8 minutos por sessão. O aplicativo emite um
session_renewal_recommendedevento antes que o limite seja atingido. Use/leave, então,/joinpara atualizar a sessão sem reiniciar o contêiner.
Assim que o agente estiver funcionando localmente, siga as etapas 5 a 7 para fazer a implantação em produção.
Etapa 4: Criar o pipeline de IA do Pipecat
O núcleo do aplicativo é a VonagePipecatAgent classe em agent.py. A integração do Vonage Video Connector com o Pipecat atua como camada de transporte, recebendo quadros de áudio da sessão de Video e enviando respostas de IA de volta.
from pipecat.transports.vonage.video_connector import (
VonageVideoConnectorTransport,
VonageVideoConnectorTransportParams,
)
from pipecat.services.aws.nova_sonic.llm import AWSNovaSonicLLMService, Params
from pipecat.processors.aggregators.llm_response_universal import LLMContextAggregatorPair
# Vonage Video Connector transport — joins session as WebRTC participant
transport = VonageVideoConnectorTransport(
application_id=application_id,
session_id=session_id,
token=token,
params=VonageVideoConnectorTransportParams(
audio_in_enabled=True,
audio_out_enabled=True,
video_in_enabled=False,
video_out_enabled=False,
publisher_name="Vonage AI Assistant",
audio_in_sample_rate=16000,
audio_in_channels=1,
# Nova Sonic returns 24kHz audio — output sample rate must match
audio_out_sample_rate=24000,
audio_out_channels=1,
vad_analyzer=SileroVADAnalyzer(),
audio_in_auto_subscribe=True,
video_in_auto_subscribe=False,
),
)
# AWS Nova Sonic — speech-to-speech AI
nova_sonic = AWSNovaSonicLLMService(
access_key_id=frozen_credentials.access_key,
secret_access_key=frozen_credentials.secret_key,
session_token=frozen_credentials.token,
region=aws_region,
model=bedrock_model_id,
params=Params(
input_sample_rate=16000,
input_channel_count=1,
# Must match audio_out_sample_rate above
output_sample_rate=24000,
output_channel_count=1,
),
system_instruction="You are a helpful voice assistant for a Vonage video session. Keep responses brief and conversational.",
)
# LLMContextAggregatorPair maintains conversational memory across user and assistant turns
context_aggregator = LLMContextAggregatorPair(context)
# 5-stage pipeline with context aggregators for conversation memory
pipeline = Pipeline([
transport.input(), # Audio in from Vonage Video session
context_aggregator.user(), # Accumulate user speech turns
nova_sonic, # Speech-to-speech AI processing
context_aggregator.assistant(), # Accumulate assistant responses
transport.output(), # Audio out back to Vonage Video session
]) Etapa 5: Implemente seu agente com o AgentCore
O AgentCore é o ambiente de execução gerenciado do AWS Bedrock para implantar e dimensionar agentes de IA em produção, sem a necessidade de gerenciar servidores ou infraestrutura de contêineres por conta própria. Ele está disponível para uso geral (GA).
Neste projeto, o AgentCore é o host de tempo de execução, e, portanto, todo o agente Pipecat é executado dentro do AgentCore Runtime. O agente ingressa na sessão do Vonage Video como um participante WebRTC nativo a partir do AgentCore.
Quando um usuário aciona o agente, o App Runner gera uma nova URL do WebSocket do AgentCore pré-assinada e a transmite vonage_session_id e vonage_token para o AgentCore por meio do contexto de invocação. O AgentCore encaminha a conexão para o /ws , onde VonageVideoConnectorTransport se junta à sessão de Video como um participante nativo do WebRTC.
# runtime/agent.py — runs inside AgentCore Runtime
from bedrock_agentcore.runtime import BedrockAgentCoreApp
from pipecat.transports.vonage.video_connector import (
VonageVideoConnectorTransport,
VonageVideoConnectorTransportParams,
)
from pipecat.audio.vad.silero import SileroVADAnalyzer
app = BedrockAgentCoreApp()
@app.websocket("/ws")
async def ws_handler(websocket: WebSocket, context: dict) -> None:
await websocket.accept() # mandatory — BedrockAgentCoreApp does not auto-accept
# Session context from AgentCore invoke payload — dynamic per call
session_id = context.get("vonage_session_id")
token = context.get("vonage_token")
transport = VonageVideoConnectorTransport(
application_id=application_id,
session_id=session_id,
token=token,
params=VonageVideoConnectorTransportParams(
audio_in_enabled=True,
audio_out_enabled=True,
video_in_enabled=False,
video_out_enabled=False,
vad_analyzer=SileroVADAnalyzer(),
audio_in_auto_subscribe=True,
),
)
await websocket.accept()deve ser chamado explicitamente.BedrockAgentCoreAppEle não aceita automaticamente conexões WebSocket; omitir essa chamada faz com que o AgentCore feche a conexão com o erro 1008: “limite do buffer de gravação excedido”.
Implemente seu agente no AgentCore:
cd runtime/
agentcore configure \
-e agent.py \
-r us-east-1 \
-n your_agent_name \
--non-interactive \
--deployment-type direct_code_deploy \
--runtime PYTHON_3_13 \
-rf requirements.txt
AWS_PROFILE=vonage-dev agentcore deploy -a your_agent_name
# → Copy Runtime ARN from output — you'll need it for Step 6Este aplicativo requer o Python 3.13.
vonage-video-connector>=1.0.0requer>=3.13,<3.14. Use--runtime PYTHON_3_13emagentcore configure.
Seu agente agora está em execução no AgentCore. A Vonage se conecta diretamente ao endpoint integrado do AgentCore /ws — sem necessidade de EC2, ECS ou EKS.
Etapa 6: Implantar o App Runner /answer Operador
O App Runner lida com o webhook de acionamento do agente. Ele gera uma nova URL do WebSocket do AgentCore pré-assinada para cada sessão e passa o contexto da sessão para o AgentCore:
# answer/answer.py
from bedrock_agentcore.runtime import AgentCoreRuntimeClient
client = AgentCoreRuntimeClient(region=region)
presigned_url = client.generate_presigned_url(
runtime_arn,
session_id=session_id
)
# Returns presigned_url in JSON response
# vonage_session_id and vonage_token passed to AgentCore invoke contextCompilar e enviar para o ECR:
TMPDIR=$(mktemp -d)
ECR="{account}.dkr.ecr.us-east-1.amazonaws.com/vonage-agentcore-video-answer"
docker build --platform linux/amd64 -t vonage-agentcore-video-answer ./answer
docker tag vonage-agentcore-video-answer:latest $ECR:latest
ECR_PASS=$(aws ecr get-login-password --region us-east-1)
echo "$ECR_PASS" | DOCKER_CONFIG="$TMPDIR" docker login \
--username AWS --password-stdin {account}.dkr.ecr.us-east-1.amazonaws.com
DOCKER_CONFIG="$TMPDIR" docker push $ECR:latestCrie o serviço App Runner:
Veja README.md para obter o aws apprunner create-service .
Atualizar as variáveis de ambiente do App Runner:
aws apprunner update-service --service-arn <arn> \
--source-configuration '{
"ImageRepository": {
"ImageConfiguration": {
"RuntimeEnvironmentVariables": {
"AGENTCORE_RUNTIME_ARN": "<runtime-arn-from-step-5>",
"VONAGE_APPLICATION_ID": "<your-vonage-application-id>",
"AWS_DEFAULT_REGION": "us-east-1"
}
}
}
}'Configuração do IAM no App Runner:
Função | Diretor | Permissões |
|---|---|---|
Função da instância | tasks.apprunner.amazonaws.com | AmazonBedrockFullAccess + BedrockAgentCoreFullAccess |
Função de acesso ECR | build.apprunner.amazonaws.com | Política de serviço do AWSAppRunner para acesso ao ECRA |
Seu endpoint do App Runner já está ativo:
https://{service-id}.us-east-1.awsapprunner.com/answer Etapa 7: Teste com o Vonage Playground
Com seu agente em execução no AgentCore e o App Runner implantado, valide toda a pilha de produção usando o Vonage Playground— sem necessidade de um aplicativo cliente personalizado.
Etapa 7.1: Criar uma sessão do Vonage Video
Faça login no seu Painel da Vonage → Video → Ferramentas → Playground. Crie uma sessão roteada e copie o ID da sessão.
Etapa 7.2: Gerar um token de editor para o agente
No Vonage Playground, gere um token de editor para a sessão do agente.
Etapa 7.3: Acionar o agente por meio do App Runner
curl -X POST https://{service-id}.us-east-1.awsapprunner.com/answer \
-H "Content-Type: application/json" \
-d '{
"vonage_session_id": "<your-session-id>",
"vonage_token": "<publisher-token>"
}'
# Expected response:
# {"status": "started", "vonage_session_id": "..."} Etapa 7.4: Participe da sessão no Vonage Playground
Acesse Vonage Playground
Insira sua chave de API e ID da sessão
Gerar um token de assinante para você mesmo
Clique Conectar—agora você está na mesma sessão que o agente
Fale — o agente responde em tempo real por meio do Nova Sonic
Agora você deve ver o agente aparecer como um segundo participante na sessão. Quando você fala, o Nova Sonic processa seu áudio, e o agente responde. O áudio do agente é transmitido de volta para todos os participantes da sessão.
Monitore os logs durante o teste:
AWS_PROFILE=vonage-dev aws logs tail \
/aws/bedrock-agentcore/runtimes/{runtime-id}-DEFAULT \
--log-stream-name-prefix "$(date +%Y/%m/%d)/[runtime-logs]" \
--follow \
--region us-east-1 Lista de verificação da produção
Tempo de execução: Use o Python 3.13 para o AgentCore Runtime — o vonage-video-connector requer versão >=3.13,<3.14
ARM64: Compile o contêiner AgentCore com a opção --platform linux/arm64
WebSocket: await websocket.accept() como primeira linha no arquivo runtime/agent.py no manipulador @app.websocket
Contexto da sessão: Passe vonage_session_id e vonage_token dinamicamente por meio do contexto de invocação do AgentCore — nunca use variáveis de ambiente estáticas
IAM: Use funções do IAM — nunca utilize chaves estáticas da AWS em produção
TURN: O VonageVideoConnectorTransport lida com o TURN de forma nativa — não é necessário nenhum servidor TURN externo
Valide primeiro: Teste com o Vonage Playground antes de integrar o aplicativo de referência do React
Segredos: Armazene VONAGE_APPLICATION_ID e AGENTCORE_RUNTIME_ARN nas variáveis de ambiente do App Runner
Comportamento da sessão: Ajuste os parâmetros NOVA_SESSION_WARN_SECONDS e NOVA_SESSION_LIMIT_SECONDS para sessões de Video de longa duração
Verify: execute o comando `curl` no endpoint `/answer` e confirme a resposta antes de testar uma sessão real
Outros recursos
Conclusão
Você implantou um agente de vídeo com IA em tempo real utilizando o Vonage Video Transport para Pipecat e o AWS Nova Sonic, executado inteiramente no AWS Bedrock AgentCore Runtime com um endpoint de webhook público do App Runner.
O Vonage Video Transport para Pipecat (VonageVideoConnectorTransport) participa da sessão do Vonage Video como um participante WebRTC nativo. O Nova Sonic lida com o processamento de voz para voz em tempo real. O AgentCore oferece um ambiente de execução gerenciado para implantação e escalonamento, sem a necessidade de gerenciar infraestruturas EC2, ECS ou EKS.
Na Parte 2, vamos mudar do Video para a telefonia usando o Vonage Audio Serializer para Pipecat e a Voice API da Vonage, uma solução baseada em WebSocket para agentes de IA que atendem chamadas telefônicas ao vivo — também totalmente implantada no AgentCore Runtime.
Tem alguma dúvida ou quer compartilhar o que está criando?
Inscreva-se no Boletim Informativo para Desenvolvedores
Siga-nos no X (antigo Twitter) para ficar por dentro das novidades
Assista aos tutoriais no nosso canal do YouTube
Conecte-se conosco na página de desenvolvedores da Vonage no LinkedIn
Fique conectado e acompanhe as últimas notícias, dicas e eventos para desenvolvedores.
Compartilhar:
Kitt é um Engenheiro de Soluções Técnicas da Vonage. Ele gosta de desenvolver integrações com NodeJS em diversos serviços de plataforma em nuvem. Em seu tempo livre, ele gosta de andar de UTV pelas Montanhas Organ e praticar caiaque por todo o território dos EUA.