Prévia gratuita · sem cadastro

RAG e Knowledge Bases: ementa completa e um capítulo inteiro

30 capítulos · 1 módulos · 12+ horas

O que você aprende, capítulo a capítulo

Módulo 1: Conteúdo

  1. 1. Fundamentos e arquitetura de RAG: Fundamentos e visão estratégica

    • RAG existe para resolver três limitações estruturais de LLMs: conhecimento desatualizado, custo/degradação de contexto longo e alucinação sem grounding.
    • O mecanismo central é buscar antes de gerar: recuperar trechos relevantes de uma base externa e usá-los como contexto para a resposta.
    • RAG atualiza conhecimento reindexando documentos, sem retreinar o modelo — isso o torna mais rápido e mais barato de manter atualizado que fine-tuning.
  2. 2. Fundamentos e arquitetura de RAG: Configuração, contexto e preparação

    • O planejamento de um sistema de RAG começa pelo inventário de fontes — formato, volume, dono e frequência de atualização de cada uma.
    • Frescor e latência são orçamentos distintos que precisam de definição explícita antes da escolha de qualquer ferramenta.
    • Controle de acesso precisa ser tratado na camada de retrieval, como metadado filtrável, não como camada de interface adicionada depois.
  3. 3. Fundamentos e arquitetura de RAG: Aplicação guiada em cenário real

    • O ciclo de vida de uma consulta em RAG tem cinco estágios: reformulação, busca, reranking, montagem de contexto e geração com citação.
    • Fontes de dados diferentes exigem tratamento diferente antes de virarem unidades indexáveis — um ticket longo não deve ser tratado como um FAQ curto.
    • Um limiar de relevância mínimo é o que impede o sistema de gerar respostas grounded em contexto fracamente relacionado à pergunta.
  4. 4. Fundamentos e arquitetura de RAG: Erros comuns, validação e qualidade

    • Fé cega no retrieval — assumir que documento indexado equivale a documento encontrado — é o erro estrutural mais comum em sistemas de RAG.
    • A ausência de golden dataset e métricas de avaliação impede detectar regressões silenciosas quando o pipeline muda.
    • Groundedness (o quanto a resposta se sustenta no contexto recuperado) importa mais que fluência isolada da resposta gerada.
  5. 5. Fundamentos e arquitetura de RAG: Projeto orientado a entrega

    • Um documento de arquitetura de RAG eficaz responde a cinco perguntas: problema, fontes, fluxo de consulta, limites e critérios de sucesso.
    • O problema precisa ser específico e mensurável — vago demais torna impossível avaliar sucesso depois da implementação.
    • Limites explícitos (o que o sistema deve recusar ou escalonar) são a parte mais frequentemente esquecida e mais importante do documento.
  6. 6. Ingestão, limpeza e estrutura documental: Fundamentos e visão estratégica

    • Parsing de PDF, HTML e documentos estruturados exige tratamento diferente — nenhuma ferramenta genérica resolve todos os formatos igualmente bem.
    • Chunking fixo é o mais simples e o mais ingênuo; chunking semântico e consciente de estrutura preservam melhor o sentido do texto original.
    • Tamanho de chunk e overlap devem refletir o perfil real de perguntas que o sistema vai responder, não um valor padrão genérico copiado de exemplo.
  7. 7. Ingestão, limpeza e estrutura documental: Configuração, contexto e preparação

    • A escolha de ferramental de parsing deve variar por tipo de fonte — não existe uma ferramenta única que resolve PDF, HTML e planilhas igualmente bem.
    • Overlap entre 10% e 20% preserva contexto na fronteira dos chunks; o tamanho ideal depende do tipo de pergunta que o sistema vai precisar atender.
    • Um schema de metadado com campos técnicos de controle (hash, timestamp) viabiliza reindexação seletiva e deduplicação de forma barata.
  8. 8. Ingestão, limpeza e estrutura documental: Aplicação guiada em cenário real

    • Corpus heterogêneo (múltiplos templates de um mesmo tipo de documento) se beneficia de classificação de formato antes de uma única rotina de parsing.
    • Chunking consciente de estrutura, usando fronteiras reais do documento, evita fragmentar o sentido jurídico ou técnico de seções longas.
    • Metadado de "container-pai" permite expansão de contexto sob demanda quando apenas parte de uma seção é recuperada pela busca.
  9. 9. Ingestão, limpeza e estrutura documental: Erros comuns, validação e qualidade

    • Erros de ingestão raramente quebram o sistema de forma visível — eles geram respostas plausíveis mas sutilmente incompletas ou distorcidas.
    • Chunking de tamanho fixo aplicado sem exceção é a causa mais comum de cortes que fragmentam o sentido original do texto.
    • Metadado extraído de fontes frágeis precisa ter sua taxa de preenchimento validada no corpus completo antes de ser usado como filtro.
  10. 10. Ingestão, limpeza e estrutura documental: Projeto orientado a entrega

    • Wikis técnicas em markdown oferecem fronteiras de chunking naturais e confiáveis através dos próprios cabeçalhos de seção.
    • Separar blocos de código de texto prosa evita diluição de embedding e melhora a precisão de buscas técnicas específicas.
    • Tipos de conteúdo diferentes dentro da mesma wiki (runbook, ADR, nota de reunião) se beneficiam de estratégias de chunking ajustadas, não uniformes.
  11. 11. Embeddings, indexação e recuperação: Fundamentos e visão estratégica

    • Embeddings transformam texto em vetores onde proximidade espacial representa proximidade de significado — mas exigem o mesmo modelo na indexação e na consulta.
    • A escolha de banco vetorial (Pinecone, Weaviate, pgvector, Qdrant, Milvus) deve seguir requisitos concretos de volume, filtragem e infraestrutura, não popularidade.
    • Similaridade de cosseno é a métrica mais comum para embeddings de texto, mas a compatibilidade com o modelo escolhido precisa ser verificada.
  12. 12. Embeddings, indexação e recuperação: Configuração, contexto e preparação

    • Dimensionalidade de embedding é um trade-off entre precisão e custo, e recall@k medido no corpus real é o único jeito confiável de calibrar essa escolha.
    • `M` e `efConstruction` afetam a qualidade e o custo de construção do índice HNSW; `efSearch` é o parâmetro de ajuste fino em tempo de consulta.
    • IVF usa `nlist` e `nprobe` no mesmo espírito de trade-off entre recall e latência, com perfil de memória diferente de HNSW.
  13. 13. Embeddings, indexação e recuperação: Aplicação guiada em cenário real

    • Vocabulário técnico exato (códigos de erro, nomes de função, parâmetros) é o caso clássico onde busca híbrida supera claramente busca vetorial pura.
    • Reciprocal Rank Fusion combina rankings de escalas incompatíveis sem exigir normalização direta de scores de BM25 e similaridade vetorial.
    • Reranking com cross-encoder aplicado a um conjunto reduzido de candidatos eleva precisão sem inviabilizar a latência do sistema.
  14. 14. Embeddings, indexação e recuperação: Erros comuns, validação e qualidade

    • Mismatch de modelo de embedding entre indexação e consulta é um erro silencioso que degrada qualidade sem gerar nenhum erro explícito no sistema.
    • Métrica de similaridade incompatível com o modelo escolhido reduz a qualidade do ranqueamento sem sinalizar isso de forma óbvia.
    • Configuração de índice ANN mal ajustada (`efSearch`/`nprobe` baixo demais) sacrifica recall silenciosamente em nome de latência.
  15. 15. Embeddings, indexação e recuperação: Projeto orientado a entrega

    • Domínios de alto risco (saúde, regulatório, jurídico) invertem o trade-off padrão de latência versus recall, priorizando recall mesmo a um custo de latência maior.
    • Busca híbrida deixa de ser otimização e vira requisito de design quando o domínio é dominado por nomenclatura técnica exata.
    • Níveis de acesso multinível, aplicados como filtro de pré-condição, evitam que documentos confidenciais entrem no conjunto de candidatos de busca.
  16. 16. Reranking, contexto e qualidade de resposta: Fundamentos e visão estratégica

    • Bi-encoders otimizam velocidade e recall na busca inicial; cross-encoders otimizam precisão no reranking — são ferramentas complementares, não substitutas.
    • O pipeline de dois estágios (retrieve amplo, rerank estreito) é a arquitetura padrão para RAG que precisa de qualidade além do nível de demo.
    • Contexto tem orçamento finito, e a posição de cada chunk dentro desse orçamento afeta quanto o modelo realmente aproveita da informação.
  17. 17. Reranking, contexto e qualidade de resposta: Configuração, contexto e preparação

    • A escolha entre reranker via API e self-hosted depende de volume, latência tolerável e restrições de compliance sobre o dado — não existe opção universalmente melhor.
    • N (candidatos recuperados) precisa de folga real sobre K (chunks finais), ou o reranker não tem o que promover.
    • K deve ser derivado do orçamento real de tokens do prompt, não escolhido por número redondo arbitrário.
  18. 18. Reranking, contexto e qualidade de resposta: Aplicação guiada em cenário real

    • Metadados (tipo de conteúdo, status do produto, data) são usados tanto na filtragem pré-busca quanto na resolução de conflito pós-reranking.
    • Deduplicação por SKU evita que um único produto monopolize o contexto em perguntas que exigem comparação entre itens.
    • Tags de citação por chunk transformam a resposta final em algo auditável, rastreável até a fonte exata na base de conhecimento.
  19. 19. Reranking, contexto e qualidade de resposta: Erros comuns, validação e qualidade

    • Validação de reranking exige métricas de posição (NDCG@k, hit-rate@k) contra um gabarito real, não apenas impressão qualitativa.
    • Detectar chunks contraditórios programaticamente, comparando metadados de data entre chunks semanticamente próximos, evita que o modelo escolha a versão errada sem orientação.
    • O orçamento de tokens precisa de reauditoria periódica, porque o perfil de tamanho dos documentos no corpus muda com o tempo.
  20. 20. Reranking, contexto e qualidade de resposta: Projeto orientado a entrega

    • Medir o baseline antes de otimizar é o que transforma "o reranking melhorou o sistema" de opinião em fato comprovável.
    • Metadado de departamento ou domínio de origem, usado como filtro contextual, resolve boa parte da ambiguidade em bases de conhecimento heterogêneas.
    • O ganho do reranking costuma ser desigual: pequeno em perguntas simples e específicas, grande em perguntas ambíguas ou comparativas.
  21. 21. Avaliação, tuning e redução de alucinação: Fundamentos e visão estratégica

    • Toda resposta ruim de um sistema RAG se origina em falha de retrieval, falha de geração, ou ambas — e distinguir essas origens é o primeiro passo de qualquer tuning eficaz.
    • Faithfulness e answer relevancy avaliam o estágio de geração; context precision e context recall avaliam o estágio de retrieval.
    • Alucinação, medida por faithfulness baixa, pode ocorrer mesmo com contexto de boa qualidade — via síntese incorreta ou preenchimento de lacunas com inferência não sustentada.
  22. 22. Avaliação, tuning e redução de alucinação: Configuração, contexto e preparação

    • Um golden dataset construído a partir de perguntas reais vale mais do que qualquer sofisticação no framework de avaliação escolhido.
    • Usar um LLM como juiz automatizado exige calibração contra julgamento humano, por causa do risco de viés de auto-preferência.
    • Perguntas deliberadamente sem resposta no conjunto de teste são a única forma de medir taxa de alucinação em cenários de informação ausente.
  23. 23. Avaliação, tuning e redução de alucinação: Aplicação guiada em cenário real

    • Chunking mal desenhado pode causar falha estrutural de recall que nenhuma melhoria de reranking ou geração consegue compensar sozinha.
    • Retrieval híbrido (denso + BM25 com reciprocal rank fusion) resolve especificamente a fraqueza de busca puramente semântica em correspondências exatas de termos técnicos.
    • Testes A/B de retrieval exigem controlar todas as outras variáveis do pipeline para que o resultado seja atribuível à mudança testada.
  24. 24. Avaliação, tuning e redução de alucinação: Erros comuns, validação e qualidade

    • Relevancy alta combinada com faithfulness baixa é um padrão de alerta específico de resposta fluente mas não ancorada — precisa das duas métricas juntas para ser detectado.
    • Avaliação sem atualização periódica do golden dataset perde validade conforme o produto e o padrão de uso evoluem, dando falsa sensação de estabilidade.
    • Corrigir recall aumentando N e K sem medir o impacto em precision e faithfulness troca um problema visível por um mais sutil.
  25. 25. Avaliação, tuning e redução de alucinação: Projeto orientado a entrega

    • Um harness de avaliação de verdade separa armazenamento do dataset, execução do pipeline e cálculo de métricas em componentes independentes e reutilizáveis.
    • Definir o critério de "concluído" antes de começar evita que o projeto de avaliação vire um ciclo infinito de refinamento sem entrega.
    • Testar uma hipótese de melhoria por vez, com remedição completa depois, é o que permite atribuir resultado à causa certa.
  26. 26. Operação em produção e governança: Fundamentos e visão estratégica

    • Um índice vetorial é, funcionalmente, uma cópia navegável do conteúdo original e precisa do mesmo rigor de segurança que qualquer banco de produção.
    • Redação de PII e controle de acesso em tempo de retrieval são estratégias complementares, não intercambiáveis — a escolha depende do caso de uso e da necessidade de preservar informação completa.
    • Controle de acesso implementado só na aplicação, sem reforço no armazenamento, é um controle incompleto e contornável.
  27. 27. Operação em produção e governança: Configuração, contexto e preparação

    • Controle de acesso precisa ser reforçado na camada de infraestrutura de armazenamento, não apenas confiado à lógica opcional da aplicação.
    • Redação de PII via NER exige decidir, por categoria de dado, entre placeholders reversíveis (com armazenamento seguro separado) e permanentemente destrutivos.
    • Métricas de linha de base capturadas antes do lançamento são o que torna possível detectar drift objetivamente mais tarde, em vez de por impressão subjetiva.
  28. 28. Operação em produção e governança: Aplicação guiada em cenário real

    • Segmentar a base de conhecimento por nível de acesso, com RLS aplicada na camada de banco antes do cálculo de similaridade, é a base de qualquer sistema de RAG com dado sensível.
    • Redação de PII em texto narrativo livre exige mais que NER automatizado — revisão amostral humana calibra a taxa real de falsos negativos.
    • Monitoramento segmentado por tópico detecta drift de terminologia antes que usuários reais reportem o problema.
  29. 29. Operação em produção e governança: Erros comuns, validação e qualidade

    • Vazamento entre tenants costuma nascer de uma rota nova sem o filtro de isolamento reforçado na infraestrutura, não de uma falha sofisticada de segurança.
    • Metadados "de conveniência" são um vetor de vazamento de PII sistematicamente subestimado, porque recebem menos escrutínio que o conteúdo principal do chunk.
    • Falta de cache de embeddings e de retrieval em camadas gera custo operacional desproporcional ao valor entregue pelo sistema.
  30. 30. Operação em produção e governança: Projeto orientado a entrega

    • Prontidão para produção em RAG se constrói em quatro camadas ordenadas — acesso e dado, qualidade de retrieval, avaliação sistemática, operação contínua — e a ordem de validação importa tanto quanto o conteúdo de cada camada.
    • Investir em qualidade de resposta antes de validar acesso e proteção de dado sensível é retrabalho garantido e um risco desnecessário assumido cedo demais.
    • Avaliação final segmentada por categoria revela riscos residuais que uma métrica agregada esconde, exatamente os casos mais importantes de documentar antes do lançamento.

