Construye una aplicación gratuita y privada de "Chat con PDF" en 70 líneas de Python

Construye una aplicación de chat en Python con envío de archivos PDF privados y gratuitos. ¡Comienza a desarrollar tu propio chat seguro ahora mismo!

9 dic 2025 • 5 min de lectura • Equip Q2BSTUDIO

Construye una aplicación de chat con PDF privada y gratuita en Python.

Te presento una versión práctica y en español del artículo original sobre cómo crear una aplicación privada de Chat con PDF que funcione localmente y sin costes de API, adaptada por Q2BSTUDIO, empresa de desarrollo de software y aplicaciones a medida, especialistas en inteligencia artificial, ciberseguridad y servicios cloud. Aquí explico por qué esta arquitectura es segura, qué herramientas usar y cómo montar un motor RAG privado en tu propio equipo en pocos pasos.

Resumen rápido: privacidad, potencia y cero coste. Ejecutar modelos y bases de vectores en local te da control total sobre tus datos sensibles, desde documentos legales hasta estados financieros. Usaremos Ollama como cerebro local, LanceDB como memoria vectorial y un conjunto específico de librerías Python que se llevan bien entre sí para evitar la temida dependencia infernal. Todo corre en tu ordenador y nada se envía a terceros.

Por qué esta pila. Ollama permite ejecutar LLMs offline como Llama 3 o Mistral, sin clave ni conexión a servidor. LanceDB es una base de vectores sencilla y rápida que se integra directamente en Python y guarda los vectores en disco. Juntas forman una solución serverless, privada y eficiente, ideal para soluciones de software a medida y proyectos de inteligencia artificial para empresas.

Preparación previa. Instala Ollama en macOS, Windows o Linux y lanza el servicio en segundo plano con el comando ollama serve desde una terminal. Luego descarga los modelos necesarios con ollama pull llama3 y ollama pull nomic-embed-text. Para gestionar versiones de Python se recomienda pyenv y trabajar con Python 3.14.X tal como se probó en esta guía. Instala las librerías críticas con pip usando los paquetes y versiones que garantizan compatibilidad y evitar horas de depuración: lancedb igual a 0.25.3, ollama igual a 0.6.1 y pypdf igual a 6.2.0.

Instalación y dependencias. Si prefieres que te ayudemos a desplegar esto, en Q2BSTUDIO ofrecemos servicios de desarrollo de aplicaciones a medida y software a medida y podemos integrar esta arquitectura con tus sistemas existentes, aplicar gobernanza y asegurar la custodia de datos. También podemos alojar componentes en la nube si lo deseas, con soporte para servicios cloud aws y azure, aunque la guía se centra en ejecución local.

El script explicado en pocas líneas. A continuación tienes el script Python condensado que implementa la canalización RAG: lectura del PDF, fragmentación del texto, obtención de embeddings con Ollama, almacenamiento en LanceDB y bucle de consultas para responder usando Llama 3 como generador. Coloca un archivo PDF llamado file.pdf en el mismo directorio antes de ejecutar.

import ollamaimport lancedbfrom pypdf import PdfReaderimport os# --- CONFIGURACION ---DOC_PATH = "file.pdf"DB_PATH = "./lancedb_data"MODEL_EMBED = "nomic-embed-text"MODEL_GEN = "llama3"print("--- Construyendo base de conocimiento con LanceDB ---")# 1. INGESTA: leer PDFtry: reader = PdfReader(DOC_PATH) text = "" for page in reader.pages: text += page.extract_text() or ""except FileNotFoundError: print(f"Error: no se encontro {DOC_PATH}. Añade un PDF con ese nombre.") exit()# 2. FRAGMENTACIONchunk_size = 1000text_chunks = [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)]print(f"Procesados {len(text_chunks)} fragmentos de texto.")# 3. EMBEDDING Y ALMACENAMIENTOdata = []print("Generando embeddings, esto puede tardar unos instantes...")for i, chunk in enumerate(text_chunks): response = ollama.embeddings(model=MODEL_EMBED, prompt=chunk) vector = response["embedding"] data.append({"id": i, "text": chunk, "vector": vector})db = lancedb.connect(DB_PATH)try: table = db.create_table("resume", data=data, mode="overwrite") print("Conocimiento almacenado en LanceDB en disco local.")except Exception as e: print(f"Error en la base de datos: {e}") exit()# 4. BUCLE DE CONSULTAwhile True: query = input("Pregunta sobre el archivo (o escribe quit para salir): ") if query.lower() == "quit": break query_vec = ollama.embeddings(model=MODEL_EMBED, prompt=query)["embedding"] results = table.search(query_vec).limit(1).to_list() if results: best_chunk = results[0]["text"] print(f"Contexto encontrado: ...{best_chunk[:200]}...") prompt = fUse the context below to answer the question. Context: {best_chunk} Question: {query} response = ollama.generate(model=MODEL_GEN, prompt=prompt) print(f"Respuesta: {response["response"]}") else: print("No se encontro informacion relevante.")

Notas sobre el script. La canalización implementa cinco pasos: ingesta y fragmentación para evitar pasar documentos enteros al modelo; generación de embeddings por fragmento; almacenamiento en LanceDB junto con el texto original; consulta por similitud usando el embedding de la pregunta; y generación de la respuesta con contexto usando Llama 3. Ajusta el tamanio de chunk y el modelo de embeddings según tus necesidades.

Ejemplos prácticos. Este enfoque es ideal para resumir informes, preparar entrevistas o generar respuestas con respaldo documental. Por ejemplo, puedes pedir un resumen ejecutivo de un informe financiero, generar preguntas críticas para una junta o extraer cifras clave sin leer todo el documento. Integrado en flujos de trabajo empresariales, esto acelera decisiones y mejora la productividad de equipos que trabajan con documentos extensos.

Servicios y seguridad. En Q2BSTUDIO complementamos esta solución con servicios de ciberseguridad, pruebas de pentesting y hardening para que tu asistente de documentos private cumpla con las mejores practicas de privacidad y cumplimiento normativo. Consulta nuestras capacidades en ciberseguridad y pentesting para proteger tus datos sensibles y garantizar confidencialidad.

Optimización y escalado. Si quieres convertir esto en un producto para la empresa, podemos ayudarte a convertir el prototipo en una aplicación robusta y desplegable, con monitorizacion, pipelines ETL para documentos, integración con Power BI y servicios de inteligencia de negocio. Ofrecemos integraciones con servicios de inteligencia artificial y soluciones de inteligencia de negocio y power bi para explotar los datos extraidos.

Conclusión. Con Ollama y LanceDB puedes construir hoy mismo una app privada de Chat con PDF que respete la privacidad y funcione sin costes de API. En Q2BSTUDIO acompañamos desde la fase de concepto hasta la entrega, desarrollando software a medida, integrando IA para empresas y asegurando la plataforma. Si quieres que te ayudemos a implementar esto en tu empresa, contacta con nosotros y diseñamos la solución que mejor encaje con tus procesos y requisitos de seguridad.

Palabras clave: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi.

UNA PAUSA?

Juga una estona abans de marxar

ELS NOSTRES SERVEIS

Com et podem ajudar

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.