• Saltar a la navegación principal
  • Saltar al contenido principal
Logo Codificando Bits

Codificando Bits

  • Academia
    • Rutas
    • Cursos
    • Proyectos
    • Tutoriales
  • Acceder
  • Suscribirse

Chatbot de documentos PDF con Ollama y Streamlit

En este proyecto veremos cómo implementar un asistente de Inteligencia Artificial que nos permitirá consultar nuestra propia documentación, disponible en archivos PDF, haciendo uso de Grandes Modelos de Lenguaje y que funcionará de forma totalmente local (es decir en nuestros computadores).

Si estás suscrito a la Academia Online puedes acceder al enlace de descarga del código fuente de este proyecto.

Contenido

Introducción: limitaciones de los LLM

RAG (Retrieval-Augmented Generation): evitando que un LLM alucine

Características del Chatbot a implementar

Instalación de aplicaciones y librerías requeridas

Prototipo del sistema RAG

Desarrollo del aplicativo

Prueba del Chatbot: consultando un documento PDF

El código fuente de este proyecto

Introducción: limitaciones de los LLM

A pesar del desempeño tan impresionante que tienen los Grandes Modelos de Lenguaje (o Large Language Models, LLM) al momento de procesar el lenguaje natural, existen situaciones en las cuáles estos modelos no son capaces de generar una respuesta precisa y relevante para la pregunta planteada por un usuario.

Por ejemplo, si tenemos una gran cantidad de documentos privados a los cuales estos modelos no han tenido acceso y queremos extraer alguna información relevante de estos documentos, al hacer una consulta a un LLM sobre esta información muy probablemente el modelo generará una respuesta que, en un principio parecería convincente pero que en últimas será una respuesta que no guarda relación con lo que queremos saber de los documentos. Y este problema es frecuente y se conoce como alucinaciones: el modelo genera respuestas inexactas, sin fundamentos y que pueden generar confusión en el usuario.

Pero entonces: ¿qué pasa si queremos aprovechar el poder de los LLMs para analizar grandes cantidades de texto que es desconocido por el modelo?

Una de las alternativas más usadas en la actualidad es la tecnología RAG: Retrieval Augmented Generation (o Generación Aumentada por Recuperación).

RAG (Retrieval-Augmented Generation): evitando que un LLM alucine

Como alternativa al problema de las alucinaciones ha surgido una tecnología de Inteligencia Artificial conocida como RAG (o Retrieval-Augmented Generation).

Un sistema RAG combina dos técnicas para lograr que un LLM genere respuestas más precisas y de esta forma se reduzca la probabilidad de alucinaciones:

  1. En primer lugar recupera (de allí el término retrieval) información relevante de un conjunto de documentos (como por ejemplo PDFs, páginas web u otro tipo de fuentes de información) dependiendo de la consulta hecha por el usuario
  2. Y en segundo lugar presenta esta información recuperada a un LLM para crear una respuesta detallada y natural (de allí el término augmented generation), de manera similar a como lo haría un ser humano si realizase la consulta de la documentación.

Los elementos claves que componen un sistema RAG son:

  1. Una base de datos vectorial que permite almacenar los textos de referencia (PDFs, sitios web, etc.) en formato vectorial a través de embeddings.
  2. Un sistema de recuperación (o «retriever») que toma la consulta del usuario y encuentra en la base de datos vectorial las porciones que podrían responder a dicha consulta
  3. Un modelo generativo (LLM) que escribe la respuesta en lenguaje natural usando la información recuperada de la base de datos vectorial.
Elementos de un sistema RAG
Elementos que conforman un sistema RAG

Características del Chatbot a implementar

En este proyecto implementaremos precisamente un Chatbot basado en la tecnología RAG. La idea es que tendremos un documento PDF sobre el cual realizaremos consultas, las cuales serán respondidas por el sistema RAG.

La idea además es que hagamos uso de modelos de código abierto, como por ejemplo Llama, y que la aplicación se pueda ejecutar de forma totalmente local (usando por ejemplo aplicaciones como Ollama). Esto tiene la ventaja de que si queremos usar documentos que deben mantener un cierto nivel de privacidad, no correremos el riesgo de divulgar esta información de ninguna manera pues dicha documentación siempre reposará en nuestros computadores y en ningún momento será procesada por algún servicio en la nube.

Y para facilitar la interacción con este sistema implementaremos un sencillo aplicativo web con ayuda de Streamlit. En la siguiente figura podemos ver el diagrama de bloques general de la aplicación a desarrollar:

Diagrama de bloques del sistema RAG a implementar
Diagrama de bloques del sistema que implementaremos en este proyecto

Instalación de aplicaciones y librerías requeridas

