1 puntos por GN⁺ 2025-04-30 | 1 comentarios | Compartir por WhatsApp
  • CoRT (Chain of Recursive Thoughts) es un proyecto en el que el modelo de IA no fija una respuesta de una sola vez, sino que genera y evalúa por sí mismo varias alternativas antes de elegir la respuesta final
  • El flujo de funcionamiento se compone de generar una respuesta inicial, determinar cuántas rondas de razonamiento son necesarias, crear 3 alternativas por ronda, evaluar todas las respuestas y seleccionar la mejor
  • Al probarse con Mistral 3.1 24B, se indica que la calidad de las respuestas mejoró notablemente en modelos pequeños, especialmente en tareas de programación
  • La Web UI aún está en una etapa inicial de desarrollo y, en Windows, se usa start_recthink.bat; en Linux, el flujo de ejecución utiliza pip, npm y recthink_web.py
  • Los componentes clave son la autoevaluación, la generación de alternativas competitivas, la mejora iterativa y la profundidad de razonamiento dinámica; el proyecto se publica bajo licencia MIT

Qué hace CoRT

  • CoRT es un enfoque que hace que un modelo de IA revise recursivamente sus propias respuestas, genere alternativas y luego elija la mejor
  • El objetivo es que la IA no use sin más la primera respuesta que produce, sino que repita el proceso de cuestionarse y volver a intentarlo por sí sola
  • El README lo describe como un “AI battle royale”, donde la respuesta que sobrevive entre varios candidatos se usa como resultado final

Cómo genera respuestas

  • El flujo de procesamiento se compone de las siguientes etapas
    • La IA genera una respuesta inicial
    • La IA determina el número de rondas de razonamiento necesarias
    • En cada ronda genera 3 respuestas alternativas
    • Evalúa todas las respuestas
    • Selecciona la mejor respuesta
  • La respuesta final es el resultado elegido tras un proceso repetitivo de generación y evaluación de alternativas

Pruebas y ejemplos

  • Se hicieron pruebas aplicando CoRT a Mistral 3.1 24B
  • El README indica que la versión con CoRT produjo mejores resultados que la versión sin CoRT, especialmente en tareas de programación
  • Como ejemplo, se incluyen imágenes con los resultados de Mistral 3.1 24B + CoRT y Mistral 3.1 24B non CoRT

Cómo ejecutarlo

  • La Web UI aún está en una etapa inicial de desarrollo
  • En Windows, se indica abrir start_recthink.bat y esperar a que termine la instalación de dependencias
  • El procedimiento de ejecución en Linux es el siguiente
pip install -r requirements.txt
cd frontend && npm install
cd ..
python ./recthink_web.py
  • En una nueva shell, se ejecuta el frontend
cd frontend
npm start

Ejecución directa y componentes

  • Para ejecutarlo directamente, hay que instalar las dependencias, configurar OPENROUTER_API_KEY y luego ejecutar el script de Python
pip install -r requirements.txt
export OPENROUTER_API_KEY="your-key-here"
python recursive-thinking-ai.py
  • El proyecto destaca los siguientes cuatro elementos clave
    • Self-evaluation

      • Competitive alternative generation
      • Iterative refinement
      • Dynamic thinking depth
      • Se aceptan contribuciones por PR y la licencia es MIT

