Fast Ask: el Qwen que Ramp entrenó con RL para leer hojas de cálculo

Fast Ask: el Qwen que Ramp entrenó con RL para leer hojas de cálculo
17,8 %de las llamadas a herramientas del agente principal eran para explorar
14tipos de tarea en tres familias
66,25 %de acierto exacto, frente al 61,88 % de Opus 4.6
1,05×el tiempo de Haiku 4.5
Fast Ask: cómo Ramp entrenó con RL un modelo pequeño para leer hojas de cálculo
También lo explico en este vídeo, en mi canal Articulator ES.

El problema: explorar cuestaenlace

Ramp tiene un producto, Ramp Sheets, con un agente que trabaja sobre hojas de cálculo. Y un agente de hojas de cálculo es tan bueno como la información que recupera: si lee poco, no encuentra la respuesta; si lee demasiado, se vuelve lento, caro y fácil de distraer con pestañas que no vienen a cuento.

Al mirar sus trazas vieron cuánto costaba esa exploración:

  • El 17,8 % de todas las llamadas a herramientas del agente principal se iban en abrir pestañas, leer rangos y descartar hojas irrelevantes, antes de tener los datos para responder.
  • Cerca del 75 % de esas llamadas iban seguidas de inmediato por otra lectura. Los autores dicen que eso sugiere que el agente no solía dar con la información a la primera. Es una interpretación suya, no una medida de fallos.

Su argumento es que retocar el prompt no cambia el bucle de fondo: seguiría siendo un modelo grande, generalista y lento el que navega la hoja y filtra lo que sobra. Así que sacaron la búsqueda a un subagente especializado, Fast Ask. Le llega una pregunta como «¿cuáles fueron los ingresos de marzo a mayo?», navega el libro, lee los rangos que hacen falta y devuelve una respuesta compacta al agente principal.

El agente principal gasta el 17,8 % de sus llamadas a herramientas en explorar la hoja de cálculo
Casi una de cada cinco llamadas del agente principal era para explorar.

El modelo que hay detrás es un Qwen3.5-35B-A3B afinado, con unos 3.000 millones de parámetros activos.

Por qué un subagenteenlace

Los autores dan tres razones por las que la recuperación merece un modelo especialista:

Protege el contexto

Si el modelo principal lee todas las pestañas, quema tokens en filas irrelevantes y puede anclarse en un señuelo. El subagente devuelve solo las celdas que importan o el valor ya calculado.

La latencia importa

Para el usuario no es lo mismo que el agente tenga el dato enseguida que verlo gastar turnos explorando el libro.

Se puede verificar

La más importante. Muchas preguntas sobre una hoja se resuelven en un valor exacto: una fecha, un número de factura, un importe en céntimos, un sí o un no, una fila.

Esa tercera razón es la que abre la puerta al aprendizaje por refuerzo: si la respuesta es un valor exacto, cada intento se puede puntuar de forma determinista, sin etiquetas humanas y sin otro modelo que haga de juez. La tarea era estrecha, muy repetida, sensible a la latencia y objetivamente puntuable. Son las cuatro condiciones que me llevo del artículo para decidir cuándo merece la pena entrenar un modelo propio.

El montaje del entrenamientoenlace

Para poder entrenar con refuerzo, plantearon la interacción con la hoja como un entorno: muchas tareas emparentadas, una interfaz de herramientas pequeña y una función de recompensa determinista. El modelo no aprende de demostraciones del comportamiento correcto; descubre sus propias estrategias para navegar libros, recuperar datos y calcular respuestas.

  • Modelo base: Qwen/Qwen3.5-35B-A3B.
  • Infraestructura: la plataforma Lab de Prime Intellect, con su entrenamiento alojado y el framework verifiers. El entorno de entrenamiento replica el harness con el que el modelo se despliega en producción.
  • Entrenamiento: 100 pasos, lote de 256 y 8 rollouts (intentos) por ejemplo.
  • Evaluación: cada 20 pasos, con 128 ejemplos reservados, y evaluando el modelo base junto al entrenado.
  • Sin modo de pensamiento: lo desactivaron para que la comparación fuera la del escenario de baja latencia que les importa en producción.

