Automatizei a geração dos comentários e, em seguida uma avaliação do sentimento:
from openai import OpenAI
from dotenv import load_dotenv
import openai
import os
load_dotenv()
client = OpenAI(
base_url=os.getenv("BASE_URL"),
api_key=os.getenv("API_KEY")
)
MODELO = os.getenv("MODEL_ALTERNATIVO")
# Cria a pasta caso não exista
os.makedirs("./dados", exist_ok=True)
def carrega(nome_arquivo: str) -> str:
"""Lê um arquivo de texto."""
try:
with open(nome_arquivo, "r", encoding="utf-8") as arquivo:
return arquivo.read()
except FileNotFoundError:
return ""
except Exception as e:
print(f"Erro ao abrir {nome_arquivo}: {e}")
return ""
def salva(nome_arquivo: str, conteudo: str):
"""Salva um texto em um arquivo."""
try:
with open(nome_arquivo, "w", encoding="utf-8") as arquivo:
arquivo.write(conteudo)
except Exception as e:
print(f"Erro ao salvar {nome_arquivo}: {e}")
def gerar_avaliacoes(produto: str):
"""
Gera avaliações fictícias para um produto.
"""
print(f"Criando avaliações para '{produto}'...")
prompt_sistema = """
Você é um gerador de avaliações de clientes.
Crie exatamente 30 avaliações realistas para um produto.
Regras:
- misture opiniões positivas, negativas e neutras;
- cada avaliação deve possuir entre uma e três frases;
- algumas pessoas devem reclamar;
- outras devem elogiar bastante;
- escreva apenas as avaliações;
- não numere as avaliações.
"""
mensagens = [
{
"role": "system",
"content": prompt_sistema
},
{
"role": "user",
"content": f"Gere avaliações para um {produto}."
}
]
response = client.chat.completions.create(
model=MODELO,
messages=mensagens
)
texto = response.choices[0].message.content
arquivo = f"./dados/avaliacoes-{produto}.txt"
salva(arquivo, texto)
print(f"Avaliações salvas em {arquivo}\n")
def analise_sentimentos(produto: str):
arquivo_avaliacoes = f"./dados/avaliacoes-{produto}.txt"
if not os.path.exists(arquivo_avaliacoes):
gerar_avaliacoes(produto)
avaliacoes = carrega(arquivo_avaliacoes)
prompt_sistema = """
Você é um analisador de sentimentos.
Analise as avaliações recebidas.
Responda exatamente no formato:
Nome do Produto:
Resumo das Avaliações:
Sentimento Geral:
(Positivo, Negativo ou Neutro)
Pontos Fortes:
- item
- item
- item
Pontos Fracos:
- item
- item
- item
O resumo deve possuir no máximo 50 palavras.
"""
mensagens = [
{
"role": "system",
"content": prompt_sistema
},
{
"role": "user",
"content": avaliacoes
}
]
print(f"Analisando '{produto}'...")
try:
response = client.chat.completions.create(
model=MODELO,
messages=mensagens
)
resultado = response.choices[0].message.content
arquivo_saida = f"./dados/analise-{produto}.txt"
salva(arquivo_saida, resultado)
print(f"Análise salva em {arquivo_saida}")
if response.usage:
print(
f"Tokens -> Prompt: {response.usage.prompt_tokens} | "
f"Resposta: {response.usage.completion_tokens} | "
f"Total: {response.usage.total_tokens}"
)
print("-" * 60)
except openai.AuthenticationError as e:
print(f"Erro de autenticação: {e}")
except openai.APIError as e:
print(f"Erro da API: {e}")
except Exception as e:
print(f"Erro inesperado: {e}")
def main():
produtos = [
"mouse",
"teclado",
"monitor",
"impressora",
"scanner"
]
print("=" * 60)
print("ANÁLISE AUTOMÁTICA DE SENTIMENTOS")
print("=" * 60)
for produto in produtos:
analise_sentimentos(produto)
print("\nProcessamento finalizado.")
if __name__ == "__main__":
main()