Intermedio 18 minRAG

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 Mohamed Meguedmi·Actualización 2026-08-27·Probado en Windows, macOS y Linux

#¿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.
i
Arquitectura en dos bloques
PrivateGPT v2 = pipeline RAG (fragmentación, embeddings, almacén vectorial, recuperación, ensamblaje de prompt) + UI Gradio. Ollama = motor de inferencia LLM. Ambos se comunican mediante HTTP local en el puerto 11434.

#Prerrequisitos

El kit RAG Local

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).
→
¿Sin Ollama instalado?
Sigue primero nuestra guía de instalación de Ollama para tu sistema operativo y luego vuelve aquí. PrivateGPT v2 da por hecho que el comando "ollama run" ya funciona.

#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.

Clonar el repositorio
git clone https://github.com/zylon-ai/private-gpt.git
cd private-gpt
Instalar Poetry (si no está instalado)
curl -sSL https://install.python-poetry.org | python3 -
# Ajoutez ~/.local/bin au PATH si ce n'est pas déjà fait
Instalar PrivateGPT con los extras de Ollama
poetry install --extras "ui llms-ollama embeddings-ollama vector-stores-qdrant"

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).

!
Python 3.12 y 3.13: precaución
En el momento de escribir estas líneas, aún no se han publicado para 3.12+ todas las compilaciones de algunas dependencias nativas (especialmente llama-index y los componentes tokenizers). Si Poetry te devuelve errores de compilación, crea un entorno virtual dedicado con Python 3.11: "pyenv install 3.11.9 && pyenv local 3.11.9".

#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.

Preparar los modelos en Ollama
# LLM de génération
ollama pull qwen3.5:9b

# Modèle d'embeddings (137M, ~280 Mo)
ollama pull nomic-embed-text

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:

settings/settings-ollama.yaml
llm:
  mode: ollama
  max_new_tokens: 512
  context_window: 8192

embedding:
  mode: ollama

ollama:
  llm_model: qwen3.5:9b
  embedding_model: nomic-embed-text
  api_base: http://localhost:11434
  embedding_api_base: http://localhost:11434
  request_timeout: 120.0

vectorstore:
  database: qdrant

qdrant:
  path: local_data/private_gpt/qdrant
→
Ventana de contexto
context_window: 8192 es un equilibrio razonable para comenzar con Qwen 3.5 9B (que puede llegar hasta 256k). En una GPU con más VRAM, pasa a 16384 o 32768 para procesar documentos más largos sin una segmentación agresiva. Cuidado: la VRAM utilizada por la caché KV aumenta rápidamente.

#3. Iniciar el servidor y la interfaz

  1. 01
    Verificar que Ollama esté en ejecución
    Escribe "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.
  2. 02
    Activar el perfil ollama
    En 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.
  3. 03
    Iniciar el servidor
    Desde 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.
  4. 04
    Abrir la UI
    Abre http://localhost:8001 en tu navegador. Accederás a una interfaz de chat con un panel lateral para subir documentos.
Comando de inicio
PGPT_PROFILES=ollama make run

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.

PDF
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.
!
Tiempo de indexación que debes tener en cuenta
La ingestión llama a Ollama para calcular los embeddings, documento por documento. Si usas solo la CPU, calcula unos 5 segundos por página de PDF. Con GPU, es casi instantáneo. Para ingerir 500 PDF, reserva tiempo de sobra y ejecuta la ingestión por lotes a través de la API en lugar de arrastrar y soltar.
Ingestión en lote a través del script CLI
# Depuis la racine du repo private-gpt
python scripts/ingest_folder.py /chemin/vers/mes/documents \
  --watch  # surveille en continu les nouveaux fichiers

#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.
i
Verificar siempre las fuentes
La interfaz de Gradio de PrivateGPT v2 muestra los fragmentos recuperados debajo de la respuesta. Para un uso jurídico serio, trata las respuestas como pistas y verifica sistemáticamente el pasaje original: un RAG es una búsqueda asistida, no un dictamen jurídico automático.

#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.
¿Esta guía te ha ayudado?

¿Un comentario, un error, una precisión? Avísanos, eso mejora la guía para todos.