- Los modelos de lenguaje grandes (LLM) pueden producir inestabilidad al generar formatos estructurados como JSON, XML o código, y este es una guía práctica para desarrolladores para resolver ese problema
- Debido a su naturaleza probabilística, la salida puede romperse de forma no determinista, por lo que aborda técnicas deterministas de estructuración para compensarlo
- Cubre todo el proceso, incluyendo principios de funcionamiento internos, selección de herramientas y tecnologías, despliegue, escalado y optimización de costos, y mejora de la calidad de salida
- Integra la información más reciente de un campo de generación estructurada que cambia rápidamente en un documento que se actualiza continuamente
- Es una referencia esencial para desarrolladores que usan LLM de forma programática para extracción de datos, generación de código y llamadas a herramientas
Por qué se necesitan salidas estructuradas de LLM
- Los LLM suelen generar salidas sintácticamente válidas como JSON, XML o código, pero debido a su naturaleza probabilística pueden aparecer errores de formato o resultados incompletos
- Esto provoca problemas en procesos automatizados como la extracción de datos, la generación de código o las llamadas a herramientas
- Para resolver estos problemas, se necesita un enfoque de salida estructurada determinista
- El manual cubre todo el conjunto de herramientas y técnicas para que los desarrolladores puedan implementar salidas estructuradas de forma estable
Contenido principal del manual
- Incluye temas orientados a la práctica como principios de funcionamiento internos, las mejores herramientas y tecnologías, criterios para elegir herramientas, cómo construir, desplegar y escalar sistemas, optimización de latencia y costos y mejora de la calidad de salida
- Cada apartado está organizado como un enfoque paso a paso aplicable directamente por desarrolladores
- Reúne en un solo documento la investigación más reciente y las herramientas open source relacionadas con salidas estructuradas
Vigencia y actualizaciones
- La tecnología de generación estructurada evoluciona muy rápido, por lo que el material existente queda desactualizado enseguida
- Este manual se mantiene como un living document que se actualiza regularmente
- Los desarrolladores pueden acceder a la información más reciente en un solo lugar sin tener que revisar múltiples papers, blogs y repositorios de GitHub
Cómo usarlo
- Se puede leer completo de forma secuencial o usar como una obra de consulta para encontrar de inmediato el tema necesario
- Su estructura, centrada en desarrolladores en la práctica, permite una referencia rápida al resolver problemas concretos
Creadores y comunidad
- El manual fue creado por el equipo de Nanonets
- A través del newsletter de la comunidad de desarrolladores de LLM, comparten cada dos semanas los insights más recientes, avances y herramientas y técnicas útiles
1 comentarios
Comentarios de Hacker News
Es una guía realmente hermosa. Me gustaron especialmente las animaciones de cambio de pestaña en varias páginas.
Pensaba que entendía bastante bien la generación con restricciones gramaticales (incluso hice algunas contribuciones a la implementación de grammar en llama.cpp), pero aun así obtuve ideas nuevas de esta guía.
Creo que la salida estructurada es una de las funciones más subestimadas de los motores LLM. Gracias a las restricciones gramaticales, se puede usar un LLM de forma confiable como parte de un pipeline más grande (por ejemplo, un agente que llama herramientas).
La salida puede estar mal semánticamente, pero gramaticalmente siempre será correcta. Esto es especialmente importante cuando se usan modelos locales.
Por ejemplo, como en el ejemplo del filtro de spam de Jart basado en Raspberry Pi, si aplicas una grammar para que el modelo TinyLlama solo genere
"yes"o"no", funciona de forma estable incluso en hardware pequeño.Es una guía excelente. Investigué generación estructurada en mi doctorado, así que comparto algunos recursos para quienes estén interesados.
Como bibliotecas están Outlines, Guidance y XGrammar.
Como artículos recomiendo Efficient Guided Generation for Large Language Models, Automata-based constraints for language model decoding y Pitfalls, Subtleties, and Techniques in Automata-Based Subword-Level Constrained Generation.
Y como entradas de blog están LLM Decoding with Regex Constraints y Coalescence: making LLM inference 5x faster.
Es una guía bien organizada. Si quieren saber más sobre la optimización de Guidance y llguidance, vale la pena consultar este artículo corto que escribimos.
Esta guía cubre bien los dos enfoques que más suele usar la gente. Aun así, la generación restringida puede diferir de la distribución original del LLM.
Por ejemplo, cuando un LLM genera un objeto estructurado largo, suele preferir patrones como ‘…’, pero la generación restringida puede forzarlo a corregir eso con comillas de cierre y similares, produciendo resultados incorrectos.
En cambio, el resampling repite el proceso hasta obtener un resultado válido, así que puede ser más estable.
Además, en vez de ir alargando el contexto añadiendo errores de esquema, me parece mejor simplemente reintentar por calidad y costo.
Me pregunto si los modelos SoTA (Opus, Gemini, etc.) todavía necesitan enforcement de esquema de salida.
Hoy en día los modelos casi no cometen errores gramaticales al generar JSON o código, así que quisiera saber si internamente siguen haciendo validación de esquema.
Entiendo que la generación estructurada sí es necesaria para modelos pequeños.
json\n, así que sigue siendo más seguro especificar un esquema de respuesta JSON.Forzar salidas estructuradas provoca una caída de rendimiento. En algunos casos puede ser 2 o 3 veces más lento. Hay que evaluar si ese costo vale la pena según la situación.
Es una guía realmente sorprendente. Ojalá hubiera existido algo así hace un año. Definitivamente la voy a compartir con gente de mi entorno.
Buena guía. Me gustó especialmente el diagrama de masked decoding.
Me pregunto si habrá algún formato de salida más confiable y más fácil de parsear que JSON. YAML o TOML tienen sus desventajas, pero quizá sean mejores en cantidad de tokens o costo.
Me da curiosidad el stack técnico de la página de documentación/cookbook. No parece MkDocs ni GitBook; quisiera saber qué usaron.