PrivateGPT v2: chatbot de documentos 100% privado
PrivateGPT v2 es un chatbot de documentos 100% privado para conversar con tus archivos PDF, Word y Markdown sin que un solo octeto salga de la máquina. La v2 ha abandonado su motor LLM integrado para apoyarse en Ollama: se mantiene la calidad de un RAG bien hecho, se aprovechan todos los modelos disponibles a través de Ollama y se simplifica radicalmente la pila tecnológica. Esta guía cubre la instalación, la conexión a Ollama y tres casos de uso profesionales concretos (recursos humanos, jurídico y contable).
#¿Por qué PrivateGPT v2 para un chatbot de documentos locales?
La necesidad es clásica: poder hacer preguntas en lenguaje natural a un corpus de documentos internos (contratos, nóminas, facturas, actas) sin enviar esos datos a OpenAI, Anthropic o Google. Exactamente eso busca PrivateGPT desde la primera versión lanzada en 2023.
La v2 del proyecto tomó una decisión clara: ya no hay motor LLM integrado ni gestión interna de la cuantización. En su lugar, PrivateGPT v2 delega la generación a un backend externo: Ollama en la mayoría de los casos. Esto hace que el proyecto sea mucho más mantenible y permite acceder a toda la biblioteca de modelos de Ollama (Qwen, Gemma, Granite, Mistral, etc.) sin configuración específica.
- 100% local
- Todo se ejecuta en tu máquina. Sin telemetría ni llamadas salientes una vez descargados los modelos.
- UI Gradio incluida
- Se abre una interfaz web en localhost, lista para charlar con tus documentos —no necesitas armar un front propio.
- API compatible con OpenAI
- El servidor PrivateGPT también expone endpoints REST similares al formato de OpenAI, útiles si quieres integrarlo en una aplicación que hayas desarrollado tú.
- Formatos admitidos
- PDF, DOCX, PPTX, MD, TXT, HTML, EPUB, CSV y varios otros a través de los cargadores subyacentes de LlamaIndex.
#Prerrequisitos
Tus documentos, tu IA: un RAG local fiable sobre tus PDF, notas y correos — sin enviar nada a la nube.
- Espacio en línea de por vida
- PDF + archivos
- Actualizaciones de por vida
- Python 3.11
- PrivateGPT v2 solo soporta oficialmente Python 3.11. Con 3.12+, algunas dependencias aún fallan.
- Poetry
- El proyecto utiliza Poetry para gestionar sus dependencias con extras (ui, llms-ollama, embeddings-ollama, vector-stores-qdrant).
- Ollama instalado y activo
- Daemon de Ollama accesible en http://localhost:11434. Si no lo tienes, instálalo primero: el instalador tarda 3 minutos.
- 8 GB de RAM como mínimo
- 16 GB permiten trabajar con comodidad. Si cargas un modelo 8B–9B Q4 en la VRAM mediante Ollama, calcula entre 5 y 7 GB adicionales en la GPU.
- GPU recomendado (opcional)
- Una RTX 3060 de 12 GB o una tarjeta superior permite usar modelos de 8B–14B con un tiempo de respuesta adecuado. Sin GPU, quédate con modelos de 3B (Granite 4.2 3B o Qwen 3.5 2B).
#1. Instalar PrivateGPT v2
El proyecto se encuentra en GitHub, en zylon-ai/private-gpt. Se clona, se instala Poetry si aún no está instalado y luego se instalan las dependencias con los extras que corresponden al backend elegido.
Este comando instala cuatro grupos de extras: la interfaz Gradio, el cliente LLM Ollama, el cliente de embeddings Ollama y Qdrant como base de datos vectorial local integrada. La instalación tarda entre 5 y 15 minutos según tu conexión: hay muchas dependencias científicas (numpy, scipy, transformers).
#2. Configurar Ollama como backend para el LLM y los embeddings
PrivateGPT v2 utiliza un sistema de perfiles YAML en settings/. Se activa el perfil ollama a través de la variable de entorno PGPT_PROFILES.
En primer lugar, descargamos los dos modelos que necesitaremos: un modelo de generación y un modelo de embeddings. Para el francés, Qwen 3.5 9B es una buena opción por defecto en 2026 como LLM (6,6 GB, 256k de contexto, licencia Apache 2.0), y nomic-embed-text sigue siendo una excelente opción ligera de embeddings multilingües.
Después se comprueba el archivo settings/settings-ollama.yaml proporcionado en el repositorio. Debe apuntar a los nombres correctos de los modelos y a la URL correcta de Ollama:
#3. Iniciar el servidor y la interfaz
- 01Verificar que Ollama esté en ejecuciónEscribe "ollama list" en un terminal. Si el comando responde con la lista de modelos, el daemon está activo. De lo contrario, ejecuta "ollama serve" en un terminal separado.
- 02Activar el perfil ollamaEn el terminal donde vayas a lanzar PrivateGPT, exporta la variable PGPT_PROFILES=ollama. Esto indica al proyecto que cargue settings-ollama.yaml sobre settings.yaml.
- 03Iniciar el servidorDesde la raíz del repositorio, ejecuta "PGPT_PROFILES=ollama make run". El servidor arranca en el puerto 8001 y Gradio abre la interfaz en la misma dirección.
- 04Abrir la UIAbre http://localhost:8001 en tu navegador. Accederás a una interfaz de chat con un panel lateral para subir documentos.
En el primer inicio, verás en los registros que PrivateGPT contacta con Ollama para verificar que los modelos declarados estén disponibles. Si falta un modelo, el servidor se detiene con un mensaje explícito: descarga el modelo que falta con ollama pull y luego vuelve a iniciar el servidor.
#4. Indexar tus documentos
La interfaz de Gradio ofrece una pestaña "Ingest" donde puedes arrastrar y soltar tus archivos. En segundo plano, PrivateGPT divide cada documento en fragmentos (por defecto, ~1024 tokens con un solapamiento de 200), calcula los embeddings mediante Ollama y lo almacena todo en Qdrant.
- Texto extraído mediante pypdf. A los PDF escaneados (solo imágenes) no se les aplica OCR: utiliza una herramienta como ocrmypdf antes de la ingesta.
- DOCX / PPTX
- Los cargadores de LlamaIndex admiten estos formatos de forma nativa. Las tablas y las listas se conservan en texto plano.
- Markdown / TXT / HTML
- Indexación inmediata, es el formato que funciona mejor para el RAG en la práctica.
- CSV
- Cada línea se convierte en un chunk. Útil para bases de FAQ o extractos empresariales.
#Casos de uso profesionales concretos
#RR. HH.: consultar las nóminas y los convenios colectivos
Caso típico: un departamento de recursos humanos con 200 nóminas mensuales archivadas en PDF, más el convenio colectivo del sector (a menudo de más de 100 páginas). PrivateGPT v2 permite a un empleado de recursos humanos hacer preguntas como «¿Cuál es el coeficiente de la señora Dupont en 2025?» o «¿Qué dice el convenio colectivo sobre los días de permiso por enfermedad de un hijo?».
- Modelo recomendado
- Qwen 3.5 9B Q4 basta para la extracción de datos factuales. Para la interpretación jurídica de la convención, sube a Mistral Small 24B (bueno en francés, 14 GB) o Qwen 3.8 27B (18 GB, 262k de contexto) si la VRAM lo permite.
- Fragmentación
- Para las nóminas (1 página), un chunk = un documento. Para el convenio, la división por secciones (títulos H2/H3) funciona mejor que la división por tokens.
- Confidencialidad
- Es precisamente en este caso donde PrivateGPT v2 marca la diferencia: las nóminas nunca deberían pasar por un servicio en la nube, incluso en modo "empresa".
#Jurídico: analizar un conjunto de contratos
Caso típico: un servicio jurídico con unos cientos de contratos de clientes/proveedores en PDF, a veces escaneados. Las preguntas habituales: "¿Qué contratos expiran en los próximos 6 meses?", "¿Qué cláusula de rescisión se aplica al contrato ACME?", "¿Cuáles contienen una cláusula de exclusividad?".
- Preprocesado
- Ejecuta ocrmypdf sobre los documentos escaneados antes de la ingesta. Sin OCR, estos PDF son invisibles para la recuperación de información.
- Modelo recomendado
- Mistral Small 24B o Qwen 3.8 27B para un razonamiento jurídico de calidad en francés. Qwen 3.5 9B basta si solo necesitas hacer búsquedas.
- Prompt de sistema
- Define un prompt de sistema que obligue a citar el nombre del contrato y el número de cláusula en cada respuesta; de lo contrario, el modelo tiende a sintetizar sin citar fuentes.
#Contable: consultar una carpeta de facturas y extractos
Caso típico: un despacho contable que quiere consultar un corpus de facturas de proveedores y estados bancarios de un cliente (PDF + CSV). Preguntas previstas: "¿Cuál es el total de las facturas de Free Mobile en 2025?", "¿Hay alguna factura pendiente de pago del proveedor X?".
- Límite que debes conocer
- El RAG no agrega datos de forma natural: recupera los pasajes pertinentes, pero no calcula las sumas con total precisión cuando el volumen es grande. Para un análisis riguroso, exporta el CSV de las facturas a una herramienta específica y utiliza PrivateGPT para el contexto cualitativo.
- Formato recomendado
- Los CSV de contabilidad se indexan línea por línea — es bueno para búsquedas individuales, malo para cálculos. Añade un PDF de resumen mensual si quieres que el LLM tenga una visión general.
- Modelo
- Qwen 3.5 9B (incluso en Q8, 11 GB) es muy sólido en el manejo de cifras y la lectura de tablas en comparación con un modelo pequeño de 3B. Si tienes una RTX 4070 de 12 GB o más, es la opción por defecto aquí.
#Solución de problemas habituales
- "Connection refused" al arrancar
- El daemon Ollama no está en ejecución. Comprueba con "curl http://localhost:11434" — debes ver "Ollama is running".
- Respuestas muy lentas
- O bien Ollama se ejecuta en la CPU (compruébalo con "ollama ps" — columna PROCESSOR), o bien el valor de context_window es demasiado alto. Redúcelo a 4096 para probar.
- "Model not found"
- El nombre del modelo en settings-ollama.yaml debe coincidir exactamente con un modelo listado por "ollama list". Cuidado con los tags de cuantización: qwen3.5:9b ≠ qwen3.5:9b-q8_0.
- Embeddings diferentes entre ingestión y consulta
- Si cambias de modelo de embeddings después de una ingestión, debes volver a indexar. Elimina local_data/private_gpt/qdrant/ y vuelve a ejecutar la ingestión.
- Interfaz de Gradio inaccesible
- Si estás en una máquina remota, ejecuta con "PGPT_PROFILES=ollama python -m private_gpt" y reconfigura el host en settings.yaml (server.host: 0.0.0.0).
#Para ir más allá
PrivateGPT v2 es un excelente punto de entrada para RAG documental local, pero solo es un módulo. Algunas pistas para ir más lejos:
- RAG sin programar con Open WebUI o AnythingLLM
- Si PrivateGPT te parece pesado de instalar (Poetry, Python 3.11), Open WebUI ofrece una experiencia RAG similar, más sencilla de desplegar en Docker.
- Embeddings eficaces en francés
- nomic-embed-text funciona, pero modelos especializados en francés como Solon o BGE-M3 dan mejores resultados en contenido jurídico o administrativo francés.
- Estrategias de chunking avanzadas
- El chunking por sección (encabezados Markdown, estructura DOCX) supera ampliamente el chunking por bloques de un número fijo de tokens en corpus estructurados: una mejora de la pertinencia fácil de obtener.
¿Un comentario, un error, una precisión? Avísanos, eso mejora la guía para todos.