Si quieres ver qué piezas tiene un entorno de este tipo y cómo las resuelve cada framework (entre ellos Verifiers, el de Prime Intellect), lo conté en el post sobre entornos de RL para LLM.

Libros sintéticos y 14 tipos de tareaenlace

Cada tarea es un libro de empresa sintético, una pregunta en lenguaje natural y una respuesta verdadera. Los libros imitan flujos reales de finanzas: consolidación de ingresos, conciliación de facturas, análisis de gasto, búsquedas filtradas por fecha y agregaciones que cruzan varias tablas.

Los datos sintéticos les permiten generar muchas variaciones del mismo problema, controlar la respuesta con exactitud y cambiar la redacción sin cambiar la habilidad que se entrena. Definieron 14 tipos de tarea en tres familias:

FamiliaTipos de tarea
Ingresos (4)net_revenue, variance_vs_target, top_order_contribution, counterfactual_fx
Conciliación (6)invoice_balance, customer_balance, overdue_invoices, last_payment_date, is_invoice_fully_reconciled, invoice_location
Operaciones (4)spend_month_total, budget_vs_actual, shared_vendor_uuid, netted_amount_2026

De cada tarea generaron tres variantes con redacción distinta (una petición para un informe a inversores, un seguimiento de cobros, una pregunta para un modelo de financiación), para que el modelo no se aprenda una plantilla. Las de conciliación varían además por cómo se describe la factura, así que su espacio de preguntas es mayor que tres por tipo. Un ejemplo del artículo:

I am tightening our investor memo. What cumulative net recognized revenue did South land across 2025-03 to 2025-05, in USD cents?

Ese libro tiene once hojas: Orders, OrderLines, Shipments, Returns, OrderMonthNet, FxExposure, Contracts, FXRates, Targets, HiringPlan y CapTable. Las dos últimas no pintan nada en la pregunta, y no es casualidad.

Los lotes se montan por turnos equilibrados: cada pasada baraja el conjunto y emite los 14 tipos antes de repetir ninguno, de modo que todos se entrenan por igual. Y el mundo sintético es coherente por dentro: clientes, proveedores, productos, niveles de contrato y métodos de pago salen de vocabularios fijos, a lo largo de miles de libros generados.

Las trampasenlace

La dificultad regula cuánta presión de navegación sufre el modelo. Las tareas fáciles suelen dejar un camino directo a la respuesta. Las medias y difíciles lo complican de tres maneras:

Pestañas señuelo

Hojas como HiringPlan o CapTable, con reclutadores, vacantes y reservas de opciones. Suenan a finanzas, pero no contienen nada que sirva para la pregunta. Quien lee sin criterio se gasta en ellas el presupuesto de turnos.

Resúmenes a medias

Hojas de resumen como RegionalPnL o SpendSummary a las que les faltan justo las columnas calculadas que darían la respuesta. Parecen un atajo, pero hay que verificar o agregar desde los datos de origen. En difícil, desaparecen.

Facturas sin nombre

En torno al 15-20 % de las tareas de conciliación, la pregunta no cita la factura por su código INV-####, sino por pistas del pago (sistema, método, fecha, importe) o por una firma (cliente, mes, importe, vencimiento). Antes de responder hay que resolver a qué factura se refiere.

Las tres trampas de los libros sintéticos: pestañas señuelo, resúmenes a medias y facturas sin nombre
Las trampas están puestas a propósito: son los fallos de navegación que el modelo se encontrará fuera del entorno.

Tres herramientas y quince turnosenlace

El modelo tiene tres herramientas y un presupuesto de 15 turnos:

  • get_workbook_metadata devuelve los nombres de las hojas, el color de las pestañas y el rango usado aproximado.
  • read_ranges devuelve los datos de las celdas, con un tope de 1.000 celdas por llamada. Las peticiones más grandes se rechazan.
  • run_python ejecuta Python aislado, solo con la biblioteca estándar. El estado se conserva entre llamadas dentro de un mismo intento.

