Saltar al contenido principal

Conceptos y Arquitectura de LLMaaS

Visión general

El servicio LLMaaS (Large Language Models as a Service) de Cloud Temple ofrece acceso seguro y soberano a los modelos de inteligencia artificial más avanzados, con la certificación SecNumCloud de la ANSSI.

🏗️ Arquitectura Técnica

Infraestructura Cloud Temple

Arquitectura Técnica LLMaaS Cloud Temple

Componentes Principales

1. API Gateway LLMaaS

  • Compatible con OpenAI : Integración transparente con el ecosistema existente
  • Límite de tasas : Gestión de cuotas por nivel de facturación
  • Equilibrio de carga : Distribución inteligente sobre 12 máquinas GPU
  • Monitoreo : Métricas en tiempo real y alertas

2. Authentication Service

  • Secure API Tokens: Automatic rotation
  • Access Control: Granular permissions per model
  • Audit Trails: Full access traceability

🤖 Modelos y tokens

Catálogo de Modelos

Catálogo completo: Lista de modelos

Gestión de Tokens

Tipos de tokens

  • Tokens de entrada: Su prompt y contexto
  • Tokens de salida: Respuesta generada por el modelo
  • Tokens del sistema: Metadatos e instrucciones

Cálculo de Costos

Coste total = (Tokens entrada × 1,9€/M) + (Tokens salida × 8€/M) + (Tokens salida Razonamiento × 8€/M)

Optimización

  • Ventana de contexto: Reutilice las conversaciones para ahorrar
  • Modelos adecuados: Elija el tamaño según la complejidad
  • Tokens máximos: Limite la longitud de las respuestas

Tokenización

# Ejemplo de estimación de tokens
def estimate_tokens(text: str) -> int:
"""Estimación aproximada: 1 token ≈ 4 caracteres"""
return len(text) // 4

prompt = "Expliquez la photosynthèse"
response_max = 200 # tokens máximos deseados

estimated_input = estimate_tokens(prompt) # ~6 tokens
total_cost = (estimated_input * 1.9 + response_max * 8) / 1_000_000
print(f"Coste estimado: {total_cost:.6f}€")

🔒 Security and Compliance

SecNumCloud Certification

The LLMaaS service is hosted on a technical infrastructure that holds the SecNumCloud 3.2 certification from ANSSI, ensuring:

Protección de Datos

  • Cifrado extremo a extremo: TLS 1.3 para todos los intercambios
  • Almacenamiento seguro: Datos cifrados en reposo (AES-256)
  • Aislamiento: Entornos dedicados por inquilino

Soberanía Digital

  • Almacenamiento en Francia: Centros de datos Cloud Temple certificados
  • Derecho francés: Cumplimiento nativo del RGPD
  • Sin exposición: Sin transferencias a nubes extranjeras

Auditoría y trazabilidad

  • Registros completos : Todas las interacciones registradas
  • Retención : Conservación según políticas legales
  • Cumplimiento : Informes de auditoría disponibles

Security Controls

Security Controls LLMaaS

Seguridad de los Prompts

El análisis de prompts es una función de seguridad integrada y nativa en la plataforma LLMaaS. Habilitada por defecto, su objetivo es detectar y prevenir intentos de "jailbreak" o inyección de prompts maliciosos antes de que lleguen al modelo. Esta protección se basa en un enfoque multicapa.

Contactar al soporte para desactivar

Es posible desactivar este análisis de seguridad para casos de uso muy específicos, aunque no se recomienda. Para cualquier consulta sobre este tema o para solicitar una desactivación, póngase en contacto con el soporte de Cloud Temple.

