Sumérgete en JITR: la herramienta de IA generativa para extracción y consulta de PDF

Motivación

Acceder, comprender y recuperar información de documentos son aspectos fundamentales para numerosos procesos en diversas industrias. Ya sea trabajando en finanzas, atención médica, en el comercio minorista de alfombras o como estudiante universitario, a menudo te encuentras con un documento extenso que necesitas analizar cuidadosamente para responder preguntas. Ingresa en JITR, una herramienta innovadora que procesa archivos PDF y aprovecha los Modelos de Lenguaje (LLM) para responder las consultas de los usuarios sobre el contenido. Descubramos la magia detrás de JITR.

¿Qué es JITR?

JITR, que significa Recuperación Justo a Tiempo, es una de las herramientas más recientes de la suite GenAI Accelerator de DataRobot diseñada para analizar documentos PDF, extraer su contenido y proporcionar respuestas precisas a las preguntas de los usuarios. Imagina tener un asistente personal capaz de analizar y comprender cualquier documento PDF y luego ofrecer respuestas instantáneas a tus preguntas. Eso es JITR para ti.

¿Cómo funciona JITR?

Extracción de archivos PDF: La primera fase implica la extracción de un PDF en el sistema JITR. Aquí, la herramienta convierte el contenido estático del PDF en un formato digital mediante la incrustación. El modelo de incrustación convierte cada oración del archivo PDF en un vector, creando así una base de datos vectorial del PDF de entrada.

Aplicación de su LLM: Una vez que se ha extraído el contenido, la herramienta recurre al LLM. Los LLM son modelos de inteligencia artificial de última generación entrenados con grandes cantidades de datos de texto. Son expertos en comprender el contexto, interpretar el significado y generar texto similar al humano. JITR emplea estos modelos para comprender e indexar el contenido del PDF.

Consulta interactiva: Posteriormente, los usuarios pueden formular preguntas sobre el contenido del PDF. El LLM recopila la información relevante y presenta respuestas de manera concisa y coherente.

Beneficios de utilizar JITR

Cada organización genera una amplia variedad de documentos que son producidos en un departamento y utilizados por otro. Frecuentemente, la búsqueda de información para empleados y equipos puede llevar mucho tiempo. El uso de JITR mejora la eficiencia de los empleados al reducir el tiempo necesario para revisar extensos archivos PDF y ofrecer respuestas precisas e inmediatas a sus preguntas. Además, JITR puede manejar cualquier tipo de contenido PDF, lo que permite a las organizaciones integrarlo y utilizarlo en distintos flujos de trabajo sin preocuparse por el documento de entrada.

Es posible que muchas organizaciones carezcan de los recursos o la experiencia en el desarrollo de software para crear herramientas que empleen LLM en sus procesos de trabajo. JITR permite a equipos y departamentos sin conocimientos de Python convertir un archivo PDF en una base de datos vectorial para un LLM. Simplemente con disponer de un punto final al cual enviar archivos PDF, JITR puede integrarse en cualquier aplicación web como Slack (u otras herramientas de comunicación) o portales externos para clientes. No se necesitan conocimientos en LLM, Procesamiento del Lenguaje Natural (NLP) o bases de datos vectoriales.

Aplicaciones del mundo real

Debido a su versatilidad, JITR se puede integrar en casi cualquier proceso de trabajo. A continuación, se presentan algunas aplicaciones:

Informes empresariales: Los profesionales pueden obtener rápidamente información de informes, contratos y documentos técnicos extensos. Asimismo, esta herramienta puede integrarse en procesos internos, permitiendo a los empleados y equipos interactuar con documentos corporativos.

Servicio al Cliente: Desde la comprensión de manuales técnicos hasta la exploración de tutoriales, JITR puede facilitar que los clientes interactúen con manuales y documentos relacionados con productos y herramientas. Esto puede mejorar la satisfacción del cliente y reducir la cantidad de consultas de soporte técnico.

Investigación y Desarrollo: Los equipos de I+D pueden extraer rápidamente información relevante y comprensible de trabajos de investigación complejos para implementar tecnologías de vanguardia en productos o procesos internos.