Que sean tan pocas es deliberado: con solo tres herramientas, a la recompensa le resulta más fácil distinguir una trayectoria eficiente de una que malgasta turnos.

La recompensaenlace

Para cada pregunta, el modelo genera ocho trayectorias. Una trayectoria es la traza completa: las llamadas a herramientas, las lecturas, el Python ejecutado y la respuesta final. El verificador puntúa cada una con una función que cabe en una línea:

R(y) = 1,0 · correct(y) + 0,1 · efficiency(y) + 0,05 · concise(y)

La recompensa copia lo que Fast Ask necesita en producción: dar la respuesta correcta, darla rápido y no meter texto de más en el contexto del agente principal.

  • Acertar manda. El término de 1,0 solo se activa si la línea final ANSWER: se puede analizar con el tipo esperado y coincide exactamente con la solución.
  • Eficiencia y concisión son matices. No pueden salvar una respuesta equivocada, pero ordenan las correctas: acertar en cinco turnos puntúa algo más que acertar después de pasear por hojas irrelevantes.
La función de recompensa: 1,0 por acertar, 0,1 por eficiencia y 0,05 por concisión
Dime qué premias y te diré qué aprende tu agente.

GRPO: la ventaja frente al grupoenlace

Entrenaron con GRPO, un método de gradiente de política que estima la ventaja a partir de grupos de intentos generados para la misma pregunta. En lugar de entrenar un modelo de valor aparte, compara la recompensa de cada intento con la de sus compañeros de grupo. Con G = 8 intentos, la ventaja del intento i se puede escribir así:

A_i = R(y_i) − (1/G) · Σ_k R(y_k)

Es decir, tu ventaja es tu nota menos la media del grupo. Para una misma pregunta, un intento acierta en cinco turnos y otro se gasta el presupuesto en pestañas señuelo y falla: esa diferencia es la señal de aprendizaje. Dejando a un lado la corrección fuera de política, la actualización tiene esta forma:

∇J(θ) ≈ Σ_i Σ_t A_i · ∇ log π_θ(y_i,t | x, y_i,<t)

Cada token de una trayectoria se refuerza o se apaga según la ventaja de la trayectoria entera. Esto es lo que hace que el refuerzo encaje con los agentes que usan herramientas: nadie etiqueta cuál era la siguiente llamada correcta, solo se puntúa el resultado final. Las matemáticas empujan la probabilidad hacia lo que hizo que la respuesta fuera correcta: leer primero los metadatos, esquivar las pestañas señuelo, usar los resúmenes cuando valen, volver a las filas de origen cuando no, y emitir una línea ANSWER: que se pueda analizar.

Es el mismo algoritmo con el que se entrenó a NapMem para navegar su memoria.

Asíncrono y fuera de políticaenlace

En Fast Ask, un intento es una trayectoria de varios turnos: mirar los metadatos, leer rangos, ejecutar Python y responder. Generar esos intentos es mucho más lento que cargar datos en un afinado supervisado normal. Si el entrenamiento tuviera que parar tras cada actualización a esperar trayectorias recién hechas, las GPU pasarían mucho tiempo paradas.

La pila prime-rl de Prime Intellect lo resuelve con entrenamiento asíncrono y fuera de política: los generadores de intentos siguen produciendo trayectorias mientras el entrenador actualiza el modelo. Algunas trayectorias vienen de una versión algo más antigua de la política, y el objetivo corrige ese desfase, que está acotado, con pesos de importancia:

ρ_t(θ) = π_θ(y_t | x, y_<t) / π_gen(y_t | x, y_<t)

La razón ρ responde a una pregunta sencilla: ¿cuánto más o menos probable es que el modelo actual produzca este token, comparado con el modelo que lo generó? Para que las actualizaciones sean estables, Prime Intellect usa un objetivo ponderado por importancia y recortado, al estilo de AIPO:

J(θ) = Σ_i,t min( ρ_i,t(θ) · A_i ,  clip(ρ_i,t(θ), 1 − ε, 1 + ε) · A_i )

