ChatGPT es un poderoso modelo de procesamiento de lenguaje natural que se ajusta con precisión a partir de la serie GPT-3.5. Fue entrenado en una infraestructura de supercomputación Azure AI para proporcionar a los usuarios capacidades de comprensión y generación de texto de alta calidad.
Nube SAP HANA es una base única de base de datos como servicio (DBaaS) para aplicaciones modernas y análisis en todos los datos empresariales. Cuando se usa en combinación con ChatGPT, es posible obtener consultas perspicaces basadas en la capacidad de ChatGPT para «recordar» conversaciones anteriores. Sin embargo, es importante tener en cuenta que la memoria de ChatGPT es limitada y solo puede hacer referencia a unas 3000 palabras o 4000 tokens de la conversación actual.
Nuestro objetivo es utilizar ChatGPT para ejecutar consultas directamente en SAP HANA Cloud de forma automática. Por el momento, no existe una API oficial para ChatGPT, por lo que se utilizan algunos paquetes no oficiales (principalmente pyChatGPT – un envoltorio de Python no oficial para la API ChatGPT de OpenAI). La idea es demostrar el potencial de futuras integraciones entre ChatGPT y el Plataforma tecnológica empresarial SAP (BTP)en concreto la Nube de SAP HANA.
Para que ChatGPT nos sugiera cosas, debemos proporcionarle algunos antecedentes. En este caso, lo presentaremos con dos definiciones de tabla que tenemos en SAP HANA Cloud. De esta forma, tendrá una mejor comprensión de los datos y podrá generar consultas más precisas y relevantes.
A lo largo de esta publicación, explicaremos cómo relacionar SAP HANA Cloud y ChatGPT, pero por ahora dejaremos que ChatGPT explique qué «entendió» a partir de los antecedentes ofrecidos.
Aquí, estamos teniendo una conversación con ChatGPT y puede que no parezca relacionado con SAP HANA Cloud o la integración de python. Sin embargo, para lograr nuestro objetivo de generar consultas para SAP HANA Cloud, es más eficiente recibir la respuesta de ChatGPT en python. De esta forma, podemos integrarlo fácilmente con el resto de nuestro código y trabajar con los datos de forma estructurada.
Para hacer esto, usaremos el bot conversacional class, que nos permite interactuar con ChatGPT de una forma más cómoda. Al hacer esto, podemos crear múltiples instancias del bot conversacional clase, cada una con su propio token de sesión y objeto API. De esta manera, podemos obtener fácilmente respuestas de ChatGPT en python. Y si se pregunta cómo se hace esto, estaré encantado de proporcionarle un código y guiarlo, paso a paso.
Él bot conversacional La clase se usa para interactuar con un chatbot que funciona con el modelo ChatGPT. Permite crear múltiples instancias del chatbot, cada una con su propio token de sesión y objeto API.
La clase contiene dos métodos principales:
También contiene otros métodos de ayuda para ayudar con la manipulación de archivos.
class Chatbot:
"""
Chatbot class contains the get_session_token and create_interaction functions as methods.
The session_token variable is now an instance variable, and the api variable is created
in the constructor. The create_interaction method uses self.api instead of the global
variable api, and the get_session_token method now uses self instead of the global variable
session_token.
This way, you can create multiple instances of the Chatbot class, each with its own session
token and API object.
"""
def __init__(self):
"""
Define chat GPT behavior as SQL Console for returning
SQL statements only. Otherwise, some further work must
be done before send to SAP HANA.
"""
self.bot_behavior = self.get_session_token("behavior.txt")
"""
Get session token obtained from cookies, check file.
Set api from pyChatGPT package based on that token.
"""
self.session_token = self.get_session_token("session_token.txt")
self.api = cGPT(self.session_token)
def get_session_token(self, file_name):
file_path = Path(file_name)
if not file_path.is_file():
print("Error: {} not found".format(file_path))
return None
try:
with open(file_path, "r") as file:
session_token = file.read().strip()
except:
print("Error: Unable to read {}".format(file_path))
return None
return session_token
def create_interaction(self, prompt, script=True):
def set_query(string):
string = string.replace("`", "")
string = string.replace("\\", "")
string = string.replace("\n", " ")
return string
if not script:
response = self.api.send_message(prompt)
message = response["message"]
else:
response = self.api.send_message(self.bot_behavior + prompt)
message = set_query(response["message"])
self.response = response
return message
Él SAPHANA class proporciona una manera fácil de conectarse a una base de datos de SAP HANA. Utiliza un archivo de conexión que contiene las propiedades necesarias para establecer una conexión, como la dirección, el puerto, el usuario y la contraseña. Tiene los siguientes métodos:
También tiene una función de ayuda interna. obtener_conexión que manejan la lógica de abrir el archivo, leen sus propiedades y establecen la conexión e imprimen alguna información sobre la conexión.
class SAPHANA:
def __init__(self, connection_file):
self.connection_file = connection_file
self.conn = None
def get_connection(self):
"""
This function uses the settings provided in the access
file for connecting to SAP HANA database.
"""
start = time.time()
with open(self.connection_file) as file:
conn_properties = load(file)
self.conn = dataframe.ConnectionContext(
conn_properties["address"],
conn_properties["port"],
conn_properties["user"],
conn_properties["password"],
)
msg = (
"INFO: Connection successfully established to SAP HANA."
if self.conn.connection.isconnected() == True
else "ERROR: Not possible to connect. Check access file information."
)
print("{}".format(msg))
end = time.time()
print(" Elapsed time: {:.2f} seconds".format(end - start))
print("\033[92m MESSAGE: Logged with connection ID {} in schema {}.\033[00m".format(
self.conn.get_connection_id(),
self.conn.get_current_schema())
)
def connect(self):
self.get_connection()
return self.conn
def get_connection_id(self):
return self.conn.get_connection_id()
def get_current_schema(self):
return self.conn.get_current_schema()
def close_connection(self):
self.conn.close()
Ejemplo de uso:
saphana = SAPHANA('path/to/connection_file')
conn = saphana.connect()
conn_id = saphana.get_connection_id()
schema = saphana.get_current_schema()
#... do something with the connection
saphana.close_connection()
Ahora sabe cómo integrar ChatGPT con Python y usarlo para generar consultas para SAP HANA Cloud, incluidas las conexiones locales.
Como ejemplo, le pedimos a ChatGPT que “basado en tablas anteriores en SAP HANA, escriba na Consulta analítica en la tabla TS10“. Esto significa que le pedíamos que creara una consulta usando solo la tabla TS10, nada más. Y la respuesta se ve muy bien y está lista para enviarse a SAP HANA Cloud a través de hana_ml y ejecutado. Esto muestra cómo ChatGPT puede ayudarnos a crear consultas específicas y relevantes para nuestros datos. Y podría ahorrar mucho tiempo al evitar la necesidad de escribirlo a mano.
Es genial que pudimos obtener una respuesta de ChatGPT y usarla para generar una consulta para SAP HANA Cloud. Sin embargo, es importante tener en cuenta que ChatGPT no devolvió la consulta exacta para ejecutarse en SAP HANA.
Usamos un método llamado set_query para limpiar la respuesta, reemplazando algunos caracteres especiales, pero no garantiza que ChatGPT solo responda con una declaración SQL. Para guiar a ChatGPT a responder solo con scripts SQL, usamos una variable llamada comportamiento_bot que es esencialmente un archivo de texto que contiene declaraciones clave.
El archivo de texto contiene instrucciones para ChatGPT como “Quiero que solo responda con la salida de la condición SQL dentro de un bloque de código único, y nada más. No escriba explicaciones. No escriba comandos a menos que se le indique que lo haga”. Este texto se basó en algunas buenas contribuciones de la comunidad.
Cuando escribimos nuestra consulta y establecimos el parámetro «script» en True, el método incluyó automáticamente el texto de comportamiento_bot como prefijo de la consulta.
Si bien este enfoque es una buena manera de guiar a ChatGPT para que proporcione secuencias de comandos SQL, no es una forma 100 % confiable de garantizar que ChatGPT solo responderá con secuencias de comandos SQL y nada más. Es posible que ChatGPT responda con comentarios y/o explicaciones, lo que puede romper el código. Esperamos que OpenAI lance una API oficial para ChatGPT en el futuro, lo que eliminaría este problema.
En cuanto a las consultas más complejas, como las que se unen a varias tablas, ChatGPT también puede escribirlas. Solo es cuestión de proporcionarle los antecedentes necesarios y guiarlo con las instrucciones correctas como lo hicimos antes.
Sí, ChatGPT puede generar consultas más complejas, como aquellas que involucran múltiples combinaciones de tablas. Como ejemplo, el aviso dado a ChatGPT fue «¿Podría unir ambas tablas en una consulta analítica más compleja?» y, como puede ver en la imagen compartida, pudo unir las tablas y generar una consulta válida.
En cuanto a las medidas de dispersión y las medidas estadísticas, ChatGPT también es capaz de generarlas. Al proporcionarle la información básica necesaria y darle instrucciones claras, puede crear consultas específicas y relevantes.
También vale la pena señalar que ChatGPT puede generar consultas más generales y perspicaces sin ninguna guía específica. Por ejemplo, al preguntar «¿Puede escribir una consulta muy perspicaz para análisis?» , el chatbot pudo generar una consulta perspicaz por sí mismo.
Parece que en este caso específico, ChatGPT no pudo generar una consulta perspicaz sin una guía específica. Sin embargo, vale la pena señalar que la capacidad de ChatGPT para comprender y responder a las indicaciones puede variar según la complejidad de la tarea, la información de fondo proporcionada y la calidad de las instrucciones.
Siempre es una buena práctica brindar cierto nivel de orientación a ChatGPT, brindándole información básica e instrucciones claras. No es una herramienta perfecta y habrá momentos en los que no entienda el aviso o dé una respuesta inexacta, pero con la orientación adecuada es posible aumentar las posibilidades de obtener una consulta relevante y útil.
“corrija su consulta anterior, es incorrecta «‘columna definida ambiguamente: CANAL»”
“corrija su consulta anterior, está mal «nombre de columna no válido: TS10.CHANNEL»”
Y entonces:
En general, la integración de ChatGPT y SAP HANA Cloud puede mejorar significativamente las capacidades de ambas tecnologías. SAP HANA Cloud, con sus capacidades de análisis y gestión de datos eficientes, puede proporcionar a ChatGPT la información básica y el contexto necesarios para generar consultas altamente relevantes y precisas. A su vez, la capacidad de ChatGPT para comprender y responder a las indicaciones en lenguaje natural puede hacer que el proceso de consulta de datos en SAP HANA Cloud sea más intuitivo y sin esfuerzo. A medida que las tecnologías continúan evolucionando y mejorando, esta integración tiene el potencial de desbloquear capacidades de análisis nuevas y avanzadas.
Si está interesado en explorar los códigos utilizados en este proyecto, puede encontrarlos en el repositorio de GitHub ubicado en https://github.com/carlosbasto/chatGPT. Siéntase libre de descargar, experimentar y desarrollar los códigos para satisfacer sus propias necesidades.
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073