/
Preguntar sobre documentos

Preguntar sobre documentos

Introducción

En este ejemplo se va a crear un flujo en el cual se va a alimentar un model LLM con el contenido de documentos en PDF.

Para ello se usarán los LLM Flows de la plataforma.

Haremos uso del LLM de OpenAI tanto para la generación de embeddings como para la integración del chatbot para responder a las preguntas sobre los documentos.

Los embeddings son representaciones numéricas de palabras o frases que capturan su significado y relaciones en un espacio multidimensional, facilitando así su uso en tareas de procesamiento de lenguaje natural.

image-20250205-100226.png

El resultado de la generación de los embeddings se almacenará en una base de datos vectorial Pinecone. Esto es necesario para que el modelo LLM pueda interpretar correctamente los datos del documento.

NOTA: La ejecución de este flujo generará costes asociados al uso de almacenamiento y modelos LLM en:

  • Almacenamiento de BBDD Vectorial. Para ejemplos pequeños (consultar pricing Pinecone) es posible usar la licencia “starter” sin coste asociado.

  • Uso del modelo de generación de embeddings asociado a la cuenta OpenAI configurada en el flujo

  • Uso del modelo de consulta para el chatbot asociado a la cuenta OpenAI configurada en el flujo

Cómo acceder a los flujos LLM de Plataforma

Primero tendremos que acceder a los LLM Flows de plataforma. Para ello, como usuarios de rol DATASCIENTIST, vamos al menú ““ y hacemos click en ““

image-20250205-103648.png

En el caso de ser un usuario administrador, se visualizarán todas las instancias de LLM Flow dadas de alta por los usuarios. En caso contrario, solamente veremos la del usuario con el que se está trabajando.

Si no se ve ninguna, es porque no se ha creado aun. Para crear una instancia de LLM Flow, se hace click en el botón “+” en la esquina superior derecha de la pantalla:

Se le da un nombre a la instancia de flujos LLM del usuario y se hace click en “Crear”

Esto crea la definición de insntancia en plataforma y lo siguiente es arrancarla. Para ello, se hace click en el botón “arrancar” (icono play)

y se esperan unos instantes a que se active el icono “mostrar” para poder acceder:

Una vez dentro de la instancia de flujos LLM ya se pueden crear los fujos para los ejemplos:

Prerequisitos para el ejemplo

Para poder realizar este ejemplo, es necesario contar con cuentas en Pinecone y OpenAI. Además será necesario que se realicen las siguientes configuraciones para cada una de ellas:

Pinecone

Primero hay que crear una API key para poder acceder externamente.

En la consola de gestión de Pinecone, seleccionamos “API keys” en el menú izquierdo y hacemos click en “+ Create API key”.

Se le da un nombre a la API y se crea la clave.

La calve se generará y hay que copiarla, ya que solamente se nos mostrará en este momento. Es muy importante no perderla, ya que no podemos volver a obtenerla:

Una vez se tiene una clave de API, hay que crear un índice para poder almacenar los embeddings del proceso de análisis del PDF.

Para ello, se selecciona en el menú “Database“ y en la pantalla se hace click en “Create Index”.

Se le da un nombre al índice y se tiene que seleccionar una configuración. Esta elección es muy importante ya que tiene que ser la misma que elijamos a posteriori en la configuración del nodo en LLM Flow. En este caso se selecciona “text-embedding-3-small“ ya que a día del ejemplo es el modelo de embeddings que menos coste genera en OpenAI.

OpenAI

Al igual que para Pinecone, necesitamos tener una API key para poder hacer uso de los modelos de embeddings y de Chat.

En el dashboard principal de OpenAI, en la sección de “API keys”, haciendo click en “+ Create new secret key”

damos un nombre a una clave:

Como en el caso de Pinecone, copiamos la clave, ya que no volveremos a poder acceder a ella después:

Con esto ya estamos en disposición de crear el flujo de ejemplo.

Creación del flujo

Este ejemplo se va a dividir en dos partes. Aunque todo se defina en el mismo chatflow, a nivel de funcionamiento tenemos dos funcionalidades distintas.

La primera de ellas es la que se encarga de analizar el contenido del documento, generar los embeddings y almacenarlos para su posterior uso para el modelo de OpenAI.

La segunda es la integración del modelo de OpenAI con dichos embeddings y con un chatbot para poder lanzarle las preguntas que se quieran.

Generación de embeddings

Lo primero es partir de un flujo en blanco. Se hace click en el botón “+ Add New” y partimos de un lienzo en blanco.

A continuación, se hace click en el botón de la esquina superior izquierda “+”, que desplegará un menú “Add nodes”.

Buscamos en el listado de la izquierda, el nodo “PDF File” y lo arrastramos al lienzo principal de trabajo:

Una vez se tiene el nodo en el área de trabajo, se pincha en el botón “upload file” para cargar un documento PDF desde el disco local del usuario. En este caso cargaremos un PDF con el datasheet de una placa microcontrolador Arduino UNO.

Tras esto, buscamos del menú de nodos los nodos “Pinecone” y “OpenAI Embeddings” y los enlazamos uniendo la salida de PDF “Document” con la entrada de mismo nombre en Pinecone, así como la salida de “OpenAI Embeddings” a la entrada de “Embeddings” de Pinecone. Esto hará que el flujo sepa dónde almacenar los embedings y quién los va a generar. El resultado quedará así:

Lo siguiente es configurar los nodos. Para ambos necesitaremos una cuenta en cada aplicación y los API Keys correspondientes para su uso, como explicado en la sección de prerequisitos.

Para el nodo de OpenAI Embeddings, primero hay que dar de alta la clave de OpenAI en la instancia de LLM Flow.

Esto solamente será necesario la primera vez que lo usemos y se almacenará de manera segura y encriptada para su reutilización dentro de este u otros flujos dentro de la instancia.

Desplegamos la opción “Connect Credential“ y hacemos click en “-Create new-”. Pegamos la Clave de nuestra cuenta y hacemos click en “Add”.

Después, en el mismo desplegable, se selecciona la clave dada de alta.

Para la opción “Model Name” se selecciona “text-embedding-3-small” que es el mismo modelo que se usó en la creación del índice de Pinecone. Es fundamental que el índice esté creado con la parametrización del modelo de embeddings a usar.

Una vez configurado el nodo de OpenAI Embeddings, hay que configurar el de Pinecone. Al igual que para el anterior, hay que dar de alta la clave de Pinecone en el campo “Connect Credential” y copiamos el nombre del índice creado en la sección de prerequisitos en el campo “Pinecone Index“:

 

Para no perder los cambios, podemos guardarlos haciendo click en el icono de guardar en la esquina superior derecha y dándole un nombre.

Una vez guardemos los cambios, aparecerá un nuevo botón en la esquina superior derecha, llamado “Upload vector Database”. Hasta ahora solo se ha definido el flujo de datos, pero no se han generado los embeddings. Para ello se tiene que clickar en ese botón:

Se pulsa en “Upsert”

Tras unos segundos (el tiempo depende del documento), aparecerá en pantalla el resultado del proceso de generación de embeddings y almacenamiento de los mismos en la BBDD vectorial.

Hay que hacer click en “Close” para poder continuar con la integración de este análisis con un chatbot.

Integración del chatbot

Una vez tenemos los embeddings cargados, podemos añadir al flujo un chatbot para atender las preguntas. Cada interacción con el chatbot se enviará a un modelo LLM seleccionado.

Para ello hay que añadir un nodo de tipo “chain”, que se encargará de gestionar las secuencias de texto desde el chat hacia el modelo y viceversa. En este ejemplo se usará un nodo de tipo “Conversational Retrieval QA Chain”.

Se puede ver al arrastrarlo al área de trabajo que hay dos enlaces requeridos: un modelo y una BBDD de vectores. Por ahora, enlazamos este último al nodo de Pinecone que ya tenemos configurado.

A continuación añadimos al área de trabajo en último nodo requerido para completar el ejemplo, que es un modelo LLM para atender las interacciones del chat. Buscamos un nodo de tipo “ChatOpenAI”

Al arrastrarlo al área de trabajo, podemos observar que hay dos campos obligatorios y un enlace.

Enlazamos la salida del nodo con la entrara “Chat Model” del nodo anteriormente creado “Conversational Retrieval QA Chain”

Para el campo “Connect Credential” seleccionamos la API Key dada de alta para OpenAI.

Para el campo “Model Name” hay una lista de todos los modelos disponibles. Esta elección es libre, pero hay que tener en cuenta que cada modelo tendrá sus costes asociados sobre la suscripción activa del API key seleccionado. Para este ejemplo, probaremos con “gpt-4o-mini”:

Con esto, el flujo ya está configurado para su uso.

Guardamos los cambios haciendo click en el botón image-20250205-145219.png para poder hacer uso del chatbot.

Uso del chatbot

 

en la esquina superior derecha, junto al botón de refrescar los embeddings está el botón “chat” el cual clickamos para activar el chat en el que consultar sobre el documento:

Esto nos abrirá un chat en el cual podremos empezar a escribir las preguntas sobre el documento:

Related content

Crear un chatbot sencillo
Crear un chatbot sencillo
Read with this
Un vistazo a LLM Flow
Un vistazo a LLM Flow
Read with this
Ejemplos de LLM Flow
Ejemplos de LLM Flow
Read with this