1. Análisis estructural (check_structure)

  • JSON malformado : El sistema detecte si el prompt comienza con un { y trata de analizarlo como JSON. Si el análisis tiene éxito y el JSON contiene palabras clave sospechosas (por ejemplo, "system", "bypass"), o si el análisis falla de manera inesperada, esto puede indicar una tentativa de inyección.
  • Normalización Unicode : El prompt se normaliza utilizando unicodedata.normalize('NFKC', prompt). Si el prompt original difiere de su versión normalizada, esto puede indicar el uso de caracteres Unicode engañosos (homógrafos) para evadir los filtros. Por ejemplo, "аdmin" (cirílico) en lugar de "admin" (latino).

2. Detection of Suspicious Patterns (check_patterns)

  • The system uses regular expressions (regex) to identify known attack patterns in prompts, across multiple languages (French, English, Chinese, Japanese).
  • Examples of detected patterns:
    • System Commands: Keywords such as "ignore the instructions", "ignore instructions", "忽略指令", "指示を無視".
    • HTML Injection: Hidden or malicious HTML tags, for example <div hidden>, <hidden div>.
    • Markdown Injection: Malicious Markdown links, for example [text](javascript:...), [text](data:...).
    • Repeated Sequences: Excessive repetition of words or phrases, such as "forget forget forget", "oublie oublie oublie".
    • Special/Mixed Characters: Use of unusual Unicode characters or mixing of scripts to obscure commands (e.g., "s\u0443stème").

3. Behavioral Analysis (check_behavior)

  • The load balancer maintains a history of recent prompts.
  • Fragmentation Detection: It combines recent prompts to check if an attack is fragmented across multiple requests. For example, if "ignore" is sent in one prompt and "instructions" in the next, the system can detect them together.
  • Repetition Detection: It identifies if the same prompt is repeated excessively. The current threshold for repetition detection is 30 consecutive identical prompts.

This multi-layered approach enables the detection of a wide range of prompt attacks, from the simplest to the most sophisticated, by combining static content analysis with dynamic behavioral analysis.

📈 Rendimiento y escalabilidad

Monitoreo en tiempo real

Acceso a través de Console Cloud Temple:

  • Métricas de uso por modelo
  • Gráficos de latence y tasa de transferencia
  • Alertas sobre umbrales de rendimiento
  • Historial de solicitudes

🌐 Integration and Ecosystem

Compatibilidad con OpenAI

El servicio LLMaaS es compatible con la API de OpenAI:

# Migración transparente
from openai import OpenAI

# Antes (OpenAI)
client_openai = OpenAI(api_key="sk-...")

# After (Cloud Temple LLMaaS)
client_ct = OpenAI(
api_key="su-token-cloud-temple",
base_url="https://api.ai.cloud-temple.com/v1"
)

# ¡Código idéntico!
response = client_ct.chat.completions.create(
model="granite3.3:8b", # Modelo Cloud Temple
messages=[{"role": "user", "content": "Hola"}]
)

Ecosistema compatible

Frameworks de IA

  • LangChain : Integración nativa
  • Haystack : Pipeline de documentos
  • Semantic Kernel : Orquestación de Microsoft
  • AutoGen : Agentes conversacionales

Herramientas de Desarrollo

  • Jupyter : Cuadernos interactivos
  • Streamlit : Aplicaciones web rápidas
  • Gradio : Interfaces de usuario para IA
  • FastAPI : APIs backend

Plataformas No-Code

  • Zapier : Automatizaciones
  • Make : Integraciones visuales
  • Bubble : Aplicaciones web

🔄 Ciclo de Vida de los Modelos

Actualización de modelos

Ciclo de vida de los modelos LLMaaS

Política de versionado

  • Modelos estables: Versiones fijas disponibles durante 6 meses
  • Modelos experimentales: Versiones beta para usuarios tempranos
  • Depreciación: Aviso previo de 3 meses antes de su retirada
  • Migración: Servicios profesionales disponibles para garantizar sus transiciones

Planificación Proyectada del Ciclo de Vida

La tabla siguiente presenta el ciclo de vida proyectado de nuestros modelos. El ecosistema de la IA generativa evoluciona muy rápidamente, lo que explica ciclos de vida que pueden parecer cortos. Nuestra intención es ofrecerle acceso a los modelos más potentes disponibles en cada momento.

No obstante, nos comprometemos a mantener en el tiempo los modelos que son más utilizados por nuestros clientes. Para casos de uso críticos que requieran estabilidad a largo plazo, es posible implementar fases de soporte extendido. No dude en ponerse en contacto con el soporte para discutir sus necesidades específicas.

Esta planificación se proporciona a título indicativo y se revisa al inicio de cada trimestre.

  • DMP (Fecha de Puesta en Producción): Fecha a partir de la cual el modelo se vuelve disponible en producción.
  • DSP (Fecha de Fin de Soporte): Fecha proyectada a partir de la cual el modelo ya no será mantenido. Se respetará un aviso previo de 3 meses antes de cualquier eliminación efectiva.
ModeloEditorFaseDMPDSPLTSMigración recomendada
devstral:24bMistral AI & All Hands AIProducción13/06/202530/03/2026Nodevstral-small-2:24b
granite3.1-moe:2bIBMProducción13/06/202530/03/2026Nogranite4-tiny-h:7b
qwen3-coder:30bEquipo QwenProducción02/08/202530/03/2026Noqwen-coder-next:80b
qwen3:30b-a3bEquipo QwenProducción30/08/202530/03/2026Noqwen3-next:80b
cogito:32bDeep CogitoProducción13/06/202530/06/2026Nogpt-oss:120b
gemma3:27bGoogleProducción13/06/202530/06/2026No
glm-4.7-flash:30bZhipu AIProducción22/01/202630/06/2026No
medgemma:27bGoogleProducción02/12/202530/06/2026No
ministral-3:14bMistral AIProduction30/12/202530/06/2026No
ministral-3:3bMistral AIProduction30/12/202530/06/2026No
ministral-3:8bMistral AIProduction30/12/202530/06/2026No
nemotron3-nano:30bNVIDIAProduction04/01/202630/06/2026No
olmo-3:32bAllenAIProduction30/12/202530/06/2026No
olmo-3:7bAllenAIProduction30/12/202530/06/2026No
qwen3-omni:30bEquipo QwenProducción05/01/202630/06/2026No
qwen3-vl:235bEquipo QwenProducción04/01/202630/06/2026No
qwen3-vl:2bEquipo QwenProducción30/12/202530/06/2026No
qwen3-vl:32bEquipo QwenProducción30/12/202530/06/2026No
qwen3-vl:8bEquipo QwenProducción05/01/202630/06/2026No
rnj-1:8bEssential AIProduction30/12/202530/06/2026No
devstral-small-2:24bMistral AI & All Hands AIProducción02/02/202630/09/2026No
gpt-oss:20bOpenAIProduction08/08/202530/09/2026No
granite4-small-h:32bIBMProduction03/10/202530/09/2026No
granite4-tiny-h:7bIBMProduction03/10/202530/09/2026No
mistral-small3.2:24bMistral AIProduction23/06/202530/09/2026No
deepseek-ocrDeepSeek AIProduction22/11/202530/12/2026No
functiongemma:270mGoogleProduction30/12/202530/12/2026No
granite3.2-vision:2bIBMProduction13/06/202530/12/2026No
qwen-coder-next:80bEquipo QwenProducción04/02/202630/12/2026No
qwen3-next:80bEquipo QwenProducción02/02/202630/12/2026No
qwen3-vl:30bEquipo QwenProducción30/12/202530/12/2026No
qwen3-vl:4bEquipo QwenProducción30/12/202530/12/2026No
qwen3:0.6bEquipo QwenProducción13/06/202530/12/2026No
translategemma:12bGoogleProduction22/01/202630/12/2026No
translategemma:27bGoogleProduction22/01/202630/12/2026No
translategemma:4bGoogleProduction22/01/202630/12/2026No
bge-m3:567mBAAIProducción18/10/202530/12/2027
embeddinggemma:300mGoogleProducción10/09/202530/12/2027
gpt-oss:120bOpenAIProducción11/11/202530/12/2027
granite-embedding:278mIBMProducción13/06/202530/12/2027
llama3.3:70bMetaProducción13/06/202530/12/2027
qwen3-2507-gptq:235bEquipo QwenProducción04/01/202630/12/2027
qwen3-2507-think:4bEquipo QwenProducción31/08/202530/12/2027

Leyenda

  • Fase: Ciclo de vida del modelo (Evaluación, Producción, Obsoleto)
  • DMP: Fecha de Puesta en Producción
  • DSP: Fecha de Eliminación Prevista
  • LTS: Soporte a Largo Plazo. Los modelos LTS ofrecen estabilidad garantizada y soporte extendido, ideal para aplicaciones críticas.
  • Migración recomendada: Modelo recomendado para reemplazar un modelo al final de su vida útil.

Para seguir el estado del ciclo de vida en tiempo real, consulte la página: LLMaaS Status - Ciclo de vida

Modelos Obsoletos

El mundo de los LLM evoluciona muy rápidamente. Para garantizar a nuestros clientes el acceso a las tecnologías más potentes, depreciamos periódicamente los modelos que ya no cumplen con los estándares actuales o que no se utilizan. Los modelos enumerados a continuación ya no están disponibles en la plataforma pública. Sin embargo, pueden ser reactivados para proyectos específicos, bajo solicitud.

ModeloFaseFecha de Depreciación
deepseek-r1:14bObsoleto30/12/2025
deepseek-r1:32bObsoleto30/12/2025
gemma3:1bObsoleto30/12/2025
gemma3:4bObsoleto30/12/2025
qwen3:0.6bObsoleto30/12/2025
qwen3:1.7bObsoleto30/12/2025
qwen3:14bObsoleto30/12/2025
qwen3:30b-a3bObsoleto30/12/2025
qwen3:4bObsoleto30/12/2025
qwen3:8bObsoleto30/12/2025
qwen3:32bObsoleto30/12/2025
qwq:32bObsoleto30/12/2025
granite3.3:2bObsoleto30/12/2025
granite3.3:8bObsoleto30/12/2025
mistral-small3.1:24bObsoleto30/12/2025
qwen2.5vl:32bObsoleto30/12/2025
qwen2.5vl:3bObsoleto30/12/2025
qwen2.5vl:72bObsoleto30/12/2025
qwen2.5vl:7bObsoleto30/12/2025
cogito:8bObsoleto30/12/2025
deepcoder:14bObsoleto30/12/2025
cogito:3bObsoleto30/12/2025
qwen3:235bObsoleto22/11/2025
qwen3-2507-think:30b-a3bObsoleto14/11/2025
gemma3:12bObsoleto21/11/2025
cogito:14bObsoleto17/10/2025
deepseek-r1:70bObsoleto17/10/2025
granite3.1-moe:3bObsoleto17/10/2025
llama3.1:8bObsoleto17/10/2025
phi4-reasoning:14bObsoleto17/10/2025
qwen2.5:0.5bObsoleto17/10/2025
qwen2.5:1.5bObsoleto17/10/2025
qwen2.5:14bObsoleto17/10/2025
qwen2.5:32bObsoleto17/10/2025
qwen2.5:3bObsoleto17/10/2025
deepseek-r1:671bObsoleto17/10/2025

💡 Buenas Prácticas

Para obtener el máximo provecho de la API LLMaaS, es fundamental adoptar estrategias de optimización de costos, rendimiento y seguridad.

Optimización de Costos

El control de costos se basa en un uso inteligente de los tokens y de los modelos.

  1. Elección del Modelo: No utilices un modelo demasiado potente para una tarea sencilla. Un modelo más grande es más capaz, pero también es más lento y consume mucho más energía, lo que afecta directamente al costo. Ajusta el tamaño del modelo a la complejidad de tu necesidad para lograr un equilibrio óptimo.

    Por ejemplo, para procesar un millón de tokens:

    • Gemma 3 1B consume 0,15 kWh.
    • Llama 3.3 70B consume 11,75 kWh, es decir, 78 veces más.
    # Para una clasificación de sentimientos, un modelo compacto es suficiente y económico.
    if task == "sentiment_analysis":
    model = "granite3.3:2b"
    # Para un análisis jurídico complejo, se necesita un modelo más grande.
    elif task == "legal_analysis":
    model = "deepseek-r1:70b"
  2. Gestión del Contexto: El historial de la conversación (messages) se devuelve en cada llamada, consumiendo tokens de entrada. Para conversaciones largas, considera estrategias de resumen o ventana deslizante para conservar solo la información relevante.

    # Para una conversación larga, se puede resumir los primeros intercambios.
    messages = [
    {"role": "system", "content": "Eres un asistente de IA."},
    {"role": "user", "content": "Resumen de los 10 primeros intercambios..."},
    {"role": "assistant", "content": "Ok, tengo el contexto."},
    {"role": "user", "content": "Aquí está mi nueva pregunta."}
    ]
  3. Limitación de Tokens de Salida: Siempre utiliza el parámetro max_tokens para evitar respuestas excesivamente largas y costosas. Establece un límite razonable según lo que esperas.

    # Solicitar un resumen de máximo 100 palabras.
    response = client.chat.completions.create(
    model="granite3.3:8b",
    messages=[{"role": "user", "content": "Resume este documento..."}],
    max_tokens=150, # Margen de seguridad para ~100 palabras
    )

Rendimiento

La reactividad de su aplicación depende de la forma en que gestiona las llamadas a la API.

  1. Consultas asíncronas: Para procesar múltiples solicitudes sin esperar la finalización de cada una, utilice llamadas asíncronas. Esto es especialmente útil para aplicaciones backend que manejan un gran volumen de solicitudes simultáneas.

    import asyncio
    from openai import AsyncOpenAI

    client = AsyncOpenAI(api_key="...", base_url="...")

    async def process_prompt(prompt: str):
    # Procesa una sola solicitud de forma asíncrona
    response = await client.chat.completions.create(model="granite3.3:8b", messages=[{"role": "user", "content": prompt}])
    return response.choices[0].message.content

    async def batch_requests(prompts: list):
    # Inicia varias tareas en paralelo y espera su finalización
    tasks = [process_prompt(p) for p in prompts]
    return await asyncio.gather(*tasks)
  2. Streaming para la experiencia del usuario (UX): Para interfaces de usuario (chatbots, asistentes), el streaming es esencial. Permite mostrar la respuesta del modelo palabra a palabra, dando la impresión de reactividad inmediata en lugar de esperar la respuesta completa.

    # Muestra la respuesta en tiempo real en una interfaz de usuario
    response_stream = client.chat.completions.create(
    model="granite3.3:8b",
    messages=[{"role": "user", "content": "Cuéntame un cuento."}],
    stream=True
    )
    for chunk in response_stream:
    if chunk.choices[0].delta.content:
    # Mostrar el fragmento de texto en la IU
    print(chunk.choices[0].delta.content, end="", flush=True)

Seguridad

La seguridad de tu aplicación es fundamental, especialmente cuando manejas entradas de usuario.

  1. Validation and Input Cleaning (Sanitización): Never trust user inputs. Before sending them to the API, clean them to remove any potentially malicious code or "prompt injection" instructions. Also limit their size to avoid abuse.

    def sanitize_input(user_input: str) -> str:
    # Simple example: remove code delimiters and limit length.
    # More robust libraries can be used for advanced sanitization.
    cleaned = user_input.replace("`", "").replace("'", "").replace("\"", "")
    return cleaned[:2000] # Limita la longitud a 2000 caracteres
  2. Gestión robusta de errores: Siempre envuelve tus llamadas a la API dentro de bloques try...except para manejar errores de red, errores de la API (por ejemplo, 429 Rate Limit, 500 Internal Server Error) y proporcionar una experiencia de usuario funcional, aunque degradada.

    from openai import APIError, APITimeoutError

    try:
    response = client.chat.completions.create(...)
    except APITimeoutError:
    # Manejar el caso en que la solicitud tarda demasiado
    return "El servicio tarda más de lo esperado, por favor inténtalo de nuevo."
    except APIError as e:
    # Manejar errores específicos de la API
    logger.error(f"Error de API LLMaaS: {e.status_code} - {e.message}")
    return "Lo sentimos, ha ocurrido un error con el servicio de IA."
    except Exception as e:
    # Ha ocurrido un error inesperado: {e}
    logger.error(f"Ha ocurrido un error inesperado: {e}")
    return "Lo sentimos, ha ocurrido un error inesperado."