Cómo Ejecutar Modelos Qwen3 Embedding y Reranker Localmente con Ollama

Mark Ponomarev

Mark Ponomarev

25 June 2025

Cómo Ejecutar Modelos Qwen3 Embedding y Reranker Localmente con Ollama

El mundo de los grandes modelos de lenguaje (LLM) se está expandiendo a un ritmo explosivo, pero durante mucho tiempo, acceder a capacidades de vanguardia significaba depender de APIs basadas en la nube. Esta dependencia a menudo conlleva preocupaciones sobre la privacidad, el costo y la personalización. Sin embargo, la situación está cambiando gracias a potentes modelos de código abierto y herramientas como Ollama que facilitan más que nunca su ejecución en tu máquina local.

Entre los desarrollos recientes más emocionantes se encuentra el lanzamiento de la familia de modelos Qwen3 por Alibaba Cloud. Estos modelos, particularmente las versiones especializadas de *embedding* y *reranker*, están estableciendo nuevos puntos de referencia en rendimiento. Cuando se combinan con Ollama, proporcionan un potente conjunto de herramientas para desarrolladores e investigadores que buscan construir aplicaciones de IA sofisticadas, como motores de búsqueda avanzados y sistemas de Generación Aumentada por Recuperación (RAG), todo desde la comodidad de su propio hardware.

Este artículo es tu guía completa y paso a paso para aprovechar este poder. Desmitificaremos qué son los modelos de *embedding* y *reranker*, explicaremos la configuración de Ollama y proporcionaremos código Python práctico para ejecutar los modelos de *embedding* y *reranker* de Qwen3 para un flujo de trabajo RAG completo de principio a fin.

💡
¿Quieres una excelente herramienta de prueba de API que genere hermosa documentación de API?

¿Quieres una plataforma integrada y todo en uno para que tu equipo de desarrolladores trabaje junto con la máxima productividad?

¡Apidog cumple con todas tus demandas y reemplaza a Postman a un precio mucho más asequible!
botón

El Dúo Poderoso: Comprendiendo los Modelos de Embedding y Reranker

Antes de sumergirnos en el "cómo", entendamos el "qué". En el contexto de un sistema RAG, los modelos de *embedding* y *reranker* desempeñan roles distintos pero complementarios.

1. El Bibliotecario: El Modelo de Embedding

Imagina una biblioteca masiva con millones de libros pero sin un sistema de catálogo. Encontrar información sería una pesadilla. Un modelo de *embedding* es como un bibliotecario hiperinteligente que lee cada documento y le asigna una ubicación específica en un vasto "espacio conceptual" multidimensional.

Técnicamente, un *embedding* de texto es un proceso que convierte un fragmento de texto (una palabra, una oración o un documento completo) en un vector denso de números. Este vector captura el significado semántico del texto. Los documentos con significados similares tendrán vectores que están "cerca" entre sí en este espacio.

Cuando tienes una consulta, el modelo de *embedding* convierte tu pregunta en un vector y luego busca en la biblioteca los vectores de documentos que están más cerca de él. Esta búsqueda inicial es increíblemente eficiente y recupera un amplio conjunto de documentos potencialmente relevantes.

2. El Consultor Experto: El Modelo Reranker

La recuperación inicial del modelo de *embedding* es rápida, pero no siempre es perfecta. Podría traer documentos que están temáticamente relacionados pero que no responden con precisión a la consulta del usuario. Aquí es donde entra el *reranker*.

Si el modelo de *embedding* es un bibliotecario generalista, el *reranker* es un experto en la materia. Toma los mejores resultados de la búsqueda inicial y realiza un análisis más matizado y computacionalmente intensivo. En lugar de comparar un vector de consulta con vectores de documentos de forma independiente, un modelo *reranker* (típicamente un codificador cruzado) mira la consulta y cada documento como un par.

Esta comparación directa permite al *reranker* calcular una puntuación de relevancia mucho más precisa. Luego reordena los documentos basándose en esta puntuación, empujando los resultados más relevantes a la parte superior. Este proceso de dos etapas —una recuperación inicial rápida seguida de un *reranking* preciso— es el secreto del rendimiento de vanguardia de RAG.

Conoce los Modelos Qwen3: Un Nuevo Estándar en IA de Código Abierto

La serie Qwen3 de Alibaba Cloud no es solo otro conjunto de modelos; representa un avance significativo en el PNL de código abierto. Esto es lo que hace que los modelos de *embedding* y *reranker* destaquen:

Configurando Tu Entorno de IA Local

Ahora, manos a la obra. El primer paso es configurar Ollama y descargar los modelos Qwen3.

Paso 1: Instalar Ollama

