Instalar nuestro propio servicio de ChatGPT
Bienvenidos a un emocionante viaje hacia la construcción de nuestra propia inteligencia artificial conversacional utilizando la revolucionaria tecnología ChatGPT de OpenAI. En este tutorial, con el título “Crear nuestro propio servicio de ChatGPT”, exploraremos cómo podemos personalizar y emplear esta impresionante tecnología en nuestra propia máquina. Equipémonos con Python y preparémonos para sumergirnos en el fascinante mundo de la inteligencia artificial y el procesamiento del lenguaje natural.
OpenAI es una organización de inteligencia artificial que ofrece una variedad de modelos de lenguaje potentes y versátiles, siendo ChatGPT uno de los más notables. Es un modelo conversacional que ha demostrado ser capaz de generar respuestas coherentes y contextualmente relevantes, lo que lo hace ideal para implementaciones de chatbots y asistentes virtuales.
Para hacer uso de esta potente herramienta, necesitaremos instalar la biblioteca de Python ‘openai’. Esta biblioteca nos permite interactuar con la API de OpenAI y aprovechar las capacidades de los modelos de lenguaje de la organización.
Más allá de eso, exploraremos el uso de la tecnología de incrustaciones de texto, o ‘embeddings’. Los ‘embeddings’ son una parte esencial del procesamiento del lenguaje natural, ya que permiten que las palabras y frases se representen en un formato que las máquinas puedan entender: vectores numéricos. Para ChatGPT, las incrustaciones permiten que el modelo entienda el contexto y el significado, lo que a su vez permite que genere respuestas precisas y contextualmente adecuadas.
A lo largo de este blog, proporcionaremos una guía paso a paso sobre cómo configurar y utilizar OpenAI con Python en su propia máquina, cómo aprovechar las incrustaciones de texto para mejorar la precisión de su chatbot y cómo adaptar ChatGPT a sus propias necesidades específicas. Ya sea que esté buscando construir un asistente virtual para su sitio web, un chatbot para manejar consultas de servicio al cliente, o simplemente experimentar con la inteligencia artificial y el procesamiento del lenguaje natural, este blog será su guía.
Así que prepárense, configuren su ambiente Python y únansenos en esta emocionante aventura para crear nuestro propio servicio de ChatGPT. ¡Vamos a adentrarnos en el fascinante mundo de la IA conversacional!
Como funciona nuestro sistema
Crearemos un sistema que proporciona información de nuestro negocio en este caso un hospital, pero podría ser cualquier negocio
Instalar dependencias
Vamos a usar Python 3.10.11 o superior y vamos a requerir algunos módulos de Python los cuales voy a mostrar a instalarlos así:
pip install openai pip install pandas pip install matplotlib pip install openai[embeddings]
Código
Creamos una carpeta llamada embed_chatgpt
El archivo posibles_respuestas.csv contiene todas las respuestas que le vamos a dar a nuestros clientes solo lo debemos descargar y colocar en la carpeta.
Lista de posibles respuestas:
Hola, bienvenidos al hospital Magallanes en que te podemos ayudar |
Si claro las citas son de lunes a viernes de 7.30 a 15:00. puede llamar al teléfono 65-498-732-321 |
Estamos ubicados en 123 Calle Principal, CDMX |
Nuestro horario de atención es de lunes a viernes, de 8 a.m. a 5 p.m. |
Puedes llamar a nuestra línea directa de atención al paciente al 65-498-732-321 para programar una cita. |
Ofrecemos una variedad de servicios médicos, incluyendo atención primaria, cardiólogia, dermatología y más. |
Si tienes una emergencia médica, por favor acude a nuestra sala de emergencias ubicada en 123 Calle Principal, CDMX. |
Para recetas médicas, por favor habla con tu médico o utiliza nuestro portal de pacientes en línea. |
Nuestros médicos están altamente capacitados y comprometidos con la atención al paciente. |
Aceptamos la mayoría de los seguros de salud. Para verificar la cobertura, puedes llamar a nuestra oficina o a tu proveedor de seguros. |
Si tienes preguntas sobre tu factura, puedes llamar a nuestro departamento de facturación al 234-567-8901. |
No tengo acceso a las citas proporcionadas podrías revisar tu historial. |
Creamos el archivo embebido.py y colocamos este codigo:
import ast import openai import os import pandas as pd import numpy as np from openai.embeddings_utils import get_embedding from openai.embeddings_utils import cosine_similarity import tkinter as tk from tkinter import END, N, S, E, W openai.api_key = "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" path_modelo='modelo.csv' #RECIBE EL PATH DE LAS POSIBLES RESPUESTAS Y GENERA UNA EMBEBED def crea_embebed(path): #SI YA EXISTE EL ARCHIVO LO LEEMOS Y COLOCALOS LOS VALORES EN LA VARIABLE if os.path.exists(path_modelo): #EXTRAEMOS EL MODELO YA PREVIAMENTE ENTRENADO modelo_vector = pd.read_csv(path_modelo) #AL MODELO PREVIAMENTE YA ENTRENADO LE AGREGAMOS EL CAMPO Embedding modelo_vector['Embedding'] = modelo_vector['Embedding'].apply(lambda x: np.array(ast.literal_eval(x))) #SI NO EXISTE EL ARCHIVO LO CREAMOS else: #EXTRAEMOS TODAS POSIBLES RESPUESTAS modelo_vector = pd.read_csv(path) #A CADA RESPUESTA SE LE AGREGA LA COLUMNA Embedding PARA COLOCARLO EN UNA POSICIÓN VECTORIAL PARA COMPARARLO DESPUÉS modelo_vector['Embedding'] = modelo_vector['respuestas'].apply(lambda x: get_embedding(x, engine='text-embedding-ada-002')) #GUARDAMOS LOS RESULTADOS EN UN ARCHIVO CSV modelo_vector.to_csv(path_modelo) return modelo_vector #CONTESTA LAS PREGUNTAS QUE HACE EL CLIENTE def contesta(pregunta, respuestas_emb, n_resultados=1): #PASAMOS LA PREGUNTA Y OBTENEMOS SU POSICIÓN VECTORIAL pregunta_embebida = get_embedding(pregunta, engine="text-embedding-ada-002") #CALCULA LA SIMILITUD ENTRE LA PREGUNTA (VECTORIZADA) Y LAS RESPUESTAS (VECTORIZADAS) Y EL RESULTADO LO COLOCAMOS EN LA COLUMNA (CREADA) Similitud respuestas_emb["Similitud"] = respuestas_emb['Embedding'].apply(lambda x: cosine_similarity(x, pregunta_embebida)) #ORDENAMOS DE FORMA DESENDENTE OBTENIENDO HASTA ARRIBA LA RESPUESTA MAS PROBABLE respuestas_emb_ord = respuestas_emb.sort_values("Similitud", ascending=False) #RETORNAMOS LA PRIMER RESPUESTA (OSEA LA MAS PROBABLE QUE SEA) return respuestas_emb_ord.iloc[:n_resultados][["respuestas", "Similitud"]] #OBTENEMOS LA DIRECCION DE EL PROGRAMA current_dir = os.path.dirname(os.path.abspath(__file__)) #OBTENEMOS LA DIRECCION ABSOLUTA DEL ARCHIVO QUE CONTIENE AS POSIBLES RESPUESTAS path_posibles_resp = os.path.join(current_dir, 'posibles_respuestas.csv') #CREAMOS UN VALOR VECTORIAL posibles_respuestas_emb = crea_embebed(path_posibles_resp) historial_conversacion = [] def submit(event=None): pregunta = entry.get() historial_conversacion.append("Usuario: " + pregunta) resultados = contesta(pregunta, posibles_respuestas_emb) respuesta_chatbot = resultados.iloc[0]['respuestas'] historial_conversacion.append("Chatbot: " + respuesta_chatbot) chatbox.insert(END, "Usuario: " + pregunta + "\n") chatbox.insert(END, "Chatbot: " + respuesta_chatbot + "\n") entry.delete(0, END) entry.focus_set() # Mantener el foco en el widget Entry window = tk.Tk() window.title('Chatbot') #window.geometry('1020x700') window.configure(bg='light grey') chatbox = tk.Text(window, bg='white', font=('Arial', 14), padx=10, pady=10) chatbox.grid(row=0, column=0, columnspan=2, sticky=N+S+E+W, padx=20, pady=20) label = tk.Label(window, text='Usuario: ', bg='light grey', font=('Arial', 14)) label.grid(row=1, column=0, sticky='w', padx=10, pady=10) entry = tk.Entry(window, width=100, font=('Arial', 14)) entry.grid(row=1, column=1, padx=10, pady=10) entry.bind('<Return>', submit) entry.focus_set() submit_button = tk.Button(window, text='Enviar', command=submit, font=('Arial', 12), bg='light blue') submit_button.grid(row=2, column=0, sticky='w', padx=10, pady=10) window.mainloop()
De tal suerte que nuestra carpeta se vera asi:
Finalmente ejecutamos nuestro archivo asi
python .\embebido.py