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.
Comunicados de Prensa
Muse Wonder la nueva familia de modelos de IA de Meta orientada a agentes
Meta presentó la serie Muse Wonder con Muse Wonder y Muse Wonder Full, sus modelos más capaces para tareas agénticas personales y profesionales. La serie introduce Active Memory y Active Focus, ya está disponible en la Meta Model API y en Muse Code, y marca un paso mayor hacia la superinteligencia personal.
Desarrolladores
DeepSeek V4.1 Flash corre en una sola RTX 3090 gracias a este proyecto
El proyecto open source dsv41-flash-offload logra servir DeepSeek V4.1 Flash, un modelo de unos 200GB en expertos, desde una única RTX 3090 de 24GB apoyada en RAM DDR4 y NVMe, con API compatible con OpenAI y contexto de 262,144 tokens.
Android
Rool tu máquina de IA privada en la nube
Regresar a un proyecto abandonado hace dos meses y encontrar todo todavía ahí: los archivos, las conversaciones, las decisiones, el contexto. Esa es la promesa de Rool, una computadora Linux privada en la nube alojada en la Unión Europea que guarda archivos, ejecuta software, conserva la memoria entre tareas e incluye modelos de IA autohospedados. Empieza gratis, sin tarjeta.
-
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 Cultura14 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á
