1
resposta

[Dúvida] Está indo algum produto aleatório

Estou passando um produto como parâmetro, ele está lendo, mas na hora de ir salvar ele gera um produto diferente

from openai import OpenAI
from dotenv import load_dotenv
import os

load_dotenv()

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
modelo = "gpt-4"

def load(file_name):
    try:
        with open(file_name,"r") as arquivo:
            dados = arquivo.read()
            return dados
    except IOError as e:
        print(f"Erro: {e}")

def save(file_name, content):
    try:
        with open(file_name, "w", encoding="utf-8") as arquivo:
            arquivo.write(content)
    except IOError as e:
            print(f"Erro ao salvar arquivo: {e}")

def analyser (product):
    prompt_sistema = f"""
        Você é um analisador de sentimentos de avaliações de produtos.
        Escreva um parágrafo com até 50 palavras resumindo as avaliações e 
        depois atribua qual o sentimento geral para o produto.
        Identifique também 3 pontos fortes e 3 pontos fracos identificados a partir das avaliações.

        # Formato de Saída

        Nome do Produto:
        Resumo das Avaliações:
        Sentimento Geral: [utilize aqui apenas Positivo, Negativo ou Neutro]
        Ponto fortes: lista com três bullets
        Pontos fracos: lista com três bullets
    """
    prompt_user = load(f"./data/avaliacoes-{product}.txt")
    print(f"Iniciou a análise de sentimentos do produto {product}")

    list_messages = [
        {
            "role": "system",
            "content": prompt_sistema
        },
        {
            "role": "user",
            "content": prompt_user
        }
    ]

    resposta = client.chat.completions.create(
        messages = list_messages,
        model = modelo
    )

    text_awnser = resposta.choices[0].message.content
    save(f"./data/analise-{product}.txt",text_awnser)

analyser(("Maquiagem mineral"))

Como podem ver o endereço estou passando corretamente e o arquivo é existente, mas nao sei oq está acontecendo. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

O problema no seu código pode estar relacionado com a maneira como o parâmetro product está sendo passado para a função analyser e como ele está sendo utilizado para carregar e salvar os arquivos.

Aqui estão algumas correções e sugestões para seu código:

  1. Remover parênteses desnecessários ao passar o parâmetro: Você tá passando o produto como uma tupla em vez de uma string. Isso pode causar comportamentos inesperados.
  2. Adicionar verificações adicionais: Tenha certeza de que os arquivos estão sendo lidos e escritos corretamente.
  3. Melhorar a captura de erros: Adiciona um tratamento de erro para capturar respostas inválidas da API.
from openai import OpenAI
from dotenv import load_dotenv
import os

load_dotenv()

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
modelo = "gpt-4"

def load(file_name):
    try:
        with open(file_name, "r", encoding="utf-8") as arquivo:
            dados = arquivo.read()
            return dados
    except IOError as e:
        print(f"Erro ao ler o arquivo {file_name}: {e}")
        return None

def save(file_name, content):
    try:
        with open(file_name, "w", encoding="utf-8") as arquivo:
            arquivo.write(content)
    except IOError as e:
        print(f"Erro ao salvar o arquivo {file_name}: {e}")

def analyser(product):
    prompt_sistema = f"""
        Você é um analisador de sentimentos de avaliações de produtos.
        Escreva um parágrafo com até 50 palavras resumindo as avaliações e 
        depois atribua qual o sentimento geral para o produto.
        Identifique também 3 pontos fortes e 3 pontos fracos identificados a partir das avaliações.

        # Formato de Saída

        Nome do Produto:
        Resumo das Avaliações:
        Sentimento Geral: [utilize aqui apenas Positivo, Negativo ou Neutro]
        Ponto fortes: lista com três bullets
        Pontos fracos: lista com três bullets
    """
    prompt_user = load(f"./data/avaliacoes-{product}.txt")
    if prompt_user is None:
        print(f"Falha ao carregar as avaliações do produto {product}")
        return

    print(f"Iniciou a análise de sentimentos do produto {product}")

    list_messages = [
        {
            "role": "system",
            "content": prompt_sistema
        },
        {
            "role": "user",
            "content": prompt_user
        }
    ]

    try:
        resposta = client.chat.completions.create(
            messages=list_messages,
            model=modelo
        )
        text_awnser = resposta.choices[0].message.content
        save(f"./data/analise-{product}.txt", text_awnser)
        print(f"Análise de sentimentos salva em ./data/analise-{product}.txt")
    except Exception as e:
        print(f"Erro ao gerar a resposta da API: {e}")

# Passando o produto como string e não como tupla
analyser("Maquiagem mineral")

O que foi corrigido:

  1. Parâmetro product: Removi os parênteses ao passar o produto para a função analyser.
  2. Codificação ao ler arquivos: Adicionei a codificação UTF-8 ao abrir os arquivos para evitar problemas de leitura/escrita.
  3. Tratamento de erros: Adicionei um tratamento de erro ao tentar gerar a resposta da API para capturar possíveis falhas.

Com essas correções, o seu código deve funcionar corretamente, carregando as avaliações do produto e salvando a análise de sentimentos sem gerar um produto diferente no resultado.