En un mundo de información cada vez más confuso, es cada vez más importante hacer que sus propias bases de datos sean consultables de forma específica, no mediante las clásicas búsquedas de texto completo, sino a través de respuestas semánticamente relevantes. Aquí es exactamente donde entra en juego el principio de la base de datos RAG, una solución de búsqueda asistida por inteligencia artificial que consta de dos componentes centrales:
- una base de datos vectorial (como Qdrant) en la que cualquier contenido se almacena como vectores numéricos,
- y un modelo lingüístico (por ejemplo, a través de Ollama) que combina de forma inteligente las respectivas solicitudes con el contenido adecuado.
En lugar de dejar que el modelo "adivine", esta arquitectura utiliza sus propias fuentes de conocimiento, por ejemplo:
- documentales escritos por ellos mismos,
- Contenido de los sitios web,
- manuales técnicos,
- Bases de datos de apoyo,
- Listas de preguntas frecuentes,
- o cualquier fuente de texto archivado (por ejemplo, de bases de datos antiguas).
El factor decisivo: Todas estas fuentes pueden prepararse de antemano y "trocearse" (es decir, descomponerse en pequeñas unidades de texto) para poder ofrecer posteriormente los extractos de texto más relevantes para una pregunta del usuario.
Así que, tanto si quiere hacer analizable su propia base de datos de conocimientos, su documentación interna o todo un archivo de productos, con Ollama + Qdrant puedes hacerlo en tu propio Mac, sin limitaciones de la nube y con pleno control sobre los datos.
¿Qué es una base de datos RAG y por qué la "fragmentación"?
RAG son las siglas de Retrieval-Augmented Generation, es decir, IA generadora de textos con recuperación de información asistida. En lugar de entrenar un modelo lingüístico como GPT, Mistral o LLaMA sólo con lo que ya "sabe", puede acceder a información adicional propia a través de una base de datos de conocimiento conectada (normalmente, la llamada base de datos vectorial).
Ejemplo:
Si le preguntas a un modelo lingüístico: "¿Qué contiene mi declaración de la renta de 2023?", tendrá que adivinarlo sin acceso a los datos originales. Sin embargo, si tiene acceso a una representación vectorial de este documento almacenada localmente, podrá recuperar la información pertinente e incorporarla a su respuesta.
Por qué se "trocean" los contenidos
Los documentos, sitios web o libros suelen ser demasiado largos para procesarlos o buscarlos de una sola vez. Los modelos lingüísticos modernos también tienen límites de tokens, es decir, una longitud limitada de texto que pueden entender de una sola vez (a menudo en torno a 4.000-8.000 tokens, con los modelos más recientes incluso 32.000 o más).
Por eso RAG utiliza el siguiente truco:
- El texto original está dividido en pequeñas secciones (chunks).
- Cada trozo se convierte en un vector mediante un modelo lingüístico (incrustación).
- Estos vectores se almacenan en una base de datos como Qdrant.
- Cuando el usuario realiza una solicitud, la petición también se traduce en un vector y se recuperan los trozos más similares.
- A continuación, este contenido se añade al modelo lingüístico, por ejemplo, a través de un aviso del sistema o una inyección contextual.
Así se crea un sistema que se comporta como una memoria, pero sin las clásicas palabras clave ni búsqueda de texto completo, sino puramente basado en el significado (semántico).
Requisitos y objetivo
Estamos creando un sistema local de GAR compuesto por:
- un LLM local a través de Ollama
- una base de datos vectorial llamada Qdrant
- un script en Python que trocea, vectoriza e inserta textos en la base de datos
- Opcional: una interfaz sencilla o API para realizar consultas
Plataforma de destino: macOS (Intel o Apple Silicon)
Se trata de un requisito previo:
- macOS 12 o posterior (Monterey o superior)
- Conocimientos básicos de terminales
- Python 3.10 o posterior
- Opcional: Homebrew installiert
Paso 1: Ollama 1TP12Animal
Ollama es una sencilla herramienta que le permite ejecutar modelos lingüísticos locales como Mistral, LLaMA, Gemma o Codellama en su propio ordenador, incluso sin Internet.
Instalación en el Mac:
curl -fsSL https://ollama.com/install.sh | sh
Alternativamente, también se puede asignar Ollama a través de Homebrew install:
brew install ollama
Después de la instalación:
ollama run mistral
Esto descarga el modelo Mistral 7B y lo inicia localmente. Ollama viene con una API REST, que utilizaremos más adelante para la vectorización. Por supuesto, también puedes utilizar otros modelos como Gemma3 (12B), Mistral Small (24B) u otros LLM.
Paso 2: Qdrant 1TP12 animales (base de datos local de vectores)
Qdrant es una rapidísima base de datos vectorial basada en Rust. Es gratuita, de código abierto y fácil de iniciar en el Mac - preferiblemente a través de Docker. Si aún no has instalado Docker en tu Mac 1TP12, puedes descargarlo de la página Sitio web de Docker de forma gratuita y ejecutarlo en tu Mac como una aplicación de escritorio normal installieren. También puedes instalar Docker a través de Homebrew install si ya utilizas Homebrew:
brew install --cask docker
A continuación, inicie Qdrant a través de Docker:
docker run -p 6333:6333 -v qdrant_storage:/qdrant/storage qdrant/qdrant
Puede ponerse en contacto con Qdrant en
http://localhost:6333
Para las pruebas:
curl http://localhost:6333/collections
Paso 3: Preparar el entorno Python
Necesitamos Python para el chunking, la incrustación y la comunicación con Qdrant.
Preparación:
python3 -m venv rag-env source rag-env/bin/activate pip install qdrant-client sentence-transformers ollama numpy
Si ollama no se reconoce como paquete de Python, utilice directamente la API REST mediante peticiones:
pip install requests
Paso 4: fragmentación e incrustación
A continuación encontrará un script de ejemplo que divide un documento de texto en trozos, crea incrustaciones mediante Ollama y las inserta en Qdrant:
import requests
from qdrant_client import QdrantClient
from qdrant_client.models import PointStruct
import uuid
# Konfiguration
CHUNK_SIZE = 500 # Zeichen
COLLECTION_NAME = "mein_rag_wissen"
# Text vorbereiten
with open("mein_text.txt", "r") as f:
text = f.read()
chunks = [text[i:i+CHUNK_SIZE] for i in range(0, len(text), CHUNK_SIZE)]
# Qdrant vorbereiten
client = QdrantClient("localhost", port=6333)
# Neue Collection anlegen (falls noch nicht vorhanden)
client.recreate_collection(
collection_name=COLLECTION_NAME,
vectors_config={"size": 4096, "distance": "Cosine"}
)
def get_embedding_ollama(text):
response = requests.post(
"http://localhost:11434/api/embeddings",
json={"model": "mistral", "prompt": text}
)
return response.json()["embedding"]
# Embeddings erzeugen und in Qdrant speichern
points = []
for i, chunk in enumerate(chunks):
vector = get_embedding_ollama(chunk)
points.append(PointStruct(
id=str(uuid.uuid4()),
vector=vector,
payload={"text": chunk}
))
client.upsert(collection_name=COLLECTION_NAME, points=points)
print(f"{len(points)} Chunks erfolgreich eingefügt.")
Paso 5: Consultas mediante búsqueda semántica
Ahora puede enviar consultas como un vector a Qdrant y hacer que encuentre las secciones de texto más relevantes:
query = "Wie funktioniert ein RAG-System?" query_vector = get_embedding_ollama(query) results = client.search( collection_name=COLLECTION_NAME, query_vector=query_vector, limit=3 ) for r in results: print(r.payload["text"])
A continuación, puede pasar estos trozos a Ollama a través de un prompt del sistema, por ejemplo, y hacer que se formulen como una respuesta relacionada con el contexto.
Chunking + exportación JSON a FileMaker y otras bases de datos
En muchos casos, la fragmentación ya puede realizarse en una solución de base de datos existente, por ejemplo, en FileMaker. Así es exactamente como funciona en mi propio entorno de trabajo: los datos de origen -como contenidos de sitios web, entradas de soporte o artículos técnicos- ya están disponibles de forma estructurada en FileMaker.
Así es como funciona el proceso:
- Los textos se dividen en secciones de, por ejemplo, 300-500 caracteres dentro de FileMaker utilizando su propia lógica de fragmentación.
- Cada trozo recibe su propio ID y, si procede, metadatos (título, categoría, fuente, idioma, etc.).
- Todos los chunks se exportan automáticamente como archivos JSON, por ejemplo, a un directorio específico de una unidad de red o directamente al disco duro del servidor de IA.
- Un script Python en el servidor lee estos archivos JSON y los guarda en la base de datos Qdrant.
Ejemplo de archivo chunk exportado (chunk_00017.json)
{
"id": "00017",
"text": "Dies ist ein einzelner Textabschnitt mit ca. 400 Zeichen, der aus einer größeren Quelle stammt. Er wurde in FileMaker vorbereitet und enthält alle relevanten Inhalte, die für eine semantische Suche benötigt werden.",
"metadata": {
"source": "support_center",
"category": "Fehlermeldung",
"language": "de",
"title": "Drucker wird nicht erkannt"
}
}
El script de importación posterior puede ejecutarse automática o regularmente a través del terminal, por ejemplo, mediante una tarea cron o una llamada manual:
python3 import_json_chunks.py /Users/markus/Desktop/chunks/
El script lee cada trozo JSON, genera el vector correspondiente (por ejemplo, mediante Ollama o SentenceTransformers) y transfiere la entrada a la base de datos Qdrant.
Este método no sólo es transparente, sino que también puede combinarse muy bien con las estructuras informáticas existentes, sobre todo en empresas que ya utilizan FileMaker o a las que, por razones de claridad de los procesos, les gusta tenerlo todo centralizado y controlado visualmente.
Conecta cualquier base de datos a tu IA local
Con Ollama y Qdrant, se puede configurar un sistema RAG completo y de alto rendimiento en el Mac en poco tiempo:
- Local, sin nube ni suscripción
- Ampliable, con su propio contenido
- Datos seguros, ya que nada sale del ordenador
- Eficaz, ya que Qdrant sigue siendo rápido incluso con grandes cantidades de datos.
Si quieres utilizar tu IA no sólo para chatear, sino como un verdadero sistema de conocimiento y memoria, esta combinación es imprescindible. Y funciona con poco esfuerzo: con pleno control sobre tus propios datos.
Encuesta actual sobre el uso de sistemas locales de IA
Perspectivas: Lo que es posible con RAG, Ollama y Qdrant
La configuración descrita en este artículo constituye la base técnica de una nueva forma de gestionar el conocimiento: local, controlada y flexiblemente ampliable. Pero el viaje no acaba aquí. Una vez comprendida la interacción entre chunking, incrustación, búsqueda semántica y modelos lingüísticos, nos daremos cuenta rápidamente de la versatilidad de esta arquitectura en la práctica.
1. conexión a bases de datos propias
Ya se trate de FileMaker, MySQL, PostgreSQL o MongoDB, cualquier contenido puede extraerse con regularidad, trocearse e insertarse automáticamente en la base de datos vectorial mediante consultas específicas. De este modo, una base de datos clásica se convierte en una fuente de conocimiento con capacidad de búsqueda semántica. Especialmente en sistemas de soporte, archivos de productos o bibliotecas digitales, esto abre opciones de acceso completamente nuevas para empleados o clientes.
2. importación automática de páginas web, archivos PDF o documentos
El contenido no tiene por qué transferirse manualmente. Con herramientas como BeautifulSoup, readability, pdfplumber o docx2txt, se pueden importar automáticamente sitios web completos, manuales en PDF o documentos de Word, convertirlos en texto y prepararlos para la fragmentación. Por ejemplo, las wikis técnicas, los portales de clientes o la documentación en línea pueden actualizarse periódicamente e introducirse en la base de datos RAG.
3. creación de conocimientos a largo plazo mediante la estructuración
A diferencia de una aplicación clásica de IA, que parte de cero con cada pregunta, una configuración RAG permite ampliar y curar paso a paso el conocimiento subyacente. La selección y preparación selectiva de trozos crea su propia memoria semántica, que se vuelve más valiosa con cada entrada.
4. conexión con grafos de conocimiento (Neo4j)
Si quieres ir un paso más allá, no sólo puedes almacenar la información semánticamente, sino también vincularla de forma lógica. Con Neo4j, una base de datos gráfica, las relaciones entre términos, personas, temas o categorías pueden visualizarse y consultarse específicamente. Esto convierte una colección de textos en un grafo de conocimiento estructurado que puede ser utilizado tanto por humanos como por la IA, por ejemplo, para visualizar cadenas causales, secuencias temporales o agrupaciones temáticas.
5. utilizar en sus propias herramientas, aplicaciones o chatbots
Una vez configurada, la lógica RAG puede integrarse en casi cualquier aplicación: como función de búsqueda semántica en una aplicación web interna, como ayuda de entrada inteligente en un sistema CRM o como chatbot con experiencia propia en el sitio web de la empresa. Mediante el uso de API locales (por ejemplo, Ollama REST y Qdrant gRPC), todos los componentes siguen siendo flexibles y ampliables, incluso más allá de los límites tradicionales de la empresa.
Quienes tengan el valor de familiarizarse con estas herramientas crearán la base de sistemas de IA locales e independientes con un valor útil real, en un espíritu de control, soberanía y claridad técnica.
Preguntas frecuentes sobre RAG con Ollama + Qdrant
1. ¿qué es una base de datos RAG y para qué sirve?
Una base de datos RAG (Retrieval Augmented Generation) combina una base de datos vectorial con un modelo lingüístico. Permite realizar búsquedas semánticas en contenidos propios (por ejemplo, documentación o sitios web) para que los modelos de IA puedan acceder específicamente a las secciones pertinentes de la propia base de datos.
2 ¿Qué significa "chunking" en este contexto?
El troceado consiste en dividir textos largos en secciones más pequeñas y coherentes (trozos), normalmente de entre 200 y 500 caracteres. De este modo, las secciones individuales del texto pueden guardarse de forma eficiente en la base de datos vectorial y recuperarse más tarde cuando surjan preguntas.
3. ¿por qué no se pueden guardar textos enteros en Qdrant?
Porque los modelos de IA y las búsquedas vectoriales trabajan con longitudes de texto limitadas. Los documentos extensos "ocultarían" contenidos importantes o los harían imprecisos. La fragmentación aumenta la precisión porque se comparan secciones específicas en lugar de textos completos.
4. ¿puedo utilizar contenidos de cualquier fuente?
Sí, siempre que tengas los textos en un formato editable (por ejemplo, como texto plano, HTML, Markdown, PDF, entradas FileMaker, etc.), puedes prepararlos, trocearlos e integrarlos en Qdrant. También es posible utilizar fuentes mixtas.
5. ¿hay que saber programar para construir un sistema de este tipo?
Conocimientos básicos de Terminal y Python son útiles, pero no esenciales. Muchos pasos (por ejemplo, la fragmentación en FileMaker, la exportación JSON) se pueden implementar de forma visual y automática. El script de importación Qdrant se puede personalizar fácilmente.
6. ¿puedo gestionar también varios documentos o categorías?
Sí, cada fragmento puede contener metadatos (por ejemplo, título, fuente, idioma o categoría). Estos pueden tenerse en cuenta durante la búsqueda para filtrar los resultados de forma más específica.
7 ¿Qué modelos son adecuados para la generación de incrustaciones?
Puede utilizar un modelo local a través de Ollama (por ejemplo, mistral, llama2, gemma) o un modelo de incrustación independiente, como all-MiniLM de sentence-transformers. Es importante que el modelo genere salidas de incrustación como vectores.
8. ¿cómo inicio Qdrant en el Mac?
La forma más sencilla es mediante el comando Docker:
docker run -p 6333:6333 -v qdrant_storage:/qdrant/storage qdrant/qdrant
Qdrant se ejecuta en http://localhost:6333
9. ¿qué volumen de datos puedo tener?
Qdrant tiene un gran rendimiento y puede gestionar fácilmente decenas o cientos de miles de chunks. La principal limitación es la RAM y el espacio de almacenamiento, no el número.
10. ¿funciona también con FileMaker?
Sí, puedes hacer todo el chunking y la exportación JSON directamente en FileMaker. Los chunks se exportan como archivos JSON individuales, que luego se importan a Qdrant a través de un script de Python - de forma completamente independiente del sistema original.
11. ¿puedo ejecutar esto también en otro servidor en lugar de Mac?
Por supuesto. La configuración también funciona en servidores Linux, Raspberry Pi o en la nube (si se desea). Docker lo hace independiente de la plataforma. Para un uso productivo, se suele recomendar un servidor con más RAM y soporte de GPU.
12. ¿cómo combino la búsqueda de vectores con Ollama?
Primero se crea un vector para una pregunta de usuario a través de Ollama (Embedding API), se utiliza para buscar los fragmentos más relevantes en Qdrant y se proporcionan al modelo lingüístico como contexto. A continuación, Ollama procesa la pregunta + la información relevante para el contexto y genera una respuesta fundamentada.
Foto (c) geralt @ pixabay





