\n\n\n\n Como Implementar Lógica de Repetição com PydanticAI (Passo a Passo) - AgntBox Como Implementar Lógica de Repetição com PydanticAI (Passo a Passo) - AgntBox \n

Como Implementar Lógica de Repetição com PydanticAI (Passo a Passo)

📖 7 min read1,307 wordsUpdated Apr 3, 2026

Implementando Lógica de Retentativa com PydanticAI: Um Tutorial Passo a Passo

Estamos construindo um serviço de recuperação de dados confiável que lida com interrupções de rede como um profissional — porque ninguém quer que seu aplicativo trave por causa de um simples tempo limite.

Pré-requisitos

  • Python 3.11+
  • pip install pydantic-ai
  • Entendimento básico de modelos Pydantic
  • Conhecimento sobre bibliotecas de requisições de rede (como requests ou httpx)

Passo 1: Configurando seu Ambiente

Antes de implementar a lógica de retentativa, precisamos configurar nosso ambiente de desenvolvimento. Isso envolverá a instalação do pacote PydanticAI e a garantia de que temos todas as bibliotecas necessárias.


# Prepare seu ambiente Python
# Instale as bibliotecas pydantic-ai e httpx
!pip install pydantic-ai httpx

Este comando instala o PydanticAI junto com o httpx, que é crucial para realizar requisições HTTP. Eu escolhi httpx em vez de requests devido ao suporte nativo para operações assíncronas, que é uma grande vantagem para o desempenho. Agora, se você vem de um background com requests, esteja preparado para uma leve curva de aprendizado, mas acredite, vale a pena.

Passo 2: Criando um Modelo Pydantic Básico

Com o ambiente pronto, vamos criar nosso primeiro modelo Pydantic. Um modelo em Pydantic define o esquema para seus dados – é como um plano. Vamos criar um que lida com uma resposta de API simulada.


from pydantic import BaseModel

class ApiResponseModel(BaseModel):
 status: str
 data: dict

Este modelo possui dois campos: status e data. O campo status indica se a requisição foi bem-sucedida, e data contém a carga da resposta. A parte inteligente aqui é que o Pydantic validará a estrutura da resposta da API em relação a este modelo.

Passo 3: Implementando a Lógica de Requisição HTTP

Agora, vamos criar uma função para fazer uma requisição HTTP. Usaremos o Pydantic para validar a resposta. Aqui está a sacada: vamos adicionar a lógica de retentativa, então, se nossa requisição falhar, podemos tentar novamente em vez de fazer uma cena.


import httpx
import time

async def fetch_data(url: str) -> ApiResponseModel:
 async with httpx.AsyncClient() as client:
 response = await client.get(url)
 response.raise_for_status()
 return ApiResponseModel(**response.json())

Este código busca dados da URL especificada. Se falhar, precisamos implementar a lógica de retentativa. Ninguém quer lidar com erros HTTP em produção, certo?

Passo 4: Adicionando Lógica de Retentativa

É hora de adicionar a tão importante lógica de retentativa. Vamos implementar um mecanismo simples para tentar a requisição um número especificado de vezes antes de desistir.


async def fetch_with_retries(url: str, retries: int = 3, delay: int = 2) -> ApiResponseModel:
 for i in range(retries):
 try:
 return await fetch_data(url)
 except httpx.HTTPStatusError as e:
 print(f"Tentativa {i + 1} falhou: {e}. Tentando novamente...")
 time.sleep(delay) # Aguarde antes de tentar novamente
 except Exception as e:
 print(f"Erro inesperado: {e}. Tentando novamente...")
 time.sleep(delay)
 raise Exception(f"Falha ao buscar dados após {retries} tentativas.")

Nesta função, estamos utilizando um parâmetro opcional retries para nos permitir especificar quantas vezes tentar a requisição antes de desistir. Também temos um parâmetro delay, então, se nossa requisição falhar, fazemos uma pausa de alguns segundos em vez de bombardear o servidor com requisições.

Os Problemas

