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.")