Reinventando la experiencia de los datos Utilice la inteligencia artificial generativa y la arquitectura de datos moderna para desbloquear conocimientos.

Reinvente la experiencia de los datos usando inteligencia artificial generativa y arquitectura de datos moderna para obtener conocimientos valiosos.

Implementar una arquitectura de datos moderna proporciona un método escalable para integrar datos de diversas fuentes. Al organizar los datos por dominios empresariales en lugar de infraestructuras, cada dominio puede elegir las herramientas que se adapten a sus necesidades. Las organizaciones pueden maximizar el valor de su arquitectura de datos moderna con soluciones de IA generativa mientras innovan continuamente.

Las capacidades del lenguaje natural permiten a los usuarios no técnicos hacer consultas de datos a través de conversaciones en inglés en lugar de complejas consultas SQL. Sin embargo, para aprovechar al máximo los beneficios, es necesario superar algunos desafíos. Los modelos de IA y de lenguaje deben identificar las fuentes de datos apropiadas, generar consultas SQL efectivas y producir respuestas coherentes con resultados incrustados a gran escala. También necesitan una interfaz de usuario para preguntas en lenguaje natural.

En general, la implementación de una arquitectura de datos moderna y técnicas de IA generativa con AWS es un enfoque prometedor para obtener y diseminar información clave de diversas y amplias fuentes de datos a escala empresarial. La última oferta de IA generativa de AWS es Amazon Bedrock, que es un servicio completamente gestionado y la forma más fácil de construir y escalar aplicaciones de IA generativa con modelos base. AWS también ofrece modelos base a través de Amazon SageMaker JumpStart como puntos finales de Amazon SageMaker. La combinación de grandes modelos de lenguaje (LLMs), incluyendo la facilidad de integración que ofrece Amazon Bedrock, y una infraestructura de datos escalable y orientada a dominios, posiciona esto como un método inteligente para aprovechar la abundante información contenida en varias bases de datos de análisis y lagos de datos.

En el post, mostramos un escenario en el que una empresa ha implementado una arquitectura de datos moderna con datos que residen en múltiples bases de datos y APIs, como datos legales en Amazon Simple Storage Service (Amazon S3), recursos humanos en Amazon Relational Database Service (Amazon RDS), ventas y marketing en Amazon Redshift, datos del mercado financiero en una solución de almacén de datos de terceros en Snowflake y datos de productos como API. Esta implementación tiene como objetivo mejorar la productividad de los análisis empresariales, los propietarios de productos y los expertos en dominios empresariales. Todo esto se logra mediante el uso de tecnologías de IA generativa en esta arquitectura de malla de dominios, lo que permite a la empresa alcanzar sus objetivos empresariales de manera más eficiente. Esta solución tiene la opción de incluir LLMs de JumpStart como punto final de SageMaker, así como modelos de terceros. Proporcionamos a los usuarios empresariales una forma de hacer preguntas basadas en hechos sin tener un conocimiento subyacente de los canales de datos, abstrayendo así las complejidades de escribir consultas SQL simples o complejas.

Descripción general de la solución

Una arquitectura de datos moderna en AWS aplica inteligencia artificial y procesamiento de lenguaje natural para consultar múltiples bases de datos de análisis. Al utilizar servicios como Amazon Redshift, Amazon RDS, Snowflake, Amazon Athena y AWS Glue, se crea una solución escalable para integrar datos de diversas fuentes. Usando LangChain, una potente biblioteca para trabajar con LLMs, incluyendo modelos base de Amazon Bedrock y JumpStart en cuadernos de Amazon SageMaker Studio, se construye un sistema donde los usuarios pueden hacer preguntas empresariales en inglés natural y recibir respuestas con datos extraídos de las bases de datos relevantes.

El siguiente diagrama ilustra la arquitectura.

La arquitectura híbrida utiliza múltiples bases de datos y LLMs, con modelos base de Amazon Bedrock y JumpStart para la identificación de fuentes de datos, generación de SQL y generación de texto con resultados.

El siguiente diagrama ilustra los pasos específicos del flujo de trabajo para nuestra solución.

