AutoThink: mejora el rendimiento de LLM locales con razonamiento adaptativo
(news.ycombinator.com)- Es una técnica que ayuda a los LLM locales a ajustar los tokens de razonamiento según la dificultad de la consulta, para generar respuestas más eficientes con los mismos recursos
- En lugar de dar el mismo “tiempo para pensar” a todas las consultas, las divide en complejidad ALTA/BAJA y asigna entre 70 y 90% de los tokens al razonamiento complejo, y entre 20 y 40% a las consultas simples
- Induce patrones de razonamiento como precisión numérica, autocorrección y exploración exhaustiva mediante vectores de dirección basados en Pivotal Token Search del paper de Microsoft Phi-4
- En DeepSeek-R1-Distill-Qwen-1.5B, GPQA-Diamond subió de una línea base de 21.72% a 31.06%, una mejora relativa del 43%, y MMLU-Pro aumentó de 25.58% a 26.38%
- Funciona en modelos locales de razonamiento como DeepSeek, Qwen y modelos personalizados con fine-tuning, y usa menos tokens que el enfoque de referencia sin depender de APIs
Ajuste de recursos de razonamiento por consulta
- AutoThink es una técnica de asignación adaptativa de recursos que distribuye los recursos de razonamiento de los LLM locales de forma distinta para cada consulta
- Primero clasifica la consulta como de complejidad ALTA o BAJA y luego ajusta la proporción de tokens de razonamiento según la complejidad
- Razonamiento complejo: 70~90% del total de tokens
- Consulta simple: 20~40% del total de tokens
- Los vectores de dirección se derivan de Pivotal Token Search y guían la dirección del razonamiento del modelo durante la generación
- Las conductas inducidas incluyen precisión numérica, autocorrección y exploración exhaustiva
- La implementación se compone de dos ejes
- Un framework de clasificación adaptativa que puede aprender nuevas categorías de complejidad sin reentrenamiento
- Una implementación open source de Pivotal Token Search
Resultados de benchmarks y alcance de aplicación
- En DeepSeek-R1-Distill-Qwen-1.5B mostró los siguientes resultados
- GPQA-Diamond: 31.06%, mejora relativa del 43% frente a la línea base de 21.72%
- MMLU-Pro: 26.38%, un aumento frente a la línea base de 25.58%
- Usa menos tokens que el enfoque de referencia
- AutoThink se puede aplicar de forma general a modelos locales de razonamiento
- Modelos de ejemplo: DeepSeek, Qwen, modelos personalizados con fine-tuning
- Sin dependencia de APIs
- Materiales relacionados
1 comentarios
Comentario de Hacker News
Aclaro que la motivación de AutoThink surgió al ver cómo los modelos de razonamiento existentes desperdician recursos de cómputo: era evidente la ineficiencia de gastar la misma “cantidad de tiempo pensando” en una pregunta facilísima como “¿cuánto es 2+2?” que en una demostración matemática compleja. Lo sorprendente fue que, al combinar dos cosas que estaba probando por separado —clasificación adaptativa (capaz de aprender nuevas categorías sin reentrenamiento) y Pivotal Token Search, liberado como open source en el paper de Microsoft sobre Phi-4— y aplicar además una asignación dinámica de presupuesto de tokens, la mejora de rendimiento fue mucho mayor de lo esperado. De hecho, el número promedio de tokens usados bajó, porque las consultas simples realmente terminan mucho más rápido y el cómputo extra solo se asigna a las consultas complejas. Algunos puntos técnicos: el
steering vectores pequeño, menos de 1 MB por patrón, así que el overhead de memoria es casi nulo; el proceso de clasificación solo añade unos 10 ms de latencia, algo despreciable; y la elección de latarget layerimporta bastante (en la mayoría de los modelos, las capas intermedias 15~20 dieron los mejores resultados). Me gustaría recibir comentarios sobre esto: si alguien ha probado enfoques adaptativos parecidos, qué patrones de razonamiento serían más útiles para hacersteer, e ideas sobre cómo detectar automáticamente latarget layeróptima. Si tienen dudas sobre la implementación o los resultados, con gusto las respondoYa no necesariamente es así. Pregunto si has usado Gemini 2.5 Pro: con preguntas simples casi no “piensa”, mientras que en preguntas de programación escribe respuestas largas como un ensayo de lógica. o3 parece comportarse parecido
¡Felicidades! Todo intento de hacer más eficientes los LLM es más que bienvenido. Hasta ahora yo había hecho una optimización perezosa: en una Mac Mini M4 corro solo consultas simples con modelos en MLX, y las complejas las mando a una Nvidia 4090. La eficiencia del M4 comparada con Nvidia es realmente sorprendente. Creo que Apple va por el camino correcto con MLX. Pienso leer más sobre AutoThink e integrarlo a mi flujo de trabajo personal
Creo que valdría la pena probar insertar después del prompt del usuario una “respuesta de un modelo sin razonamiento”, por ejemplo: “Lo siguiente es lo que pensó un modelo sin razonamiento: ... ¿es esto lo que quiere el usuario?”. Cuando la versión no razonadora sea suficiente, el modelo de razonamiento también podría llegar más rápido a la respuesta
Incluso Claude Sonnet 3.5 (ni siquiera la versión más reciente 3.7 o 4) muestra diferencias claras en tiempo de procesamiento según la complejidad de la consulta: sí se ve un ajuste dinámico del tiempo de procesamiento
Me pregunto cómo se puede clasificar una pregunta como “compleja” o “simple”. Una pregunta que parece simple también puede ser en realidad muy difícil. Por ejemplo, la solución entera de x³+y³+z³=42 fue un problema que consumió más de 100 años de recursos computacionales. O una ecuación como x/(y+z)+y/(z+x)+z/(x+y)=4 puede verse simple a primera vista, pero tiene soluciones gigantescas que requieren teoría de curvas elípticas. Ver enlace de la solución
Clasificar la dificultad de un problema es, en sí mismo, una técnica aparte: es una habilidad que puede aprenderse por separado de la resolución real. Por ejemplo, al ver la ecuación de arriba, uno debería notar enseguida tres dificultades: el dominio entero, tres variables y una ecuación cúbica. Cuando esos tres factores se juntan, la dificultad se dispara. Si fueran números reales o complejos, o hubiera menos variables, o el grado fuera más bajo, sería mucho más fácil. Claro, eso no significa que necesariamente sea difícil, pero sí que podría tratarse de un problema no resuelto. Yo no tengo la capacidad real para resolverlo, pero sí me he entrenado para saber dónde buscar información, así que puedo detectar de inmediato la sensación de “esto es muy difícil”. Pienso que un LLM también podría aprender este tipo de pistas y desarrollar la capacidad de clasificar la dificultad de un problema sin resolverlo realmente (o quizá ya la haya aprendido)
En este caso, la dificultad de la consulta se define con base en cuántos tokens consumió el modelo para producir una respuesta correcta en datasets con respuesta correcta conocida (GSM8k, etc.). El clasificador adaptativo se entrena con ese dataset y luego lo usa para clasificar durante la inferencia
Cuando salió el toggle de
extended thinkingen Claude 3.7, yo también hice un POC parecido a autothink; de hecho, hasta se llama autothinkgithub.com/NiloCK/autothink
blog think-toggles-are-dumb
Mi versión hace un primer pase donde el LLM califica la dificultad de la consulta con una puntuación de 0 a 100, y según esa puntuación asigna linealmente el presupuesto de pensamiento. Obviamente es más simple que el trabajo del OP, pero me da muchísimo gusto ver resultados cuantitativos: ¡está muy bien hecho!
Me parece una optimización obvia y me sorprende que el cambio no haya ocurrido ya. Está muy bien explicado y muy impresionante que además lo hayas implementado
En modelos de razonamiento como QwQ o Qwen 3, sinceramente no he dedicado mucho tiempo a mejorar resultados, solo he intentado restringir la salida de tokens de razonamiento con distintos prompts. Gemma 3 27B QAT no es un modelo de razonamiento, pero al usarlo en cadenas o rutas de LLM sigue instrucciones muy bien, así que puede servir para preclasificación u optimización de idioma y luego dejar el razonamiento real para una etapa posterior. También se puede intercalar una respuesta intermedia entre varias thinking tags. En experimentos con este tipo de modelos, defino los “tokens de pensamiento” no por separado de la conclusión, sino como todos los tokens que sirven de peldaño en cada etapa de resolución del problema. Mi experiencia ha sido que instruir al modelo para priorizar ciertos tokens o expresiones suele mejorar los resultados, y la forma en que AutoThink usa automáticamente los tokens con mejor desempeño en el dataset podría convertirse en una optimización más general y efectiva. Dicho eso, si se usan demasiados pivot tokens existe el riesgo de sobreajustarse solo a preguntas del benchmark, así que me interesa ver qué tanto generaliza este enfoque. Personalmente, veo la selección cuidadosa de palabras/tokens como una optimización de bajo costo y alta eficiencia que mejora mucho la calidad de los resultados, y tengo expectativas sobre la capacidad de generalización de AutoThink
Es genial que, gracias a los modelos pequeños, equipos pequeños e investigadores individuales ya puedan demostrar con facilidad enfoques o experimentos innovadores sin tener nada que envidiar a los grandes laboratorios de IA. A medida que crece la competitividad de los SML (Small Language Model), también se expande mucho más de lo imaginable lo que puede implementarse on-device
Si alojas un modelo para otras personas, también está bien ahorrar cómputo en preguntas muy simples. En ese caso, puede existir la desventaja de que el modelo trate con menos cuidado las preguntas fáciles de identificar, pero ese costo no lo asumo yo. En cambio, si uso el modelo directamente en mi PC, después de haber invertido bastante en una GPU quiero aprovechar al máximo esos recursos; no necesariamente quiero reducir cómputo incluso en consultas simples
¡Da mucho en qué pensar! Nosotros también vamos a discutir internamente si, al diseñar un crawler de IA, debemos reconocer dinámicamente en qué sitios conviene lanzar más consultas y en cuáles menos. Como referencia, somos samaritanscout.org, un proyecto de motor de búsqueda que reúne todas las oportunidades locales de voluntariado publicadas en distintos sitios de organizaciones sin fines de lucro
Soy muy nuevo en el mundo de los LLM y la IA, pero este proyecto me interesa mucho. Me resulta muy intuitivo e impresionante que AutoThink ajuste el esfuerzo computacional para que la IA “piense de forma más inteligente” según la dificultad del problema: se puede comparar con cómo una persona resuelve al instante algo como 2+2 y solo se detiene a pensar de verdad en problemas difíciles. No entiendo bien los aspectos técnicos como el presupuesto de tokens o el
steering vector, pero me atrae mucho esta idea de volverse al mismo tiempo más rápido y más inteligente. Voy a seguirlo de cercaCreo que sería mejor no usar términos como “pensar” o “razonamiento” en el contexto de los LLM: ambas palabras tienen significados específicos y una carga filosófica, cuando en realidad los LLM no piensan ni razonan así, sino que más bien generan resultados mediante más cómputo (tiempo de procesador)
Ese barco ya zarpó. Igual que antes la palabra “computadora” se refería a personas que hacían cálculos y ahora pasó completamente a las máquinas, aquí también cambió el significado del término
Lo comparo con “ping”: cuando haces
pinga una dirección IP no estás enviando ondas sonoras a un casco metálico, pero se usa en sentido figurado porque encaja con la función real. Si una metáfora es útil, se usa cotidianamente aunque no coincida 1:1 con la realidadMi visión del mundo es materialista en principio y determinista. Pero en la vida diaria también le sumo existencialismo y hasta cierta sensibilidad espiritual. Desde una perspectiva práctica, atribuir temporalmente cualidades antropomórficas a este tipo de herramientas facilita la conversación y ayuda a entenderlas intuitivamente. A veces ese enfoque muestra sus límites, pero cuando pasa creo que siempre se puede cambiar con facilidad a un marco más analítico