Inteligencia en ingeniería de software: investigación, estado actual y perspectivas
Base de conocimientos de IAActualizado hace 12 meses Círculo de intercambio de inteligencia artificial 8.9K 00
Original: https://arxiv.org/abs/2409.09030
resúmenes
En los últimos años, los grandes modelos lingüísticos (LLM) han alcanzado un éxito notable y se han utilizado ampliamente en diversas tareas posteriores, especialmente en tareas del ámbito de la ingeniería de software (SE). Hemos descubierto que la noción de intelligentsia se adopta explícita o implícitamente en muchos estudios que combinan los LLM con la SE. Sin embargo, falta un trabajo de investigación en profundidad que ordene el linaje de desarrollo de los trabajos existentes, analice cómo los trabajos existentes combinan técnicas de cuerpos inteligentes basadas en LLM para optimizar varios tipos de tareas, y aclare el marco de los cuerpos inteligentes basados en LLM en SE. En este artículo, presentamos el primer estudio de investigación sobre la combinación de inteligencias LLM con SE y proponemos un marco para las inteligencias LLM en SE que incluye tres módulos clave: percepción, memoria y acción. También resumimos los retos actuales a los que se enfrenta la combinación de ambos dominios y sugerimos futuras oportunidades para abordarlos. Mantenemos un repositorio GitHub de artículos relacionados en:https://github.com/DeepSoftwareAnalytics/Awesome-Agent4SE.
1 Introducción
En los últimos años, los grandes modelos lingüísticos (LLM) han logrado un éxito notable y se han utilizado ampliamente en muchas tareas posteriores, especialmente en una variedad de tareas en el campo de la ingeniería de software (SE) Zheng et al.como se resume en el código Ahmed et al. (2024); Sun et al. (2023b); Haldar y Hockenmaier (2024); Mao et al. (2024); Guo et al. (2023); Wang et al. (2021), generación de código Jiang et al. (2023a); Hu et al. (2024b); Yang et al. (2023a); Tian y Chen (2023); Li et al. (2023e); Wang et al. (2024b), traducción de códigos Pan et al. (2024), detección y corrección de vulnerabilidades Zhou et al. (2024); Islam y Nayafirad (2024); de Fitero-Dominguez et al. (2024); Le et al. (2024); Liu et al. (2024b); Chen et al. (2023a), etc. El concepto de inteligibles se introduce desde el campo de la IA, ya sea explícita o implícitamente, en muchos estudios que combinan LLM con SE. El uso explícito implica que el documento se refiere directamente a la aplicación de tecnologías relacionadas con los inteligibles, mientras que el uso implícito sugiere que, aunque se utilice el concepto de inteligibles, puede presentarse utilizando una terminología diferente o de alguna otra forma.
Intelligentsia Wang et al. (2024c) representa una entidad inteligente capaz de percibir, razonar y realizar acciones. Constituye una base tecnológica importante para llevar a cabo diversas tareas y objetivos al percibir el estado del entorno y seleccionar acciones basadas en sus objetivos y diseño para maximizar métricas de rendimiento específicas. Las inteligencias basadas en LLM suelen utilizar los LLM como núcleo cognitivo de las inteligencias y destacan en escenarios como la automatización, el control inteligente y la interacción persona-ordenador, aprovechando las potentes capacidades de los LLM en comprensión y generación del lenguaje, aprendizaje y razonamiento, conciencia y memoria del contexto y multimodalidad. Con el desarrollo de diversos campos, los conceptos de inteligencias tradicionales y basadas en LLM se aclaran gradualmente y se utilizan ampliamente en el campo del procesamiento del lenguaje natural (PLN) Xi et al. (2023). Sin embargo, aunque los trabajos existentes utilizan este concepto de forma explícita o implícita en la SE, aún no existe una definición clara de los inteligibles. Falta un trabajo de investigación en profundidad que analice cómo los trabajos existentes incorporan técnicas de cuerpos inteligentes para optimizar diversas tareas, que ordene el linaje de desarrollo de los trabajos existentes y que aclare el marco de los cuerpos inteligentes en SE.
En este artículo, ofrecemos un análisis en profundidad de la investigación sobre la combinación de agentes basados en modelos de lenguaje extensos (LLM) con la ingeniería de software (SE), resumimos los retos actuales a los que se enfrenta la combinación de ambos y sugerimos posibles oportunidades para la investigación futura en respuesta a los retos existentes. En concreto, primero recopilamos artículos relacionados con la aplicación de la tecnología de agentes basada en LLM en SE y obtuvimos 115 artículos tras filtrarlos y evaluar su calidad. A continuación, inspirándonos en la definición tradicional de agente (Wang et al.2024cXi et al.2023), presentamos un marco conceptual genérico para agentes basados en LLM en SE (véase la Sección 2 secciones), incluidos los tres componentes clave de percepción, memoria y acción. En primer lugar, presentamos el módulo de percepción (véase la sección 2.1 Sección), este módulo puede manejar entradas de distintas modalidades, como entradas textuales, visuales, auditivas, etc. A continuación, introducimos el módulo de memoria (véase la sección 2.2 Sección), este módulo incluye memoria semántica, memoria argumental y memoria procedimental para ayudar al agente a tomar decisiones razonadas. Por último, introducimos el módulo de acción (véase la sección 2.3 Sección), el módulo incluye acciones internas como el razonamiento, la recuperación y el aprendizaje, así como acciones externas como la interacción con el entorno.
A continuación, detallamos los retos y oportunidades de los agentes basados en LLM en SE (véase la Sección 3 secciones). En concreto, proponemos las siguientes oportunidades futuras de investigación para que los agentes LLM aborden los retos actuales en SE:
- La mayoría de los estudios existentes exploran principalmente el módulo de percepción de entrada de texto basado en tokens, mientras que falta la exploración de otras modalidades.
- Muchas tareas nuevas quedan fuera del alcance del aprendizaje LLM, y las tareas complejas en el dominio SE requieren agentes con múltiples capacidades. Por lo tanto, es fundamental explorar cómo los agentes basados en LLM pueden asumir nuevas funciones y equilibrar eficazmente las capacidades de múltiples funciones.
- El ámbito de la SE carece de una base de conocimientos autorizada y reconocida que contenga una gran cantidad de conocimientos relacionados con el código como base para la recuperación externa.
- Mitigar la ilusión de los agentes LLM mejora el rendimiento general del agente, y la optimización del agente mitiga a su vez el problema de la ilusión de los agentes LLM.
- El proceso de colaboración multiagente requiere importantes recursos informáticos y sobrecargas adicionales de comunicación debido a la sincronización y el intercambio de información diversa. La exploración de técnicas que mejoren la eficiencia de la colaboración multiagente es también una oportunidad de trabajo para el futuro.
- Las tecnologías del campo de la SE también pueden contribuir al desarrollo del campo de los agentes, y es necesario seguir trabajando en el futuro para explorar cómo incorporar al agente tecnologías avanzadas del campo de la SE y promover el avance tanto del agente como del campo de la SE.
Además, las técnicas de SE, especialmente las relacionadas con el código, también pueden hacer avanzar el campo de los agentes, lo que demuestra la relación de refuerzo mutuo entre estos dos campos tan diferentes. Sin embargo, muy pocos trabajos han explorado la aplicación de técnicas de SE a los agentes, y la investigación todavía se centra en técnicas básicas simples de SE, como llamadas a funciones, peticiones HTTP y otras herramientas. Por lo tanto, este artículo se centra en los trabajos relacionados con los agentes en el campo de la SE, y en la sección 3.6 SecciónLa aplicación de las técnicas de SE a los agentes se discute brevemente como una oportunidad para futuras investigaciones.
2 Agentes SE basados en el Gran Modelo Lingüístico (LLM)
Tras cotejar y analizar la investigación obtenida durante el periodo de recopilación de datos, proponemos un marco de agentes de ingeniería de software (SE) basado en el Modelo de Lenguaje Amplio (LLM). Como se muestra en la Fig. 2 un agente contiene tres módulos clave: percepción, memoria y acción. En concreto, el módulo de percepción recibe información multimodal del entorno externo y la convierte en una forma de entrada que el LLM puede comprender y procesar. El módulo de acción incluye acciones internas y externas, que se encargan de razonar las decisiones basándose en las entradas del LLM y de optimizar las decisiones basándose en la información obtenida de la interacción con el entorno externo, respectivamente. El módulo de memoria incluye memorias semánticas, situacionales y procedimentales que pueden proporcionar información adicional útil para ayudar al LLM a tomar decisiones razonadas. Asimismo, el módulo de acción puede actualizar diferentes memorias del módulo de memoria mediante acciones de aprendizaje para proporcionar información de memoria más eficaz para las operaciones de razonamiento y recuperación. Además, la colaboración multiagente consiste en múltiples agentes individuales que son responsables de parte de la tarea y trabajan juntos para completarla mediante la cooperación colaborativa. Esta sección presenta los detalles de cada módulo del marco de agentes SE basado en LLM.
2.1 Percepción
El módulo perceptivo conecta al agente basado en LLM con el entorno externo y es fundamental para el procesamiento de entradas externas. Procesa diferentes entradas modales, como entradas textuales, visuales y auditivas, y las convierte en un formato embebido que puede ser entendido y procesado por el agente LLM, sentando las bases para el comportamiento de razonamiento y toma de decisiones del agente LLM. A continuación, presentamos los detalles de las diferentes entradas modales en el módulo perceptivo.
2.1.1 Introducción de texto
A diferencia de los formatos de entrada de texto en el Procesamiento del Lenguaje Natural (PLN), que tienen en cuenta las características del código, los formatos de entrada de texto en SE incluyen el texto basado en la Ficha entradas, entradas basadas en árboles/grafos y entradas híbridas.
Entrada basada en fichas. Entradas basadas en fichas (Ahmed et al. 2024; Al-Kaswan et al. 2023Arakelyan et al. 2023Beurer-Kellner et al. 2023Alqarni y Azim. 2022Li et al. 2022bGu et al. 2022Du et al. 2021) es el enfoque de entrada más dominante, que trata el código directamente como texto en lenguaje natural y utiliza secuencias de tokens directamente como entrada al LLM, ignorando las propiedades del código.
Entrada basada en árboles/diagramas. A diferencia de los lenguajes naturales, los códigos tienen reglas estructurales y sintácticas estrictas y suelen escribirse según la sintaxis de un lenguaje de programación concreto. Basándose en las características del código, la entrada basada en árboles/diagramas (Ma et al. 2023b, aZhang et al. 2023g:: Ochs et al. 2023Bi et al. 2024Shi et al. 2023a, 2021Wang y Li. 2021) pueden transformar el código en estructuras de árbol, como árboles de sintaxis abstracta, o estructuras de grafo, como grafos de flujo de control, para modelar información estructurada sobre el código. Sin embargo, los trabajos actuales relacionados con agentes SE basados en LLM no han explorado tales modalidades, lo que presenta tanto retos como oportunidades.
Entrada híbrida. Entradas mixtas (Niu et al. 2022Hu et al. 2024aGuo et al. 2022) combina múltiples modalidades para proporcionar distintos tipos de información al LLM. Por ejemplo, la inclusión de entradas híbridas basadas en tokens y en árboles puede combinar información semántica y estructural sobre el código, lo que conduce a un mejor modelado y comprensión del código. Sin embargo, los trabajos relacionados con agentes basados en LLM en SE aún no han explorado también esta modalidad.
2.1.2 Entrada visual
La entrada visual utiliza datos de imágenes visuales, como bocetos de interfaz de usuario o diagramas de diseño UML, como entrada modal y toma decisiones inferenciales modelando y analizando las imágenes. Muchos trabajos relacionados con la PNL exploran esta modalidad. Por ejemplo, Driess et al. (2023) propone PaLM-E, un modelo de lenguaje multimodal encarnado cuyas entradas son frases multimodales entrelazadas con codificación visual, de estimación continua de estados y de entrada textual. Los dominios tradicionales de la ingeniería de software también tienen tareas de entrada visuales, como la búsqueda de código UI (Behrang et al.2018; Reiss et al.2014Xie et al.2019), que utiliza bocetos de interfaz de usuario como consultas para encontrar fragmentos de código útiles. Sin embargo, aún hay menos trabajos sobre el modelado visual como entrada para LLM.
2.1.3 Entrada auditiva
La entrada auditiva interactúa con los LLM en forma de habla, utilizando como entrada datos auditivos como el audio. Los dominios tradicionales de la ingeniería de software tienen tareas para la entrada auditiva, como la programación de búsquedas de vídeo (Bao et al.2020), que utiliza el vídeo como fuente de fragmentos de código útiles. Sin embargo, también hay una relativa falta de trabajos relacionados con la entrada auditiva para LLM.
2.2 Memoria
Los módulos de memoria incluyen la memoria semántica, la memoria situacional y la memoria procedimental, que pueden proporcionar información adicional útil para ayudar a los LLM a tomar decisiones razonadas. A continuación, presentaremos los detalles de cada uno de estos tres tipos de memoria.
2.2.1 Memoria semántica
Las memorias semánticas almacenan el conocimiento del mundo reconocido de los agentes LLM, normalmente en forma de repositorios externos de recuperación de conocimiento que incluyen documentos, bibliotecas, APIs u otros conocimientos. Muchos estudios han explorado la aplicación de la memoria semántica (Wang et al.2024bZhang et al.2024Eghbali y Pradel.2024Patel et al.2023Zhou et al.2022Ren et al.2023Zhang et al.2023d). Concretamente, la documentación y las API son la información más común que se encuentra en las bases de conocimiento externas. Por ejemplo, Zhou et al. (2022) propusieron un novedoso método de generación de código a partir del lenguaje natural denominado DocPrompting, que explota explícitamente los documentos basándose en la intención del lenguaje natural mediante la recuperación de fragmentos de documentos relevantes.Zhang et al. (2024) construyeron un punto de referencia de cotejo manual llamado CODEAGENTBENCH dedicado a la generación de código a nivel de base de código, que contiene documentación, dependencias de código e información del entorno de ejecución.Ren et al. (2023) propusieron un novedoso método de generación de código basado en el encadenamiento de prompts basado en el conocimiento, denominado KPC, que utiliza el conocimiento del manejo de excepciones de grano fino extraído de la documentación de las API para ayudar a LLM en la generación de código. Además de la documentación, las API también son información común en bases de conocimiento externas. Por ejemplo, Eghbali y Pradel (2024) propusieron una técnica de compleción de código basada en LLM llamada De-Hallucinator, que identifica automáticamente referencias API específicas del proyecto relacionadas con prefijos de código y predicciones iniciales del modelo y añade información sobre estas referencias a las pistas.Zhang et al. (2023d) La integración de una herramienta de búsqueda de API en el proceso de generación permite al modelo seleccionar automáticamente las API y utilizar la herramienta de búsqueda para obtener sugerencias. Además, algunos trabajos han abordado también otro tipo de información. Por ejemplo, Patel et al. (2023) examinaron las capacidades y limitaciones de distintos LLM a la hora de generar código basado en el contexto.Wang et al. (2024b) Ajuste fino de los LLM de código seleccionados mediante funciones de mejora y sus correspondientes cadenas de documentación.
2.2.2 Memoria situacional
La memoria situacional registra contenidos relevantes para el caso actual, así como información empírica obtenida en procesos de toma de decisiones anteriores. El contenido relacionado con el caso actual (por ejemplo, información relevante encontrada en bases de datos de búsqueda, muestras proporcionadas mediante técnicas de aprendizaje en contexto (ICL), etc.) puede proporcionar conocimientos adicionales para el razonamiento de LLM, por lo que muchos estudios han introducido esta información en el proceso de razonamiento de LLM (Zhong et al.2024Li et al.2023cFeng y Chen.2023; Ahmed et al.2023; Wei et al.2023aRen et al.2023Zhang et al.2023bEghbali y Pradel.2024; Shi et al.2022). Por ejemplo, Li et al. (2023c) propusieron una nueva técnica de sugerencias denominada AceCoder, que selecciona programas similares como ejemplos en las sugerencias, proporcionando una gran cantidad de contenido (por ejemplo, algoritmos, API) relacionado con el código de destino.Feng y Chen (2023) propusieron AdbGPT, un enfoque ligero sin formación ni codificación rígida que reproduce automáticamente los errores basándose en los informes de errores mediante técnicas de aprendizaje en contexto.Ahmed et al. (2023) descubrieron que la inclusión de hechos semánticos puede ayudar a LLM a mejorar el rendimiento de la tarea de resumen de código.Wei et al. (2023a) propone un nuevo modelo llamado Coeditor, que predice ediciones en regiones de código basándose en cambios recientes en el mismo código base en una configuración de edición automática de código de varias rondas. Además, la introducción de información empírica, como información histórica sobre interacciones, puede ayudar a los agentes basados en LLM a comprender mejor el contexto y tomar decisiones correctas. Algunos trabajos utilizan información empírica de procesos pasados de razonamiento y toma de decisiones para obtener respuestas más precisas mediante la consulta iterativa y la modificación de respuestas. Por ejemplo, Ren et al. (2023) propusieron KPC, un enfoque de generación de código basado en el encadenamiento de prompts basado en el conocimiento que descompone la generación de código en cadenas de IA con pasos iterativos de comprobación y reescritura.Zhang et al. (2023b) propusieron RepoCoder, un marco sencillo, versátil y eficaz que utiliza de forma eficiente la información a nivel de base de código para la finalización de código en una cadena de generación de recuperación iterativa.Eghbali y Pradel (2024) propusieron De-Hallucinator, una técnica de completado de código basada en LLM que recupera referencias API adecuadas incrementando la información contextual de las pistas e iterando el modelo de consulta para que sus predicciones sean más precisas.
2.2.3 Memoria procedimental
La memoria procedimental de un agente en ingeniería de software consiste en el conocimiento implícito almacenado en los pesos del Gran Modelo de Lenguaje (LLM) y el conocimiento explícito escrito en el código del agente.
El conocimiento implícito se almacena en los parámetros del LLM. Los estudios existentes suelen proponer nuevos LLM con un rico conocimiento implícito para diversas tareas descendentes mediante el entrenamiento de modelos utilizando grandes cantidades de datos.Zheng et al. (2023) ha organizado el LLM de código en el ámbito de la SE según su tipo de afiliación (incluidas empresas, universidades, equipos de investigación y comunidades de código abierto, particulares y colaboradores anónimos).
Conocimiento explícito Escrito en el código del agente para que éste pueda ejecutarse automáticamente. Varios trabajos, Patel et al. (2023); Shin et al. (2023); Zhang et al. (2023a) exploraron diferentes formas de construir código de agente. En concreto, Patel et al. (2023) utilizan tres tipos de supervisión contextual para especificar funciones de biblioteca, incluidas demostraciones, descripciones e implementaciones.Shin et al. (2023) investigaron la eficacia de tres técnicas diferentes de ingeniería de señales (es decir, señales básicas, aprendizaje contextual y señales específicas de la tarea) con LLM ajustado en tres tareas típicas de ASE. Zhang et al. (2023a) exploraron el uso de diferentes diseños de pistas (es decir, pistas básicas, pistas de información de apoyo y pistas de pensamiento en cadena) mediante el programa ChatGPT Rendimiento de la detección de vulnerabilidades del software.
2.3 Movimiento
El módulo de acción consta de dos tipos: acciones internas y externas. Las acciones externas interactúan con el entorno externo para obtener feedback, incluyendo el diálogo con humanos/agentes y la interacción con el entorno digital, mientras que las acciones internas razonan y toman decisiones basadas en inputs del LLM y optimizan las decisiones basadas en el feedback obtenido, incluyendo acciones de inferencia, recuperación y aprendizaje. A continuación describimos cada acción en detalle.
2.3.1 Acciones internas
Las acciones internas incluyen acciones de razonamiento, recuperación y aprendizaje. Por separado, la acción de razonamiento se encarga de analizar el problema, razonar y tomar decisiones basadas en las aportaciones del agente LLM. Las acciones de recuperación recuperan información relevante de la base de conocimientos y ayudan a las acciones de razonamiento a tomar decisiones correctas. Las acciones de aprendizaje, por su parte, aprenden y actualizan continuamente los conocimientos mediante el aprendizaje y la actualización de memorias semánticas, procedimentales y situacionales, mejorando así la calidad y la eficacia del razonamiento y la toma de decisiones.
Acciones de razonamiento. Un proceso de razonamiento riguroso es clave para que los agentes LLM completen las tareas, y el Pensamiento Encadenado (CoT) es una forma eficaz de razonar. Con la ayuda del CoT, los LLM pueden comprender en profundidad los problemas, descomponer tareas complejas y generar respuestas de alta calidad. Como muestra la figura 3 Como se ha mostrado, la investigación existente ha explorado diferentes formas de CoT, incluyendo CoT/planificación simple, SCoT, lluvia de ideas y CoT en árbol. Específicamente, una CoT/planificación simple es un párrafo en el prompt que describe el proceso de razonamiento del problema. En los primeros trabajos, se incluía una frase simple en el prompt para guiar al LLM a generar un pensamiento en cadena para una mejor resolución del problema. Por ejemplo, Hu et al. (2024bSe propone un enfoque de aprendizaje contextual para guiar la depuración de LLM mediante el método de "depuración de impresión". A medida que evoluciona la tecnología LLM, el diseño de los CoT se vuelve más complejo. Inspirándose en el proceso de los desarrolladores para verificar la viabilidad de los escenarios de prueba, Su et al. (2023) diseñaron el razonamiento Chained Thinking (CoT) para extraer el conocimiento humanoide y el razonamiento lógico de LLM.Le et al. (2023) propusieron un nuevo marco denominado CodeChain, que genera cadenas autocorrectivas guiadas por una serie de submódulos representativos generados en iteraciones anteriores.Huang et al. (2024) propusieron CodeCoT, que genera casos de prueba para verificar el código en busca de errores de sintaxis durante la ejecución, y luego combina el pensamiento en cadena con el proceso de autocomprobación de la generación de código a través de una fase de autocomprobación.Tian y Chen (2023) presenta una novedosa técnica de guía, diseña sofisticadas guías de pensamiento y retroalimentación basada en guías, y explora por primera vez cómo mejorar el rendimiento de la generación de código de los LLM.
Teniendo en cuenta las características del código, algunas investigaciones han propuesto una CoT (Cadena de Pensamiento) estructurada para introducir información estructural del código. Como se muestra en la Fig. 3 Como se muestra en (b), el CoT estructurado presenta el proceso de razonamiento en forma de pseudocódigo, con bucles, ramas y otras estructuras. Por ejemplo, Li et al. (2023a) propusieron CoTs estructurados (SCoTs), que pueden utilizar eficazmente la rica información estructural del código fuente, y una nueva técnica de generación de código, SCoT hinting.Christianos et al. (2023) propone un modelo marco genérico que utiliza la construcción de funciones intrínsecas y extrínsecas para aumentar la comprensión de la estructura del razonamiento e incorporar el razonamiento estructurado a las estrategias de las inteligencias IA. Además, varios estudios han propuesto otras formas de CoT, como el brainstorming y el CoT de árbol, como se muestra en la figura 3 (c) y (d). La lluvia de ideas se basa en generar palabras clave relevantes a partir de la entrada. Por ejemplo, Li et al. (2023e) propusieron un novedoso marco de brainstorming para la generación de código que utiliza pasos de brainstorming para generar y seleccionar diferentes ideas, facilitando el razonamiento algorítmico previo a la generación de código. Tree CoT es un ejemplo de Feng y Chen (2023), que explora y actualiza dinámicamente el CoT con nodos en el árbol en varios estados, incluyendo nodos completados, nuevos, recién derivados y pendientes.
Además, varios estudios han explorado otras técnicas para mejorar la capacidad y la eficacia de razonamiento de las inteligencias basadas en grandes modelos lingüísticos. Por ejemplo, Wang et al. (2024a) propusieron TOOLGEN, que consta de una fase de inserción de activadores y ajuste fino del modelo (fuera de línea), y una fase de generación de código de integración de herramientas (en línea).TOOLGEN utiliza mejoras en el corpus de código dado para inferir dónde activar el autocompletado de herramientas, y para marcar token especiales Token.Yang et al. (2023a) idearon un nuevo método, COTTON, que genera automáticamente CoTs generados por código utilizando un modelo de lenguaje ligero. Zhang et al. (2023c) propusieron la decodificación por autoinferencia, un novedoso esquema de inferencia que genera borradores de tokens y luego verifica la salida de tokens a partir de estos borradores utilizando el modelo de bigramas original mediante una única pasada hacia delante.Zhou et al. (2023) introduce un marco de resolución adaptativo, que ajusta estratégicamente la estrategia de resolución en función de la dificultad del problema, lo que no sólo mejora la eficiencia computacional, sino que también mejora el rendimiento global.
Operaciones de recuperación. Las operaciones de recuperación recuperan información relevante de la base de conocimientos para ayudar a las operaciones de razonamiento a tomar las decisiones correctas. La entrada utilizada para la recuperación y el tipo de contenido de salida obtenido mediante la recuperación varían. Como se muestra en la Tabla 1 Como se muestra, las entradas y salidas pueden ser texto, código o mensajes mixtos que contengan texto y código. En concreto, pueden clasificarse en las siguientes categorías: (1) Texto-código. Normalmente, los requisitos se utilizan como entradas para recuperar el código pertinente o las API utilizadas, que se añaden a las solicitudes para generar códigos de respuesta. Por ejemplo, Zan et al. (2022a) proponen un nuevo marco que incluye los módulos APIRetriever y APICoder. En concreto, APIRetriever recupera API útiles y, a continuación, APICoder utiliza estas API recuperadas para generar código. de-Hallucinator Eghbali y Pradel (2024) Recuperar las referencias API apropiadas mediante pistas y utilizar las pistas obtenidas para consultar iterativamente el modelo. (2) Texto-Texto. A veces, los requisitos también se utilizan como entrada para recuperar documentos relevantes o preguntas similares que ayuden a completar la tarea. Por ejemplo, Zhou et al. (2022) introdujeron DocPrompting, un método de generación de código a partir del lenguaje natural que responde explícitamente a una intención dada del lenguaje natural recuperando fragmentos de documentos relevantes. Zhang et al. (2024) propone CodeAgent, un novedoso marco de agentes basado en un gran modelo de lenguaje que integra herramientas externas para recuperar información relevante para la generación eficiente de código a nivel de base de código, y soporta la interacción con artefactos de software para la recuperación de información, la navegación por símbolos de código y la prueba de código. (3) Código-Código. El código también puede utilizarse como entrada para recuperar código similar o relacionado que sirva de referencia para generar el código de destino. Por ejemplo, Zhang et al. (2023b) propone RepoCoder, un marco sencillo, genérico y eficaz que utiliza un proceso de generación de recuperación iterativo para recuperar información a nivel de código base basada en similitudes. (4) Código híbrido. Además de utilizar un único tipo de información (por ejemplo, texto o código) como entrada para recuperar códigos relevantes, se pueden combinar varios tipos de información en una información híbrida para mejorar la precisión de la recuperación. Por ejemplo, Li et al. (2022a) utiliza un potente modelo de generación de código aumentando la consulta de un documento con fragmentos de código generados por el modelo de generación (generando secciones de igual a igual) y utilizando después la consulta aumentada para recuperar el código.ToolCoder Zhang et al. (2023d) Utilice motores de búsqueda en línea y herramientas de búsqueda de documentación para obtener recomendaciones de API adecuadas que le ayuden en la selección de API y la generación de código. Además, la búsqueda no se limita a un único tipo de información. (5) Código híbrido. Utiliza el código como entrada y recupera una variedad de información relevante. Por ejemplo, Nashid et al. (2023) propusieron una nueva técnica llamada CEDAR para la creación de avisos que recupera automáticamente presentaciones de código relevantes para la tarea del desarrollador, basándose en la incrustación o en el análisis de frecuencias.Geng et al. (2023) Utilización de un paradigma de aprendizaje contextual para generar anotaciones multiintento para el código, seleccionando diferentes ejemplos de anotación de código a partir de un conjunto de ejemplos. (6) Mezcla de textos. Utiliza los requisitos como entrada para recuperar código relevante y problemas similares como referencia. Por ejemplo, Li et al. (2023b) propusieron LAIL (LLM-Aware In-context Learning), un nuevo método de selección basado en el aprendizaje para seleccionar los ejemplos que se utilizarán en la generación de código.Li et al. (2023c) introduce un nuevo mecanismo llamado AceCoder que utiliza la recuperación de demanda de programas similares como ejemplos en las indicaciones para proporcionar una gran cantidad de contenido relevante (por ejemplo, algoritmos, APIs).
Según un estudio anterior, Li et al. (2022c); Zhao et al. (2024); Hu et al. (2023a), los métodos de recuperación existentes pueden clasificarse en búsqueda dispersa, búsqueda densa Wang et al. (2024e), y otros métodos Hayati et al. (2018); Zhang et al. (2020); Poesia et al. (2022); Ye et al. (2021); Shu et al. (2022). Fig. 4 muestra el proceso de recuperación dispersa y densa. El método de recuperación densa transforma la entrada en un vector de alta dimensión y selecciona las k muestras con la mayor similitud comparando las similitudes semánticas, mientras que el método de recuperación dispersa calcula las k muestras con la mayor similitud comparando las similitudes semánticas, mientras que el método de recuperación dispersa calcula las k muestras con la mayor similitud comparando las similitudes semánticas. BM25 o métricas como TF-IDF para evaluar la similitud textual entre muestras. Además, se han explorado varios métodos alternativos de recuperación. Por ejemplo, algunos estudios se han centrado en calcular la distancia de edición entre textos en lenguaje natural Hayati et al. (2018), o un árbol sintáctico abstracto (AST) de fragmentos de código Zhang et al. (2020); Poesia et al. (2022). También existen métodos que utilizan grafos de conocimiento para la recuperación Ye et al. (2021); Shu et al. (2022).
Los métodos de recuperación densos y dispersos son los dos métodos de recuperación más utilizados. De ellos, las técnicas de recuperación densa suelen ofrecer mejores resultados que los métodos de recuperación dispersa. Sin embargo, la recuperación dispersa tiende a ser más eficiente y, en algunos casos, puede alcanzar un rendimiento comparable al de la recuperación densa. Por ello, muchos estudios optan por utilizar métodos de recuperación dispersa por razones de eficiencia.
Comportamiento de aprendizaje. El comportamiento de aprendizaje es el aprendizaje y la actualización continuos de conocimientos mediante el aprendizaje y la actualización de la memoria semántica y procedimental para mejorar la calidad y la eficacia del razonamiento y la toma de decisiones. (1) Utilizar el conocimiento para actualizar la memoria semántica. La memoria semántica existe principalmente en una base de conocimientos, que almacena el conocimiento subyacente del mundo, que puede actualizarse mediante la actualización de la base de conocimientos utilizando el conocimiento de código reconocido o construyendo una nueva base de conocimientos. Por ejemplo, Liao et al. (2023) propusieron un nuevo marco de generación de código, denominado A3-CodGen, para generar código de mayor calidad utilizando tres tipos de información obtenida de bibliotecas recuperadas (información local del archivo de código actual, información global de otros archivos de código e información de bibliotecas de terceros).2024) propusieron una novedosa técnica de detección de vulnerabilidades Vul-RAG basada en Modelos de Lenguaje Amplio (LLMs), que extrae conocimiento multidimensional de instancias CVE existentes a través de LLMs para construir una base de conocimiento de vulnerabilidades. (2) Actualización del conocimiento tácito. Dado que el conocimiento tácito se almacena en los parámetros del gran modelo de lenguaje, los parámetros del LLM pueden actualizarse ajustando el modelo. Los trabajos anteriores suelen construir nuevos datos para supervisar el ajuste fino de los modelos preentrenados, actualizando así los parámetros completos de los modelos Xia et al. (2023b); Wei et al. (2023a(matemáticas) génerob); Tao et al. (2024); Wang et al. (2024d); Liu et al. (2023a); Wang et al. (2023d); Shi et al. (2023b). Sin embargo, el coste del ajuste fino del modelo aumenta a medida que lo hace el tamaño de los parámetros. Algunos trabajos han tratado de explorar técnicas de ajuste fino eficientes desde el punto de vista de los parámetros Weyssow et al. (2023); Shi et al. (2023c). Por ejemplo, Weyssow et al. (2023) realizaron un estudio exhaustivo de las técnicas de ajuste fino eficiente de parámetros (PEFT) para grandes modelos de lenguaje en escenarios de generación automática de código.Wang et al. (2023b) insertaron y afinaron el adaptador de estructura eficientemente afinado en lugar de afinar el modelo preentrenado. La mayoría de los trabajos actuales utilizan técnicas de ajuste fino eficiente para afinar el modelo Guo et al. (2024); Shi et al. (2023d).
(3) Actualización del código del agente. El código de agente se refiere a los programas o algoritmos que ejecuta un agente para guiar su comportamiento y su proceso de toma de decisiones. Los agentes basados en modelos de gran lenguaje hacen esto construyendo instrucciones apropiadas como código de agente para regular cómo percibir el entorno, hacer razonamientos y tomar decisiones, y realizar operaciones. Gran parte de los trabajos utilizan técnicas de alineación de instrucciones para alinear la salida del modelo de gran lenguaje con las instrucciones de entrada. Por ejemplo, Muennighoff et al. (2023) aprovecha la estructura natural de los commits de Git para emparejar los cambios de código con instrucciones humanas y utilizar esas instrucciones para realizar ajustes.Hu et al. (2023b) construyeron el primer conjunto de datos de ajuste de instrucciones, InstructCoder, diseñado para adaptar grandes modelos de lenguaje a la edición genérica de código. Estos datos de alta calidad pueden aportar nuevos conocimientos y actualizar la memoria semántica para modelos de lenguaje de mayor tamaño.Zan et al. (2023) realizaron amplios experimentos con ocho lenguajes de programación populares en StarCoder para explorar si los lenguajes de programación pueden mejorarse mutuamente mediante el ajuste de las instrucciones.
2.3.2 Acción exterior
Diálogo con humanos/agentes Los agentes pueden interactuar con humanos u otros agentes y recibir rica información como feedback durante la interacción, ampliando el conocimiento del agente y haciendo que las respuestas del Big Language Model sean más precisas. En concreto, se ha trabajado mucho utilizando grandes modelos lingüísticos como agentes para la interacción, por ejemplo, Lu et al. (2024); Jain et al. (2023); Paul et al. (2023); Shojaee et al. (2023); Liu et al. (2023b); Wang et al. (2023e); Mu et al. (2023); Madaan et al. (2023Jain et al. (2023) propusieron RLCF, que utiliza la retroalimentación de diferentes modelos de lenguaje de gran tamaño para comparar el código generado con el código de referencia con el fin de seguir entrenando modelos de lenguaje de gran tamaño preentrenados a través del aprendizaje por refuerzo.REFINER Paul et al. (2023) es un marco para interactuar con modelos críticos que proporcionan retroalimentación automática.Yang et al. (2023b) examinaron y aclararon cómo los grandes modelos lingüísticos se benefician de la modelización discriminante.Moon et al. (2023) construyeron un nuevo conjunto de datos diseñado específicamente para la reparación de código y lo utilizaron para obtener un modelo que pudiera generar automáticamente comentarios útiles mediante el ajuste y la selección optimizados por preferencias.PPOCoder Shojaee et al. (2023) consta de dos componentes, el crítico y el intérprete, y se optimiza mediante PPO a través de la interacción entre estos dos modelos.RLTF Liu et al. (2023b) interactúa con otros modelos que utilizan datos reales y datos en caché en línea generados a través de la interacción con el compilador para calcular las pérdidas y actualizar los pesos del modelo a través de la retroalimentación de gradiente.Wang et al. (2023e) propusieron ChatCoder, un método para refinar los requisitos mediante el chat con un gran modelo lingüístico.Sun et al. (2023a) propusieron Clover, una herramienta que comprueba la coherencia entre el código, las cadenas de documentación y los comentarios formales.ClarifyGPT Mu et al. (2023) hace que otro gran modelo lingüístico genere preguntas aclaratorias específicas para refinar los requisitos ambiguos de la entrada del usuario.Reflexión Shinn et al. (2023) puede interactuar con humanos y otros agentes para generar retroalimentación externa.Autodefinirse Madaan et al. (2023) utiliza un único modelo lingüístico de gran tamaño como generador, corrector y proveedor de retroalimentación sin datos de entrenamiento supervisados, entrenamiento adicional ni aprendizaje por refuerzo.Repilot Wei et al. (2023c) sintetiza parches candidatos mediante la interacción entre el Big Language Model y el Completion Engine. En concreto, Repilot poda los token no viables basándose en las sugerencias proporcionadas por el Big Language Model.Wang et al. (2023c) introdujeron MINT, una prueba de referencia que puede evaluar la capacidad de un modelo lingüístico de gran tamaño para resolver tareas interactivas de varias rondas utilizando comentarios en lenguaje natural de usuarios simulados con GPT-4. Hong et al. (2023b) propusieron MetaGPT, un innovador marco de metaprogramación que incorpora flujos de trabajo humanos eficientes a la colaboración multiagente basada en un gran modelo de lenguaje.Huang et al. (2023a) presentaron AgentCoder, una novedosa solución de generación de código que incluye un marco multiagente con agentes especializados: un agente programador, un agente diseñador de pruebas y un agente ejecutor de pruebas.
El entorno digital Los agentes pueden interactuar con sistemas digitales como la plataforma DO, páginas web, compiladores y otras herramientas externas, y la información obtenida durante la interacción puede utilizarse como retroalimentación para optimizarse. En concreto, los compiladores son las herramientas externas más habituales, como Jain et al (2023); Shojaee et al. (2023); Liu et al. (2023b); Wang et al. (2022); Zhang et al.2023e). Por ejemplo, RLCF Jain et al. (2023) comprueba que el código que genera supera un conjunto de comprobaciones de corrección mediante el entrenamiento de un modelo de lenguaje de gran tamaño previamente entrenado utilizando información derivada del compilador.PPOCoder Shojaee et al. (2023) pueden incorporar la retroalimentación del compilador y la alineación estructural como conocimiento adicional para la optimización del modelo con el fin de afinar el modelo de generación de código a través del aprendizaje profundo por refuerzo (RL).RLTF Liu et al. (2023b) interactúa con el compilador para generar pares de datos de entrenamiento y los almacena en una caché en línea.Wang et al. (2022) propusieron COMPCODER, que utiliza la retroalimentación del compilador para la generación de código compilable.Zhang et al. (2023e) propusieron Self-Edit, un enfoque de generación y edición para mejorar la calidad del código en tareas de programación competitivas utilizando resultados de ejecución de código generado a partir de un gran modelo de lenguaje. Además, muchos trabajos han construido herramientas, como motores de búsqueda, motores de complementación, etc., para ampliar las capacidades de los agentes inteligentes, Wang et al. (2024a); Zhang et al.2024); Agrawal et al. (2023); Wei et al.2023c); Zhang et al.2023fWang et al. (2024a) introdujeron TOOLGEN, un método para integrar herramientas de autocompletado en el proceso de generación de modelos de grandes lenguajes del código para abordar errores de dependencia como variables no definidas y miembros que faltan.Zhang et al. (2024) introdujeron CodeAgent, un novedoso marco de agentes para el modelado de grandes lenguajes que integra cinco herramientas de programación para permitir la interacción con la documentación de software para obtener información, la navegación por símbolos de código y la comprobación de código para la generación eficaz de código a nivel de repositorio.Agrawal et al. (2023) propusieron MGD, un método de descodificación guiado por monitor en el que el monitor utiliza el análisis estático para guiar la descodificación.Repilot Wei et al. (2023c) sintetiza los parches candidatos mediante la interacción entre el Big Language Model y el Completion Engine. En concreto, Repilot completa Token basándose en las sugerencias proporcionadas por el motor de compleción.
3 Retos y oportunidades
Tras analizar el contenido relacionado con el trabajo sobre agentes basados en Large Language Model (LLM) en ingeniería de software, es evidente que la integración de estos dos dominios aún se enfrenta a muchos retos, lo que limita su desarrollo. En esta sección, discutimos en detalle los retos actuales a los que se enfrentan los agentes basados en LLM en la ingeniería del software y discutimos las oportunidades de trabajo futuro basadas en el análisis de los retos existentes.
3.1 Exploración insuficiente de los módulos sensoriales
p. ej. nº 1 2.1 Como se describe en la sección, no hay suficiente exploración de agentes basados en LLM para módulos perceptuales en ingeniería de software. A diferencia del lenguaje natural, el código es un tipo especial de representación que puede tratarse como texto ordinario o convertirse en representaciones intermedias con características de código como Árboles de Sintaxis Abstracta (ASTs), Grafos de Flujo de Control (CFGs), etc. Trabajos existentes como los de Ahmed et al. (2024); Al-Kaswan et al. (2023); Arakelyan et al. (2023); Beurer-Kellner et al. (2023); Alqarni y Azim (2022) se considera normalmente como texto y todavía hay una falta de investigación que explore modalidades de entrada basadas en árboles/gráficos en agentes basados en LLM que trabajen en ingeniería de software. Además, las modalidades de entrada visual y auditiva también están poco exploradas.
3.2 Habilidades de juego de rol
A los agentes basados en LLM a menudo se les pide que desempeñen diferentes papeles en una variedad de tareas, cada una de las cuales requiere habilidades específicas. Por ejemplo, un agente puede tener que actuar como generador de código cuando se le pide que genere código, y como probador de código cuando está realizando pruebas de código. Además, en algunos escenarios, estos agentes pueden necesitar tener más de una capacidad a la vez. Por ejemplo, en escenarios de generación de código, el agente debe actuar como generador y comprobador de código, por lo que debe tener la capacidad de generar y probar código (Huang et al. 2023b). En el ámbito de la ingeniería de software, hay muchas tareas específicas para las que el aprendizaje LLM no es suficiente, y tareas complejas que requieren que los agentes tengan múltiples capacidades, como escenarios de generación de pruebas, desarrollo front-end y resolución de problemas a nivel de repositorio. Por lo tanto, avanzar en la investigación sobre cómo capacitar a los agentes para que adopten de forma eficaz nuevos roles y gestionen las exigencias del desempeño de múltiples roles representa una dirección prometedora para el trabajo futuro.
3.3 Base de recuperación de conocimientos inadecuada
Las bases externas de recuperación de conocimiento son una parte importante de la memoria semántica en el módulo de memoria del agente y una importante herramienta externa con la que los agentes pueden interactuar. En el campo del Procesamiento del Lenguaje Natural (PLN), existen bases de conocimiento como Wikipedia como bases de recuperación externas (Zhao et al. 2023). Sin embargo, en el campo de la ingeniería de software, no existe una base de conocimientos autorizada y reconocida que contenga una gran cantidad de conocimientos relacionados con el código, como la sintaxis básica de varios lenguajes de programación, algoritmos de uso común, conocimientos relacionados con estructuras de datos y sistemas operativos. En futuras investigaciones, se puede intentar desarrollar una base de conocimientos exhaustiva sobre el código que sirva de base para la recuperación externa de agentes. Esta base de conocimientos enriquecerá la información disponible, mejorando así la calidad y eficacia del proceso de razonamiento y toma de decisiones.
3.4 Fenómenos ilusorios en agentes basados en LLM
Muchos estudios relacionados con agentes basados en LLM consideran el LLM como el núcleo cognitivo del agente, y el rendimiento global del agente está estrechamente relacionado con las capacidades del LLM subyacente. Los estudios existentes (Pan et al. 2024Liu et al. 2024a) sugiere que los agentes basados en LLM pueden crear alucinaciones, como generar APIs inexistentes mientras se completan tareas de ingeniería de software.Reducir estas alucinaciones puede mejorar el rendimiento general del agente. Al mismo tiempo, la optimización del agente también puede mitigar inversamente las alucinaciones de los agentes basados en LLM, poniendo de relieve una relación bidireccional entre el rendimiento del agente y la mitigación de las alucinaciones. Aunque varios estudios han explorado el fenómeno de las alucinaciones en LLM, siguen existiendo importantes retos a la hora de abordar las alucinaciones en agentes basados en LLM. Explorar los tipos de alucinaciones presentes en los agentes basados en LLM, analizar en profundidad las causas de estas alucinaciones y proponer métodos eficaces para el alivio de las alucinaciones son importantes oportunidades para futuras investigaciones.
3.5 Eficacia de la colaboración multiinteligencia
En la colaboración multi-inteligencia, cada inteligencia individual debe desempeñar un papel diferente para cumplir una tarea específica, y luego los resultados de las decisiones de cada inteligencia se combinan para abordar juntos objetivos más complejos Chen et al. (2023b); Hong et al. (2023a); Huang et al. (2023b); Wang et al. (2023a). Sin embargo, este proceso suele requerir una gran cantidad de recursos informáticos para cada inteligencia, lo que supone un despilfarro de recursos y una reducción de la eficiencia. Además, cada inteligencia individual necesita sincronizar y compartir diversa información, lo que añade costes adicionales de comunicación y afecta al tiempo real y la capacidad de respuesta de la colaboración. Gestionar y asignar eficazmente los recursos informáticos, minimizar los costes de comunicación entre las inteligencias y reducir la sobrecarga de razonamiento de cada una de ellas son retos clave para mejorar la eficacia de la colaboración entre varias inteligencias. Abordar estas cuestiones ofrece importantes oportunidades para la investigación futura.
3.6 Aplicación de técnicas de ingeniería de software a la inteligencia basada en grandes modelos lingüísticos
Las técnicas del campo de la ingeniería de software, en particular las de codificación, tienen el potencial de hacer avanzar significativamente el campo de la inteligentsia, lo que sugiere una relación mutuamente beneficiosa entre ambos campos. Por ejemplo, las técnicas de comprobación de software pueden adaptarse para identificar comportamientos anómalos y defectos potenciales en la intelligentsia basándose en grandes modelos lingüísticos. Además, las mejoras en las herramientas de software (por ejemplo, API y bibliotecas) también pueden mejorar el rendimiento de las inteligencias basadas en grandes modelos lingüísticos, especialmente en el caso de inteligencias con capacidades de uso de herramientas. Además, las técnicas de gestión de paquetes pueden adaptarse para gestionar eficientemente el sistema del cuerpo inteligente. Por ejemplo, puede aplicarse el control de versiones para supervisar y coordinar las actualizaciones de las distintas inteligencias de un sistema de cuerpo inteligente, mejorando la compatibilidad y la integridad del sistema.
Sin embargo, la investigación en este ámbito sigue siendo limitada. Por lo tanto, explorar la incorporación de técnicas SE más complejas a los sistemas corporales inteligentes representa una dirección prometedora para la investigación futura que puede impulsar el progreso en ambas áreas.
4 Conclusiones
Con el fin de analizar en profundidad los trabajos sobre la combinación de grandes inteligencias basadas en modelos lingüísticos con la ingeniería de software, primero recopilamos numerosos estudios sobre la combinación de grandes inteligencias basadas en modelos lingüísticos con tareas en el ámbito de la ingeniería de software. A continuación, tras cotejar y analizar los estudios obtenidos durante el periodo de recopilación de datos, presentamos un marco para las grandes inteligencias basadas en modelos lingüísticos en la ingeniería de software que contiene tres módulos clave: percepción, memoria y acción. Por último, presentamos información detallada sobre cada módulo del marco, analizamos los retos actuales a los que se enfrenta la gran inteligencia basada en modelos lingüísticos en el campo de la ingeniería de software y señalamos algunas oportunidades de trabajo futuro.
© declaración de copyright
Derechos de autor del artículo Círculo de intercambio de inteligencia artificial Todos, por favor no reproducir sin permiso.
Artículos relacionados
Sin comentarios...