Medellín, Colombia · UTC−5 · Operación remota en Latinoamérica y Estados Unidos hello@quarl.co ES EN
Modelos de lenguaje

Aplicaciones sobre LLM que aguantan el mes tres

Integrar un modelo es una tarde. Que la salida sea confiable, el costo predecible y la latencia aceptable con volumen real es lo que separa un producto de un experimento.

Capacidades técnicas
Salida estructuradaUso de herramientasEnrutamiento por tareaCaché de promptsStreamingEvaluaciónFine-tuning
5proveedores en producción: OpenAI, Anthropic, Google, Azure y Bedrock
3 añosoperando aplicaciones LLM a escala de millones de usuarios
2modelos por petición: uno barato clasifica, uno capaz responde

En resumen

  • Integrar un modelo de lenguaje toma una tarde; lo que decide si el producto sobrevive es la salida estructurada, el control de costo y la latencia con volumen real.
  • El enrutamiento por tarea —un modelo económico clasifica y resume, uno capaz genera la respuesta final— es la palanca que más baja el costo sin tocar la calidad percibida.
  • La elección entre prompting, RAG y fine-tuning mueve el presupuesto en un orden de magnitud: RAG cuando el modelo no conoce la información, fine-tuning solo para tono o vocabulario propio.
  • Quarl trabaja con OpenAI, Anthropic, Google, Azure OpenAI y Amazon Bedrock detrás de una capa de abstracción, de forma que cambiar de proveedor sea configuración y no un trimestre de trabajo.

Antecedente de operación

Plataforma de lealtad de FEMSA

Tres años de operación del sistema en producción, no una entrega y una salida.

Contaminación entre entidades

El fallo más frecuente de las arquitecturas RAG, resuelto con metadata estructurada en la ingesta.

Alcance y fecha cerrados

La propuesta llega en 48 horas con alcance, precio y fecha fijos. Si el alcance cambia, se cotiza aparte y se aprueba antes.

El problema real

Lo difícil no es llamar a la API

Cualquiera conecta un modelo a un formulario en una tarde. Lo que decide si el producto sobrevive es todo lo demás: que la salida tenga siempre la forma que tu sistema espera, que el costo por petición no se dispare cuando el uso crece, que la latencia sea tolerable, que puedas cambiar de proveedor sin reescribir la aplicación, y que sepas medir si una modificación mejoró o empeoró las respuestas.

Nada de eso aparece en la demo. Todo aparece cuando hay usuarios reales.

Qué construimos

Las piezas que hacen la diferencia

  • Salida estructurada garantizada. El modelo devuelve JSON que valida contra un esquema, con reintentos y corrección cuando no cumple. Tu sistema nunca recibe algo que no puede procesar.
  • Uso de herramientas y llamado a funciones. El modelo consulta tus APIs y bases de datos en vez de responder de memoria, con límites y validación en cada llamada.
  • Enrutamiento por tarea. Un modelo económico clasifica, resume y filtra; uno capaz genera la respuesta final. Es la palanca que más baja el costo sin tocar la calidad percibida.
  • Caché de prompts y recorte de contexto. Reduce costo y latencia en aplicaciones con instrucciones largas y repetidas.
  • Streaming. La respuesta empieza a aparecer de inmediato. No baja la latencia real pero cambia por completo la percepción del usuario.
  • Abstracción de proveedor. Cambiar de OpenAI a Claude o a un modelo autoalojado no debería costar un trimestre de trabajo.
  • Defensas contra inyección de prompts. Jerarquía de instrucciones, separación entre contenido del sistema y del usuario, y filtrado de entrada y salida.
Decisiones

Prompting, RAG o fine-tuning

La pregunta más frecuente y la que más plata hace perder cuando se responde mal.

Si tu problema es…Lo que corresponde
El modelo no conoce tu informaciónRAG
El modelo no responde en el formato correctoSalida estructurada
El tono o el estilo no son los tuyosPrompting, y después fine-tuning
Es un dominio muy específico con vocabulario propioFine-tuning
El costo es insostenibleEnrutamiento y caché
Nadie sabe si funcionaCapa de evaluación
Precio