Ollama proporciona un comando de instalación simple de una sola línea para macOS y Linux. Abre tu terminal y ejecuta:

curl -fsSL https://ollama.com/install.sh | sh

Para Windows, descarga el instalador oficial desde el sitio web de Ollama.

Una vez instalado, puedes verificar que funciona ejecutando:

ollama --version

Paso 2: Descargar los Modelos Qwen3

Con Ollama en funcionamiento, puedes extraer modelos de la biblioteca de Ollama. Los modelos Qwen3 están alojados bajo el espacio de nombres dengcao. Descargaremos una versión recomendada de los modelos de *embedding* y *reranker*. La etiqueta :Q5_K_M significa un nivel de cuantificación específico que ofrece un gran equilibrio entre rendimiento y uso de recursos.

En tu terminal, ejecuta los siguientes comandos:

# Descargar el modelo de embedding de 8B parámetros
ollama pull dengcao/Qwen3-Embedding-8B:Q5_K_M

# Descargar el modelo reranker de 4B parámetros
ollama pull dengcao/Qwen3-Reranker-4B:Q5_K_M

Estas descargas pueden tardar algún tiempo, dependiendo de tu conexión a internet. Una vez completadas, puedes ver tus modelos disponibles localmente ejecutando ollama list.

Parte 1: Generando Embeddings con Qwen3

Con el modelo de *embedding* descargado, generemos algunos vectores. Usaremos la librería oficial de Python ollama. Si no la tienes instalada, ejecuta pip install ollama.

Aquí tienes un script simple de Python para generar un *embedding* para un fragmento de texto:

import ollama

# Define el nombre del modelo como fue descargado
EMBEDDING_MODEL = 'dengcao/Qwen3-Embedding-8B:Q5_K_M'

def get_embedding(text: str):
    """Generates an embedding for a given text."""
    try:
        response = ollama.embeddings(
            model=EMBEDDING_MODEL,
            prompt=text
        )
        return response['embedding']
    except Exception as e:
        print(f"An error occurred: {e}")
        return None

# --- Ejemplo de Uso ---
sentence = "Ollama makes it easy to run LLMs locally."
embedding = get_embedding(sentence)

if embedding:
    print(f"Embedding for: '{sentence}'")
    # Imprime las primeras dimensiones para brevedad
    print(f"First 5 dimensions: {embedding[:5]}")
    print(f"Total dimensions: {len(embedding)}")

Este script mostrará los primeros cinco valores del vector generado y su tamaño total (que es 4096 para el modelo de 8B). Este vector es la representación numérica de nuestra oración, lista para ser almacenada y comparada.

Parte 2: Refinando Resultados con el Reranker Qwen3

Usar el *reranker* es ligeramente diferente. En lugar de un *endpoint* rerank dedicado, usamos el *endpoint* estándar chat. Creamos un *prompt* específico que le pide al modelo que actúe como un *reranker*, tomando una consulta y un documento como entrada y produciendo una puntuación de relevancia.

Creemos una función Python para manejar esto. Le pediremos al modelo que devuelva un simple "Sí" o "No" para indicar la relevancia, lo que podemos convertir fácilmente en una puntuación.

import ollama

# Define el nombre del modelo como fue descargado
RERANKER_MODEL = 'dengcao/Qwen3-Reranker-4B:Q5_K_M'

def rerank_document(query: str, document: str) -> float:
    """
    Uses the Qwen3 Reranker to score the relevance of a document to a query.
    Returns a score of 1.0 for 'Yes' and 0.0 for 'No'.
    """
    prompt = f"""
    Eres un experto evaluador de relevancia. Tu tarea es evaluar si el
    siguiente documento es relevante para la consulta del usuario.
    Por favor, responde con un simple 'Sí' o 'No'.

    Consulta: {query}
    Documento: {document}
    """
    try:
        response = ollama.chat(
            model=RERANKER_MODEL,
            messages=[{'role': 'user', 'content': prompt}],
            options={'temperature': 0.0} # Para salida determinista
        )
        answer = response['message']['content'].strip().lower()
        if 'yes' in answer:
            return 1.0
        return 0.0
    except Exception as e:
        print(f"An error occurred during reranking: {e}")
        return 0.0

# --- Ejemplo de Uso ---
user_query = "How do I run models locally?"
doc1 = "Ollama is a tool for running large language models on your own computer."
doc2 = "The capital of France is Paris."

score1 = rerank_document(user_query, doc1)
score2 = rerank_document(user_query, doc2)

print(f"Relevancia del Doc 1: {'Relevante' if score1 > 0.5 else 'No Relevante'} (Puntuación: {score1})")
print(f"Relevancia del Doc 2: {'Relevante' if score2 > 0.5 else 'No Relevante'} (Puntuación: {score2})")