Capítulo 1 na íntegra

Este é o capítulo completo, igual ao que está dentro do curso — texto, imagens e vídeos.

_RAG existe porque nenhum modelo, por maior que seja sua janela de contexto, consegue saber o que só está no seu banco de dados._

Visão Geral

Toda empresa que tenta colocar um LLM para responder perguntas sobre seus próprios dados esbarra na mesma parede: o modelo é fluente, mas não sabe a política de reembolso vigente, não sabe o que mudou no contrato assinado semana passada, e às vezes inventa um número com a confiança de quem cita uma data histórica real. RAG (Retrieval-Augmented Generation) não é uma técnica de prompting mais esperta — é uma mudança de arquitetura: em vez de depender só do que o modelo aprendeu no treinamento, o sistema busca, em tempo de execução, os trechos relevantes para a pergunta e os injeta no prompt antes de pedir a resposta. Este capítulo estabelece por que essa mudança resolve problemas que nenhuma técnica de prompt sozinha resolve, e por que ela virou o padrão de facto para aplicações de LLM sobre dados proprietários.

Conceitos-Chave

Três limitações estruturais de um LLM puro justificam a existência de RAG. A primeira é o cutoff de conhecimento: todo modelo é treinado até uma data e não sabe nativamente de nada que aconteceu depois — nem de dados privados que nunca estiveram na internet pública. A segunda é o custo e a granularidade da janela de contexto: mesmo modelos com janelas de centenas de milhares de tokens sofrem degradação de atenção quando o contexto é longo (o efeito "lost in the middle", em que informação no meio de um contexto extenso recebe menos peso efetivo do que informação no início ou no fim), além de cada token no prompt custar inferência e latência — colar um manual inteiro de 400 páginas em todo prompt é tecnicamente possível e operacionalmente absurdo. A terceira é a alucinação: quando falta informação para responder, o modelo não fica em silêncio — preenche a lacuna com texto estatisticamente plausível, e nada em sua arquitetura o impede de fazer isso com tom de certeza.

