Spaces:
Configuration error
Configuration error
File size: 2,820 Bytes
0ccad8d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
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() |