Los pasos son los siguientes:

  1. Un usuario empresarial proporciona una sugerencia de pregunta en inglés.
  2. Un crawler de AWS Glue se programa para ejecutarse en intervalos frecuentes para extraer metadatos de bases de datos y crear definiciones de tabla en el Catálogo de datos de AWS Glue. El Catálogo de datos es la entrada a la Secuencia de cadenas 1 (ver el diagrama anterior).
  3. LangChain, una herramienta para trabajar con LLMs y sugerencias, se utiliza en cuadernos de Studio. LangChain requiere que se defina un LLM. Como parte de la Secuencia de cadenas 1, la sugerencia y los metadatos del Catálogo de datos se pasan a un LLM, alojado en un punto final de SageMaker, para identificar la base de datos y la tabla relevantes usando LangChain.
  4. La sugerencia y la base de datos y tabla identificadas se pasan a la Secuencia de cadenas 2.
  5. LangChain establece una conexión a la base de datos y ejecuta la consulta SQL para obtener los resultados.
  6. Los resultados se pasan al LLM para generar una respuesta en inglés con los datos.
  7. El usuario recibe una respuesta en inglés a su sugerencia, consultando datos de diferentes bases de datos.

Las siguientes secciones explican algunos de los pasos clave con el código asociado. Para profundizar en la solución y el código para todos los pasos mostrados aquí, consulte el repositorio de GitHub. El siguiente diagrama muestra la secuencia de pasos seguidos:

Requisitos previos

Puede utilizar cualquier base de datos compatible con SQLAlchemy para generar respuestas de LLMs y LangChain. Sin embargo, estas bases de datos deben tener sus metadatos registrados en el AWS Glue Data Catalog. Además, deberá tener acceso a LLMs a través de JumpStart o claves API.

Conectar a bases de datos mediante SQLAlchemy

LangChain utiliza SQLAlchemy para conectarse a bases de datos SQL. Inicializamos la función SQLDatabase de LangChain creando un motor y estableciendo una conexión para cada fuente de datos. Lo siguiente es un ejemplo de cómo conectarse a una base de datos sin servidor de la edición compatible con MySQL de Amazon Aurora e incluir solo la tabla de empleados:

#conectar a AWS Aurora MySQL
cluster_arn = <cluster_arn>
secret_arn = <secret_arn>
engine_rds=create_engine('mysql+auroradataapi://:@/employees',echo=True,
  connect_args=dict(aurora_cluster_arn=cluster_arn, secret_arn=secret_arn))
dbrds = SQLDatabase(engine_rds, include_tables=['employees'])

A continuación, construimos las indicaciones utilizadas por la secuencia de cadena 1 para identificar la base de datos y el nombre de la tabla en función de la pregunta del usuario.

Generar plantillas de indicaciones dinámicas

Utilizamos el AWS Glue Data Catalog, que está diseñado para almacenar y administrar información de metadatos, para identificar la fuente de datos de una consulta de usuario y construir indicaciones para la secuencia de cadena 1, como se detalla en los siguientes pasos:

  1. Construimos un catálogo de datos rastreando los metadatos de varias fuentes de datos utilizando la conexión JDBC utilizada en la demostración.
  2. Con la biblioteca Boto3, construimos una vista consolidada del catálogo de datos a partir de múltiples fuentes de datos. Lo siguiente es un ejemplo de cómo obtener los metadatos de la tabla de empleados del catálogo de datos para la base de datos Aurora MySQL:
 #recuperar metadatos del catálogo de datos de pegamento
  glue_tables_rds = glue_client.get_tables(DatabaseName=<database_name>, MaxResults=1000)
    for table in glue_tables_rds['TableList']:
        for column in table['StorageDescriptor']['Columns']:
             columns_str=columns_str+'\n'+('rdsmysql|employees|'+table['Name']+"|"+column['Name'])

Un catálogo de datos consolidado tiene detalles sobre la fuente de datos, como el esquema, los nombres de tabla y los nombres de columna. Lo siguiente es un ejemplo de la salida del catálogo de datos consolidado:

database|schema|table|column_names
redshift|tickit|tickit_sales|listid
rdsmysql|employees|employees|emp_no
....
s3|none|claims|policy_id
  1. Pasamos el catálogo de datos consolidado a la plantilla de indicaciones y definimos las indicaciones utilizadas por LangChain:
prompt_template = """
De la tabla a continuación, encuentre la base de datos (en la columna base de datos) que contendrá los datos (en los nombres de columna correspondientes) para responder la pregunta {query} \n
"""+glue_catalog +""" Dé su respuesta como database == \n También, dé su respuesta como database.table =="""

Secuencia de cadena 1: Detectar metadatos de origen para la consulta del usuario mediante LangChain y un LLM

Pasamos la plantilla de indicaciones generada en el paso anterior a la indicación, junto con la consulta del usuario al modelo LangChain, para encontrar la mejor fuente de datos para responder la pregunta. LangChain utiliza el modelo LLM de nuestra elección para detectar metadatos de origen.

Utilice el siguiente código para utilizar un LLM de JumpStart o modelos de terceros:

