Relatório de Estudos: Semana 02 – Aprendendo a programar LLMs


*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

  1. Instalação da Ferramenta: Enfrentei o erro zsh: command not found: pip. Com a ajuda do Bobby, descobri que deveria usar pip3 install requests no meu ambiente macOS. A biblioteca requests agora está instalada e funcional.
  2. Requisição GET: Consegui fazer minha primeira requisição GET com sucesso para URLs de teste.
  3. Status Code: Entendi que o status_code (200 OK) é uma resposta do servidor HTTP e não uma invenção da biblioteca requests.
  4. 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.
  5. 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

DesafioErro EncontradoLiçã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 ExtraDesconhecia 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 o try é o fluxo de sucesso, e o except é o fluxo de falha.
  • raise_for_status(): Esse método da biblioteca requests é 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 do try.
  • Tratamento Seletivo (404): Consegui usar um if response.status_code == 404 antes do raise_for_status() para tratar o “Recurso Não Encontrado” de forma especial, sem transformá-lo em um HTTPError genérico.
  • continue e Lógica de Retry (O Grande Desafio): O conceito de continue para 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 continue para repetir a requisição após 2 segundos (time.sleep(2)).

Erros e Dificuldades Superadas (A Lição mais Importante):

  1. 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.
  2. 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.

  1. 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 biblioteca google-genai funcione corretamente.
  2. 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.
  3. 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. Usando f"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.

  1. O Botão da Criatividade (temperature): Usei temperature=0.0 para tarefas lógicas (como o Professor de Matemática) e temperature=1.7 para testes de criatividade (como o experimento dos nomes alienígenas), entendendo a diferença entre respostas determinísticas e caóticas.
  2. 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 argumento system_instruction dentro do config, 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 o response é 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_instruction e temperature) 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.

Leia mais

Relatório de Estudos: Semana 02 – Aprendendo a programar LLMs

A Ferramenta é Só um Detalhe: Por Que o Profissional Adaptável Vence?

Relatório de Estudos – Dia 7: APIs/HTTP Teoria