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() |