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.