Python: Fundamentos para Imersão Dev Agentes de IA
Uma Jornada Guiada para compreender os Fundamentos da Programação em Python da imersão
Nosso Objetivo Final
Ao final desta jornada, você será capaz de ler e compreender cada linha do código abaixo. Parece complexo agora? Em breve, fará todo o sentido.
from typing import Dict
def perguntar(pergunta: str) -> Dict:
docs_relacionados = retriever.invoke(pergunta)
if not docs_relacionados:
return {"answer": "Não sei."}
return {"answer": docs_relacionados}
resposta = perguntar("Qual é a política de privacidade?")
print("Resposta ->", resposta["answer"])
# ... e muito mais ...
Capítulo 1: Os Primeiros Passos no Universo Python
Variáveis: As Caixas de Memória
Em programação, usamos variáveis para guardar informações. Pense nelas como caixas com etiquetas. Você dá um nome e guarda algo dentro usando o sinal de igual (`=`).
Tipos de Dados: Textos e Verdades
As informações possuem tipos. Os dois mais básicos que veremos são textos (strings) e valores de verdadeiro/falso (booleanos).
String (str)
Qualquer texto entre aspas.
resposta = "Não sei."
Número inteiro (int)
Representa números inteiros, positivos ou negativos, sem casas decimais.
idade = 42
Número decimal (float)
Representa números reais (decimais) para cálculos com frações.
altura = 1.75
Booleano (bool)
Apenas `True` ou `False`.
contexto_encontrado = True
Capítulo 2: Guardando e Organizando Dados
Listas: Coleções de Itens
Uma lista (`list`) é uma coleção ordenada de itens, criada com colchetes `[]`. Ela pode guardar qualquer tipo de dado e até mesmo ficar vazia.
citacoes = ["Artigo 1", "Página 3"]
citacoes_vazias = []
Dicionários: Informações com Etiquetas
Um dicionário (`dict`) guarda pares de `chave: valor`, permitindo uma organização mais estruturada dos dados. Eles são criados com chaves `{}`.
resultado = {
"answer": "Resposta encontrada.",
"contexto_encontrado": True
}
Métodos: Superpoderes dos Objetos
Em Python, quase tudo é um "objeto" que possui ações embutidas, chamadas de métodos. Usamos um ponto (`.`) para acioná-los. Por exemplo, `.strip()` remove espaços extras de uma string.
texto_sujo = " olá "
texto_limpo = texto_sujo.strip()
# texto_limpo agora é "olá"
Capítulo 3: Ensinando o Código a Tomar Decisões
A Estrutura Condicional `if`
A declaração `if` permite que seu código execute ações diferentes com base em uma condição ser `True` ou `False`.
Comparações e Lógica
Usamos `==` para verificar se dois valores são iguais e `not` para inverter um valor booleano (`True` vira `False` e vice-versa).
# Se a lista estiver vazia (considerado False), 'not' inverte para True
x = 10
y = 5
# Verifica se x é igual a y
igual = (x == y)
print("x é igual a y?", igual) # Saída: False
# Inverte o valor booleano
diferente = not (x == y)
print("x é diferente de y?", diferente) # Saída: True
Capítulo 4: Criando Blocos de Código Reutilizáveis
Funções: Código Organizado
Uma função é um bloco de código nomeado que realiza uma tarefa. Você a "define" uma vez com `def` e pode "chamá-la" quantas vezes quiser.
# Definindo a função
def saudar(nome):
return f"Olá, {nome}!"
# Chamando a função
mensagem = saudar("Aluno")
print(mensagem) # Resultado: Olá, Aluno!
Anatomia de uma Função
As funções têm partes importantes: a palavra-chave `def`, um nome, parênteses para os parâmetros (entradas) e um `return` opcional para o resultado (saída).
Type Hints: Dicas de Rota
Anotações como `: str` e `-> Dict` são "dicas de tipo". Elas não alteram o código, mas ajudam os humanos a entenderem que tipo de dado uma função espera receber e que tipo ela vai retornar.
def saudar(nome: str) -> str:
# Esta função espera uma string e retorna uma string
return f"Olá, {nome}!"
Capítulo 5: Desvendando o Código Final
Missão cumprida! Agora você tem todo o conhecimento necessário. Clique em cada linha do código abaixo para ver uma explicação detalhada sobre o que ela faz, conectando tudo o que aprendemos.
Clique em uma linha de código
Selecione uma linha à esquerda para ver a mágica acontecer e a explicação aparecer aqui.
Importação de Ferramentas
Esta linha importa o objeto `Dict` de uma biblioteca do Python, o que nos permite usar a dica de tipo (`Type Hint`) `Dict` na definição da nossa função.
Definição da Função
`def` inicia a definição de uma função. Ela se chama `perguntar`, espera um parâmetro `pergunta` (que deve ser uma string) e promete retornar (`->`) um dicionário (`Dict`).
Buscando Documentos
Aqui, usamos uma ferramenta externa (`retriever`) para buscar documentos relevantes. O método `.invoke()` é chamado com a `pergunta` do usuário. O resultado é salvo na variável `docs_relacionados`.
Verificação de Sucesso
Este é o nosso `if`. A condição `not docs_relacionados` checa se a lista de documentos está vazia. Em Python, uma lista vazia é considerada `False`, então `not` a transforma em `True`, ativando o bloco de código.
Retorno Padrão
Se nenhum documento foi encontrado, a função para aqui e retorna (`return`) um dicionário padrão, informando que a resposta é "Não sei.".
Retorno com Sucesso
Se a função chegou a esta linha, significa que a busca por documentos funcionou. A função retorna um dicionário onde a chave `"answer"` contém a lista de documentos encontrada.
Chamando a Função
Esta linha mostra como usar a função `perguntar()`. Passamos a string `"Qual é a política de privacidade?"` como argumento. O dicionário que a função retorna é guardado na variável `resposta`.
Exibindo o Resultado
Finalmente, a função `print()` exibe o resultado no console. Usamos `resposta["answer"]` para acessar o valor dentro da chave `"answer"` do dicionário que a nossa função `perguntar()` nos retornou.