Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

Faça como eu fiz: API e Dados em Python | Python: Inteligência Artificial Aplicada


1. Configuração Inicial

Passo 1: Abrir o Notebook

  • Acesse Google Colab
  • Crie um novo notebook
  • Adicione um título em Markdown:
# Integrando Gemini API com Python

Passo 2: Obter a API Key

Passo 3: Adicionar ao Secrets do Colab

  • No menu lateral, clique em Secrets
  • Crie uma nova variável: GEMINI_API_KEY
  • Cole sua chave
  • Clique em Save

2. Configurando a Conexão

Instalar a Biblioteca

# Instale o SDK do Google Gen AI
!pip install google-generativeai

Importar e Configurar

import os
from google.colab import userdata
import google.generativeai as genai

# Configurar variável de ambiente
api_key = userdata.get('GEMINI_API_KEY')
os.environ['GOOGLE_API_KEY'] = api_key
genai.configure(api_key=api_key)

# Criar cliente
model = genai.GenerativeModel('gemini-2.5-flash')

3. Primeiro Requisição

# Enviar prompt e armazenar resposta
prompt = "O que é inteligência artificial?"
response = model.generate_content(prompt)

# Exibir resultado
print("Resposta da IA:")
print(response.text)

4. Estruturas de Controle: Loop While

# Demonstração com asteriscos
contador = 0
max_iteracoes = 5

print("Exibindo padrão:")
while contador < max_iteracoes:
    print("*" * (contador + 1))
    contador += 1  # Incrementar para evitar loop infinito

print("Pronto!")

5. Chat Interativo

# Criar sessão de chat
chat = model.start_chat()

# Função para interação
def chat_interativo():
    while True:
        # Receber entrada do usuário
        mensagem = input("\nVocê: ")
        
        if mensagem.lower() == 'sair':
            print("Encerrando chat...")
            break
        
        # Enviar mensagem e obter resposta
        resposta = chat.send_message(mensagem)
        print(f"IA: {resposta.text}")
        
        # Exibir histórico
        print("\n--- Histórico ---")
        for msg in chat.history:
            role = "Você" if msg.role == "user" else "IA"
            print(f"{role}: {msg.parts[0].text[:50]}...")

# Executar
chat_interativo()

6. Trabalhando com Listas

# Lista de alunos e notas
nomes = ["Ana", "Bruno", "Carlos", "Diana"]
medias = [7.5, 8.0, 6.5, 9.0]

# Acessar elementos
print(f"Primeiro aluno: {nomes[0]}")
print(f"Última nota: {medias[-1]}")

# Percorrer com índices
for i in range(len(nomes)):
    print(f"{nomes[i]}: {medias[i]}")

# Slice (fatiamento)
print(f"Primeiros 2: {nomes[0:2]}")

# Incrementar notas (até máximo 10)
for i in range(len(medias)):
    medias[i] = min(medias[i] + 1, 10)
    print(f"{nomes[i]}: {medias[i]}")

7. Trabalhando com Dicionários

# Representar alunos como dicionários
alunos = [
    {"nome": "Ana", "media": 8.5},
    {"nome": "Bruno", "media": 9.0},
    {"nome": "Carlos", "media": 7.0},
    {"nome": "Diana", "media": 9.5}
]

# Acessar dados
for aluno in alunos:
    print(f"{aluno['nome']}: {aluno['media']}")

# Modificar valores
alunos[0]['media'] = 9.0

# Criar novo dicionário
aluno_novo = {
    "nome": "Eduardo",
    "media": 8.0
}
alunos.append(aluno_novo)

# Exibir final
print("\nTodos os alunos:")
for aluno in alunos:
    print(f"- {aluno['nome']}: Média {aluno['media']}")

1 resposta
solução!

Olá, Estudante. Como vai?

Parabéns pelo excelente projeto! O seu notebook do Google Colab ficou extremamente completo, organizado e didático. Você estruturou perfeitamente os passos cruciais de segurança de dados (usando o Secrets do Colab), a conexão limpa com o SDK da Google Gen AI (gemini-2.5-flash), estruturas lógicas de repetição e manipulação de coleções fundamentais como listas e dicionários.

Para enriquecer ainda mais o seu aprendizado e trazer boas práticas importantes de programação e engenharia de prompts, destaquei alguns pontos técnicos interessantes sobre a sua solução:

1. Excelente Uso do userdata e Gerenciamento de Chaves

Gostaria de parabenizar a sua escolha de usar userdata.get('GEMINI_API_KEY').

  • Por que isso é uma grande boa prática? Antigamente, era comum ver pessoas expondo suas chaves de API diretamente no código em strings de texto plano. Ao salvar seu notebook no GitHub, por exemplo, robôs varriam o código e roubavam essas credenciais. Utilizando a aba Secrets do Colab, seu código fica seguro para ser compartilhado com qualquer pessoa sem o risco de vazar sua credencial privada.

2. Gerenciamento de Memória no Chat Interativo (Item 5)

A sua implementação da função chat_interativo com model.start_chat() está excelente, pois o objeto chat gerencia automaticamente o histórico de contexto da conversa.

  • Dica de Produção: Modelos de IA possuem um limite de "janela de contexto" (tokens). Em conversas muito longas dentro de um laço while True, o histórico acumulado em chat.history vai crescendo. Se o chat for usado em larga escala, uma boa prática de engenharia é criar uma função para limitar ou resumir o histórico antigo, garantindo que a requisição não fique pesada demais ou ultrapasse os limites da API.

3. Mutabilidade de Listas vs. Legibilidade com zip() (Item 6)

No item 6, você utilizou perfeitamente os índices para percorrer duas listas paralelas e para atualizar os valores de medias:

for i in range(len(nomes)):
    print(f"{nomes[i]}: {medias[i]}")
  • Dica de Python Fluente (Pythonic Code): Quando queremos apenas ler ou exibir duas listas que possuem o mesmo tamanho de forma combinada, o Python possui uma função nativa maravilhosa chamada zip(). Ela deixa o código muito mais limpo e dispensa o uso do range(len()). Veja como ficaria a leitura:
for nome, media in zip(nomes, medias):
    print(f"{nome}: {media}")

O uso do índice com range(len()) que você fez continua sendo a abordagem ideal para o segundo loop, onde o seu objetivo era de fato modificar os valores originais da lista (medias[i] = ...).

4. Transição Perfeita para Estruturas de Dados (Item 7)

A evolução do item 6 para o item 7 foi uma jogada fantástica de arquitetura de código. Agrupar dados correlacionados (como nome e média) em uma lista de dicionários [{"nome": "Ana", "media": 8.5}] é exatamente a forma como os dados trafegam na web no formato JSON e como os modelos de IA costumam receber ou estruturar dados complexos.

O seu resumo e o passo a passo estão impecáveis. Continue com essa excelente consistência nos códigos e nos registros das atividades!

Espero que possa ter lhe ajudado!