#Carregar um arquivo .csv com feedback de clientes (reviews.csv)
import pandas as pd
df = pd.read_csv("reviews.csv")
#usar um LLM para classificar um sentimento de cada feedback(Positivo, Negativo, Neutro) e adicionar essa classificação ao DataFrame
import os
from google.colab import userdata
from groq import Groq
os.environ['GROQ_API_KEY'] = userdata.get('GROQ_API_KEY')
client = Groq()
#função para responder às perguntas usando a LLM gpt-oss-2
def classificar_sentimentos(series):
print("\nClassificando os sentimentos das avaliações:")
sentimentos = []
max_retries = 5
initial_delay = 5 # seconds
for i, feedback in enumerate(series):
retries = 0
resposta_llm = "Não classificado" # Default value
while retries < max_retries:
try:
completion = client.chat.completions.create(
model="openai/gpt-oss-20b",
messages=[
{
"role": "user",
"content": "Analise o seguinte feedback e o classifique apenas em 'Positivo', 'Negativo' ou 'Neutro': " + feedback + "responda apenas com uma palavra"
}
],
temperature=0.5,
max_completion_tokens=200,
top_p=1,
reasoning_effort="medium",
stream=False,
stop=None
)
llm_content = completion.choices[0].message.content.strip()
if llm_content:
resposta_llm = llm_content
print(f"Avaliação{i+1}: {resposta_llm}\n") # Corrected index from 'index' to 'i'
sentimentos.append(resposta_llm)
break # Sai do loop de retry se a chamada for bem-sucedida
except TooManyRequests as e:
retries += 1
wait_time = initial_delay * (2 ** (retries - 1)) # Exponential backoff
print(f"\nERRO: Limite de requisições excedido. Tentando novamente em {wait_time} segundos. (Feedback {i+1} de {len(series)})\nDetalhes do erro: {e}\n")
time.sleep(wait_time)
except Exception as e:
print(f"\nERRO inesperado ao processar o feedback '{feedback}'. Pulando para o próximo. Detalhes: {e}\n")
sentimentos.append("Não classificado - Erro") # Add error indicator
break # Sai do loop de retry para outros erros
else:
print(f"Não foi possível processar o feedback '{feedback}' após {max_retries} tentativas.\n")
sentimentos.append("Não classificado - Limite de retries") # Add error indicator
return sentimentos
#adicionando os sentimentos ao DataFrame
df['Sentimentos'] = classificar_sentimentos(df['reviewText'])