Para implementar este proyecto haremos uso de:

  • Ollama, una aplicación que podemos instalar localmente (en nuestros computadores) y que nos permite hacer uso de LLMs sin depender de servidores externos o en la nube.
  • «pypdf» para realizar la lectura de archivos PDF desde Python.
  • Langchain, que es la librería de Python que nos permite desarrollar diferentes tipos de aplicaciones de Inteligencia Artificial basadas en LLMs
  • «langchain_community» y «langchain_ollama» dos librerías basadas en Langchain que contienen funciones útiles para interactuar con los modelos disponibles en Ollama así como para la creación de las bases de datos vectoriales y todas las fases de procesamiento de los datos necesarias en este proyecto.
  • Streamlit: la librería que nos permitirá implementar el aplicativo web

Para la instalación de esta aplicación sugiero revisar el proyecto Chatbot totalmente local con Ollama y Streamlit (sección «Instalación e interacción básica con Ollama») en donde explico paso a paso cómo instalar esta librería y como interactuar con los LLMs disponibles.

Una vez instalada Ollama lo que sugiero es crear un entorno virtual en donde instalaremos todas las librerías de Python requeridas para este proyecto. Sugiero revisar el tutorial ¿cómo crear entornos virtuales en Python con «venv»? en donde explico qué es un entorno virtual, por qué resulta útil al momento de desarrollar nuestros proyectos y cómo crearlo usando el módulo «venv».

Teniendo listo nuestro entorno virtual podemos simplemente usar «pip» para instalar las diferentes librerías. Así que activamos el entorno virtual, vamos a la ventana de comandos de Windows o al Terminal de Mac y escribimos lo siguiente:

pip install pypdf langchain langchain-community langchain-ollama streamlit

Tras ejecutar la línea de código anterior tendremos ya instaladas todas las librerías requeridas. Es importante tener en cuenta que este proyecto ha sido desarrollado con las siguientes versiones:

  • «pypdf»: 5.0.1
  • «langchain»: 0.3.3
  • «langchain-community»: 0.3.2
  • «langchain-ollama»: 0.2.0
  • «streamlit»: 1.39.0

Y en este punto ya podemos comenzar con el desarrollo de nuestra aplicación. Comencemos implementando un prototipo del sistema RAG.

Contenido exclusivo para suscriptores

Si eres suscriptor accede en este enlace ó suscríbete a la Academia Online y accede a todo el contenido (lecciones en video, código fuente, sets de datos y descargas) de todos los cursos, proyectos y tutoriales.

Así que ha llegado el momento esperado: ¡veamos en acción nuestro Chatbot!

Prueba del Chatbot: consultando un documento PDF

Para ejecutar el aplicativo simplemente verificamos que Ollama se esté ejecutando. Luego abrimos la ventana de comandos de Windows o el Terminal de Mac y, estando en la carpeta de nuestro proyecto, escribimos lo siguiente:

streamlit run RAG_local_app.py

Una vez hagamos esto se abrirá automáticamente una ventana como esta en nuestro navegador de Internet por defecto:

Pantalla de inicio del aplicativo RAG implementado

En este punto simplemente podemos arrastrar un documento PDF o dar click en el botón «Browse files». Una vez hagamos esto automáticamente el sistema comenzará a ingerir el archivo y aparecerá precisamente un ícono que nos indica que se está llevando a cabo este proceso:

Spinner mostrado durante la ingestión del archivo PDF
Spinner mostrado durante la ingestión del archivo PDF

Este proceso de ingestión tomará varios segundos pues, recordemos que en este paso se está subdividiendo el texto del archivo PDF en pequeños «chunks» y se está creando la base de datos vectorial.

Una vez completada la ingestión se habilitará el cuadro de diálogo «Mensaje» y ya podremos comenzar a interactuar con el Chatbot para consultar el documento PDF.

Si escribimos una pregunta después de algunos segundos veremos la respuesta generada por el modelo. Y después de formular varias preguntas veremos además que el historial de preguntas-respuestas aparece en la interfaz gráfica, algo similar a esto:

Un ejemplo del Chatbot implementado en acción

Y en este punto ya hemos visto cómo implementar un Chatbot, usando la tecnología RAG, capaz de responder preguntas a un documento PDF y donde todo el proceso se ejecuta de forma 100% local.

El código fuente de este proyecto

Contenido exclusivo para suscriptores

Si eres suscriptor accede en este enlace ó suscríbete a la Academia Online y accede a todo el contenido (lecciones en video, código fuente, sets de datos y descargas) de todos los cursos, proyectos y tutoriales.

Y recuerda que si eres suscriptor y tienes alguna duda sobre este proyecto me puedes contactar directamente a través del formulario que encontrarás en la Intranet.

Volver al índice de Proyectos

© Codificando Bits, LLC | Blog | Contacto | Servicios | Acerca de | Políticas

¿Has olvidado la contraseña?
¿Has perdido tu contraseña? Por favor, introduce tu nombre de usuario o dirección de correo electrónico. Recibirás por correo electrónico un enlace para crear una nueva contraseña.
body::-webkit-scrollbar { width: 7px; } body::-webkit-scrollbar-track { border-radius: 10px; background: #f0f0f0; } body::-webkit-scrollbar-thumb { border-radius: 50px; background: #dfdbdb }