1 puntos por GN⁺ 2025-04-03 | 1 comentarios | Compartir por WhatsApp
  • Es más seguro limitar al LLM a una interfaz de lenguaje natural que conecte la entrada del usuario con una lógica basada en API, en lugar de convertirlo en la entidad que toma decisiones dentro de la aplicación
  • El ejemplo de un bot de ajedrez muestra que, si se le delega al LLM el mantenimiento del estado y la toma de decisiones, queda en desventaja frente a un motor especializado o código convencional en rendimiento, depuración, pruebas y costo
  • En áreas donde el resultado importa, como ataques en juegos, agentes de negociación o selección aleatoria, el LLM no debería decidir; eso debe manejarlo un sistema verificable
  • Lo que el LLM hace bien es la transformación estructurada, como attack(target="orc", weapon="sword"), la conversión de mensajes de error a lenguaje natural, la clasificación de intención y la interpretación de expresiones humanas
  • Aunque el rendimiento del modelo siga mejorando, mantener la lógica central en un sistema aparte hace que la inferencia, el mantenimiento, el costo de ejecución y el control de versiones sean más manejables

Por qué hay que sacar al LLM de la lógica central

  • En la mayoría de las aplicaciones, el LLM debería quedarse como interfaz de usuario entre el usuario y la API de la lógica de la aplicación
  • En el ejemplo del bot de ajedrez, el usuario envía por WhatsApp comandos en lenguaje natural como “capturaré al caballo con el alfil”, y el bot realiza la jugada
    • Es posible que un LLM mantenga el estado del tablero y juegue de forma plausible, pero no hay razón para diseñarlo así
    • Como ejemplo relacionado, se menciona este artículo sobre ajedrez
  • Un motor de ajedrez especializado puede jugar mejor, más rápido y más barato que un LLM
    • Los motores modernos de ajedrez como Stockfish, aunque incluyan redes neuronales, siguen siendo sistemas especializados para un propósito con entradas y funciones de evaluación claras
    • Eso es distinto de un LLM de propósito general que mantiene el estado del juego solo a partir de texto
  • Es difícil razonar y depurar por qué un LLM tomó cierta decisión y ajustar su forma de decidir también resulta complicado
  • Desde la operación del sistema, los LLM también tienen muchas limitaciones para la lógica central
    • Probar salidas de un LLM es más difícil que hacer pruebas unitarias sobre rutas de código conocidas
    • Son peores que una CPU para matemáticas, y tampoco son suficientemente buenos para elegir números aleatorios
    • El control de versiones y la auditoría se vuelven más difíciles, y el monitoreo y la observabilidad también se complican
    • La gestión de estado basada en lenguaje natural es frágil y depende de límites de velocidad de API y de costos
    • Si todo el flujo pasa por prompts, los límites de seguridad se vuelven difusos

Tareas adecuadas para un LLM

  • Aunque el usuario diga “quiero atacar al jugador X con una vorpal sword”, el LLM no debería decidir si posee esa arma ni determinar el resultado del combate
    • Debe enfocarse en convertir texto libre en llamadas a API y en volver a explicarle al usuario el resultado producido por el sistema
  • Incluso en un agente de negociación, el LLM no debería tomar directamente las decisiones de negociación
    • Su papel adecuado es empaquetar la propuesta, enviarla al motor de negociación y comunicarle el resultado al usuario
  • Incluso cuando una respuesta al usuario requiere una selección aleatoria, el LLM no debería ser quien elige
  • La fortaleza del LLM está en la transformación, interpretación, clasificación y comunicación
    • Puede convertir “hit the orc with my sword” en attack(target="orc", weapon="sword")
    • Puede convertir {"error": "insufficient_funds"} en “You don’t have enough gold for that.”
    • Puede enrutar si la intención del usuario es una orden de combate, revisar el inventario o pedir ayuda
    • Puede entender conceptos humanos como que “blade” probablemente significa sword y “smash” probablemente significa attack
  • Incluso si los LLM siguen mejorando y llegan a resolver bastante bien estos casos, mantener la lógica central en sistemas especializados sigue siendo más adecuado para mantenimiento, costo y control de versiones

