A medida que todo lo que nos rodea se vuelve cada vez más basado en datos, Excel sigue siendo fundamental para las empresas, ya que ofrece la capacidad de proporcionar información muy valiosa a partir de los datos de las hojas. Sin embargo, los científicos y analistas de datos están de acuerdo en que extraer información significativa de estos vastos conjuntos de datos puede llevar mucho tiempo y requiere habilidades especializadas. Pero aquí es donde la IA Generativa y los Modelos de Lenguaje de Gran Tamaño pueden ayudar a simplificar el proceso de generación de insights. Un componente importante para ayudar en este proceso es Generación de Recuperación Aumentada (RAG).
La RAG es una potente técnica que contribuye a la precisión de los grandes modelos lingüísticos al permitir que el modelo tenga acceso a datos externos mediante la recuperación de información. Normalmente, los modelos lingüísticos de gran tamaño (LLM) reciben la información de un usuario y ofrecen respuestas basadas en la información con la que se ha entrenado el LLM (que a veces puede estar desactualizada o ser incorrecta). RAG combina esta información con datos complementarios, como la base de conocimientos de una empresa o documentos relevantes, lo que le permite ofrecer respuestas precisas y contextualmente relevantes.
Este blog te guiará sobre cómo construir un sistema RAG específicamente adaptado para la ingesta de datos de Excel y la generación de ideas. Aprovecharemos LlamaIndex y LlamaParse para transformar las hojas de cálculo en una base de conocimientos en la que se puedan realizar búsquedas y almacenaremos estos datos en Couchbase Vector Search para recuperar rápidamente el contexto relevante en función de la consulta de un usuario y, a continuación, aprovecharemos Amazon Bedrock para la respuesta LLM.
Qué es LLamaIndex y LLamaParse
LlamaIndex es un marco de orquestación de código abierto diseñado para ayudar a los desarrolladores a crear aplicaciones de IA con grandes modelos lingüísticos (LLM). Ayuda a salvar la distancia entre las fuentes de datos personalizadas y los LLM. LLamaIndex permite a los usuarios introducir datos de diversas fuentes, como archivos o bases de datos vectoriales, y luego indexarlos en representaciones intermedias. LLamaIndex permite consultar estos datos en lenguaje natural e interactuar con ellos.
En primer lugar, los datos se indexan en un índice vectorial. De este modo se crea una base de conocimientos específica del dominio que permite realizar búsquedas. Durante la consulta, el sistema busca la información pertinente basándose en la petición del usuario y, a continuación, proporciona esta información al gran modelo lingüístico para generar una respuesta.
LlamaParse es un componente especializado dentro del ecosistema LlamaIndex, diseñado para ser una potente plataforma de análisis de documentos que agiliza el proceso de análisis y extracción de información estructurada de documentos complejos. Se ha creado para analizar y limpiar datos con el fin de garantizar que los usuarios puedan disponer de datos de entrada de alta calidad para casos de uso de LLM como RAG. LlamaParse permite analizar distintos tipos de documentos, como PDF, Excel, HTML, etc.
Creación de un sistema de generación de recuperación aumentada con datos de Excel
En este blog, crearemos un sistema RAG utilizando un conjunto de datos sobre reclamaciones de los clientes (de Kaggle). Este conjunto de datos proporciona información detallada sobre las reclamaciones de los consumidores en relación con diversos productos y servicios financieros. El sistema RAG, basado en la búsqueda vectorial de Couchbase, facilitará la extracción de información crítica de los datos.
A continuación se ofrece una representación visual del conjunto de datos.
Instalación de las dependencias necesarias e instanciación de LlamaParse
1 |
!pip instale llama-índice llama-analizar llama-índice-vector-almacenes-couchbase llama-índice-llms-lecho de roca fastembed llama-índice-incrustaciones-lecho de roca |
Después de instalar las dependencias, ahora instanciaremos LlamaParse con la instrucción de análisis para analizar el archivo Excel:
1 2 3 4 5 6 7 8 9 10 11 12 |
de llama_parse importar LlamaParse de google.colab importar datos de usuario de llama_índice.núcleo importar SimpleDirectoryReader importar nido_asyncio nido_asyncio.aplicar() analizador = LlamaParse( clave_api=datos de usuario.consiga('LLAMA_CLOUD_API_KEY'), parsing_instruction = """Está analizando un conjunto de datos de reclamaciones de clientes.. La columna Empresa contiene el nombre de la empresa. Extraiga información de las columnas Producto, Subproducto, Problema, Relato de la reclamación del consumidor, Respuesta pública de la empresa, Empresa, Estado, Código postal.""", tipo_resultado="markdown" ) |
Cuando instanciamos el objeto LlamaParse, le pasamos parsing_instruction y tipo_resultado como el Análisis opciones.
En tipo_resultadohemos especificado el formato de nuestra salida. Por defecto, LlamaParse devolverá los resultados como texto analizado. Las otras opciones disponibles son rebajas y JSON que devuelve una estructura que representa el objeto analizado. En parsing_instruction podemos proporcionar contexto adicional a LlamaParse sobre los datos. LlamaParse utiliza LLMs bajo el capó, lo que nos permite darle instrucciones en lenguaje natural sobre qué y cómo analizar la información.
A continuación, cargaremos el archivo Excel y lo analizaremos utilizando LlamaParser:
1 2 3 |
extractor_archivos = {".xlsx": analizador} documentos = SimpleDirectoryReader(archivos_de_entrada=[nombre_archivo.xlsx'], extractor_archivos=extractor_archivos).cargar_datos() |
Almacenamiento de los datos analizados mediante un índice vectorial de Couchbase
Antes de proceder, asegúrate de que tienes una cuenta en Couchbase Capella y que has configurado un índice vectorial dentro de Couchbase. Puedes seguir la siguiente guía para configurar tu cluster y el índice vectorial. Una vez que tengas la cuenta y el índice listos, puedes seguir adelante.
Los datos analizados se almacenan en la variable documents. Ahora se rellenarán dentro de Couchbase. Para ello, los documentos se convertirán en VectorStoreIndex. Este índice se almacenará posteriormente en el almacén vectorial de Couchbase convirtiendo primero los documentos soportados por el almacén vectorial utilizando los Bedrock Embeddings:
1 2 3 4 |
de llama_índice.llms.lecho de roca importar Bedrock de llama_índice.incrustaciones.lecho de roca importar BedrockEmbedding llm = Bedrock(modelo="mistral.mistral-large-2402-v1:0", nombre_región="us-east-1") incrustaciones = BedrockEmbedding(modelo="amazon.titan-embed-text-v1") |
También nos conectaremos a la instancia de Couchbase:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
def connect_to_couchbase(cadena_de_conexión, db_username, db_contraseña): """Conectarse a couchbase"""" de couchbase.grupo importar Grupo de couchbase.auth importar PasswordAuthenticator de couchbase.opciones importar ClusterOptions de datetime importar timedelta auth = PasswordAuthenticator(db_username, db_contraseña) opciones = ClusterOptions(auth) conectar_cadena = conexión_cadena grupo = Grupo(conectar_cadena, opciones) # Espere hasta que el clúster esté listo para su uso. grupo.wait_until_ready(timedelta(segundos=5)) devolver grupo |
Ahora, llamaremos al método VectorStoreIndex para almacenar el índice en Couchbase. El VectorStoreIndex toma los documentos y los divide en nodos. Luego crea incrustaciones vectoriales del texto de cada nodo usando el modelo de incrustación especificado, en este caso, incrustaciones Bedrock, que estarán listas para ser consultadas por un LLM.
LlamaIndex ofrece varios analizadores de nodos basados en archivos diseñados para generar nodos según el tipo de contenido específico que se esté procesando, como JSON, Markdown y otros formatos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
índice = VectorStoreIndex.de_documentos( documentos, contexto_almacenamiento=contexto_almacenamiento, ) vector_store = get_vector_store( grupo, DB_BUCKET, DB_SCOPE, DB_COLECCIÓN, NOMBRE_DEL_ÍNDICE, ) contexto_almacenamiento = StorageContext.from_defaults(vector_store=vector_store) índice = VectorStoreIndex.de_documentos( documentos, contexto_almacenamiento=contexto_almacenamiento, ) |
Generación de respuestas de Amazon Bedrock
Cuando un usuario carga un archivo Excel, se analiza con LlamaParse y se almacena en un almacén vectorial de Couchbase. Para cada consulta del usuario, el sistema realiza una búsqueda vectorial para recuperar fragmentos de información relevantes de los datos de Excel almacenados. Estos fragmentos relevantes se utilizan como contexto para que el modelo lingüístico (el modelo Mistral de Bedrock) genere una respuesta.
1 2 3 4 |
rag_stream_response = st.estado_sesión.chat_engine_rag.stream_chat(pregunta) para trozo en rag_stream_response.respuesta_gen: trapo_respuesta += trozo marcador_plaza_mensaje.rebajas(trapo_respuesta) |
Resultados
Ahora podemos comprobar el rendimiento de nuestra aplicación RAG examinando las respuestas a varias consultas proporcionadas por el usuario.
Conclusión
Este blog comparte cómo se puede construir un sistema de Generación Aumentada de Recuperación (RAG) para simplificar el análisis de cantidades masivas de datos de Excel. Esto se hace extrayendo información de los datos usando LlamaParse, transformándola a un formato VectorStoreIndex, y posteriormente almacenando este índice dentro de Couchbase.
-
- Empieza con Plataforma para desarrolladores Couchbase Capella gratis
- Lea más entradas y tutoriales en IA Generativa (GenAI)
- Más información sobre LLM Embeddings