Hoy anunciamos un avance de última generación que amplía los límites de la generación de código de IA. Nuestro equipo científico de NinjaTech AI desarrolló un enfoque novedoso para la generación de código denominado «Multi-Programming Language Ensemble» (MPLE).
Al usar este enfoque con Llama 3.1 405B Instruct, pudimos mostrar estadísticamente un mejor rendimiento que el GPT-4o de OpenAI y el Sonnet 3.5 de Anthropic, según lo medido por el punto de referencia HumanEval. Puedes encontrar estos resultados, junto con los detalles de nuestro enfoque, en nuestro documento técnico publicado el arxiv.org.
En esta entrada del blog, profundizaremos en tres hallazgos fundamentales relacionados con el Multi-Programming Language Ensemble (MPLE), que tiene el potencial de mejorar significativamente las capacidades de generación de código en todos los asistentes de IA:
- Un enfoque de flujo de trabajo agencial (MPLE), para la generación de código, produce entre un 2 y un 9% más de precisión de manera rentable.
- La integración de MPLE con técnicas de inferencia avanzadas como Reflection y Monte Carlo Tree Search (MCTS), aplicadas a los modelos de LLM existentes produce ganancias de rendimiento adicionales.
- Para nuestra grata sorpresa, observamos que las técnicas MPLE+MCTS impulsadas por llama3.1-405b-instruct alcanzaron una precisión de 96,25% en HumanEval Benchmark.
El desafío de la generación de código
Escribir código puede ser un desafío porque requiere un conocimiento profundo de los lenguajes de programación y la capacidad de traducir ideas complejas en código ejecutable. Además, los desarrolladores también deben enfrentarse a cuestiones como la depuración, la optimización y la compatibilidad, lo que puede hacer que el proceso de codificación sea aún más complejo y lento.
Aquí es donde la IA ayuda; los modelos de lenguaje grande (LLM) pueden generar grandes cantidades de código rápidamente cuando un usuario lo solicita. Desde que lo lanzamos MyNinja.ai a finales de mayo de 2024, procesó más de 734 000 tareas de Coder de aproximadamente 173 000 desarrolladores.
Sin embargo, la generación de código mediante IA no elimina todos los desafíos de escribir código. Los LLM no son confiables al 100%: pueden cometer errores al generar código.
La razón por la que los LLM cometen errores es que los enfoques tradicionales para la generación de código de IA se basan en un único lenguaje de programación, lo que puede provocar errores y sesgos específicos del lenguaje. Por ejemplo, un LLM puede funcionar bien en la generación de código en Python porque se formó en Python. Sin embargo, cuando se le pide que cree un código en C++ o Java, es posible que no genere un resultado preciso debido a las diferencias en la gestión de errores o en el uso de la biblioteca. Otra razón por la que un LLM puede tener dificultades para generar código preciso es la dificultad de traducir texto legible por humanos (es decir, el mensaje del usuario) en código.
Una solución a este problema es invertir en más formación modelo. Las empresas pueden dedicar más tiempo (y cada vez más dinero) a capacitar a los LLM para que respondan a las preguntas de codificación en el primer intento. Esto es lo que se conoce como aprendizaje desde cero, lo que significa que el modelo produce una respuesta correcta sin ejemplos, solo un mensaje, y genera una respuesta adecuada basándose únicamente en sus conocimientos previos. Sin embargo, un enfoque de cero pasos requiere una enorme inversión de tiempo y dinero (más de 10 millones de dólares) para mejorar la precisión del modelo.
Pero los costos de inferencia se han reducido más de 100 veces en los últimos 2 años y lo siguen haciendo, dando lugar a una nueva forma: los flujos de trabajo de agencia para CodeGen.
Nuestra solución: conjunto de lenguajes de programación múltiple (MPLE)
Nuestro equipo ha propuesto un enfoque novedoso para la generación de código de IA llamado Multi-Programming Language Ensemble (MPLE). Este enfoque aprovecha la solidez de varios lenguajes de programación para generar un código más preciso y sólido mediante un enfoque de varios disparos.
En lugar de confiar en el modelo para crear una respuesta correcta en el primer intento (tiro único), interactuamos con el LLM varias veces para generar la respuesta correcta. Cada vez que interactuamos con el modelo, le pedimos que resuelva el problema del usuario utilizando un lenguaje de programación diferente. Esto nos permite aprovechar una ventaja natural de un LLM: la capacidad de traducir código de un lenguaje de programación a otro.
Piense en MPLE como un equipo de expertos, cada uno versado en un lenguaje de programación diferente, que trabajan juntos para crear el código más preciso en el primer intento. Cada experto (o lenguaje de programación) aporta sus puntos fuertes únicos y, al combinarlos, puede producir una solución más precisa y fiable. MPLE pide a todos estos expertos que aporten su «experiencia» mientras nuestro sistema genera el código correcto solicitado por los usuarios.
Así es como funciona MPLE:
- Generación inicial de código: Cuando un usuario solicita a nuestro sistema una pregunta relacionada con el código, nuestro modelo de IA genera una respuesta inicial en el lenguaje de programación solicitado por el usuario.
- Muestreo y traducción en varios idiomas: Antes de devolver la respuesta al usuario, se prueba el código para garantizar su calidad y precisión. Si el código no pasa todas las pruebas, nuestro modelo genera código nuevo en un lenguaje de programación diferente. Luego, el nuevo código se traduce de nuevo al lenguaje de programación solicitado por el usuario. Esta versión alternativa difiere de la versión original porque aprovecha los puntos fuertes del lenguaje alternativo y, potencialmente, elimina los errores que provocaron las fallas de las pruebas.
- Refinamiento iterativo: La versión del código refinado se prueba nuevamente con los casos de prueba. Si no supera todas las pruebas, el proceso continúa con diferentes lenguajes de codificación hasta que una versión supere satisfactoriamente todas las pruebas. Cuando se completa el proceso, se devuelve una respuesta (es decir, la versión final del código) al usuario.
- Integración de conjuntos: A lo largo de las iteraciones, el marco del conjunto integra las fortalezas de varios lenguajes para refinar progresivamente el programa. Al tratar cada generación de código específica de un idioma como si fuera un «experto débil» individual, el marco combina sus resultados para mitigar los errores y sesgos específicos del idioma.