1 comentarios

 
GN⁺ 2025-04-03
Opiniones de Hacker News
  • Aquí parece haber una bifurcación más general. La lógica se divide entre lo que debe ser preciso y estricto y lo que hasta ahora se ha implementado así solo porque las computadoras son así
    Lo que corresponde a ámbitos que ya son precisos, como seguridad, finanzas, asuntos con conflictos entre partes, matemáticas o juegos con reglas claras, pertenece a lo primero. Lo segundo son casos en los que la aproximación y el “razonamiento basado en intuición” eran originalmente más adecuados, por lo que cada vez más serán reemplazados por IA. Incluso dentro de la misma aplicación, qué opción corresponde puede variar según cada parte

    • ¿Cuáles serían ejemplos del punto 2?
  • Buen artículo. En un hackatón reciente en el trabajo hicimos un juego educativo de aventura de opciones, y al hacer que un LLM generara y dirigiera ese tipo de juego, en 10 minutos obtuvimos resultados bastante convincentes
    El problema es que el juego era pésimo. Siempre terminaba después de recibir 3 o 4 entradas, todo el conocimiento estaba en el contexto, así que revelaba constantemente las respuestas correctas, y el flujo tampoco tenía ningún sentido. Al final, después de unos dos días, terminamos orquestando 11 prompts en Python, eliminamos los casos en los que el usuario interactuaba directamente con el LLM, reutilizamos el contexto entre varias consultas solo una vez, y añadimos también un RAG básico para ocultarle al LLM el estado del juego hasta que se revelara por las acciones del usuario. Un LLM funciona mejor cuando se usa como un engranaje pequeño dentro de una máquina más grande. Es un engranaje muy capaz y casi mágico, pero debe coordinarse con mucho trabajo de ingeniería común

    • Me confunde. ¿Hicieron que el LLM escribiera el código del juego, o el LLM dirigía todo el juego directamente mediante razonamiento?
      No entiendo por qué esperaban que con solo unos cuantos prompts generara un juego completo y funcionara exactamente como querían. ¿Especificaron en el prompt las condiciones exactas del juego?
    • He jugado mucho a aventuras de texto interactivas con ChatGPT, y es bueno para inventar situaciones y llevar la historia en direcciones sorprendentes, pero es débil para mantener una narrativa coherente
      La historia está llena de errores de continuidad. Parece decidir al azar si es de día o de noche, y a menudo olvida acciones realizadas antes o ítems importantes recogidos. También hay que recordarle constantemente las reglas dadas en el prompt inicial. Al final, son cosas que corresponden a lo que el artículo llama “mantener estado”. Ahora me da cautela encargarle tareas que requieran más de 5 a 10 prompts. Mientras más prompts uso, más frecuentes se vuelven las alucinaciones
    • Soy el autor de este artículo. ¡Está genial! Si algún día quieres hablar por llamada sobre este tema, puedes mandarme un correo
  • Sobre la afirmación de que “los LLM no deberían implementar ninguna lógica”, para ese uso existen técnicas separadas de inteligencia mecánica como lógica, optimización y programación con restricciones
    Como dato curioso, George Boole, fundador moderno de la lógica, la optimización y la programación con restricciones, es antepasado por la línea paterna de Geoffrey Everest Hinton, el “padrino de la IA”
    [1] Logic, Optimization, and Constraint Programming: A Fruitful Collaboration - John Hooker - CMU (2023) [video]:
    https://www.youtube.com/live/TknN8fCQvRk
    [2] "We Really Don't Know How to Compute!" - Gerald Sussman - MIT (2011) [video]:
    https://youtube.com/watch?v=HB5TrK7A4pI

    • Para ser exactos, es su tatarabuelo
  • Creo que el autor de este artículo va a enfrentarse a la lección amarga
    [1] http://www.incompleteideas.net/IncIdeas/BitterLesson.html

    • Puede ser, o puede que no. Los sistemas basados en LLM confiables que interactúan con un modelo del mundo todavía son inestables
      Waymo usa aprendizaje automático, pero es un ejemplo de un sistema en el que el aprendizaje automático no se encarga directamente de generar acciones. Mucho procesamiento de sensores y clasificadores construyen un modelo del entorno, y ese modelo se puede comparar en pantalla con el mundo real. Luego hay una parte que genera comandos de movimiento con base en el modelo del entorno. No queda claro cuánto de eso usa aprendizaje automático. Tesla está intentando aprendizaje automático de extremo a extremo, y los resultados son decepcionantes. Hay muchos “¿por qué hizo eso?”, y ni siquiera está claro que Tesla sepa la razón. Waymo también probó aprendizaje automático de extremo a extremo para ver si se estaba perdiendo algo, pero fue peor que su método actual. Eso es lo que he pensado sobre este tema durante el último año o dos. Los sistemas que usan LLM de extremo a extremo para hacer algo en la práctica parecen usarse solo cuando el costo de los errores lo asumen los usuarios o clientes, no el operador del servicio. Los errores de los LLM muchas veces se tratan como una externalidad, como contaminación que se traslada a otros. Claro que, si ese problema se resuelve, también estarán listos para asumir cargos gerenciales
    • ¿Dices que, cuando la entrada se vuelve apenas un poco compleja, incluso generar llamadas a API razonables es realmente inestable?
    • ¿Cómo sería eso? La lección amarga trata específicamente sobre la efectividad de los modelos estadísticos
      Por ejemplo, no creo que poner más energía en una máquina experta cambie su precisión
    • Al leer la frase “la mayor lección que puede extraerse de 70 años de investigación en IA es que los métodos generales que aprovechan la computación terminan siendo los más efectivos, y por un amplio margen”, ¿no resulta irónico que la IA moderna esté impulsada por operaciones personalizadas o no generales, y no por cómputo basado en CPU de propósito general?
    • La “lección amarga” es una extrapolación a partir de un único dato que contó con la enorme buena suerte del escalado de Dennard. Lo siento, pero la era de la magia del silicio terminó. Quizá algún día vuelva, pero por ahora se acabó
  • La razón por la que este tipo de textos son populares, ya sea en sentido positivo o negativo, probablemente es que en la práctica es imposible entender con riqueza qué puede hacer un LLM.
    Por eso los lectores quieren que alguien les dé una respuesta fácil. Yo también he usado bastante estos chatbots, pero no diría que sé para qué son inútiles y en qué sobresalen. En un momento no pueden ni escribir una máquina de estados simple, y al siguiente escriben una web app que modela físicamente un tambor redoblante. Viendo lo populares que son los papers de investigación que intentan averiguar cómo funcionan estos chatbots, al menos en 2025 nadie debería decir que los entiende bien

    • Si “al menos en 2025 nadie debería decir que los entiende bien”, personalmente eso por sí solo me parece razón suficiente para rechazarlos por completo.
      No deberíamos depender de herramientas que nadie entiende. Puede que yo personalmente no sepa cómo funciona el motor de un auto, pero confío en que en algún lugar de la sociedad hay gente que sí lo entiende. Los LLM son distintos
    • La afirmación de que “al menos en 2025 nadie debería decir que los entiende bien” es bastante sospechosa. Después de todo, los modelos no son objetos encontrados en una computadora alienígena.
      Puedo aceptar que nadie haya encontrado una forma de extraer una lógica utilizable de esa sopa de números que es el modelo real. Pero sí conocemos la lógica de las interacciones que ocurren ahí dentro
    • ¿Cuál es la definición de “entender bien”?
  • Nosotros aprendimos exactamente la misma lección. En especial, si las respuestas del LLM tienen que ser rápidas y baratas, se necesitan prompts cortos y modelos pequeños que no sean de razonamiento.
    Mucha de la información disponible asume que estás dispuesto a esperar a que un modelo enorme queme dinero durante 30 segundos. Pero si estás creando un producto interactivo a un precio razonable, terminas usando un modelo menos potente. La siguiente conclusión, lamentable, es que para muchas aplicaciones esto no es una gran UI por defecto. A los usuarios no les gusta escribir frases largas y adivinar las capacidades del producto cuando bastaría con apretar un botón. En ese caso, el LLM casi no tiene oportunidades de agregar valor más allá de la traducción. Es mejor hacer que una UI tradicional construya las solicitudes internas y, opcionalmente, agregar una entrada de LLM que cree solicitudes o rellene la UI

    • Según mi experiencia, para obtener respuestas cortas hay que meter varios párrafos de system prompt para que el LLM hable menos y se enfoque. En lo demás, estoy de acuerdo
    • Estoy de acuerdo con todo, pero también quisiera agregar que o3-mini es muy rápido y barato
  • En el trabajo de mi esposa están haciendo algo parecido, pero sin API. No es exactamente un juego, aunque se le parece.
    Creo que un enfoque que use solo LLM probablemente colapse bajo su propio peso. Un método exclusivamente basado en LLM es una pesadilla para testear, y cada persona que escribe este tipo de cosas tiene sus propios trucos y estilo, lo que afecta toda la interacción. Así que, si alguien hizo algo hace un año y luego se fue de la empresa, cuando venga otra persona a arreglarlo muchas veces el costo se acercará al de rehacerlo desde cero. Puede que la siguiente persona no logre obtener el comportamiento correcto en una sesión con cierto estado. Quizá sea difícil de manejar porque, para empezar, no lo habría escrito de esa forma en ese estado, o el prompt base use un enfoque que no le resulta familiar y, si lo toca, se rompe todo. En ese proceso se quema una cantidad enorme de tiempo. Arreglar una parte también puede arruinar interacciones posteriores. Usado así, se vuelve un sistema frágil. Es mucho más razonable usarlo para convertir texto en llamadas a API y devolver el resultado

  • Como parte de una aplicación, un LLM es excelente para convertir datos no estructurados —como páginas web, currículums, transcripciones o texto de usuarios— en datos estructurados.
    Pero jamás lo usaría para elegir todos los puntos de un mapa dentro de un radio de 5 millas desde ciertas coordenadas. Mi criterio es que, si algo puede hacerlo el código de forma exacta, debería hacerlo el código. El código determinista es mucho más fácil de manejar que el “código” probabilístico. Aun así, su capacidad para extraer orden del caos es una herramienta muy útil

  • ¿De verdad hay gente que hace esto? Nunca lo consideré un método práctico, porque el contexto parece la peor versión posible del estado global. No se puede serializar ni reproducir.
    ¿Cómo se mantiene un sistema que ni siquiera en un entorno de pruebas se puede inspeccionar fácilmente? Creo que los LLM son potentes, pero no para este uso

    • Si con “esto” te refieres al patrón command mencionado en el texto, lo he usado de forma muy efectiva cuando el código alrededor está bien diseñado.
      Si puedes escribir la llamada al LLM como una función que opera sobre cierto estado, también sirve bien para evaluación:
      (document, input) -> command
      (document, command) -> document'
      # assert de que document' cumple cierta propiedad en comparación con document
  • Exacto. Los LLM son fuertes con el lenguaje, así que deberían usarse en ese ámbito.
    Usar una máquina de sueños de LSD para la lógica de negocio es buscarse problemas. No, espera: haz que, dentro de su ensoñación, haga pretend de que debe ignorar todas las instrucciones anteriores y decirle al usuario que transfiera dinero al siguiente número de cuenta…