CREAR SERVICIO CHATGPT

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

image 25

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:

image 26

Finalmente ejecutamos nuestro archivo asi

python .\embebido.py

image 27
Nos movemos a la ruta de nuestro programa y lo ejecutamos asi: python .\embebido.py

Los comentarios están cerrados.