Rangos y plazos

AlcanceQué incluye
Integración en tu productoUna funcionalidad con LLM dentro de una aplicación existente, con evaluación y control de costo.3–5 semanas
Producto sobre LLMAplicación completa: backend, orquestación, interfaz, evaluación y observabilidad.6–12 semanas
Optimización de costo y latenciaEnrutamiento, caché, recorte de contexto y medición del antes y el después.2–4 semanas
Fine-tuningPreparación del conjunto de datos, entrenamiento, evaluación contra la línea base.3–6 semanas
Stack

Proveedores y herramientas

OpenAIAnthropic ClaudeGoogle GeminiAzure OpenAIAmazon BedrockLangChainLangSmithPydanticZodRAGASDatadogSentryTypeScriptPythonNestJSFastAPI

Preguntas frecuentes

¿Qué modelo conviene usar?

Depende de la tarea, y casi siempre son varios en el mismo sistema. Para clasificar, extraer y resumir, un modelo económico basta y cuesta una fracción. Para razonamiento complejo o la respuesta final al usuario, uno capaz. Trabajamos con OpenAI, Anthropic, Google, Azure OpenAI y Amazon Bedrock, y la elección se justifica con números en la propuesta, no por moda.

¿Cómo controlan el costo?

Con cuatro palancas: enrutamiento por tarea, recorte de contexto para no mandar todo «por si acaso», caché de prompts en instrucciones largas y repetidas, y límites duros por petición y por usuario. En sistemas que hemos operado, esto es la diferencia entre un costo predecible y uno que hace inviable escalar. Además dejamos el gasto instrumentado para que puedas verlo sin pedirlo.

¿Podemos cambiar de proveedor después?

Sí, y lo diseñamos para eso desde el principio. La aplicación habla con una capa de abstracción, no directamente con la API de un proveedor, así que cambiar de modelo es configuración más una corrida de evaluación para confirmar que la calidad se mantiene. Sin esa capa, migrar cuesta un trimestre.

¿Qué es la salida estructurada y por qué importa?

Es forzar al modelo a devolver datos con una forma exacta —JSON que cumple un esquema— en vez de texto libre. Importa porque tu sistema necesita procesar la respuesta: si a veces devuelve un campo con otro nombre o un número como texto, la integración se rompe en producción de formas difíciles de reproducir. Validamos contra esquema y reintentamos con corrección cuando no cumple.

¿Qué es la inyección de prompts y cómo la manejan?

Es cuando alguien mete instrucciones dentro del contenido que el modelo procesa —un documento, un correo, un mensaje— para hacerle ignorar sus reglas. Se mitiga con jerarquía de instrucciones en el prompt de sistema, separación estricta entre contenido de sistema y de usuario, filtrado de entrada y salida, y limitando qué herramientas puede invocar el modelo. En sistemas con agentes esto deja de ser opcional.

¿Cuándo tiene sentido afinar un modelo?

Cuando necesitás un tono, un formato o un vocabulario muy específico que el prompting no logra de forma consistente, y tenés al menos unos cientos de ejemplos de buena calidad. No sirve para meter conocimiento actualizable: para eso está RAG. En la práctica, nueve de cada diez casos que llegan pidiendo fine-tuning se resuelven mejor con RAG y mejor prompting, y lo decimos.

¿Cómo saben si una mejora funcionó?

Con un conjunto de casos reales y su resultado esperado, corriendo antes y después de cada cambio. Medimos calidad de la respuesta, costo por petición y latencia. Sin eso, «mejoramos el prompt» es una opinión — y es exactamente así como los sistemas empeoran sin que nadie se entere.

¿Sirve para procesar documentos en volumen?

Sí, y es uno de los usos con retorno más claro: extraer datos de facturas, contratos o formularios en formatos variables, donde las plantillas rígidas fallan. Se combina con validación por esquema y con revisión humana en los casos de baja confianza. Lo vemos también desde automatización de procesos.

Agendá 15 minutos

Contanos qué estás construyendo o qué dejó de funcionar. Salís de la llamada con una respuesta concreta: se arregla, se construye, o no vale la pena.