Spaces:
Configuration error
Configuration error
| 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() |