Até agora, tudo bem, mas aqui estão algumas armadilhas em que eu caí inúmeras vezes e que podem te derrubar em produção:

  • Exponential Backoff: É crucial para evitar sobrecarregar o servidor após uma falha. Certifique-se de aumentar o atraso cada vez que você tentar novamente. Atrasos estáticos simples não vão funcionar quando o sistema começa a sobrecarregar o servidor.
  • Tratando Diferentes Exceções: Você pode querer tentar novamente apenas em problemas transitórios. Nem todas as exceções justificam uma nova tentativa, então refine seu tratamento de exceções para capturar erros específicos.
  • Registrando Falhas: Não se esqueça de registrar detalhes sobre as falhas. Isso é fundamental para diagnosticar problemas posteriormente.
  • Gestores de Contexto Assíncronos: Se você está misturando código síncrono e assíncrono, tome cuidado com gestores de contexto. Eles não funcionam da mesma maneira, e isso pode levar a bugs indesejados.
  • Latência de Rede: Esteja ciente de que a latência de rede pode afetar significativamente suas tentativas. Teste em diferentes condições para estruturar sua lógica em torno de cenários realistas.

Exemplo Completo de Código

Aqui está uma versão completa do que construímos, totalmente operacional. Isso facilitará para você copiar e usar imediatamente. Basta substituir YOUR_API_URL_HERE pelo seu endpoint de destino.


import httpx
import time
from pydantic import BaseModel

class ApiResponseModel(BaseModel):
 status: str
 data: dict

async def fetch_data(url: str) -> ApiResponseModel:
 async with httpx.AsyncClient() as client:
 response = await client.get(url)
 response.raise_for_status()
 return ApiResponseModel(**response.json())

async def fetch_with_retries(url: str, retries: int = 3, delay: int = 2) -> ApiResponseModel:
 for i in range(retries):
 try:
 return await fetch_data(url)
 except httpx.HTTPStatusError as e:
 print(f"Tentativa {i + 1} falhou: {e}. Tentando novamente...")
 time.sleep(delay)
 except Exception as e:
 print(f"Erro inesperado: {e}. Tentando novamente...")
 time.sleep(delay)
 raise Exception(f"Falha ao buscar dados após {retries} tentativas.")

# Exemplo de Uso
# Certifique-se de que isso seja executado em um contexto assíncrono, como asyncio.run()
url = "YOUR_API_URL_HERE"
data = await fetch_with_retries(url)
print(data)

O Que Vem a Seguir?

Sua próxima ação? Experimente adicionar registros e métricas personalizados à sua lógica de retentativa. Você vai querer monitorar com que frequência as requisições falham, o tempo levado para tentativas de retentativa, etc. Ter esses dados pode aumentar drasticamente a confiabilidade de sua aplicação.

FAQ

P: Por que usar PydanticAI em vez de opções tradicionais?

R: O PydanticAI permite o manuseio estruturado de dados e a validação automática de suas respostas de API, algo que dá trabalho para gerenciar manualmente. Com 15.593 estrelas no GitHub, o PydanticAI se mostrou popular, o que pode significar melhor suporte da comunidade e recursos.

P: E se minha API exigir autenticação?

R: Você precisará estender o cliente HTTP para incluir cabeçalhos de autenticação. Isso pode ser feito modificando a inicialização do httpx.AsyncClient() para incluir um parâmetro auth se sua API suportar autenticação básica, ou utilizando tokens OAuth conforme necessário.

P: Existe uma alternativa à lógica de retentativa em aplicações em tempo real?

R: Embora a lógica de retentativa seja essencial, considere implementar padrões de circuito de interrupção como uma camada adicional de resiliência. Isso permite que seu aplicativo responda às falhas de maneira mais elegante e pode reduzir a carga do servidor durante interrupções.

Recomendações para Diferentes Perfis de Desenvolvedores

Se você é novo neste mundo de recuperação de dados:

  • Desenvolvedor Novo: Concentre-se em dominar os fundamentos, fique confortável fazendo requisições HTTP e modele seus dados com base em APIs reais.
  • Desenvolvedor Intermediário: Explore mecanismos avançados de retentativa e estratégias de otimização de desempenho. Considere criar um método de retentativa personalizado para melhor flexibilidade.
  • Desenvolvedor Sênior: Dedique tempo para aprimorar o tratamento de erros e os padrões de observação que podem fornecer melhores insights sobre o comportamento de sua aplicação sob carga. Métricas e registros são seus amigos!

Dados atualizados em 20 de março de 2026. Fontes: pydantic/pydantic-ai, Pydantic AI Retries, Adicionar Comportamento de Retentativa Personalizada.

Artigos Relacionados

🕒 Published:

🧰
Written by Jake Chen

Software reviewer and AI tool expert. Independently tests and benchmarks AI products. No sponsored reviews — ever.

Learn more →
Browse Topics: AI & Automation | Comparisons | Dev Tools | Infrastructure | Security & Monitoring
Scroll to Top