Resumen Técnico: SWE-Pruner Pro
Planteamiento del Problema
Los agentes de codificación que operan en entornos de múltiples turnos acumulan salidas de herramientas extensas (por ejemplo, registros de ejecución de cat, grep, ls, python) durante su interacción con las bases de código. Estas salidas suelen contener una redundancia significativa, consumiendo la mayor parte del presupuesto de tokens por trayectoria y provocando la degradación del contexto largo. Las soluciones de poda de contexto existentes se dividen en dos categorías:
- Compresión de propósito general: Métodos como LLMLingua2 o Selective Context califican los tokens basándose en métricas fijas (por ejemplo, perplejidad, estructura sintáctica). Estos fallan al no poder adaptarse al foco evolutivo de la tarea del agente.
- Poda específica de la tarea: El trabajo previo como SWE-Pruner condiciona la poda a la intención del agente, pero requiere un modelo de puntuación externo y una consulta explícita de "pista de objetivo" (goal-hint) que el agente debe generar en cada turno. Esto introduce sobrecarga y latencia adicionales.
Ambos enfoques tratan la señal de poda como una cantidad externa que debe ser reconstruida, ignorando el hecho de que el modelo base del agente ya ha procesado la salida de la herramienta y probablemente ha codificado la información de relevancia dentro de sus representaciones internas.
Metodología: SWE-Pruner Pro
SWE-Pruner Pro propone leer la señal de poda directamente desde los estados ocultos internos del modelo base del agente, eliminando la necesidad de modelos de puntuación externos o consultas de pista de objetivo explícitas. El método opera directamente dentro del bucle de inferencia del agente.
Mecanismo Central
- Utilización de la Representación Interna: Cuando el agente lee una respuesta de la herramienta (rt), el modelo base congelado realiza un prellenado (prefill) estándar, generando estados ocultos de la última capa (hi) para cada token. SWE-Pruner Pro adjunta un cabezal de poda ligero a estos estados existentes.
- Arquitectura del Cabezal de Poda:
- Embedding Sensible a la Longitud: Un embedding aprendido e(N), condicionado al recuento total de líneas N de la respuesta, se añade mediante broadcast a cada estado oculto. Esto permite que el modelo ajuste su estrategia de poda según la longitud de la respuesta (por ejemplo, siendo más conservador con salidas cortas donde cada línea es crítica).
- Clasificador No Lineal: Una pequeña red de alimentación hacia adelante (LayerNorm + dos bloques Linear-GELU-Dropout) mapea los estados ocultos aumentados a un logit de mantener o podar. Esta no linealidad es necesaria para resolver el solapamiento en el espacio de representación observado en experimentos de sondeo lineal.
- Agregación de Decisiones: Los logits a nivel de token se agregan mediante voto mayoritario dentro de cada línea para producir una decisión binaria de mantener/podar para la línea completa.
- Estrategia de Entrenamiento:
- Datos: El cabezal se entrena con 22,609 trayectorias de múltiples turnos anotadas por Claude Sonnet 4.6 con etiquetas de mantener/podar por línea.
- Función de Pérdida: Los autores emplean una pérdida focal balanceada por muestra (per-sample balanced focal loss). A diferencia de la pérdida focal estándar que equilibra globalmente, este enfoque calcula la pérdida por separado para los tokens de "mantener" y "podar" dentro de cada muestra y los promedia con un peso igual. Esto asegura que las muestras con tasas de mantenimiento extremas (por ejemplo, solo el 3% de las líneas mantenidas) contribuyan equitativamente al objetivo, evitando que el modelo se sobreajuste a la tasa de mantenimiento promedio (~30%).
- Integración en la Inferencia: El cabezal se ejecuta "in-server" durante la fase de prellenado. Reutiliza los estados ocultos generados para la respuesta de la herramienta, añadiendo solo una pasada hacia adelante del pequeño cabezal. La respuesta podada (r~t) reemplaza la respuesta original en el contexto para el siguiente turno, mientras que la generación del turno actual todavía atiende a la respuesta completa original.
Contribuciones Clave
- Descubrimiento de la Señal: El artículo demuestra que las representaciones internas del modelo base de un agente ya codifican la importancia a nivel de línea de las salidas de las herramientas. Un sondeo lineal simple logra un AUC de 0.83, probando que la señal de "mantener o podar" existe sin necesidad de reconstrucción externa.
- Arquitectura: Introducción de SWE-Pruner Pro, un cabezal ligero que utiliza un embedding sensible a la longitud y una pérdida focal balanceada por muestra para tomar decisiones de poda precisas directamente desde los estados congelados del modelo base.
- Eficiencia: Evita llamadas adicionales al modelo y consultas de pista de objetivo explícitas, añadiendo una sobrecarga de inferencia acotada mientras logra una reducción significativa de tokens.
Resultados Experimentales
El método fue evaluado en dos modelos base de pesos abiertos (MiMo-V2-Flash y Qwen3-Coder-Next) a través de cuatro benchmarks de múltiples turnos: SWE-Bench Verified, SWE-QA, SWE-QA-Pro y Oolong.
- Ahorro de Tokens: SWE-Pruner Pro es el único método entre los siete evaluados que reduce el uso de tokens de extremo a extremo en todas las configuraciones.
- Hasta un 39% de reducción en SWE-QA-Pro (Qwen3-Coder-Next).
- 30% de reducción en el benchmark de contexto largo Oolong (MiMo-V2-Flash).
- En contraste, otros métodos (por ejemplo, LLMLingua2) a veces aumentaron el uso de tokens hasta en un 190% en tareas de contexto largo debido a la sobrecarga.
- Calidad de la Tarea:
- SWE-QA/Pro: Mantiene la calidad de la tarea dentro de una banda estrecha respecto a la línea base sin podar (por ejemplo, un cambio de puntuación de +0.02 en SWE-QA).
ğ* Oolong: Mejora la precisión en +2.2 puntos en MiMo-V2-Flash.
- SWE-Bench Verified: En MiMo-V2-Flash, mejora la tasa de resolución en +3.8% mientras reduce los tokens de entrada en un 7.4% en comparación con la línea base sin podar. En Qwen3-Coder-Next, logra la mayor reducción de tokens de entrada (-13.5%) con la menor degradación en la tasa de resolución (-1.2%).
- Latencia: El cabezal in-server añade aproximadamente un 15.0% de tiempo de ejecución (wall time) agregado al tiempo total de generación, un costo compensado por la reducción del tamaño del contexto para los turnos subsiguientes.
Significado y Reivindicaciones
El artículo afirma que el "juicio de relevancia" requerido para la poda de contexto no es una señal externa que deba eliciarse mediante consultas o modelos adicionales, sino que ya está presente en las representaciones formadas por el modelo base mientras lee pasivamente una observación.
- Cambio de Paradigma: En lugar de construir la poda alrededor del agente (requiriendo modelos externos o consultas explícitas), SWE-Pruner Pro simplemente lee la señal que el agente ya ha formado.
- Impacto Práctico: Este enfoque resuelve el compromiso entre calidad y compresión observado en trabajos previos, permitiendo una poda agresiva (hasta un 39% de ahorro de tokens) sin degradar el rendimiento de la tarea y, en algunos casos, mejorándolo al mitigar la degradación del contexto largo.
- Generalizabilidad: Aunque se evaluó en tareas de codificación centradas en Python, el flujo de trabajo es agnóstico al lenguaje y ha demostrado preservar el ahorro de tokens y la calidad en tareas de contexto largo de lenguaje natural (Oolong), lo que sugiere que el paradigma se transfiere entre dominios.
Los autores concluyen que, para los agentes de codificación, el camino más eficiente para la gestión del contexto es aprovechar el estado interno del propio modelo base, evitando la latencia y la complejidad de los mecanismos de puntuación externos.