Atención al cliente multilingüe con un LLM local: 6 idiomas sin cloud
Gestionas un servicio de atención al cliente que recibe tickets en francés, inglés, español, alemán, italiano y árabe. Enviar cada mensaje a una API en la nube supone exponer correos electrónicos, números de pedido y, a veces, datos personales a un tercero, además de pagar por token. Esta guía muestra cómo montar un chatbot de atención al cliente multilingüe 100 % local con Qwen 3.8 27B, detección automática del idioma, un tono adaptado a cada cultura e integración directa con Zendesk o Freshdesk mediante webhook.
#¿Por qué un LLM local para soporte multilingüe?
Las API en la nube (GPT-4o, Claude, Gemini) facturan por token y obligan a transferir los mensajes de los clientes fuera de la UE. Para un servicio de soporte B2C que procesa 5.000 tickets al día, la factura mensual supera rápidamente los 1.500 € y cumplir el RGPD se convierte en un ejercicio de acrobacia en cuanto un cliente envía un IBAN o un número de la seguridad social en el cuerpo del ticket.
Un LLM local resuelve los dos problemas a la vez. Qwen 3.8 27B (Alibaba, lanzado el 14 de agosto de 2026) es multilingüe de forma nativa en más de 100 idiomas, maneja las seis lenguas europeas del brief con una calidad que rivaliza con la de los modelos básicos en la nube y funciona en una sola RTX 4090 o un Mac M4 Max. Costo marginal por ticket: cero.
#Prerrequisitos
Desplegar una IA local en el trabajo: RGPD, AI Act, arquitectura multiusuario, costes, nota para la dirección.
- Espacio en línea de por vida
- PDF + archivos
- Actualizaciones de por vida
- GPU con un mínimo de 24 GB de VRAM
- RTX 3090, 4090, 5090, o Mac M3/M4 Max con 32 GB de memoria unificada. Qwen 3.8 27B en Q4_K_M ocupa aproximadamente 18 GB.
- Ollama instalado
- Versión reciente para el soporte nativo de Qwen 3.8 (visión y contexto largo)
- Una cuenta de Zendesk o Freshdesk
- Con los derechos de administrador para crear una integración webhook y un trigger.
- Un endpoint HTTPS accesible
- O bien un VPS que actúe como proxy inverso hacia tu Ollama, o bien ngrok / Cloudflare Tunnel para exponer el servidor local.
- Python 3.11+
- Para la capa de detección de idioma y el enrutador de webhooks. FastAPI + langdetect bastan.
#1. Instalar Qwen 3.8 27B con Ollama
El modelo está disponible directamente en la biblioteca Ollama. Inicia la descarga y un test rápido:
El pull descarga aproximadamente 18 GB. En una RTX 4090, la inferencia funciona a 40–60 tokens/segundo en Q4, suficiente para generar una respuesta de soporte en entre 3 y 5 segundos. Con el esfuerzo de razonamiento en «low», la latencia disminuye aún más.
Expón Ollama en la red para que tu webhook pueda acceder a él:
OLLAMA_KEEP_ALIVE=30m mantiene el modelo en VRAM durante 30 minutos después de la última solicitud, lo que evita un cold start en cada ticket durante las horas de baja actividad.
#2. Detección automática del idioma
Antes de enviar un mensaje a Qwen3, se identifica su idioma para elegir el prompt de sistema adecuado. La biblioteca fast-langdetect (basada en fastText de Meta) detecta 176 idiomas en menos de 5 ms por consulta, con una precisión superior al 99 % en mensajes de más de 50 caracteres.
#3. Prompts de sistema adaptados por idioma y tono
Un buen soporte multilingüe no traduce un prompt francés al inglés: adapta el registro. El francés profesional utiliza el tratamiento de usted, el inglés empresarial sigue siendo más directo, el alemán exige una cortesía formal marcada, el español latinoamericano admite más calidez, el italiano es más expresivo y el árabe requiere fórmulas de cortesía al principio y al final del mensaje.
#4. Integrar un webhook de Zendesk o Freshdesk
Zendesk y Freshdesk activan un webhook HTTP POST cada vez que se crea un nuevo ticket. Se expone un punto de acceso FastAPI que detecta el idioma, elige el prompt, llama a Ollama, y devuelve la respuesta a la API de soporte para que sea añadida como comentario interno (el agente humano la valida antes de enviarla).
La función post_internal_note envía el borrador como comentario privado a través de la API de Zendesk (PUT /api/v2/tickets/{id}.json) o Freshdesk (POST /api/v2/tickets/{id}/notes). El agente humano revisa, ajusta y hace clic en "Enviar". Ahorras aproximadamente un 60 % del tiempo de redacción sin dejar nunca que el bot responda solo.
- 01Exponer el endpointCloudflare Tunnel o ngrok apunta a http://localhost:8000. Anota la URL pública HTTPS.
- 02Crear el destino del webhookEn Zendesk Admin → Apps y integraciones → Webhooks, crea un destino con tu URL y el método POST.
- 03Conectar un desencadenadorEn Triggers, condición "Ticket Created", acción "Notify webhook" con un payload JSON que contiene {ticket: {id, description, requester}}.
- 04Probar con un ticket ficticioCrea un ticket en alemán. El endpoint debe recibir el evento, detectar "de" y publicar un borrador en alemán en las notas internas.
- 05Activar en producción progresivamenteEmpieza con una sola cola (por ejemplo, la cola en español). Mide la calidad durante una semana. Amplía cola por cola.
#5. Medir la calidad por idioma
Qwen 3.8 no tiene la misma calidad en las seis lenguas. El francés y el inglés son excelentes, el español e italiano muy buenos, el alemán correcto, el árabe variable según el dialecto (el estándar MSA funciona bien, los dialectos magrebíes menos). Hay que medir para controlar.
Tres indicadores que registrar por idioma, desde el primer día:
- Tasa de validación sin edición
- Porcentaje de borradores que el agente envía tal cual. Es el indicador más sencillo y claro. Meta: 40–60 % a los 3 meses.
- Tasa de edición (palabras cambiadas / palabras generadas)
- Mide con un diff entre la respuesta final y el borrador. Si en un idioma la tasa de edición supera el 30 %, hay que revisar el prompt.
- CSAT por idioma
- La encuesta de satisfacción realizada tras la resolución, cruzada con el idioma del ticket. Si el alemán baja a 3,5/5 mientras el francés se mantiene en 4,5, tienes un problema de tono.
#Errores comunes
- El bot responde en el idioma incorrecto
- Es casi siempre un mensaje mixto (firma en inglés debajo de un ticket en francés). Detecta el idioma a partir del primer párrafo, o fuerza el idioma del borrador con una instrucción explícita "Reply in {lang}" además del prompt de sistema.
- Latencia > 10 segundos
- Comprueba que OLLAMA_KEEP_ALIVE esté activo y que el modelo permanezca en VRAM. ollama ps debe mostrar 100 % GPU. Si no es así, reduce num_ctx a 4096 para los tickets cortos.
- Respuestas árabes mal formateadas (RTL)
- Qwen3 genera bien el árabe, pero algunas interfaces de soporte no muestran automáticamente el texto de derecha a izquierda (RTL). Añade dir="rtl" lang="ar" al bloque de respuesta en Zendesk/Freshdesk.
- Alucinación de promociones inexistentes
- Reduce la temperatura a 0.2 y especifica en el prompt «no menciones ninguna promoción ni código de descuento salvo que aparezca en el ticket». Al LLM le gusta ofrecer regalos que no existen.
- Webhook que se vuelve a ejecutar varias veces
- Zendesk puede reintentar en caso de timeout. Almacena ticket_id en Redis con un TTL de 10 minutos para garantizar la idempotencia; de lo contrario, generarás 3 borradores para el mismo ticket.
#Para ir más allá
Una vez que la base sea estable, dos extensiones aumentan considerablemente la tasa de validación: conectar un RAG local a tu base de conocimientos (preguntas frecuentes, política de devoluciones, condiciones de garantía) para fundamentar las respuestas en hechos, y añadir una capa de fine-tuning con LoRA usando unos pocos miles de tickets resueltos para ajustar el tono de la empresa. Para la puesta en producción en varios puestos de trabajo, el despliegue en una intranet detrás de Nginx cubre los aspectos de red y autenticación.
¿Un comentario, un error, una precisión? Avísanos, eso mejora la guía para todos.