Esta función demuestra cómo interactuar con el *reranker*. Identifica correctamente que doc1 es altamente relevante para la consulta, mientras que doc2 no lo es.

Juntándolo Todo: Una Implementación Simple de RAG

Ahora, el evento principal. Construyamos un mini-pipeline RAG que utilice ambos modelos para responder a una consulta de una pequeña base de conocimientos. Para la búsqueda de similitud, usaremos numpy. Instálalo con pip install numpy.

import ollama
import numpy as np

# --- Definiciones de Modelo ---
EMBEDDING_MODEL = 'dengcao/Qwen3-Embedding-8B:Q5_K_M'
RERANKER_MODEL = 'dengcao/Qwen3-Reranker-4B:Q5_K_M'

# --- 1. Corpus y Generación de Embedding Offline ---
documents = [
    "The Qwen3 series of models was developed by Alibaba Cloud.",
    "Ollama provides a simple command-line interface for running LLMs.",
    "A reranker model refines search results by calculating a precise relevance score.",
    "To install Ollama on Linux, you can use a curl command.",
    "Embedding models convert text into numerical vectors for semantic search.",
]

# En una aplicación real, almacenarías estos embeddings en una base de datos vectorial
corpus_embeddings = []
print("Generando embeddings para el corpus de documentos...")
for doc in documents:
    response = ollama.embeddings(model=EMBEDDING_MODEL, prompt=doc)
    corpus_embeddings.append(response['embedding'])
print("Embeddings generados.")

def cosine_similarity(v1, v2):
    """Calcula la similitud del coseno entre dos vectores."""
    return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))

# --- 2. Recuperación Online y Reranking ---
user_query = "How do I install Ollama?"

# Incrustar la consulta del usuario
query_embedding = ollama.embeddings(model=EMBEDDING_MODEL, prompt=user_query)['embedding']

# Realizar recuperación inicial (búsqueda semántica)
retrieval_scores = [cosine_similarity(query_embedding, emb) for emb in corpus_embeddings]
top_k_indices = np.argsort(retrieval_scores)[::-1][:3] # Obtener los 3 mejores resultados

print("\n--- Resultados de Recuperación Inicial (antes del reranking) ---")
for i in top_k_indices:
    print(f"Puntuación: {retrieval_scores[i]:.4f} - Documento: {documents[i]}")

# --- 3. Rerankear los mejores resultados ---
retrieved_docs = [documents[i] for i in top_k_indices]

print("\n--- Rerankeando los mejores resultados ---")
reranked_scores = [rerank_document(user_query, doc) for doc in retrieved_docs]

# Combinar documentos con sus nuevas puntuaciones y ordenar
reranked_results = sorted(zip(retrieved_docs, reranked_scores), key=lambda x: x[1], reverse=True)

print("\n--- Resultados Finales (después del reranking) ---")
for doc, score in reranked_results:
    print(f"Puntuación de Relevancia: {score:.2f} - Documento: {doc}")

Cuando ejecutes este script, verás el poder del proceso de dos etapas. La recuperación inicial encuentra correctamente documentos relacionados con "Ollama" y "instalación". Sin embargo, el *reranker* identifica con precisión el documento sobre el uso de curl como el más relevante, empujándolo a la cima con una puntuación perfecta.

Conclusión

Ahora has configurado y utilizado con éxito uno de los tándems de IA de código abierto más potentes disponibles hoy en día, directamente en tu máquina local. Al combinar el amplio alcance del modelo de *embedding* Qwen3 con la aguda precisión del *reranker* Qwen3, puedes construir aplicaciones que comprenden y procesan el lenguaje con un nivel de matiz que antes era dominio exclusivo de grandes sistemas propietarios.

El viaje no termina aquí. Puedes experimentar con diferentes tamaños de modelo, probar varios niveles de cuantificación e integrar este pipeline en aplicaciones más complejas. La capacidad de ejecutar estas herramientas localmente abre un mundo de posibilidades, permitiéndote crear, innovar y explorar sin comprometer la privacidad o el rendimiento. Bienvenido a la nueva era de la IA local y de código abierto.

💡
¿Quieres una excelente herramienta de prueba de API que genere hermosa documentación de API?

¿Quieres una plataforma integrada y todo en uno para que tu equipo de desarrolladores trabaje junto con la máxima productividad?

¡Apidog cumple con todas tus demandas y reemplaza a Postman a un precio mucho más asequible!
botón

Practica el diseño de API en Apidog

Descubre una forma más fácil de construir y usar APIs