Qualidade em IA é um sistema em camadas: contexto, restrições, referências e critérios. Uma camada fraca e a resposta inteira perde valor.
Qualidade em IA é um sistema em camadas: contexto, restrições, referências e critérios. Uma camada fraca e a resposta inteira perde valor.

RAG ataca as três ao mesmo tempo com um mecanismo simples: em vez de perguntar direto ao modelo, o sistema primeiro busca em uma base de conhecimento externa (indexada previamente) os trechos mais relevantes para a pergunta do usuário, e só então monta um prompt que contém a pergunta mais esses trechos como contexto de apoio. O modelo deixa de precisar "saber" a resposta de cor — ele passa a precisar apenas ler o contexto fornecido e sintetizar uma resposta grounded nele, com a vantagem adicional de poder citar a fonte exata de cada afirmação.

Separar intenção de execução: primeiro definir o que é uma boa resposta, só depois delegar à IA.
Separar intenção de execução: primeiro definir o que é uma boa resposta, só depois delegar à IA.

Vale comparar RAG com a alternativa mais óbvia: fine-tuning. Fine-tuning ajusta os pesos do modelo para incorporar conhecimento ou comportamento novo — é caro (dados curados, ciclos de treinamento, GPU), lento para iterar e historicamente ruim para injetar fatos específicos e atualizáveis: o modelo memoriza de forma difusa, sem garantia de recall preciso e sem citação de origem. RAG, em contraste, atualiza o conhecimento apenas reindexando documentos — sem retreinar nada — e cada resposta pode citar a fonte exata que a sustenta. Isso não torna fine-tuning inútil: continua sendo a ferramenta certa para mudar estilo, formato ou comportamento. Mas para "responder com precisão sobre um corpus que muda", RAG quase sempre vence em custo, velocidade de atualização e auditabilidade.