Es importante tener en cuenta que este enfoque no es un modelo nuevo ni requiere volver a entrenar un modelo. Es un sistema que organiza múltiples interacciones con tu LLM actual para crear la mejor respuesta posible mediante un enfoque de varios pasos. Creemos que, a medida que los costes de inferencia sigan bajando, el futuro de los resultados basados en la IA (que sean viables desde el punto de vista económico) dependerá de los flujos de trabajo de las agencias que aprovechen técnicas de inferencia intensiva, es decir, generar muchos tokens para responder a preguntas complicadas.
Validación de MPLE mediante pruebas
Probamos el marco MPLE en dos puntos de referencia de generación de código ampliamente reconocidos: Evaluación humana y Humaneval-Plus. Estos puntos de referencia miden la capacidad de los LLM para generar código funcional en función de las instrucciones del usuario.
HumanEval está diseñado para tareas de generación de texto a código en las que la entrada es un mensaje de usuario que describe la funcionalidad prevista del programa. Luego, los resultados del LLM se evalúan en función de su capacidad para superar las pruebas unitarias con requisitos específicos. HumanEval-Plus amplía HumanEval al incorporar una gran cantidad de casos de prueba adicionales para evaluar rigurosamente la solidez y exactitud del código.
Medimos la eficacia de MPLE con Pass @1. Este método de evaluación de código mide el porcentaje de tareas que el código generado completa correctamente en el primer intento.
Realizamos experimentos utilizando nuestros LLM patentados y otros modelos conocidos como GPT-4o, Claude-Sonnet-3.5 y LLAMA3.1-405b.
Nuestras pruebas mostraron que el marco MPLE propuesto mejora constantemente la precisión de Pass @1 en todos los LLM probados en comparación con una línea de base. Por ejemplo, La precisión del GPT3.5-Turbo aumentó del 65,83% en la línea de base al 74,17% con MPLE, destacando la eficacia de aprovechar varios lenguajes de programación para reducir los sesgos y errores específicos del idioma (consulte la Tabla 1).