#definir su modelo LLM aquí
llm = <LLM>
#pasar la plantilla de indicaciones y la consulta del usuario a la indicación
PROMPT = PromptTemplate(template=prompt_template, input_variables=["query"])
# definir cadena llm
llm_chain = LLMChain(prompt=PROMPT, llm=llm)
#ejecutar la consulta y guardar en textos generados
generated_texts = llm_chain.run(query)

El texto generado contiene información como los nombres de la base de datos y las tablas contra las cuales se ejecuta la consulta del usuario. Por ejemplo, para la consulta del usuario “Nombre de todos los empleados con fecha de nacimiento este mes”, generated_text tiene la información database == rdsmysql y database.table == rdsmysql.employees.

Luego, pasamos los detalles del dominio de recursos humanos, la base de datos Aurora MySQL y la tabla de empleados a la Secuencia de Cadena 2.

Secuencia de cadena 2: Recuperar respuestas de las fuentes de datos para responder la consulta del usuario

A continuación, ejecutamos la cadena de base de datos SQL de LangChain para convertir el texto a SQL y ejecutar implícitamente el SQL generado contra la base de datos para recuperar los resultados de la base de datos en un lenguaje simple y legible.

Comenzamos definiendo una plantilla de indicaciones que instruye a LLM a generar SQL en un dialecto sintácticamente correcto y luego ejecutarlo contra la base de datos:

_DEFAULT_TEMPLATE = """Dada una pregunta de entrada, primero cree una consulta {dialect} sintácticamente correcta para ejecutar, luego mire los resultados de la consulta y devuelva la respuesta.
Solo use las siguientes tablas:
{table_info}
Si alguien pregunta por las ventas, realmente se refiere a la tabla tickit.sales.
Pregunta: {input}"""
#define la indicación
PROMPT = PromptTemplate( input_variables=["input", "table_info", "dialect"], template=_DEFAULT_TEMPLATE)

Finalmente, pasamos LLM, la conexión de la base de datos y la indicación a la cadena de base de datos SQL y ejecutamos la consulta SQL:

db_chain = SQLDatabaseChain.from_llm(llm, db, prompt=PROMPT)
response=db_chain.run(query)

Por ejemplo, para la consulta del usuario “Nombre de todos los empleados con fecha de nacimiento este mes”, la respuesta es la siguiente:

Pregunta: Nombre de todos los empleados con fecha de nacimiento este mes

SELECT * FROM employees WHERE MONTH(birth_date) = MONTH(CURRENT_DATE());

Respuesta del usuario:
Los empleados con cumpleaños este mes son:
Christian Koblick
Tzvetan Zielinski

Limpieza

Después de ejecutar la arquitectura moderna de datos con IA generativa, asegúrese de limpiar cualquier recurso que no se vaya a utilizar. Cierre y elimine las bases de datos utilizadas (Amazon Redshift, Amazon RDS, Snowflake). Además, elimine los datos en Amazon S3 y detenga cualquier instancia de cuaderno de Studio para no incurrir en cargos adicionales. Si usó JumpStart para implementar un LLM como un punto final en tiempo real de SageMaker, elimine el punto final a través de la consola de SageMaker o Studio.

Conclusión

En este artículo, integramos una arquitectura moderna de datos con IA generativa y LLM en SageMaker. Esta solución utiliza varios modelos fundamentales de texto a texto de JumpStart, así como modelos de terceros. Este enfoque híbrido identifica fuentes de datos, escribe consultas SQL y genera respuestas con resultados de consultas. Utiliza Amazon Redshift, Amazon RDS, Snowflake y LLM. Para mejorar la solución, podría agregar más bases de datos, una interfaz de usuario para consultas en inglés, ingeniería de indicaciones y herramientas de datos. Esto podría convertirse en una manera inteligente y unificada de obtener información de múltiples almacenes de datos. Para profundizar en la solución y el código mostrado en este artículo, consulte el repositorio de GitHub. Además, consulte Amazon Bedrock para conocer casos de uso sobre IA generativa, modelos fundamentales y modelos de lenguaje amplio.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Microsoft Research lanza el 'Cuarteto de Heavy Metal' de los compiladores de IA Rammer, Roller, Welder y Grinder

La evolución de los modelos de inteligencia artificial (IA) y los aceleradores de hardware ha traído desafíos únicos ...

Inteligencia Artificial

Investigadores de Corea del Sur proponen VITS2 un avance en los modelos de síntesis de voz de una sola etapa para una mayor naturalidad y eficiencia.

El artículo presenta VITS2, un modelo de síntesis de texto a voz de una sola etapa que sintetiza un habla más natural...

Inteligencia Artificial

Mejorando el rendimiento de consulta de archivos CSV en ChatGPT

La llegada de modelos de lenguaje sofisticados, como ChatGPT, ha traído un enfoque novedoso y prometedor para consult...