Fluxo de Execução

  1. Identifique o gargalo real. Antes de desenhar qualquer pipeline, confirme que o problema é de conhecimento ausente ou desatualizado — não de comportamento, tom ou formato, que são resolvidos por prompting ou fine-tuning, não por retrieval.
  2. Separe a base de conhecimento do modelo de geração. Trate os dois como componentes independentes: um armazena e recupera informação, o outro sintetiza linguagem a partir dela. Essa separação é o que torna o sistema atualizável sem retreino.
  3. Desenhe o ciclo de indexação como um processo contínuo, não um evento único — documentos novos, revisados ou removidos precisam refletir na base de conhecimento em um intervalo compatível com a velocidade real do negócio.
  4. Defina como o modelo deve se comportar quando a busca não encontra nada relevante. Um sistema RAG sem esse caso tratado tende a alucinar exatamente quando deveria admitir que não sabe.
  5. Planeje a citação da fonte desde o início, não como recurso adicional depois — é o que transforma a resposta de "texto plausível" em algo auditável e verificável por um humano.
O ciclo de passos: clarificar → preparar contexto → executar → revisar → empacotar.

Cenários Aplicados

Uma fintech sob regulação de compliance financeiro precisa que seu assistente interno responda perguntas sobre políticas de prevenção a fraude — políticas que mudam a cada revisão regulatória, às vezes mensalmente. Fine-tunar o modelo a cada mudança seria inviável em custo e velocidade; com RAG, compliance apenas substitui o documento na base de conhecimento e a resposta já reflete a política atualizada na próxima consulta, com o trecho exato citado — algo que um auditor externo pode conferir.