La integración de MPLE con Reflection y Monte Carlo produce mejores resultados
Llevamos MPLE un paso más allá y diseñamos un sistema que integra MPLE con técnicas de inferencia avanzadas como Reflection y MCTS. Estas técnicas se utilizan para mejorar las habilidades de razonamiento y resolución de problemas de los LLM, especialmente cuando se trata de tareas que requieren una toma de decisiones estratégica o de varios pasos. Nuestra hipótesis era que la combinación de estos sistemas produciría resultados incluso mejores que si se utilizara MPLE por sí solo. A través de una serie de pruebas, pudimos demostrar que esta hipótesis era cierta.
También probamos MPLE con el punto de referencia HumanEval-Plus y los resultados validan aún más los beneficios de nuestro enfoque de conjunto multilingüe. En particular, El rendimiento de llama3.1-8binstruct mejoró del 60,00% en la línea de base al 71,88% con MPLE+Reflection (véase el cuadro 2).

Además, MPLE+Reflection y MPLE+MCTS ofrecen resultados competitivos, con varios modelos (GPT-4omini, GPT-4o, Claude-Sonnet-3.5 y llama3.1-405b-instruct) que alcanzan el 87,50% (consulte la tabla 3).

Nuestros resultados demuestran claramente que el marco MPLE, especialmente cuando se usa junto con algoritmos de inferencia adicionales, ofrece un enfoque potente y flexible para mejorar la generación de código en varios LLM. Las constantes mejoras de rendimiento de MPLE subrayan su potencial para aplicaciones prácticas en el desarrollo de software basado en la inteligencia artificial.
Llama 3.1-405b logra resultados de última generación con MPLE y MCTS: ¡96,25% de precisión!
Durante nuestro análisis, nos impresionó especialmente el rendimiento de MPLE cuando se aplicó a. La combinación de MPLE+MCTS logró la máxima precisión en varios modelos, como llama3.1-405b-instruct, que alcanzó una precisión SOTA Pass @1 del 96,25% (consulte la tabla 4).

El camino por delante
A medida que continuamos ampliando los límites de lo que es posible con MPLE, nos entusiasma explorar nuevas áreas de investigación y desarrollo. Las posibles áreas de enfoque incluyen:
- Desarrollo de métricas de evaluación más sólidas: La creación de métricas de evaluación eficaces es crucial para medir con precisión el rendimiento de MPLE. Al centrarnos en métricas más completas, podemos garantizar la precisión, la fiabilidad y la aplicabilidad práctica del marco en varios dominios.
- Aplicación de MPLE a problemas del mundo real: MPLE tiene el potencial de abordar desafíos complejos del mundo real, como la automatización de los procesos empresariales, la optimización de los procesos de desarrollo de software y la mejora de las medidas de ciberseguridad. La evaluación de MPLE en una gama más amplia de conjuntos de datos y aplicaciones del mundo real será fundamental para evaluar su generalización e impacto.
- Mejora de NinjalLM para tareas de codificación: nuestro NinjalLM 3.0 (una versión ajustada y cuantificada de llama3.1-405b), disponible en MyNinja.ai ha obtenido puntuaciones prometedoras en HumanEval (93,85%) y HumanEval-Plus (86,67%), y estamos en camino de seguir mejorando su rendimiento. Lanzaremos un Ninja Coder basado en MPLE dentro de un mes.
Nos complace compartir nuestra investigación sobre MPLE con el mundo. Creemos que este enfoque tiene el potencial de tener un impacto significativo en la generación de código de LLM. MPLE reduce los errores y sesgos específicos del lenguaje, lo que se traduce en una generación de código más precisa y sólida, lo que significa que los desarrolladores tienen más tiempo para abordar problemas más importantes. Nos comprometemos a continuar con nuestra investigación y desarrollo en esta área, y esperamos ver las aplicaciones innovadoras de MPLE en el futuro.
PD: El futuro tiene muchos menos errores :-)
PD: Usamos MyNinja.ai para ayudar en la creación de esta entrada de blog.



