*Este relatório foi gerado por IA
Relatório de Estudos – Dia 8: APIs GET (Buscando Dados)
📝 Resumo da Sessão
Hoje foi um dia de transição da teoria de HTTP para a prática essencial de comunicação com APIs. Enfrentei desafios técnicos na configuração inicial e de lógica na manipulação de estruturas de dados.
⚙️ Progresso e Acertos
- Instalação da Ferramenta: Enfrentei o erro
zsh: command not found: pip. Com a ajuda do Bobby, descobri que deveria usarpip3 install requestsno meu ambiente macOS. A bibliotecarequestsagora está instalada e funcional. - Requisição GET: Consegui fazer minha primeira requisição
GETcom sucesso para URLs de teste. - Status Code: Entendi que o
status_code(200 OK) é uma resposta do servidor HTTP e não uma invenção da bibliotecarequests. - Extração de Dados: Concluí com sucesso as atividades Fácil e Média, dominando a conversão de JSON para Dicionário Python usando o método
resposta.json()e a extração de chaves específicas. - Desafio de Iteração: No desafio final (Iteração e Contagem), consegui integrar API GET + Conversão JSON + Loops
for+ Filtragem Condicional (if), terminando com um código que filtra e conta dados com sucesso.
🚧 Erros e Desafios Superados
| Desafio | Erro Encontrado | Lição Aprendida |
| Atividade 3 (Iteração) | Tentei usar .get() na Lista completa: dados_posts.get("id"). O erro foi AttributeError: 'list' object has no attribute 'get'. | O método .get() só pode ser usado em Dicionários. É preciso iterar (for item in lista:) para que o item seja o Dicionário, e só então usar item.get(). |
| Desafio Extra (Contagem) | Tentei iterar sobre o objeto Response (for item in todos_list:), em vez da lista JSON convertida. | O objeto Response deve ser sempre transformado (.json()) antes de ser iterado ou manipulado como uma lista/dicionário. Sempre iterar sobre o resultado do .json(). |
| Conceito Extra | Desconhecia o Slicing de listas (lista[:5]). | Aprendi que Slicing serve para limitar por posição (índice) e é diferente de Filtragem, que limita por valor/conteúdo. |
🎯 Próximo Passo
O Dia 8 está CONCLUÍDO com sucesso e os conceitos de busca de dados via API estão sólidos.
Relatório de Estudos – Dia 10: Tratamento Robusto de Erros em APIs
Meu Diário de Estudos
Hoje, o foco foi transformar meu script de API em um sistema robusto, capaz de lidar com falhas de rede e erros de servidor usando Status Codes e o bloco try/except.
Entendi que:
- 2xx é Sucesso.
- 4xx é Erro do Cliente (meu erro, como 404/Not Found).
- 5xx é Erro do Servidor (problema na API externa, como 500/Internal Server Error).
Acertos e Conceitos Chave Dominados:
try/except: Entendi que otryé o fluxo de sucesso, e oexcepté o fluxo de falha.raise_for_status(): Esse método da bibliotecarequestsé um divisor de águas. Ele só lança uma exceção (HTTPError) se o código for 4xx ou 5xx. Se for 2xx, ele prossegue, permitindo que meu código de sucesso seja executado dentro dotry.- Tratamento Seletivo (404): Consegui usar um
if response.status_code == 404antes doraise_for_status()para tratar o “Recurso Não Encontrado” de forma especial, sem transformá-lo em umHTTPErrorgenérico. continuee Lógica de Retry (O Grande Desafio): O conceito decontinuepara loops era novo, mas entendi que ele me permite pular para a próxima tentativa de forma controlada. Implementei com sucesso a lógica para:- Reconhecer um erro 500 (temporário).
- Imprimir uma mensagem de espera.
- Usar
continuepara repetir a requisição após 2 segundos (time.sleep(2)).
Erros e Dificuldades Superadas (A Lição mais Importante):
- Ordem de Execução no Terminal: Inicialmente, me confundi ao ver mensagens de sucesso e falha juntas. Bobby explicou que era a execução sequencial de dois testes diferentes no mesmo script.
- Sintaxe e Indentação: A maior dificuldade foi na Atividade Difícil, onde tive problemas de sintaxe (
elif response.status_code >= 400 and < 500:) e, crucialmente, de indentação na lógica de incremento (tentativas += 1). Corrigir a indentação me fez perceber que essa é a forma como o Python define o fluxo de execução e o escopo das variáveis.
Conclusão do Módulo: Concluí a fase de fundamentos de Python e APIs com um conhecimento robusto sobre comunicação HTTP e prevenção de falhas, que é essencial para o próximo passo.
🚀 Do Zero à Personalidade: Minha Jornada Dominando LLMs em Python (Dias 11 a 14)
Olá! Se você acompanha meu “Plano de Estudos de 30 Dias” para criar um agente LLM, este é o primeiro grande marco! Os Dias 11 a 14 foram a virada de chave, onde saí do Python básico e finalmente conectei meu código ao cérebro de uma Inteligência Artificial.
Aqui estão os conceitos mais importantes que dominei e os bugs que me fizeram aprender mais.
🧩 Módulo 2: O Coração do Workflow
Dia 11: Vencendo o Setup (A Chave de Acesso)
Meu primeiro desafio foi puramente técnico: fazer o ambiente funcionar.
- Instalação e Isolamento: Após resolver alguns erros de
ModuleNotFoundError, aprendi a importância do Ambiente Virtual (venv) para isolar as dependências do projeto. Isso garante que a bibliotecagoogle-genaifuncione corretamente. - Segurança em Primeiro Lugar: O ponto crucial foi configurar a API Key como uma Variável de Ambiente (
export GEMINI_API_KEY="..."). Essa é a forma profissional de garantir que a senha do meu serviço de IA nunca fique exposta no código. - Conexão Estabelecida: Ao criar o objeto
client = genai.Client(), eu finalmente tinha o “telefone” pronto para ligar para a IA.
Dia 12: A Primeira Conversa e o Segredo do Dinamismo
No Dia 12, fiz meu primeiro generate_content e entendi o ciclo de Request-Response. Mas a maior conquista foi a Atividade Média (O Tradutor).
- Prompt Dinâmico (
f-strings): O segredo para meu projeto é não ter prompts fixos. Usandof"Traduza esta frase: {texto_original}", eu garanto que meu código consegue pegar dados de uma variável Python (que simula um formulário web) e injetar no pedido à IA. Essa é a base do meu agente!
Dia 13: Os Botões de Controle (Criatividade e Custo)
Aprendi que não basta a IA responder; preciso controlar como ela responde.
- O Botão da Criatividade (
temperature): Useitemperature=0.0para tarefas lógicas (como o Professor de Matemática) etemperature=1.7para testes de criatividade (como o experimento dos nomes alienígenas), entendendo a diferença entre respostas determinísticas e caóticas. - O Controle de Custo (
max_output_tokens): Ao limitar os tokens, vi a resposta ser cortada no meio, provando que tenho controle sobre o tamanho da resposta (e consequentemente, sobre o custo da API). Meu cálculo mostrou que 520 tokens custam frações de centavos — o que me deu confiança para desenvolver sem medo de estourar o orçamento.
Dia 14: Dando uma Alma e Debugando Profissionalmente
O Dia 14 foi o ápice, pois criei o protótipo do meu assistente (o Tutor Bobby!).
- A Personalidade (
system_instruction): Usando o argumentosystem_instructiondentro doconfig, eu consegui dar uma profissão, um tom de voz e regras inquebráveis à IA. O Professor de Matemática só falava de números, e o Tutor Bot falava com analogias e emojis. - O “Aha!” Moment (O Objeto
response): Tive um erro clássico ao imprimir o objeto inteiro em vez de usar o.text. Isso me ensinou que oresponseé uma “caixa” de dados complexos. Além da resposta limpa (.text), conseguimos extrair informações técnicas essenciais, como o custo da chamada (response.usage_metadata.total_token_count). - A Vírgula Fugitiva: Descobri que em Python, a ordem dos argumentos nomeados (
system_instructionetemperature) não importa, mas a vírgula que os separa é vital para evitar erros de sintaxe!
🎯 Próximos Passos
Saio do Dia 14 com a fundação do Módulo 2 totalmente construída. Meu código consegue falar com a IA, controlar sua personalidade e medir seu custo.
O próximo passo é profissionalizar o código. No Dia 15, vou tirar os prompts longos de dentro do arquivo Python e colocá-los em Templates externos para manter o projeto limpo e fácil de atualizar.