Cumplimiento de Normativas: Muchas organizaciones tienen directrices que los empleados y equipos deben seguir. JITR permite a los empleados acceder a información relevante de las directrices de manera eficiente.

Legal: JITR puede analizar documentos legales y contratos para responder preguntas basadas en la información proporcionada en los documentos de entrada.

Cómo construir el bot JITR con DataRobot

El proceso para crear un Bot JITR es similar al despliegue de cualquier modelo de LLM utilizando DataRobot. Las dos diferencias principales son:

  1. La definición de tu base de datos vectorial se realiza en tiempo de ejecución
  2. Debes tener un método para manejar un PDF codificado

Para esto, podemos establecer una función sencilla que tome una codificación y la transforme en un archivo PDF temporal dentro de nuestra implementación.

```python
def base_64_to_file(b64_string, filename: str="temp.PDF", directory_path: str = "./storage/data") -> str:     
    """Decode a base64 string into a PDF file"""

    import os

    if not os.path.exists(directory_path):
        os.makedirs(directory_path)

    file_path = os.path.join(directory_path, filename)

    with open(file_path, "wb") as f:
        f.write(codecs.decode(b64_string, "base64"))   

    return file_path
```

Con esta función auxiliar definida, podemos continuar con nuestras tareas. Los "ganchos" son simplemente funciones con nombres específicos. En nuestro caso, solo necesitamos definir un gancho llamado `load_model` y otro gancho llamado `score_unstructured`. En `load_model`, configuramos el modelo de incrustación que deseamos utilizar para encontrar los fragmentos de texto más relevantes, así como el LLM al que haremos referencia con nuestro mensaje contextual.

```python
def load_model(input_dir):
    """Custom model hook for loading our knowledge
``````html

Adecuadamente, entonces tenemos nuestra función de incrustación y nuestro LLM. Asimismo tenemos una modo de tomar una codificación y retornar a un PDF. Ahora llegamos al meollo del JITR Bot, donde construiremos nuestro almacén de vectores en tiempo de ejecución y lo usaremos para consultar el LLM.


```python
def score_unstructured(model, data, query, **kwargs) -> str:

    """Custom model hook for making completions with our knowledge cojín.
    When requesting predictions from the deployment, pass a dictionary
    with the following keys:
    - 'question' the question to be passed to the retrieval chain
    - 'document' a base64 encoded document to be loaded into the vector database
    datarobot-user-models (DRUM) handles loading the model and calling
    this function with the appropriate parameters.
    Returns:
    --------
    rv : str
        Json dictionary with keys:
            - 'question' user's diferente question
            - 'answer' the generated answer to the question
    """
    
    import json
    from langchain.chains import ConversationalRetrievalChain
    from langchain.document_loaders import PyPDFLoader
    from langchain.vectorstores.cojín import VectorStoreRetriever
    from langchain.vectorstores.faiss import FAISS
    
    llm, embedding_function = model
    DIRECTORY = "./storage/data"
    temp_file_name = "temp.PDF"
    data_dict = json.loads(data)
    
    # Write encoding to file
    base_64_to_file(data_dict['document'].encode(), filename=temp_file_name, directory_path=DIRECTORY)
    
    # Load up the file
    loader = PyPDFLoader(os.path.join(DIRECTORY, temp_file_name))
    docs = loader.load_and_split()
    
    # Remove file when done
    os.remove(os.path.join(DIRECTORY, temp_file_name))
    
    # Create our vector database 
    texts = (doc.page_content for doc in docs)
    metadatas = (doc.metadata for doc in docs) 
    db = FAISS.from_texts(texts, embedding_function, metadatas=metadatas)  
    
    # Define our chain
    retriever = VectorStoreRetriever(vectorstore=db)
    chain = ConversationalRetrievalChain.from_llm(llm, retriever=retriever)
    
    # Run it
    response = chain(inputs={'question': data_dict['question'], 'chat_history': ()})
    
    return json.dumps({"result": response})