De pedido vago a processo gerenciado: trabalho, formato, fontes, tom e validação explícitos.
De pedido vago a processo gerenciado: trabalho, formato, fontes, tom e validação explícitos.

Compare com um escritório de advocacia que precisa consultar jurisprudência recente: aqui o cutoff de conhecimento é o problema central, porque decisões judiciais de meses recentes simplesmente não existiam durante o treinamento de nenhum LLM. RAG resolve isso indexando um repositório de decisões atualizado continuamente — o modelo nunca precisa "saber" a decisão de cor, só recebê-la como contexto no momento da pergunta.

Um terceiro cenário ilustra o limite oposto: uma empresa de e-commerce quer que seu chatbot sempre responda num tom de marca específico, engraçado e direto — não é falta de conhecimento, é estilo e comportamento, algo que RAG não resolve sozinho. A combinação certa aqui costuma ser prompting cuidadoso sobre um pipeline de RAG que ainda cuida da parte factual — os dois mecanismos resolvem problemas diferentes e frequentemente coexistem.

Erros Comuns

  • Tratar RAG como solução universal para qualquer problema de qualidade de resposta, incluindo problemas de tom, formato ou comportamento que pedem prompting ou fine-tuning.
  • Escolher fine-tuning para injetar fatos que mudam com frequência, gerando um ciclo caro e lento de retreino a cada atualização de dado.
  • Ignorar o efeito "lost in the middle" e assumir que uma janela de contexto grande elimina a necessidade de retrieval seletivo.
  • Não definir o comportamento do sistema quando a busca não retorna nada relevante, deixando o modelo livre para alucinar uma resposta.
  • Deixar a citação de fonte como funcionalidade "para depois", em vez de parte estrutural do design desde a primeira versão.
