Está todo el mundo pidiéndole chistes o haciéndole confundir con acertijos. Pero en esta ocasión vamos a estar embebiendo la IA de moda a un script de python para poder hacer (finalmente) algo útil con ella y sumarla a nuestros proyectos. Pero primero...
¿Qué es ChatGPT?
Quién mejor que el propio bot para responder esta pregunta:
¿Cómo lo agregamos a nuestro código?
Para este artículo vamos a estar utilizando la librería pyChatGPT
que es muy sencilla de implementar y usar.
Como siempre, lo primero que se hace es instalar la nueva librería e importarla:
!pip install pyChatGPT
import pyChatGPT
Iniciar sesión con token
Para poder acceder a las características de ChatGPT es necesario iniciar sesión. Hay dos formas de hacerlo, a través de las credenciales de un mail o a través de un token de sesión (que es que vamos a estar usando porque no logré hacer funcionar mi mail 😐)
Para obtener un token de sesión hay que entrar en chat.openai.com, iniciar una conversación e inspeccionar la página. Luego tomamos el código que se indica en la captura.
Y lo pegamos en el código. Que quedaría de la siguiente manera:
session_token = "pegar token"
session_api = pyChatGPT.ChatGPT(session_token=session_token)
Chateando con ChatGPT
Para finalmente poder interactuar con ChatGPT, solo necesitamos dos métodos: .send_message()
y .get()
.
pregunta = session_api.send_message(input())
respuesta = "".join(pregunta.get("message"))
Y listo.
Pero para hacer la experiencia de usuario más amigable vamos a hacer que el script le de un poco de conversación al usuario.
También vamos a implementar la posibilidad de guardar la pregunta que hicimos junto con la respuesta que recibimos.
¿Cómo guardamos nuestras interacciones en un archivo local?
Almacenando las preguntas y respuestas
Cuando pensaba en lo que quería hacer con ChatGPT lo primero que pensé es en que quería guardar cada una de las preguntas y las respuestas. Además de eso, quería tener la fecha y hora en que fue realizada la consulta y la posibilidad de agregar etiquetas para poder catalogar las respuestas más en detalle.
Por lo que en principio tendríamos cuatro columnas: "Pregunta", "Respuesta", "Fecha y hora" y "Etiquetas".
Crear listas vacías
El primer paso es tan simple como crear una lista por cada columna:
_preguntas = []
_respuestas = []
_fechaHora = []
_etiqueta = []
Donde vamos a almacenar cada uno de los datos cada vez que el chat nos responda.
Armar una iteración por cada consulta
Vamos a crear un loop donde cada vez que obtenemos una respuesta, el script nos pregunta si queremos realizar una nueva pregunta.
Esto quedaría más o menos así:
run = True
while run:
# ingresar mensaje
pregunta = input()
# haciendo request
respuesta = session_api.send_message(pregunta)
# obtener respuesta
respuesta = "".join(respuesta.get("message"))
# imprimir respuesta
print(respuesta)
# preguntar si el usuario continua
run = bool(input("¿Desea continuar? "))
print()
# despedida
print("¡Hasta luego!")
El siguiente paso es que en cada iteración guarde la fecha y hora (para esto se necesita importar el módulo time
) de la consulta y que el script pregunte si se desea añadir etiquetas a la respuesta obtenida y guardar todos estos datos en la listas que se crearon anteriormente:
import time
run = True
while run:
# ingresar mensaje
pregunta = input()
# haciendo request
respuesta = session_api.send_message(pregunta)
# obtener respuesta
respuesta = "".join(respuesta.get("message"))
# imprimir respuesta
print()
print(respuesta)
# obtener fecha y hora
ahora = time.strftime("%d/%m/%y") + " " + time.strftime("%H:%M:%S")
# preguntar si el usuario quiere guardar la pregunta y respuesta
guardarPregunta = input("¿Desea guardar esta respuesta?: ")
if guardarPregunta.lower() == "si":
# guardar pregunta y respuesta
_preguntas += [pregunta]
_respuestas += [respuesta]
# guardar hora de ejecucion
_fechaHora += [ahora]
# agregar etiquetas
agregarEtiqueta = input("¿Desea agregar alguna etiqueta? ")
if agregarEtiqueta.lower() == "si":
nuevaEtiqueta = input("Escriba el nombre de la etiqueta (puede agregar varias separandolas con una coma): ")
_etiqueta += [nuevaEtiqueta]
else:
_etiqueta += [""]
# para crear un pandas dataframe se necesita que cada lista tenga la misma longitud
# por eso se crea una etiqueta vacía en caso de que no se requiera
# preguntar si el usuario continua
run = bool(input("¿Desea continuar? "))
print()
print("¡Hasta luego!")
Guardar las interacciones en una tabla
Una vez que se chateó con la IA es hora de exportar los datos que se decidieron guardar hacia un pandas dataframe.
Se guardan las listas dentro de un diccionario y lo convertimos a un dataframe:
import pandas as pd
historial = {"Pregunta": _preguntas,
"Respuesta": _respuestas,
"Fecha y hora": _fechaHora,
"Etiquetas": _etiqueta}
# crear pandas dataframe con las listas
df_historial = pd.DataFrame(historial)
df_historial
Exportar la tabla a un archivo local
Para exportar un archivo lo primero que necesitamos es la dirección en la que se va a encontrar el archivo. En mi caso lo voy a guardar en la misma carpeta que el proyecto por lo que no tengo que escribir la dirección completa:
import os
from pathlib import Path
# el nombre que tiene el archivo final
nombre_archivo = "Historial chatGPT.xlsx"
# obtener carpeta donde se encuentra el proyecto
project_root = os.path.dirname(os.path.dirname(__file__))
carpeta_proyecto = os.path.join(project_root, 'Proyecto ChatGPT')
direccion_archivo = Path(os.path.join(carpeta_proyecto), nombre_archivo)
Y en este momento se abren dos posibilidades: el archivo existe o no. Para la primera opción lo que buscamos es que actualice el archivo anexando las nuevas interacciones. Y para la segunda necesitaríamos que cree el archivo y que guarde las interacciones que obtuvimos.
Probando ChatGPT para desarrollar en python
Mientras armaba este script y llegué a esta parte comencé a googlear como verificar que un archivo existía en determinada ubicación y si la respuesta era negativa que lo creara.
Estuve más de media hora probando varias maneras que encontré hasta que recordé que ¡podía preguntarle a ChatGPT!
Por lo que le pregunté y el código que me proporcionó funcionó perfectamente y es el que vas a ver a continuación.
# a partir de acá el código fue generado por chatgpt (solo traduje lo que podía al español)
try:
# verifica si existe "HistorialChatGPT.xlsx" en la carpeta del proyecto
if os.path.exists(direccion_archivo):
# lee el archivo existe
archivo_existente = pd.read_excel(direccion_archivo)
# anexa la nueva info en el excel
actualizar_archivo = pd.concat([archivo_existente, df_historial], ignore_index=True)
# sobreescribe el archivo con la nueva info
actualizar_archivo.to_excel(direccion_archivo, index=False)
print("Se actualizó el archivo correctamente.")
# si no existe lo crea con los datos que guardó
else:
df_historial.to_excel(direccion_archivo, index=False)
print("Se creó el archivo exitosamente.")
# excepción por si el archivo existe y está abierto
except PermissionError:
print("Por favor cierre el archivo antes de efectuar los cambios.")
Conclusión
¿Se puede hacer mejor? ¡Claro que sí! Pero lo hice en tres días y hace más de un año que no programaba en python. 😅
Te invito a dejar en los comentarios si se te ocurre alguna forma de mejorar este mini proyecto.
¡Muchas gracias por llegar hasta acá!
Top comments (0)