El recorte limita cuánto puede pesar un token cuya probabilidad ha cambiado mucho desde que se generó, de forma que una trayectoria vieja no tire del modelo más de la cuenta.

Resultadosenlace

Evaluaron el modelo base y el entrenado junto a la familia Claude, con tareas reservadas. Las métricas son el acierto exacto y el tiempo real por intento, relativo al de Haiku 4.5:

ModeloAcierto exactoTiempo frente a Haiku 4.5
Fast Ask (Qwen entrenado)66,25 %1,05×
Claude Opus 4.661,88 %1,44×
Claude Sonnet 4.659,38 %1,60×
Qwen3.5-35B-A3B base56,25 %1,34×
Claude Haiku 4.551,88 %1,00×
  • Diez puntos sobre el modelo base (de 56,25 % a 66,25 %), y además tardando menos: de 1,34× a 1,05×.
  • Algo más de cuatro puntos sobre Opus 4.6 (66,25 − 61,88 = 4,37), con un tiempo muy cercano al de Haiku 4.5.
  • El entrenamiento duró unas 26 horas para los 100 pasos.
Acierto exacto y tiempo de Fast Ask frente a Opus 4.6, Sonnet 4.6, el Qwen base y Haiku 4.5
Más acierto que Opus y casi el tiempo de Haiku, en esta tarea y en su evaluación.

Qué aprendió el modeloenlace

Según los autores, casi toda la mejora vino de dos cosas: el modelo aprendió a dar respuestas con el formato exacto, que se pueden analizar, y a planificar trayectorias más ajustadas, que pierden menos turnos.

Y hay un dato que me parece lo más fino del artículo: el total de celdas leídas por intento se mantuvo más o menos plano durante todo el entrenamiento (en su gráfica, en torno a 2.400). El modelo no aprendió a leer menos; aprendió a repartir mejor sus lecturas. En la misma figura, las celdas por turno suben, de unas 200 a unas 350, mientras el total no se mueve: lee lo mismo en menos viajes. Eso último lo saco yo de la gráfica; el texto solo habla del total.

Lo que no cuadra y lo que no se puede concluirenlace

Al contrastar el texto con las figuras del propio artículo, hay dos detalles que no casan:

  • La curva de recompensa. El texto dice que la recompensa subió de unos 0,2 a unos 0,8 en los primeros 40 pasos y después se estabilizó. En la gráfica animada que acompaña al artículo, la curva empieza cerca de 0,5, baja hacia 0,3 y sube poco a poco hasta rondar 0,8 cerca del paso 100. Coinciden en dónde acaba, no en el camino.
  • El tamaño de la evaluación. El artículo habla de 128 ejemplos reservados para las evaluaciones intermedias. Pero los porcentajes de la tabla final son múltiplos exactos de 1/160 (106, 99, 95, 90 y 83 aciertos de 160) y no lo son de 1/128. Así que la tabla parece salir de otro conjunto, de 160 ejemplos, que el artículo no describe. Es una deducción mía, no un dato de los autores.

Ninguna de las dos cambia la conclusión, pero conviene leer las cifras con sus límites:

  • No es «Qwen gana a Opus» en general. Es una tarea de recuperación concreta, en la evaluación de los autores, con tareas sintéticas del mismo entorno y sin modo de pensamiento.
  • No se sabe si vale igual para hojas reales. El artículo no da resultados con libros de clientes.
  • El coste no está cuantificado. Dicen que es «una fracción del coste y la latencia» de un modelo frontera, sin dar la cifra del coste.
  • La velocidad es «aproximadamente» la de Haiku: 1,05×, no 1,00×.

En resumenenlace

El post-entrenamiento con refuerzo funcionó aquí porque el entorno hizo que buscar en una hoja de cálculo fuera medible y repetible: decisiones repetidas con un resultado claro, sin trayectorias etiquetadas por humanos ni un LLM de juez. Los autores insisten en que el trabajo importante no estuvo en la arquitectura ni en el tamaño del modelo, sino en el diseño del entorno: las tareas adecuadas, una interfaz mínima de herramientas y una recompensa pegada a cómo funciona el producto en producción.

