Desarrolladores
Cómo implementar Mixture of Experts con Ollama para especialización por dominio
Los modelos de lenguaje con arquitectura Mixture of Experts (MoE) permiten combinar la capacidad de modelos masivos con la eficiencia de modelos más pequeños, activando solo los “expertos” necesarios para cada tarea. Plataformas como Z.AI utilizan esta técnica para ofrecer respuestas especializadas sin sobrecargar los recursos. Con Ollama, es posible replicar este enfoque de manera local, ya sea utilizando modelos que ya incorporan MoE en su diseño o creando un sistema de enrutamiento personalizado en Python.
Este artículo explora dos enfoques prácticos: el uso de modelos MoE nativos en Ollama y la implementación de un router de expertos por dominio. Ambos métodos permiten aprovechar la especialización sin depender de servicios en la nube, ideal para desarrolladores y entusiastas de la inteligencia artificial local.
Diferencias entre MoE interno y MoE orquestado
Antes de elegir una implementación, es importante entender las diferencias entre ambos enfoques:
MoE interno se refiere a modelos que ya incluyen una arquitectura de enrutamiento dentro de su diseño. En estos modelos, una red interna decide qué subredes (expertos) se activan para cada token, lo que permite manejar un gran número de parámetros totales (por ejemplo, 744 mil millones) activando solo una fracción (como 40 mil millones) por inferencia. Esto optimiza el uso de recursos sin sacrificar calidad.
MoE orquestado, por otro lado, es un patrón de arquitectura a nivel de aplicación. Un modelo ligero actúa como router, redirigiendo cada consulta al modelo especializado más adecuado dentro de un conjunto de modelos de lenguaje. Este enfoque ofrece mayor flexibilidad para definir expertos por dominio, pero requiere más recursos de memoria al cargar múltiples modelos.
Uso de modelos MoE nativos en Ollama
La forma más sencilla de implementar MoE es utilizando modelos que ya incorporan esta arquitectura. Ollama soporta varios modelos MoE nativos, que pueden descargarse y ejecutarse directamente sin configuración adicional. El enrutamiento interno se encarga de activar los expertos necesarios para cada consulta.
Modelos MoE disponibles para Ollama
Estos son algunos de los modelos MoE compatibles con Ollama, junto con sus requisitos de hardware:
| Modelo | Parámetros activos | Parámetros totales | VRAM mínima (cuantización Q4) |
|---|---|---|---|
mixtral:8x7b |
~13 mil millones | ~47 mil millones | 26 GB |
mixtral:8x22b |
~39 mil millones | ~141 mil millones | 60 GB |
qwen3:30b-a3b |
3 mil millones | 30 mil millones | 6 GB |
glm4:9b |
~9 mil millones | ~9 mil millones | 8 GB |
deepseek-r1:7b |
7 mil millones | 7 mil millones | 8 GB |
Para equipos con recursos limitados, qwen3:30b-a3b es una excelente opción: activa solo 3 mil millones de parámetros por inferencia sobre un modelo de 30 mil millones, ofreciendo un buen equilibrio entre calidad y eficiencia con solo 6 GB de VRAM.
Para descargar y ejecutar un modelo MoE nativo en Ollama, usa los siguientes comandos:
# Descargar e iniciar un modelo MoE nativo
ollama pull qwen3:30b-a3b
ollama run qwen3:30b-a3b
# Alternativamente, para Mixtral
ollama pull mixtral:8x7b
ollama run mixtral:8x7b
Nota sobre hardware: Los modelos MoE cargan todos los expertos en memoria (RAM/VRAM), aunque solo activen algunos por token. Ollama gestiona esto con un sistema de caché LRU, lo que permite un intercambio eficiente en sistemas con suficiente RAM pero VRAM limitada.
Implementación de un router de expertos por dominio en Python
Si buscas un mayor control sobre la especialización por dominio, puedes implementar un router de nivel de aplicación. Este enfoque utiliza un modelo ligero para clasificar cada consulta y redirigirla al experto más adecuado dentro de un conjunto de modelos especializados.
A continuación, se muestra un ejemplo de implementación en Python que utiliza la API REST de Ollama para enrutar consultas a diferentes modelos según el dominio:
import requests
# Modelo ligero como enrutador
ROUTER_MODEL = "llama3.2:3b"
# Mapa de expertos por dominio
EXPERTS = {
"code": "qwen2.5-coder:7b",
"reasoning": "deepseek-r1:7b",
"general": "llama3.1:8b",
"multilingual": "aya:8b"
}
OLLAMA_URL = "http://localhost:11434/api/generate"
def route_query(query: str) -> str:
"""Clasifica la consulta y selecciona el experto adecuado."""
prompt = (
"Clasifica esta consulta en UNA categoría: "
"code, reasoning, general, multilingual.\n"
f"Consulta: {query}\n"
"Responde solo con la categoría, sin explicación:"
)
response = requests.post(OLLAMA_URL, json={
"model": ROUTER_MODEL,
"prompt": prompt,
"stream": False
})
category = response.json()["response"].strip().lower()
return EXPERTS.get(category, EXPERTS["general"])
def ask_expert(query: str) -> str:
"""Enruta la consulta al experto correcto y retorna la respuesta."""
expert_model = route_query(query)
print(f"[Router] → Experto seleccionado: {expert_model}")
response = requests.post(OLLAMA_URL, json={
"model": expert_model,
"prompt": query,
"stream": False
})
return response.json()["response"]
# Ejemplo de uso
if __name__ == "__main__":
consultas = [
"Escribe una función en Python para ordenar una lista de diccionarios por una clave específica.",
"Explica las diferencias filosóficas entre el utilitarismo y la ética deontológica.",
"Traduce este texto al portugués brasileño: 'The model is running locally'.",
]
for q in consultas:
print(f"\n[Consulta] {q}")
print(f"[Respuesta] {ask_expert(q)}\n{'─'*60}")
Este enfoque, conocido como MoE a nivel de aplicación o enrutamiento de modelos de lenguaje, permite definir claramente los dominios de especialización. A diferencia del MoE interno, aquí los “expertos” son modelos independientes completos, lo que brinda mayor flexibilidad pero requiere más memoria RAM del sistema, ya que cada modelo ocupa su propio espacio.
Integración con pipelines de agentes como OpenClaw
Si ya trabajas con un pipeline en herramientas como OpenClaw, puedes integrar el router como un nodo personalizado. Este nodo recibiría el prompt del usuario, ejecutaría la lógica de enrutamiento y devolvería la respuesta del experto seleccionado, todo mediante llamadas a la API local de Ollama en localhost:11434.
A continuación, se muestra un ejemplo de cómo crear un modelo personalizado en Ollama utilizando un archivo Modelfile para definir un experto técnico especializado:
# Ejemplo de Modelfile para crear un experto técnico personalizado
FROM qwen3:30b-a3b
SYSTEM """
Eres un asistente técnico especializado en:
- Arquitecturas de inteligencia artificial y modelos de lenguaje (MoE, RAG, agentes)
- Desarrollo en Python, Node.js y APIs REST
- Infraestructura en la nube y contenedores Docker
- Ciberseguridad y convergencia IT/OT
Responde siempre con precisión técnica. Si la consulta no es de tu dominio, indícalo claramente en lugar de especular.
"""
PARAMETER temperature 0.3
PARAMETER top_p 0.9
PARAMETER num_ctx 32768
Para crear y ejecutar este modelo personalizado, usa los siguientes comandos:
# Crear y ejecutar el modelo personalizado
ollama create mi-experto-tecnico -f Modelfile
ollama run mi-experto-tecnico
¿Cuál opción elegir?
La elección entre MoE nativo y MoE orquestado depende de tus recursos y necesidades específicas:
| Criterio | MoE nativo (Opción 1) | Router de expertos (Opción 2) |
|---|---|---|
| Facilidad de configuración | ⭐⭐⭐⭐⭐ Muy simple | ⭐⭐⭐ Requiere código |
| Especialización por dominio | Implícita (router interno) | Explícita y personalizable |
| Uso de VRAM | Un solo modelo | Múltiples modelos (RAM del sistema) |
| Control del enrutamiento | Ninguno (caja negra) | Total (lógica propia) |
| Latencia por consulta | Baja (1 llamada) | Moderada (2 llamadas: router + experto) |
| Similitud con Z.AI | Alta | Conceptual |
Para la mayoría de los usuarios con hardware de consumo (16–24 GB de VRAM), la mejor opción es comenzar con Qwen3:30b-a3b como modelo MoE nativo en Ollama. Este modelo ofrece un buen equilibrio entre calidad y eficiencia. El router de expertos en Python es más adecuado cuando se requiere una especialización clara por dominios, como separar consultas de programación de aquellas sobre razonamiento filosófico o traducción multilingüe.
Curiosidades
Suyu 0.0.4 introduce recompilación estática en la emulación de Nintendo Switch
Arte y Cultura
ChatGPT Imágenes 2.5: más detalles edición precisa y generación un 50% más rápida
OpenAI lanza ChatGPT Imágenes 2.5, su modelo de generación de imágenes con mayor fidelidad, edición precisa y un 50% menos de latencia, para revolucionar la creación visual en usuarios y desarrolladores.
Audio
Nemotron 3.5 ASR: el modelo de NVIDIA para transcribir 40 locales de idioma en tiempo real
NVIDIA ha lanzado Nemotron 3.5 ASR Streaming 0.6B, un modelo de reconocimiento automático de voz (ASR) con 600 millones de parámetros diseñado para transcripción multilingüe en streaming. Disponible en Hugging Face, este modelo admite 40 locales de idioma desde un solo checkpoint, integra puntuación y capitalización en la salida, y permite ajustar la latencia desde 80 milisegundos hasta 1.12 segundos, según la configuración elegida.
-
Apps11 años agoAMPcast, la herramienta de Pandora que permite a los artistas grabar mensajes de audio directamente a sus seguidores
-
Blogs5 años agoConoce los mejores sitios de Torrents para descargar todo tipo de contenidos
-
Android5 años agoAprende cómo usar Discord para ver películas con tus amigos
-
Arte y Cultura13 años agoColección de fondos de pantalla basados en Super Héroes
-
Almacenamiento2 años agoCómo usar TeraBox: La guía definitiva para aprovechar 1 TB de almacenamiento en la nube
-
Diseño13 años agocss3ps: plugin que convierte archivos PSD a CSS3
-
Apps9 años agoPicturethat, app que usa la Realidad Aumentada para visualizar cómo quedarían los cuadros antes de colgarlos
-
Eventos Especiales13 años agoEspecial Día de la Madres: fondos de pantalla especiales para Mamá
