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!

1
resposta

[Projeto] Meu categorizador com Llama 3.1 8b

C

from openai import OpenAI
from dotenv import load_dotenv
import os

load_dotenv()
client = OpenAI(
    base_url=os.getenv("BASE_URL"),
    api_key=os.getenv("API_KEY")
)

def categorizar_produtos(nome_produto, lista_categorias_possiveis):
    prompt_sistema = f"""
    Você é um categorizador de produtos.
    Você deve assumir as categorias presentes na lista abaixo.

    # Lista de Categorias Válidas
    {lista_categorias_possiveis.split(",")}
    # Formato da Saída
    Produto: Nome do Produto
    Categoria: apresente a categoria do produto
    # Exemplo de Saída
    Produto: Escova elétrica com recarga solar
    Categoria: Eletrônicos Verdes
    """
    
    response = client.chat.completions.create(
        model=os.getenv("MODEL"),
        temperature=0,
        max_tokens=200,
        messages=[
            {
                "role":"system",
                "content" : prompt_sistema
            },
            {
                "role" : "user",
                "content" : nome_produto
            }
        ],
    )

    return response.choices[0].message.content

categorias_validas = input("Informe as categorias válidas, separando-as por vírgula:")

while True:
    nome_produto = input("Digite o nome do produto (ou 'sair'): ")

    if nome_produto.lower() == "sair":
        break

    texto_resposta = categorizar_produtos(nome_produto, categorias_validas)
    print(texto_resposta)

Saída:

Informe as categorias válidas, separando-as por vírgula:Limpeza, Higiene Pessoal, Armazenamento, Transporte
Digite o nome do produto (ou 'sair'): escova de dente
Produto: Escova de Dente
Categoria: Higiene Pessoal
Digite o nome do produto (ou 'sair'): Carrinho de supermercado
Produto: Carrinho de supermercado
Categoria: Armazenamento
Digite o nome do produto (ou 'sair'): carrinho
Não consegui entender o que você quis dizer. Você gostaria de adicionar um produto ao carrinho? Se sim, por favor forneça as informações do produto e eu posso ajudar a categorizá-lo. 

Por exemplo: 
Produto: Carrinho
Categoria: Armazenamento
Digite o nome do produto (ou 'sair'): taxi
Produto: Taxi
Categoria: Transporte
Digite o nome do produto (ou 'sair'): sair
1 resposta

Olá, Paulo. Tudo bem por aí?

O fluxo que você criou está funcional e dá para perceber que a lógica de interação com a API está bem aplicada. O ponto curioso é quando você digitou apenas “carrinho” e o modelo acabou trazendo uma resposta mais conversacional, como se fosse um assistente de compras. Isso acontece porque o prompt não força o modelo a sempre escolher uma categoria da lista, então ele pode “fugir” do esperado em casos ambíguos.

Uma forma simples de deixar o comportamento mais consistente é reforçar no prompt que a saída deve obrigatoriamente ser uma das categorias válidas. Você pode incluir uma instrução extra, algo como “Se não encontrar correspondência, responda apenas com ‘Categoria: Indefinido’”. Por exemplo:

prompt_sistema = f"""
Você é um categorizador de produtos.
Use apenas as categorias da lista abaixo.
Se não houver correspondência clara, responda com 'Categoria: Indefinido'.

# Lista de Categorias Válidas
{lista_categorias_possiveis.split(",")}

# Formato da Saída
Produto: Nome do Produto
Categoria: apresente a categoria do produto
"""

Isso ajuda a evitar que o modelo invente explicações extras e mantém a saída mais previsível. Você já pensou em testar com temperature=0.3 para ver se ele fica um pouco mais flexível sem perder a consistência?

Parabéns pelo empenho. Continue explorando e lembre-se que o fórum está sempre à disposição para trocar ideias e evoluir junto.

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