Y lo plantean como un patrón que piensan repetir: entrenar subagentes pequeños y verificables para cuellos de botella estrechos, y dejar que los modelos frontera gasten sus tokens en juzgar, no en buscar.

En una frase

Si una tarea es estrecha, se repite mucho, la latencia importa y la respuesta se puede verificar, un modelo pequeño entrenado en un buen entorno puede hacerla mejor que uno grande.

¿Qué cuello de botella de tu agente cumple las cuatro?

Fuentesenlace

Seguir leyendo

Últimos posts -->

¿Has visto estos proyectos?

Gymnasia

Gymnasia Gymnasia
Expo
React Native
TypeScript
OpenAI
Anthropic

App de fitness con dos agentes que se ejecutan íntegramente en el dispositivo, sin backend, de forma que los datos del usuario nunca salen del móvil. Un coach conversacional BYOK con tools locales y system prompt remoto con fallback offline, y un estimador de comidas que saca los macronutrientes de una foto del plato, con lectura de códigos de barras contra OpenFoodFacts.

LangGraph Deep Researcher

LangGraph Deep Researcher LangGraph Deep Researcher
Python
LangGraph
FastAPI
React
TypeScript
Docker

Sistema multiagente de investigación construido con LangGraph. Un supervisor descompone tu pregunta en temas y lanza subagentes de búsqueda en paralelo; cada uno comprime sus hallazgos antes de pasarlos a un agente redactor que escribe el informe final en markdown con sus fuentes. Streaming en vivo por WebSockets, modelo configurable por rol y claves de API propias que nunca se guardan en el servidor.

Tau

Tau Tau
Python
LangChain

Sistema multiagente de tutoría para estudiantes de secundaria, con un agente por asignatura y material de curso elaborado y validado por un equipo de profesores. Llegó a usarse con alumnos reales en un colegio privado en España y en un instituto en Colombia.

Ver todos los proyectos -->
>_ Disponible para proyectos

¿Tienes un proyecto con IA?

Hablemos.

maximofn@gmail.com

Especialista en Machine Learning e Inteligencia Artificial. Desarrollo soluciones con IA generativa, agentes inteligentes y modelos personalizados.

¿Quieres ver alguna charla?

Últimas charlas -->

¿Quieres mejorar con estos tips?

Últimos tips -->

Usa esto en local

Los espacios de Hugging Face nos permite ejecutar modelos con demos muy sencillas, pero ¿qué pasa si la demo se rompe? O si el usuario la elimina? Por ello he creado contenedores docker con algunos espacios interesantes, para poder usarlos de manera local, pase lo que pase. De hecho, es posible que si pinchas en alún botón de ver proyecto te lleve a un espacio que no funciona.

Flow edit

Flow edit Flow edit

Edita imágenes con este modelo de Flow. Basándose en SD3 o FLUX puedes editar cualquier imagen y generar nuevas

FLUX.1-RealismLora

FLUX.1-RealismLora FLUX.1-RealismLora
Ver todos los contenedores -->
>_ Disponible para proyectos

¿Tienes un proyecto con IA?

Hablemos.

maximofn@gmail.com

Especialista en Machine Learning e Inteligencia Artificial. Desarrollo soluciones con IA generativa, agentes inteligentes y modelos personalizados.

¿Quieres entrenar tu modelo con estos datasets?

short-jokes-dataset

HuggingFace

Dataset de chistes en inglés

Uso: Fine-tuning de modelos de generación de texto humorístico

231K filas 2 columnas 45 MB
Ver en HuggingFace →

opus100

HuggingFace

Dataset con traducciones de inglés a español

Uso: Entrenamiento de modelos de traducción inglés-español

1M filas 2 columnas 210 MB
Ver en HuggingFace →

netflix_titles

HuggingFace

Dataset con películas y series de Netflix

Uso: Análisis de catálogo de Netflix y sistemas de recomendación

8.8K filas 12 columnas 3.5 MB
Ver en HuggingFace →
Ver más datasets -->