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)
3
respostas

[Projeto] Eu fiz o exercício da aula com Ollama e gemma4:e4b

Fiz usando ollama e ficou bacana apesar do tempo de resposta não ser tão bom com meu equipamento. Funcionou nos conformes.

from openai import OpenAI
from dotenv import load_dotenv
import os
import openai

load_dotenv()

API_KEY = os.getenv("OLLAMA_API_KEY") 
OLLAMA_HOST = os.getenv("OLLAMA_BASE_URL")


def get_ollama_client() -> OpenAI:
    return OpenAI(
        api_key=API_KEY,  # Necessário para a biblioteca, mesmo sendo ignorado pelo Ollama
        base_url=OLLAMA_HOST
    )

cliente = get_ollama_client()
modelo = "gemma4:e4b"

def carrega(nome_do_arquivo):
    try:
        with open(nome_do_arquivo, "r") as arquivo:
            dados = arquivo.read()
            return dados
    except IOError as e:
        print(f"Erro: {e}")

def salva(nome_do_arquivo, conteudo):
    try:
        with open(nome_do_arquivo, "w", encoding="utf-8") as arquivo:
            arquivo.write(conteudo)
    except IOError as e:
        print(f"Erro ao salvar arquivo: {e}")


def analisador_sentimentos(produto):
    prompt_sistema = f"""
        Você é um analisador de sentimentos de avaliações de produtos.
        Escreva um parágrafo com até 50 palavras resumindo as avaliações e 
        depois atribua qual o sentimento geral para o produto.
        Identifique também 3 pontos fortes e 3 pontos fracos identificados a partir das avaliações.

        # Formato de Saída

        Nome do Produto:
        Resumo das Avaliações:
        Sentimento Geral: [utilize aqui apenas Positivo, Negativo ou Neutro]
        Ponto fortes: lista com três bullets
        Pontos fracos: lista com três bullets
    """  # noqa: F541

    prompt_usuario = carrega(f"./dados/avaliacoes-{produto}.txt")

    print(f"Iniciou a análise de sentimentos do produto {produto}")

    lista_mensagens = [
        {
            "role": "system",
            "content": prompt_sistema
        },
        {
            "role": "user",
            "content": prompt_usuario
        }
    ]

    try:
        resposta = cliente.chat.completions.create(
                messages=lista_mensagens,
                model=modelo
            )

        texto_resposta = resposta.choices[0].message.content
        salva(f"./dados/analise-{produto}.txt", texto_resposta)
      
        print(f"Análise de sentimentos do produto {produto} concluída e salva em ./dados/analise-{produto}.txt")


    except openai.AuthenticationError as e:
        print(f"Erro de Autenticação: {e}")
    except openai.APIError as e:
        print(f"Erro de API: {e}")


# Processamento único  
analisador_sentimentos("Maquiagem mineral")


# Processamento em lotes
lista_de_produtos = ["Camisetas de algodão orgânico", "Jeans feitos com materiais reciclados", "Maquiagem mineral"]

for produto in lista_de_produtos:
    analisador_sentimentos(produto)
3 respostas
solução!

Boa noite, Marcelo! Tranquilo?

Gostei demais da sua resposta, continue assim!

Mandou muito bem explorando o OpenAI client para integração com Python, aplicou de maneira eficiente o dotenv para variáveis de ambiente e compreendeu como usar o try/except para tratamento de erros.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Logs estruturados: registrar eventos importantes para facilitar depuração.
  • Automação em lotes: usar filas ou paralelismo para processar grandes volumes de produtos.
  • Gerenciamento de erros: criar funções específicas para lidar com falhas de autenticação ou API.

Continue postando as suas soluções! Além de ganhar pontos de XP na plataforma, você pode ajudar outros estudantes no fórum.

Ah, uma pergunta: o que você gostaria de evoluir mais agora, otimizar o desempenho do processamento em lotes ou explorar técnicas de análise de sentimentos mais avançadas com modelos diferentes?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Fala Daniel, tudo bem com vocÊ?
obrigado pelo feedback, eu gostariad e evoluir com observabilidade ( logs estruturados, controle de custos, metricas das respostas do llm pra ver acurácia, f1-score aou algo assim) e automação em lotes com filas ou paralelismo com certeza gostaria de ver exemplos disso prontos pra produção.

um abraço

Bom dia, Marcelo! Tudo bem?

Muito boa a sua visão de evoluir com observabilidade e automação em lotes.

Logs estruturados, métricas de custo e indicadores como F1-score ou acurácia são fundamentais para dar transparência ao comportamento do modelo e permitir ajustes finos. Isso ajuda não só na confiabilidade, mas também no controle financeiro, que é cada vez mais crítico em sistemas que consomem tokens.

Já a automação em lotes com filas ou paralelismo é um passo natural para escalar. Usar ferramentas como RabbitMQ, Kafka ou mesmo frameworks de processamento distribuído (Spark e Dask) permite lidar com grandes volumes de dados sem comprometer a performance. O ideal é combinar observabilidade com paralelismo: você distribui a carga e, ao mesmo tempo, monitora cada etapa para garantir qualidade e eficiência.

Gostei muito da sua abordagem prática, pensando já em exemplos prontos para produção. Isso mostra maturidade de engenharia e foco em soluções reais.

Forte abraço!