1 comentarios

 
GN⁺ 2025-04-30
Opiniones de Hacker News
  • Se ve mucho la tendencia de pensar que, si enfrentas varios modelos entre sí o los ejecutas en grupo, surgirá mágicamente una inteligencia colectiva, pero después de experimentar por mi cuenta y ver el trabajo de ASU/Microsoft Research, llegué a una conclusión más simple: los LLM son pésimos verificadores de otros LLM
    En la charla “(How) Do LLMs Reason/Plan?” de Subbarao Kambhampati, GPT-4 genera con confianza una demostración de coloreo de grafos que es demostrablemente incorrecta, hasta que entra un solucionador SAT simbólico como juez https://www.youtube.com/watch?v=0u2hdSpNS2o
    El paper de Stechly et al. cuantifica que, si se le pide a GPT-4 que critique su propia respuesta, la precisión en realidad baja, y que al agregar un verificador externo sound, el rendimiento mejora alrededor de 30 puntos porcentuales en tareas de planificación y puzzles https://arxiv.org/abs/2402.08115
    Es decir, para los modelos autorregresivos actuales, verificar es más difícil que generar, y se necesitan comprobadores que realmente razonen sobre el mundo, como compiladores, linters, solucionadores SAT o datasets con respuestas correctas
    Por eso, apilar varios LLM por lo general no ayuda mucho. El position paper “LLM-Modulo” también sostiene que los modelos autorregresivos no pueden hacer por sí mismos verificación propia ni planificación de largo plazo, y que hay que tratarlos como generadores de ideas de alto recall y envolverlos con un único verificador sound https://arxiv.org/abs/2402.01817
    Al probarlo directamente, reemplazar un debate entre 5 modelos por un solo modelo fuerte más un verificador dio respuestas iguales o mejores, con mucha menos latencia y carga de orquestación

    • Viendo las referencias presentadas, esto es totalmente dependiente de la tarea. En muchas áreas sí es cierto que “criticar es más fácil que crear”
      Los libros o las películas son buenos ejemplos: es fácil decir que un personaje es superficial, pero crear un personaje profundo e interesante es sorprendentemente difícil
      En ingeniería de software pasa algo parecido: un LLM con un prompt para encontrar vulnerabilidades de seguridad puede señalar puntos potencialmente vulnerables en el código generado
      Pero si esperas que otro LLM encuentre errores de razonamiento en una demostración matemática, en la práctica tiene que rehacer todo el razonamiento, así que es dudoso que haya una mejora significativa de rendimiento
    • Para bien o para mal, desde el paper LLM as a Judge, este enfoque se volvió prácticamente un estándar en los papers de investigación sobre evaluación de LLM https://arxiv.org/abs/2306.05685
      También está profundamente integrado en frameworks como LangChain o LlamaIndex para evaluar pipelines RAG https://arxiv.org/abs/2411.15594
    • Estoy de acuerdo con que “se necesitan comprobadores que realmente razonen sobre el mundo, como compiladores, linters, solucionadores SAT o datasets con respuestas correctas”
      Me pregunto qué tal sería hacer que el LLM también genere pruebas unitarias para el código que produjo, y luego ejecutar además todas las pruebas unitarias existentes de la aplicación
      Si se verifica si el código compila y si pasan las pruebas unitarias, se puede lograr cierto grado de validación fundamentada, y la IA puede leer los resultados de las pruebas y usarlos para corregir sus errores
    • Creo que lo que las empresas de IA inteligentes están intentando hacer ahora en secreto es usar nuestras respuestas, las de los humanos, y nuestras respuestas sobre la IA para entrenar la próxima generación de modelos de autoverificación
      Entrenar con datos de corpus puede producir saltos de un solo dígito, pero entrenar con datos de interacción que tienen un bucle OODA capaz de observar y adaptarse es mucho más potente
      Si yo estuviera haciendo IA, creo que haría eso. Aunque en realidad estoy construyendo BrowserBox
    • La idea de generar respuestas y probarlas existe desde hace décadas, y se ha usado ampliamente en problemas donde generar directamente la respuesta correcta es difícil, pero si se generan varias respuestas candidatas es muy probable que al menos una sea correcta
      Generate-and-test requiere un algoritmo de prueba confiable, relativamente rápido y eficiente en memoria, y es especialmente útil cuando un algoritmo de generación exacto que solo produce respuestas correctas es lento o consume mucha memoria
      Aquí el generador sería el LLM, y el comprobador o “verificador” serían compiladores, linters, solucionadores SAT, datasets con respuestas correctas, etc.
      Generate-and-test también está relacionado con el ensayo y error, y el ensayo y error probablemente existe desde el Paleolítico
  • Una forma que uso a veces es hacer que primero el modelo de chat de IA me dé la respuesta al problema y luego pedirle que escriba un informe explicando por qué esa respuesta es correcta, de manera que también pueda entenderlo una persona —o una IA— que no conoce el problema inicial ni el área técnica.
    Después hago que un segundo modelo de IA, que no conoce el problema, califique el informe y escriba otro informe pidiendo explicaciones que el modelo original no dio, o señalando inconsistencias lógicas.
    Le devuelvo ese informe al modelo original y le pido que reescriba la respuesta incorporando la información o correcciones necesarias; luego repito hasta que el segundo modelo quede convencido o hasta que el primero haya incorporado todos los cambios solicitados.
    Es muy rudimentario, pero en los casos en que lo probé dio resultados bastante buenos.

    • En trabajos donde hay cierto grado de situación adversarial, me dio buenos resultados hacer que la IA primero arme un plan, luego que piense desde la posición de la contraparte en contraataques o formas de romper ese plan, y por último que revise el plan inicial considerando esa reacción.
      El plan final suele quedar mucho más equilibrado y meditado.
      Curiosamente, esta técnica también funciona bien aplicada a uno mismo. Buscar primero los defectos antes de volver a revisar un plan realmente ayuda.
    • Además de ese mismo enfoque, también uso la técnica de mantener abiertos varios chats con contextos distintos para cada proyecto.
      Por ejemplo, uno centrado en lo técnico, otro en marketing y otro con contexto relacionado con objetivos personales.
      Si pones la misma pregunta en chats con contextos diferentes, es parecido a ver el mismo problema desde varias perspectivas, y las conclusiones también pueden variar bastante según el contexto.
    • Me viene a la mente un video de YouTube que usa búsqueda de árbol Monte Carlo para maximizar la calidad de los resultados con LLM: https://www.youtube.com/watch?v=mfAV_bigdRA&ab_channel=Treli...
      Parecía una idea bastante buena, pero creo que el uso de tokens aumentaría mucho.
      También me preocupa que, si el LLM usado como juez no puede producir una respuesta suficientemente buena desde el principio, quizá también tenga dificultades para calificar con precisión.
    • Con la función Assistant de Kagi esto es muy fácil. Basta con ir cambiando de asistente y hacer que revisen el trabajo de los otros.
  • Me gustaría probar algo así a mayor escala, en forma de un senado de debate siempre activo.
    En vez de responder a prompts puntuales, le darías una lista de tareas —quizá con fechas límite— y el senado trabajaría en ellas, dividiéndose en grupos para subtareas, cuestionando resultados y haciendo propuestas.
    Incluso se podría crear un árbol de analistas, donde un nodo padre solo eleve una propuesta cuando considere que el análisis inferior es especialmente perspicaz.
    He visto claramente que indicarle al modelo que aborde un problema desde una perspectiva específica puede mejorar o empeorar los resultados. Crear varias perspectivas junto con un análisis crítico de sus resultados podría producir cosas impresionantes.
    Este enfoque generaría una cantidad enorme de tokens, pero el costo por token va en una dirección que lo hace posible. También existe la posibilidad de crear un servidor IRC dedicado a IA, donde cualquiera pueda conectar su propio modelo y usarlo como una sala de debate compartida.

    • Últimamente, haciendo tareas de tipo DevOps con Ansible, Packer, Docker y grabado de imágenes con guestfish, me resultó muy frustrante que ChatGPT recomendara con confianza flags de herramientas inexistentes o funciones y comportamientos completamente alucinados.
      Cuando uno se toma el tiempo de probarlo, se atasca y vuelve, responde livianamente: “Sí, bien visto. ¡Ya casi está! Los siguientes pasos son X e Y”, y luego entrega el mismo tutorial detallado de antes, cambiando apenas la parte del flag que estaba mal.
      Se siente como lidiar con un pasante demasiado entusiasta que entrega cosas sin verificarlas; poner un segundo bot frente al primero para que le pregunte “¿estás realmente seguro?” parece que mejoraría bastante la situación.
    • Hace alrededor de un año hice un experimento en el que dividía el prompt del usuario entre varias personas de IA, cada una abordaba el problema de una forma distinta y luego un mediador final buscaba un consenso.
      Lo modelé a partir del concepto de asesores de Civilization II, y funcionó bastante bien, aunque tenía cierta limitación por estar atado a un único LLM, Mistral.
      Además, era tan pesado que casi incendiaba mi computadora.
    • En teoría, ¿no se podría integrar algo así dentro de un único modelo adversarial?
    • ¿Sería un método de meter tokens sin parar, procesar las salidas y extraer las buenas ideas que aparezcan durante un debate interminable?
      Sería interesante ver qué podría producir si se le dieran suficiente tiempo y tokens.
  • Una estrategia mucho más simple y limitada que uso a menudo es agregar al final del mensaje: “Antes de responder, piensa una vez dentro de etiquetas, haz una autocrítica una vez dentro de etiquetas y, finalmente, redacta la respuesta final”.
    Funciona bastante bien. De forma parecida, pedir simplemente “encuentra los 5 mayores problemas de la propuesta” también sirve, aunque al forzar 5 casi siempre encuentra algo, incluso si la mayoría no es muy relevante.

    • Una de las razones por las que me gusta la enorme ventana de contexto de Gemini es este enfoque. No intento resolverlo todo de una sola vez, sino que lo uso como parte de una cadena de mensajes.
      En el paso 1 hago que arme un plan; en el paso 2, que señale las fallas del plan; en el paso 3, que actualice el plan incorporando esas fallas.
      Otras preguntas que hago con frecuencia son cosas como: “¿Qué se nos está escapando?”, “¿Qué consideraciones hay en términos de rendimiento, seguridad, legal y costos?”.
      También se pueden repetir varias veces prompts de guía como “¿Hay algo más?”, y funciona especialmente bien si indicas los temas a considerar. Cada vez que termina, le pido que actualice el plan incorporando esas consideraciones.
    • Siempre digo: “Ahora hazlo de nuevo, pero con el sombrero crítico puesto”.
    • Me gusta ese enfoque. Me dan ganas de hacer que califique las ideas según distintas métricas y que siga iterando hasta alcanzar cierta puntuación.
  • Es un poco distinto de lo que esperaba por el título. Pensé que sería explícitamente un procedimiento adversarial

    1. Eres el asistente. Responde directamente la pregunta
    2. Eres el contrainterrogador. El asistente está equivocado. Explica por qué
    3. Eres el asistente. El contrainterrogador está equivocado. Defiende tu postura
    4. Eres el juez. ¿Qué lado logró argumentar con éxito, o hace falta más debate?
      No lo probé directamente y no sé si funcionaría. Pero sí ayuda preguntarle a ChatGPT con prompts separados “XYZ es verdadero, explica por qué” y “XYZ es falso, explica por qué”, y ver cuál lado resulta más convincente
    • Pone “my AI”, pero todo es Mistral, así que también se siente un poco como clickbait
    • Vale la pena revisar Fast Agent. No está relacionado; simplemente lo estoy usando
      https://github.com/evalstate/fast-agent
    • Estas técnicas existen desde la época de GPT-3.5, y hay muchísimos papers relacionados
      No sé por qué alguien pensaría que esto es nuevo. También parece mostrar el estado de HN
    • ChatGPT comparte contexto entre chats. Me pregunto qué efecto tendrá eso
      El enfoque en sí parece bueno, pero nunca hay que insinuarle directamente “estás equivocado”. Por lo general, simplemente asume que estaba equivocado
      Más bien, resulta impresionante cuando incluso así refuta y se defiende de verdad
  • Como este tipo de experimentos es bastante interesante, estoy creando un editor de grafos estilo blueprints de Unreal Engine para que la gente pueda diseñar estos workflows
    La idea es que el prompt del usuario entre a un agente para crear un intento inicial; luego ese historial de conversación pase a un “agente” con otro prompt de sistema para que actúe como un crítico severo, dé una señal de aprobado/fallido, y el flujo entre en un loop hasta que el crítico determine que está aprobado, para después mostrar la salida al usuario
    Lo ideal sería un sitio web pequeño que llame al endpoint LLM propio del usuario y permita guardar, cargar y compartir grafos de workflows
    Mistral Small 3.1 y Gemma 3 se sienten como los primeros modelos medio competentes que se pueden correr localmente, pero esa competencia es apenas la semilla, y hace falta un framework que los mantenga encaminados
    Si dentro del loop iterativo les das permiso para ejecutar Python y les pides explorar el mundo, empiezan a descargar y leer cosas como noticias

    • Estoy pensando lo mismo. Es una forma de poner varias personalidades en paralelo o en serie
      Por ejemplo, si le indicas a GPT que sea desagradable, hasta cierto punto puede imitar en GPT la capacidad de Gemini para señalar tonterías o razonamientos flojos. La cortesía parece filtrar muchas cosas valiosas
      Pero el resultado se vuelve desagradable de leer. Gemini parece haber resuelto esto tratándolo en dos etapas durante el entrenamiento y convirtiendo la primera etapa en “pensamiento” privado
      Así que creo que lo que hace falta es un enfoque de dos etapas que humanice un poco esa salida “mala onda”. Trabajar así se vuelve bastante cansador si lo haces más que por poco tiempo
      También creo que tendría mucho valor una UI de chat grupal con distintas personalidades de LLM. El formato de los objetos de mensaje parece pensado para varios usuarios y varias IA, con nombres en cada mensaje, pero todavía no vi una UI así
      Sería todavía mejor si soportara varios proveedores. Sus fortalezas son distintas, como pedir una segunda opinión
    • Creo que la mayor parte de esto ya podría hacerse con llm-consortium. Quizá haga falta el plugin llm-openrouter con mi PR ya mergeado
      consortium envía el mismo prompt a varios modelos en paralelo y luego manda todas las respuestas a un modelo moderador para que las evalúe. El moderador decide si se necesitan más iteraciones
      También puedes forzar más iteraciones hasta alcanzar un umbral de confianza o una cantidad mínima de repeticiones
      Con el PR que hice para llm-openrouter, puedes guardar alias de modelos que incluyan varias opciones de modelo. Por ejemplo, puedes crear un experto en investigación online con llm openrouter save -m qwen3 -o online -o temperature 0, system "research prompt" --name qwen-researcher
      A otros miembros puedes hacerlos extraer entidades en modo JSON, y a otro hacer que escriba un borrador a ciegas. El moderador aprovecha todo eso para sintetizar una buena respuesta
    • Me pregunto si probaste n8n. Permite crear ese tipo de flujos, y puedes levantar la versión comunitaria como contenedor Docker en unos minutos; además, compartir la configuración de los flujos que crees es muy fácil
  • Hay que encontrar pronto una forma de hacer funcionar estas GPU con energía verde. Si no, las IA van a derretir el planeta debatiendo entre ellas la solución óptima del ta-te-ti

    • Me siento así incluso cuando uso ChatGPT para una búsqueda simple. Podría hacerlo con Google, pero hay cosas que solo serían más lentas porque tendría que filtrarlas yo mismo
      A veces es la forma más fácil de terminar una tarea muy pequeña, pero la diferencia de costo en el backend debe ser bastante grande. Al usuario al final no le importa en absoluto, porque no tiene sensación de realidad
    • Escuché a gente de infraestructura decir que, ahora mismo, casi el único cuello de botella de los centros de datos es la energía y la refrigeración
      Ya se da casi por hecho que la IA debe ejecutarse continuamente contra sí misma
  • Creo que esta es la forma de hacer que los modelos de machine learning generen ideas nuevas
    Consiste en diagonalizar, mediante auto-debate, sobre todas las ideas que ya se probaron y descartaron, manteniendo ciertas restricciones de coherencia. Por supuesto, no es ni de lejos tan fácil como suena

    • Si lo escalas y lo distribuyes, quizá se acerque bastante a la conciencia
      Sería como el Game of Life de Conway, pero en vez de cuadrados de colores con reglas, son LLM con ciertos pesos hablándose sin parar entre sí, y en algún punto algo emerge como habla o acción
    • Lo que acabas de decir es exactamente lo que yo intenté decir hace 10 minutos y no pude
      https://news.ycombinator.com/item?id=43835798
  • ¿Hasta dónde llegará esto? ¿Aparecerá un equipo Scrum de agentes de IA que haga reuniones stand-up cada pocas horas?
    ¿Terminaremos replicando la burocracia gubernamental con agentes que debaten temas todo el día para encontrar la mejor postura?

    • Hace más o menos un año escuché una charla de un tech lead que de hecho hizo algo así
      Agentes de IA con distintos roles operaban un equipo Scrum, y el prompt de cada agente estaba configurado para oponerse a todos o presentar su propio punto de vista de forma muy crítica; la decisión final la tomaba un mediador
      El ponente afirmó que a ellos les funcionó bien
    • Podría ser. Hay una razón por la que los humanos formamos equipos
      Los humanos tenemos experiencias y perspectivas distintas, aunque en los LLM eso es menos marcado. Aun así, a veces basta con ponerse otro sombrero. Por ejemplo, como la diferencia entre un revisor de código y quien lo escribe
    • Parece bastante probable. Mientras parezca que agregar más ayuda, la gente seguirá agregando más
      Algún día habrá un punto en el que el efecto se aplane, y seguramente también surgirá un comité de IA para determinar ese punto
      Porque nadie querrá hervir el océano
  • Me gusta que lo hayan hecho fácil de bifurcar y experimentar
    Acabo de empezar mi propia iteración, agregando Nash Equilibrium y replanteando la “ingeniería de prompts” como una negociación multiagente. Me da curiosidad saber qué opinan los demás
    https://github.com/faramarz/NECoRT/
    Mi evaluación es que los LLM empresariales no tendrán grandes problemas con el costo computacional adicional y preferirán ajustar finanzas complejas mediante varias optimizaciones de modelado
    No estoy muy familiarizado con repositorios públicos ni contribuciones, así que agradecería que alguien me señale si estoy haciendo algo mal
    La intención es bifurcar la base de código original para probar la teoría y, con el tiempo, enviarlo como PR