```

Con nuestros enlaces definidos, todo lo que queda por hacer es implementar nuestra canalización para que tengamos un punto final con el que la muchedumbre pueda interactuar. Para algunos, el proceso de creación de un punto final seguro, monitoreado y consultable a partir de código Python parcial puede parecer intimidante o, al menos, tolerar mucho tiempo configurarlo. Utilizando el drx paquete, podemos implementar nuestro JITR Bot en una convocatoria de función.


```python
import datarobotx as drx

deployment = drx.deploy(
    "./storage/deploy/", # Path with embedding model
    name=f"JITR Bot {now}",
    hooks={
        "score_unstructured": score_unstructured,
        "load_model": load_model
    },
    extra_requirements=("pyPDF"), # Add a package for parsing PDF files
    environment_id="64c964448dd3f0c07f47d040", # GenAI Dropin Python environment
)
```

Cómo utilizar JITR

Ok, el trabajo duro ha terminado. Ahora podemos disfrutar interactuando con nuestra nueva implementación. A través de Python, podemos nuevamente servirse el paquete drx para contestar nuestras preguntas más urgentes.


```python
# Find a PDF
url = "https://s3.amazonaws.com/datarobot_public_datasets/drx/Instantnoodles.PDF"
resp = requests.get(url).content
encoding = base64.b64encode(io.BytesIO(resp).read()) # encode it

# Interact
response = deployment.predict_unstructured(
    {
        "question": "What does this say about noodle rehydration?",
        "document": encoding.decode(),
    }
)['result']
```

Pero lo más importante es que podemos realizar nuestra implementación en cualquier idioma que queramos, ya que es solo un punto final. A continuación, muestro una captura de pantalla mía interactuando con la implementación directamente a través de Postman. Esto significa que podemos integrar nuestro JITR Bot en prácticamente cualquier aplicación que queramos simplemente haciendo que la aplicación realice una convocatoria API.

Integrando JITR Bot en una aplicación - DataRobot

Una vez integrado en una aplicación, utilizar JITR es muy sencillo. Por ejemplo, en la aplicación Slackbot utilizada internamente en DataRobot, los usuarios simplemente cargan un PDF con una pregunta para iniciar una conversación relacionada con el documento.

JITR facilita que cualquier persona en una estructura comience a producir valencia en el mundo positivo desde IA generativa, en innumerables puntos de contacto en los flujos de trabajo diarios de los empleados. Mire este vídeo para obtener más información sobre JITR.

Cosas que puede hacer para que el autómata JITR sea más potente

En el código que mostré, ejecutamos una implementación sencilla de JITRBot que toma un PDF codificado y crea un almacén de vectores en tiempo de ejecución para contestar preguntas. Como no eran relevantes para el concepto central, opté por evitar una serie de detalles que implementamos internamente con JITRBot, como por ejemplo:

  • Devolver tokens de aviso y finalización conscientes del contexto
  • Reponer preguntas basadas en múltiples documentos
  • Reponer varias preguntas a la vez
  • Permitir que los usuarios proporcionen el historial de conversaciones
  • Usar otras cadenas para diferentes tipos de preguntas
  • Informar métricas personalizadas a la implementación

¡Siquiera hay ninguna razón por la que JITRBot solo tenga que funcionar con archivos PDF! Mientras un documento pueda codificarse y convertirse nuevamente en una condena de texto, podríamos incorporar más razonamiento a nuestro `score_unstructured` garabato para manejar cualquier tipo de archivo que proporcione un adjudicatario.

Comience a servirse JITR en su flujo de trabajo

JITR facilita la interacción con archivos PDF arbitrarios. Si quieres probarlo, puedes seguirlo próximo con el cuaderno. aquí.

```

¿Nos apoyarás hoy?

Creemos que todos merecen entender el mundo en el que viven. Este conocimiento ayuda a crear mejores ciudadanos, vecinos, amigos y custodios de nuestro planeta. Producir periodismo explicativo y profundamente investigado requiere recursos. Puedes apoyar esta misión haciendo una donación económica a Gelipsis hoy. ¿Te sumarás a nosotros?

Suscríbete para recibir nuestro boletín:

Recent Articles

Related Stories

DEJA UN COMENTARIO

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí