0
respostas

[Projeto] Algumas modificações de resenhas

A aula de resenhas eu fiz alterações tanto em promtps, como parâmetros e tratametos de saída, porque com gemini estava sendo chato a interrupçãod e bucket cheio e na mudança de llm apareceu outros desafios.

completion = client.chat.completions.create(
    model="llama-3.3-70b-versatile",
    messages=[
        {
            "role": "user",
            "content": f"""Você é um analista de dados. Vou te passar muitas resenhas negativas de um produto, separadas por '#####'. 
            
            Quero que você encontre 5 categorias diferentes para os tipos de reclamações. 
            Regras:
            - Cada categoria deve ser definida por APENAS uma palavra.
            - Não escreva nada além das 5 categorias.
            - Retorne separadas por vírgula, em letra minúscula e sem acentos gráficos.

            As categorias são:
            eletronicos, roupas, alimentos, viagens, brinquedos

            Aqui estão as resenhas negativas:
            {resenhas_negativas_unidas}"""
        }
    ],
    temperature=0.2,
    max_completion_tokens=50, 
    stream=False,
)

# Captura o texto completo da resposta
resposta_de_categorias = completion.choices[0].message.content.strip()
#obs precisei modificar a temperatura , estava muito literal
#precisei aumentar quantidade de tokens da saída em max_completion_tokens
#precisei modificar um pouco o prompt
completion = client.chat.completions.create(
    model="llama-3.3-70b-versatile",
    messages=[
        {
            "role": "user",
            "content": f"""Você é um analista de dados. Vou te passar muitas resenhas negativas de um produto, separadas por '#####'. 
            
            Quero que você encontre 5 categorias diferentes para os tipos de reclamações, cada categoria dever ser deffinida
            por APENAS uma palavra, cada categoria deve estar em letra minúscula e sem acentos gráficos. 
            
            - Depois quero que você RETORNE como resposta um texto no formato JSON, contendo três chaves, onde um dos campos
            é a categoria e você deve colocatar a categoria identifica neste campo:
              .'resenha_original': irá conter a resenha original em inglês
              -'resenha_pt_br': irá conter a resenha original em portugu~es Brasileiro
              -'categoria': irá conter a categoria dentre as 5 definidas por você em que a resenha se encaixe
              - retorne um json com todas as resenhas categorizadas, veja exemplo

              Exemplo:
              {
              {'resenha_original': 'I didn´t like de color of the product'},
              {'resenha_pt_br':'eu não gostei da cor deste produto'},
              {'categoria':'design'}

              }         
           
            Faça isso pra todas as resenhas que eu te enviar a seguir:{resenhas_negativas_unidas}"""
        }
    ],
    temperature=0.8,
    max_completion_tokens=4000, 
    stream=False,
)


json_de_resenhas_classificadas = completion.choices[0].message.content.strip()

Como saída aprensentou algo como:

Aqui estão as 5 categorias de reclamações:

  • desempenho
  • confiabilidade
  • velocidade
  • compatibilidade
  • capacidade

Aqui está o JSON com as resenhas categorizadas:

[
{
"resenha_original": "I bought 2 of those SanDisk 32 GB microSD , used them on my Galaxy Note and Galaxy S4First one , my phone started saying it was removed , then recognize it again :) then diedI thought it's just a luck , plugged in the 2nd one :) stayed for about 2 months and died suddenly ! and lost everythingnever buying from SanDisk again .. ever",
"resenha_pt_br": "Eu comprei 2 desses SanDisk 32 GB microSD, usei em meu Galaxy Note e Galaxy S4. O primeiro, meu telefone começou a dizer que ele foi removido, então reconheceu novamente :) então morreu. Eu pensei que era apenas uma questão de sorte, pluguei o segundo :) ficou por cerca de 2 meses e morreu repentinamente! e perdi tudo. Nunca mais comprarei da SanDisk novamente... nunca",
"categoria": "confiabilidade"
}

tratei com expressões regulares e deu muito bom:

import json
import re

# 1. Encontrar o JSON dentro do texto bruto
# O re.DOTALL faz o ponto '.' corresponder a quebras de linha também
match = re.search(r'\[.*\]', json_de_resenhas_classificadas, re.DOTALL)

if match:
    json_limpo = match.group(0)
    # 2. Carregar o JSON limpo para um dicionário/lista
    dicionario_de_resenhas_classificadas = json.loads(json_limpo)
    print("Sucesso! JSON carregado.")
    print(dicionario_de_resenhas_classificadas)
else:
    print("Não foi possível encontrar um formato JSON na resposta.")