Tópico sobre LiveKit Agents para voz com IA — arquitetura, sessões,…
INEMA
docs.livekit.io/agents/start/voice-ai ↗
(1:1).
PARTE 3 — Extras úteis⌗
| Função | Onde fazer |
|---|---|
| Criar vários agentes | Painel LiveKit Cloud ou via API |
| Ver logs e estatísticas | https://cloud.livekit.io |
| Controlar tokens dinamicamente | Seu backend (Node/Python) |
| Interface personalizada | SDK React, Flutter, ou WebRTC puro |
Uma das partes mais interessantes (e poderosas) do LiveKit Agents: entender como direcionar automaticamente cada pessoa para o agente certo e como criar sua própria interface sem depender do Playground oficial.
Vamos dividir em duas partes práticas:
PARTE 1 — Direcionar cada pessoa para um agente específico⌗
O Playground (https://agents-playground.livekit.io) é apenas uma interface de teste. O que realmente decide qual agente vai responder é o token de acesso (JWT) — e ele é gerado dinamicamente no backend.
1. Cada agente tem um nome interno⌗
Quando você cria agentes no painel do LiveKit, cada um tem um agent_name, por exemplo:
agente_vendasagente_suporteagente_educacional
2. Gere tokens diferentes para cada agente⌗
Para conectar uma pessoa a um agente específico, você precisa gerar tokens distintos, informando o agent_name correto.
Exemplo em Node.js ou Python (simplificado):
Exemplo (Node.js):⌗
```import { AccessToken } from "livekit-server-sdk";
const token = new AccessToken("API_KEY", "API_SECRET", { identity: "cliente_123", }); token.addGrant({ roomJoin: true, agent: "agente_vendas", // <- define o agente que será usado }); console.log(token.toJwt());```
Exemplo (Python):⌗
```from livekit import AccessToken
token = AccessToken(api_key="API_KEY", api_secret="API_SECRET", identity="cliente_123") token.add_grant({"room_join": True, "agent": "agente_suporte"}) print(token.to_jwt())```
Depois disso, basta direcionar o usuário para:
https://agents-playground.livekit.io/?token=SEU_TOKEN_AQUI
E o Playground abrirá automaticamente o agente correto, sem precisar selecionar manualmente.
3. Direcionamento dinâmico (roteador inteligente)⌗
Você pode usar uma lógica no seu backend para escolher o agente certo, por exemplo:
if cliente.tipo == "empresarial":
agent_name = "agente_vendas"
elif cliente.solicitacao == "suporte":
agent_name = "agente_suporte"
else:
agent_name = "agente_padrao"
E gerar o token já com o agente correspondente. Assim, cada pessoa acessa um link e é redirecionada para o agente certo automaticamente.
PARTE 2 — Criar sua própria interface (sem usar o Playground)⌗
Você pode criar sua própria interface de voz, web ou app móvel conectada ao LiveKit. O Playground é só uma interface React — o backend é o mesmo.
Opções:⌗
1. Usar o SDK oficial do LiveKit⌗
O LiveKit tem SDKs prontos para:
- JavaScript / React
- Flutter
- iOS (Swift)
- Android (Kotlin)
Você cria uma interface customizada e usa apenas:
```import { Room, RoomEvent } from 'livekit-client';
const room = await Room.connect('seu-servidor.livekit.io ↗', token);```
E pronto — sua página React pode exibir:
- um botão “Falar com o agente”
- mostrar áudio entrando e saindo
- controlar o microfone, status e respostas do agente
2. Usar o SDK de Voz (Voice Agent)⌗
Para agentes de voz, o fluxo é:
- Capturar o microfone (WebRTC)
- Enviar para o servidor LiveKit
- Receber áudio de volta do agente (voz da IA)
Exemplo com @livekit/components-react:
```import { LiveKitRoom } from '@livekit/components-react';
Isso substitui completamente o Playground. Você pode adicionar seu próprio design, botões e lógica de atendimento.
3. Usar API REST + Front-end⌗
Se quiser ainda mais controle, pode criar:
- uma API que gera tokens (
/gerar-token?agent=support) - uma página HTML/JS que consome esse token e conecta no LiveKit via WebRTC
Assim você cria um atendimento “de marca”, com layout próprio (ex: do seu site ou aplicativo).
4. Exemplo visual do fluxo⌗
Usuário -> Seu site -> Backend (gera token com agente certo) -> LiveKit (Room) -> Agente IA
Cada usuário tem:
- um token único,
- um agente específico,
- uma conversa isolada
ponto central do funcionamento dos agentes no LiveKit Playground. Vamos detalhar passo a passo como o sistema identifica qual agente vai te atender ao abrir o Playground (ou quando alguém acessa uma URL pública do agente).
1. O LiveKit não “escolhe” o agente — ele segue o token de acesso⌗
Quando você entra no LiveKit Playground, o sistema não “adivinha” qual agente usar. Ele apenas lê o token de acesso que foi gerado pelo backend ou pelo painel do agente.
Esse token é um pequeno código JWT (JSON Web Token) que contém:
- o nome do agente que deve ser carregado,
- o Room ID (a sala onde a conversa vai ocorrer),
- e as permissões do usuário (ex.: pode publicar áudio, receber áudio, etc.).
Então, o LiveKit Playground apenas:
- Recebe o token,
- Valida com o servidor LiveKit,
- E inicia a sessão já conectada ao agente especificado no token.
2. O agente é definido no Agent Manifest (ou Agent Config)⌗
No painel do LiveKit Cloud (ou no seu repositório self-hosted), cada agente é definido por um manifesto JSON, que diz:
- o nome do agente (ex.:
"assistant": "neimaldaner-agent"), - os módulos que ele usa (STT, TTS, LLM, ferramentas, prompts de sistema, etc.),
- e as credenciais de execução (por exemplo, a chave OpenAI ou Claude usada).
Exemplo simples de agent.json:
{
"name": "assistente-vozes",
"language": "pt-BR",
"llm": "openai:gpt-4o-mini",
"stt": "deepgram:nova-2",
"tts": "cartesia:pt-br-female",
"tools": ["time", "weather"],
"system_prompt": "Você é um assistente educado que responde em português."
}
Quando você clica em Playground, o sistema carrega exatamente esse manifesto — e conecta a sessão a esse agente.
3. A conexão do usuário segue este fluxo⌗
- Backend cria o agente → publica o
agent.json. - Token é gerado com
agent_name="assistente-vozes". - O usuário acessa a URL do playground (ex.:
https://cloud.livekit.io/projects/p_69dai1kwmwz/playground). - O Playground lê o token → encontra o agente
"assistente-vozes". - O LiveKit inicia a pipeline (STT → LLM → TTS) daquele agente.
- A conversa começa — o agente certo te responde.
4. Se houver vários agentes disponíveis⌗
Você pode ter diversos agentes registrados (ex.: suporte, vendas, clima, tutoria). Cada um terá:
- um manifesto próprio (
agent1.json,agent2.json), - e seu próprio endpoint ou Playground link.
Então:
- Se o token for do agente de clima, ele conecta àquele.
- Se for do agente de suporte, ele abre outro.
Nada impede, inclusive, de ter um roteador de agentes no backend:
if topic == "vendas":
agent = "sales-bot"
elif topic == "técnico":
agent = "tech-bot"
else:
agent = "default-assistant"
Esse roteador pode gerar o token correto dinamicamente.
5. No Playground, como você vê qual agente está ativo⌗
Quando você abre o link do Playground:
- no canto superior esquerdo (ou no título da aba), aparece o nome do agente ativo;
- no painel lateral, você pode ver as configurações de voz, modelo e ferramentas que estão sendo usadas — todas vindas do
agent.json.
6. Resumo final⌗
| Etapa | Função | Onde ocorre |
|---|---|---|
| Geração do agente | Define o comportamento e ferramentas | agent.json |
| Geração do token | Diz qual agente será usado | Backend ou painel |
| Conexão Playground | Usa o token para identificar o agente | LiveKit Cloud |
| Sessão | Cria sala isolada 1:1 | Servidor LiveKit |
| Conversa | Executa STT → LLM → TTS | Pipeline do agente |
Muito importante para entender como o LiveKit Voice AI (ou qualquer agente de voz com LiveKit) funciona nos bastidores. Vamos detalhar o fluxo de forma prática e clara:
1. Cada usuário = uma sessão independente (room individual)⌗
Sim. Cada pessoa que acessa o agente abre uma sessão própria (ou "sala" no LiveKit). Essa sessão é totalmente isolada:
- o áudio e vídeo não se misturam com o de outros usuários,
- o agente conversa apenas com quem está naquela sala,
- e o modelo de IA (por exemplo, o Claude, GPT, etc.) mantém um contexto exclusivo daquela conversa.
Em termos técnicos:
- quando o usuário se conecta, o backend cria uma room temporária no LiveKit,
- gera um token de acesso exclusivo para essa room,
- e inicializa o pipeline de áudio (STT + LLM + TTS) para aquele participante.
2. O que acontece dentro da sessão⌗
Dentro de cada sessão LiveKit, há três fluxos principais:
| Etapa | O que faz | Exemplos de ferramentas usadas |
|---|---|---|
| STT (Speech to Text) | Transcreve o que o usuário fala | Deepgram, OpenAI Whisper, Vosk, etc. |
| LLM / Agente IA | Gera a resposta com base no prompt e contexto | GPT-5, Claude, Sonnet, Mistral, etc. |
| TTS (Text to Speech) | Converte a resposta do agente em voz | Cartesia, ElevenLabs, Play.ht, etc. |
Esses três módulos trabalham em streaming — ou seja, a fala vai sendo processada em tempo real, e o agente responde rapidamente.
3. Sessões simultâneas (multiusuário)⌗
Como cada pessoa tem sua própria room isolada, o LiveKit pode atender muitos usuários ao mesmo tempo, cada um com sua conversa independente com o mesmo agente.
Exemplo prático:
- 1.000 pessoas entram no site ao mesmo tempo.
- O servidor cria 1.000 salas LiveKit (ou reusa uma pool de rooms dinâmicas).
- Cada sala contém 1 participante (usuário) e 1 agente (IA).
- Nenhuma interfere na outra — cada uma tem seu contexto, voz e histórico.
Isso é exatamente o que torna o LiveKit ideal para agentes de voz escaláveis, como assistentes virtuais, atendimento ao cliente ou ensino individualizado.
4. Quando há interações em grupo⌗
O LiveKit também suporta salas compartilhadas (multi-usuário) para reuniões ou conferências, mas nesse caso:
- o agente pode ouvir todos na sala,
- pode decidir responder a um ou a todos,
- e você precisa configurar o comportamento de "orquestração" do agente (quem fala, quando responde, se interrompe, etc.).
5. Resumo simples⌗
| Tipo de sessão | Isolamento | Contexto de IA | Uso comum |
|---|---|---|---|
| Individual (1:1) | Total | Exclusivo por usuário | Chatbot de voz, assistente pessoal, atendimento automático |
| Grupo (1:N) | Parcial | Compartilhado entre os falantes | Aulas, reuniões, eventos |
Não existe um número máximo fixo de pessoas que podem usar o LiveKit simultaneamente. Isso varia conforme quatro fatores principais:
- se o serviço é LiveKit Cloud (versão gerenciada) ou self-hosted (instalado em servidores próprios)
- a capacidade do servidor (CPU, memória e largura de banda) no caso de instalação própria
- o tipo de plano ou cota contratada no LiveKit Cloud
- o tipo de uso — apenas áudio, vídeo, número de pessoas falando ou transmitindo ao mesmo tempo, e quantidade de fluxos de vídeo por participante
Exemplos de limites típicos⌗
- No plano gratuito do LiveKit Cloud, o limite padrão é de cerca de 100 participantes simultâneos.
- Em planos pagos, esse número pode subir para 1.000 participantes ou mais.
- Em instalações self-hosted, cada sala ocupa um servidor (ou nó), e o limite prático depende da máquina e da rede disponíveis.
- Em testes realizados com servidores de médio porte (por exemplo, 16 núcleos de CPU), foi possível alcançar cerca de 3.000 ouvintes em uma sala de áudio para poucos participantes ativos falando.
- A versão Cloud possui arquitetura escalável, capaz de suportar milhares ou até milhões de usuários concorrentes distribuídos em várias salas com balanceamento automático.
Conclusão resumida⌗
- No LiveKit Cloud gratuito, o limite gira em torno de 100 pessoas simultâneas.
- Em planos pagos, pode chegar a centenas ou milhares, dependendo da estrutura contratada.
- Em modo self-hosted, o número depende do servidor — quanto mais recursos, mais usuários por sala.
- Já existem casos de salas de áudio com milhares de participantes, desde que a infraestrutura seja robusta.
1. Capacidade simultânea do LiveKit⌗
- Quantas pessoas podem usar o LiveKit ao mesmo tempo.
- Diferenças entre LiveKit Cloud e self-hosted.
- Limites por plano e capacidade por servidor.
- Escalabilidade com milhares de usuários em salas separadas.
2. Sessões individuais e isolamento⌗
- Cada pessoa que acessa o agente cria sua própria sala (room).
- Cada sessão tem contexto de IA independente.
- Estrutura do fluxo interno: STT (voz → texto) → LLM (raciocínio) → TTS (texto → voz).
- Diferença entre sessões individuais (1:1) e em grupo (multiusuário).
3. Identificação do agente no Playground⌗
- O LiveKit Playground usa o token JWT para decidir qual agente carregar.
-
Esse token contém:
-
Nome do agente (
agent_name) - Identidade do usuário
- Permissões da sala
- O agente é definido em um arquivo
agent.json(manifesto). - O Playground apenas lê o token e conecta ao agente indicado.
- É possível criar um roteador que direcione usuários a diferentes agentes.
4. Direcionar pessoas para agentes diferentes⌗
- Como gerar tokens específicos para cada agente.
- Exemplo prático de geração em Node.js e Python.
- Como usar um backend roteador que decide o agente ideal conforme perfil ou intenção do usuário.
- Como construir URLs diretas:
https://agents-playground.livekit.io/?token=SEU_TOKEN_AQUI - Assim, cada pessoa é conectada ao agente certo automaticamente.
5. Criar interface própria (sem usar o Playground)⌗
- O Playground é só uma interface de teste; você pode criar a sua.
- Opções para interface personalizada:
- SDKs oficiais do LiveKit (React, Flutter, iOS, Android).
- SDK de voz (Voice Agent) com captura e streaming de áudio.
- API REST + WebRTC para conectar via navegador com design próprio. * Fluxo típico: Usuário → Seu site → Backend (gera token) → LiveKit (room) → Agente IA. * Cada usuário tem uma sessão e um agente definidos dinamicamente.
6. Sugestão futura (próximo passo)⌗
-
Criação de um exemplo completo em React com:
-
Alternância entre dois agentes,
- Botão “Falar com o agente”,
- Layout simples e funcional,
- Conexão direta via token LiveKit.
LiveKit - Agente de Voz
1