import pandas as pd import gradio as gr from openai import OpenAI import os # Inicializar cliente de OpenAI client = OpenAI(api_key="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") # Ruta del archivo de datos csv_path = "datos/opiniones.csv" # Crear el archivo si no existe if not os.path.exists(csv_path): df = pd.DataFrame(columns=["opinion", "sentimiento"]) df.to_csv(csv_path, index=False) else: df = pd.read_csv(csv_path) # Clasificación con GPT def clasificar_con_gpt(opinion): prompt = f""" Clasifica la siguiente opinión como positiva, negativa o neutral. Opinión: "{opinion}" Clasificación: """ respuesta = client.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}] ) clasificacion = respuesta.choices[0].message.content.strip().lower() # Asegurarse de que el resultado sea una etiqueta válida if "positiva" in clasificacion: return "positivo" elif "negativa" in clasificacion: return "negativo" else: return "neutral" # Respuesta contextual con GPT def generar_respuesta(opinion, pregunta): prompt = f""" Analiza la siguiente opinión de un cliente y responde a la pregunta usando solamente la información proporcionada. Opinión: "{opinion}" Pregunta: "{pregunta}" Respuesta basada exclusivamente en la opinión: """ respuesta = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "Eres un asistente que responde con base en opiniones de clientes."}, {"role": "user", "content": prompt} ] ) return respuesta.choices[0].message.content.strip() # Función principal de la interfaz def interfaz(opinion, pregunta): global df # Revisar si la opinión ya existe if opinion in df["opinion"].values: sentimiento = df[df["opinion"] == opinion]["sentimiento"].values[0] else: # Clasificar con GPT sentimiento = clasificar_con_gpt(opinion) # Guardar en CSV nuevo = pd.DataFrame([[opinion, sentimiento]], columns=["opinion", "sentimiento"]) df = pd.concat([df, nuevo], ignore_index=True) df.to_csv(csv_path, index=False) # Generar respuesta contextual respuesta = generar_respuesta(opinion, pregunta) return f"📊 Opinión clasificada como: {sentimiento}", respuesta # Interfaz Gradio gr.Interface( fn=interfaz, inputs=["text", "text"], outputs=["text", "text"], title="Analizador de Opiniones Inteligente", description="Clasifica y responde opiniones de clientes. Aprende automáticamente si no conoce la opinión." ).launch()