A IA é parceira de rascunho, não autoridade final — quem valida e assina é você.
A IA é parceira de rascunho, não autoridade final — quem valida e assina é você.

Dica Pro: Ao avaliar se um caso de uso pede RAG, fine-tuning ou os dois, pergunte-se uma coisa: "essa informação muda com que frequência, e o custo de uma resposta desatualizada é alto?". Se a resposta for "muda com frequência" e "sim, é alto", RAG quase sempre é a escolha certa — é o mecanismo desenhado justamente para manter conhecimento atualizável sem retreino.

Escreva o checklist de avaliação antes do prompt: o hábito que mais melhora a qualidade das respostas.

Exercício Prático

Escolha um caso de uso real (do seu trabalho ou hipotético) em que alguém queira usar um LLM sobre dados proprietários. Escreva três frases: (1) que problema estrutural do LLM puro esse caso expõe — cutoff, janela de contexto ou alucinação; (2) por que RAG resolve esse problema especificamente melhor que aumentar o prompt ou fazer fine-tuning; (3) o que aconteceria com a resposta do sistema se a busca não encontrasse nenhum documento relevante para a pergunta.

Checklist de Implementação

  • Consigo explicar as três limitações estruturais de um LLM puro que motivam RAG: cutoff, custo/degradação de contexto longo e alucinação.
  • Sei diferenciar um problema de conhecimento (resolvido por RAG) de um problema de comportamento ou estilo (resolvido por prompting ou fine-tuning).
  • Entendo por que RAG é mais barato e mais rápido de atualizar do que fine-tuning para fatos que mudam com frequência.
  • Sei explicar o mecanismo básico: busca primeiro, depois geração usando o que foi encontrado como contexto.
  • Reconheço a importância de tratar o caso de "nenhum resultado relevante encontrado" como parte do design, não como exceção.

Resumo do Capítulo

  • RAG existe para resolver três limitações estruturais de LLMs: conhecimento desatualizado, custo/degradação de contexto longo e alucinação sem grounding.
  • O mecanismo central é buscar antes de gerar: recuperar trechos relevantes de uma base externa e usá-los como contexto para a resposta.
  • RAG atualiza conhecimento reindexando documentos, sem retreinar o modelo — isso o torna mais rápido e mais barato de manter atualizado que fine-tuning.
  • Fine-tuning continua sendo a ferramenta certa para mudar estilo, formato e comportamento — os dois mecanismos resolvem problemas diferentes e podem coexistir.
  • Os próximos capítulos deste módulo tratam de como planejar, aplicar e avaliar essa arquitetura antes de entrar em detalhes de ingestão e indexação nos módulos seguintes.

---

Prévias de cursos parecidos

Ver todos os cursos →
FAYAI