Интеллигенция в программной инженерии: исследования, текущее состояние и перспективы

堆友AI

Оригинал: https://arxiv.org/abs/2409.09030

рефераты

В последние годы большие языковые модели (LLM) достигли значительных успехов и широко используются в различных задачах, особенно в задачах в области программной инженерии (SE). Мы обнаружили, что понятие интеллигенции явно или неявно используется во многих исследованиях, объединяющих LLM с SE. Тем не менее, не хватает глубокого исследования, которое бы проследило линию развития существующих работ, проанализировало, как существующие работы сочетают методы интеллектуальных тел на основе LLM для оптимизации различных типов задач, и прояснило бы рамки интеллектуальных тел на основе LLM в SE. В этой статье мы представляем первый обзор исследований по сочетанию LLM-интеллектов с SE и предлагаем структуру для LLM-интеллектов в SE, которая включает три ключевых модуля: восприятие, память и действия. Мы также обобщаем текущие проблемы, возникающие при объединении этих двух областей, и предлагаем будущие возможности для их решения. Мы поддерживаем репозиторий GitHub с соответствующими работами по адресу:https://github.com/DeepSoftwareAnalytics/Awesome-Agent4SE.

1 Введение

В последние годы большие языковые модели (LLM) достигли значительных успехов и широко используются во многих задачах, особенно в различных задачах в области программной инженерии (SE). Чжэн и др.как обобщено в коде Ahmed et al.2024); Sun et al. (2023b); Халдар и Хокенмайер (2024); Mao et al. (2024); Guo et al. (2023); Wang et al. (2021), генерация кода Jiang et al.2023a); Hu et al. (2024b); Янг и др.2023a); Tian и Chen (2023); Li et al. (2023e); Wang et al. (2024b), перевод кода Pan et al. (2024, ), обнаружение и устранение уязвимостей Zhou et al. (2024); Ислам и Наджафирад (2024); de Fitero-Dominguez et al.2024); Le et al. (2024); Liu et al. (2024b); Чен и др.2023a) и т. д. Во многих исследованиях, объединяющих LLM и SE, понятие intelligibles явно или неявно привносится из области AI. Эксплицитное использование подразумевает, что в работе напрямую говорится о применении технологий, связанных с intelligibles, в то время как имплицитное использование предполагает, что хотя концепция intelligibles и используется, она может быть представлена с использованием другой терминологии или в другой форме.

Intelligentsia Wang et al. (2024c) представляет собой интеллектуальный объект, способный воспринимать, рассуждать и выполнять действия. Он служит важной технологической основой для выполнения различных задач и достижения целей путем определения состояния окружающей среды и выбора действий на основе своих целей и дизайна для максимизации определенных показателей эффективности. Интеллекты, основанные на LLM, обычно используют LLM в качестве когнитивного ядра интеллекта и отлично проявляют себя в таких сценариях, как автоматизация, интеллектуальное управление и взаимодействие человека и компьютера, используя мощные возможности LLM в понимании и генерации языка, обучении и рассуждении, осознании контекста и памяти, а также мультимодальности. С развитием различных областей, концепции традиционных и основанных на LLM интеллектов постепенно уточняются и широко используются в области обработки естественного языка (NLP) Xi et al. (2023). Однако, несмотря на то что в существующих работах эта концепция явно или неявно используется в SE, до сих пор нет четкого определения интеллектуальных тел. Не хватает глубокой исследовательской статьи, в которой бы анализировалось, как в существующих работах используются методы интеллектуальных тел для оптимизации различных задач, чтобы проследить линию развития существующих работ и уточнить рамки интеллектуальных тел в SE.

В этой статье мы проводим глубокий анализ исследований, посвященных сочетанию агентов на основе Large Language Model (LLM) с программной инженерией (SE), обобщаем текущие проблемы, возникающие при сочетании этих двух технологий, и предлагаем возможные варианты будущих исследований в ответ на существующие проблемы. В частности, сначала мы собрали статьи, связанные с применением технологии агентов на основе LLM в SE, и получили 115 статей после фильтрации и оценки качества. Затем, вдохновившись традиционным определением агента (Wang et al.2024cСи и др.2023), мы представляем общую концептуальную схему для агентов на основе LLM в SE (см. раздел 2 секции), включая три ключевых компонента - восприятие, память и действие. Сначала мы представим модуль восприятия (см. раздел 2.1 Раздел), этот модуль может обрабатывать входные данные от различных модальностей, таких как текстовый, визуальный, слуховой и т.д. Далее мы представляем модуль памяти (см. раздел 2.2 Раздел), этот модуль включает семантическую память, память сюжета и процедурную память, помогающие агенту принимать обоснованные решения. Наконец, мы представляем модуль действий (см. раздел 2.3 Раздел), модуль включает в себя внутренние действия, такие как рассуждение, поиск и обучение, а также внешние действия, такие как взаимодействие с окружающей средой.

Затем мы подробно рассмотрим проблемы и возможности использования агентов на основе LLM в SE (см. раздел 3 секции). В частности, мы предлагаем следующие возможности для будущих исследований агентов LLM для решения текущих проблем в SE:

  • Большинство существующих исследований в основном изучают модуль восприятия ввода текста на основе токенов, в то время как изучение других модальностей отсутствует.
  • Многие новые задачи остаются за рамками обучения LLM, а сложные задачи в области SE требуют агентов с множеством возможностей. Поэтому очень важно изучить, как агенты на основе LLM могут брать на себя новые роли и эффективно балансировать возможности нескольких ролей.
  • В области SE отсутствует авторитетная и признанная база знаний, содержащая обширные сведения о кодах, которые можно было бы использовать для внешнего поиска.
  • Устранение иллюзии LLM-агентов улучшает общую производительность агента, а оптимизация агента, в свою очередь, уменьшает проблему иллюзии LLM-агентов.
  • Процесс совместной работы нескольких агентов требует значительных вычислительных ресурсов и дополнительных коммуникационных накладных расходов, связанных с синхронизацией и обменом различной информацией. Изучение методов повышения эффективности совместной работы нескольких агентов также является одной из перспективных задач.
  • Технологии в области SE также могут внести свой вклад в развитие агентурной сферы, и в будущем необходимо продолжить работу по изучению того, как включить передовые технологии в области SE в агентурную сферу и способствовать развитию как агентурной, так и SE-сферы.

Кроме того, методы SE, особенно связанные с кодом, могут также способствовать развитию агентов, демонстрируя взаимодополняющую связь между этими двумя очень разными областями. Однако очень мало работ посвящено применению методов SE к агентам, и исследования по-прежнему сосредоточены на простых базовых методах SE, таких как вызовы функций, HTTP-запросы и другие инструменты. Поэтому в данной статье основное внимание уделяется работе, связанной с агентами, в области SE, а в разделе 3.6 РазделПрименение методов SE к агентам кратко обсуждается в качестве возможности для будущих исследований.

软件工程中的智能体:调研、现状与展望

2 SE-агента на основе большой языковой модели (LLM)

После обобщения и анализа результатов исследований, полученных в период сбора данных, мы предлагаем агентскую структуру программной инженерии (SE), основанную на Большой языковой модели (LLM). Как показано на рис. 2 Как показано, один агент содержит три ключевых модуля: восприятие, память и действие. В частности, модуль восприятия получает мультимодальную информацию из внешней среды и преобразует ее в форму ввода, которую LLM может понять и обработать. Модуль действий включает в себя внутренние и внешние действия, которые отвечают за принятие решений на основе входных данных от LLM и оптимизацию решений на основе обратной связи, полученной от взаимодействия с внешней средой, соответственно. Модуль памяти включает семантическую, ситуационную и процедурную память, которая может предоставлять дополнительную полезную информацию, помогающую LLM принимать обоснованные решения. Кроме того, модуль действий может обновлять различные воспоминания в модуле памяти путем обучения действиям, чтобы обеспечить более эффективную информацию в памяти для рассуждений и операций поиска. Кроме того, мультиагентное взаимодействие состоит из нескольких отдельных агентов, которые отвечают за часть задачи и работают вместе для ее выполнения посредством совместного сотрудничества. В этом разделе представлены подробные сведения о каждом модуле в системе агентов SE на основе LLM.

软件工程中的智能体:调研、现状与展望

Рисунок 2: Обзор системы агентов в SE.

2.1 Восприятие

Перцептивный модуль соединяет агента на базе LLM с внешней средой и играет центральную роль в обработке внешних данных. Он обрабатывает различные модальные входы, такие как текстовые, визуальные и слуховые, и преобразует их во встроенный формат, который может быть понят и обработан агентом LLM, закладывая основу для рассуждений и принятия решений агентом LLM. Далее мы представим детали различных модальных входов в перцептивном модуле.

2.1.1 Ввод текста

В отличие от форматов ввода текста в Natural Language Processing (NLP), которые учитывают характеристики кода, форматы ввода текста в SE включают текст на основе Токен входы, входы на основе деревьев/графов и гибридные входы.

Ввод на основе токенов. Вводы на основе токенов (Ahmed et al. 2024; Al-Kaswan et al. 2023:: Arakelyan et al. 2023; Beurer-Kellner et al. 2023:: Алкарни и Азим. 2022; Li et al. 2022bГу и др. 2022Ду и др. 2021) является наиболее доминирующим подходом к вводу, который рассматривает код непосредственно как текст на естественном языке и использует последовательности токенов непосредственно в качестве ввода в LLM, игнорируя свойства кода.

Ввод на основе дерева/диаграммы. В отличие от естественных языков, коды имеют строгие структурные и синтаксические правила и обычно пишутся в соответствии с синтаксисом конкретного языка программирования. Исходя из характеристик кода, ввод на основе деревьев/диаграмм (Ma et al. 2023baЧжан и др. 2023g:: Ochs et al. 2023Би и др. 2024Shi et al. 2023a2021; Ван и Ли. 2021) могут преобразовывать код в древовидные структуры, такие как абстрактные синтаксические деревья, или графовые структуры, такие как графы потока управления, для моделирования структурированной информации о коде. Однако в текущей работе, связанной с агентами SE на основе LLM, такие модальности не рассматриваются, что создает как проблемы, так и возможности.

Гибридный вход. Смешанные входы (Niu et al. 2022; Hu et al. 2024aГуо и др. 2022) сочетает в себе несколько модальностей для предоставления различных типов информации в LLM. Например, включение гибридных входов на основе токенов и деревьев может объединить семантическую и структурную информацию о коде, что приведет к лучшему моделированию и пониманию кода. Однако в работах, связанных с агентами на основе LLM в SE, эта модальность еще не изучалась.

2.1.2 Визуальный ввод

Визуальный ввод использует данные визуальных изображений, таких как эскизы пользовательского интерфейса или диаграммы проектирования UML, в качестве модального ввода и принимает инференциальные решения путем моделирования и анализа изображений. Многие работы, связанные с НЛП, исследуют эту модальность. Например, Driess et al.2023) предлагает PaLM-E, воплощенную мультимодальную языковую модель, входными данными которой являются мультимодальные предложения, переплетающиеся с визуальными, непрерывными оценками состояния и текстовым кодированием входных данных. Традиционные области программной инженерии также имеют задачи визуального ввода, такие как поиск кода пользовательского интерфейса (Behrang et al.2018; Reiss et al.2014; Xie et al.2019), который использует эскизы пользовательского интерфейса в качестве запросов для поиска полезных фрагментов кода. Однако работ, посвященных визуальному моделированию в качестве исходных данных для LLM, все еще меньше.

2.1.3 Слуховой вход

Слуховой ввод взаимодействует с LLM в форме речи, используя в качестве входных данных слуховые данные, такие как аудио. В традиционных областях программной инженерии есть задачи для слухового ввода, например, программирование поиска видео (Bao et al.2020), в котором видео используется в качестве источника полезных фрагментов кода. Однако работ, связанных со слуховым вводом для LLM, также относительно мало.

2.2 Память

Модули памяти включают семантическую память, ситуативную память и процедурную память, которые могут предоставить дополнительную полезную информацию, помогающую LLM принимать обоснованные решения. Далее мы подробно расскажем о каждом из этих трех типов памяти.

2.2.1 Семантическая память

Семантическая память хранит знания агентов LLM о мире, обычно в виде внешних хранилищ знаний, включающих документы, библиотеки, API или другие знания. Во многих исследованиях изучалось применение семантической памяти (Wang et al.2024b; Zhang et al.2024Эгбали и Прадель.2024; Patel et al.2023; Zhou et al.2022; Ren et al.2023; Zhang et al.2023d). В частности, документация и API являются наиболее распространенной информацией, найденной во внешних базах знаний. Например, Zhou et al. (2022) предложили новый метод преобразования естественного языка в код под названием DocPrompting, который явно использует документы, основанные на намерениях естественного языка, извлекая соответствующие фрагменты документов.Zhang et al. (2024) создали эталон ручной свертки под названием CODEAGENTBENCH, предназначенный для генерации кода на уровне кодовой базы, содержащей документацию, зависимости кода и информацию о среде выполнения.Ren et al. (2023) предложили новый подход к генерации цепочечного кода на основе Prompt, основанный на знаниях, под названием KPC, который использует знания о тонкой обработке исключений, извлеченные из документации API, чтобы помочь LLM в генерации кода. Помимо документации, API также являются распространенной информацией во внешних базах знаний. Например, Eghbali и Pradel (2024) предложили технику завершения кода на основе LLM под названием De-Hallucinator, которая автоматически определяет специфические для проекта ссылки на API, связанные с префиксами кода и начальными предсказаниями модели, и добавляет информацию об этих ссылках в подсказки.Zhang et al. (2023d) Интеграция инструмента поиска API в процесс генерации позволяет модели автоматически выбирать API и использовать инструмент поиска для получения предложений. Кроме того, в некоторых работах рассматривается и другая информация. Например, Патель и др.2023) рассмотрели возможности и ограничения различных LLM при генерации кода на основе контекста.Wang et al. (2024b) Тонкая настройка выбранных кодовых LLM с помощью функций улучшения и соответствующих строк документации.

2.2.2 Ситуативная память

Ситуативная память фиксирует содержание, относящееся к текущему случаю, а также эмпирическую информацию, полученную в ходе предыдущих процессов принятия решений. Контент, относящийся к текущему случаю (например, релевантная информация, найденная в поисковых базах данных, образцы, полученные с помощью методов контекстного обучения (ICL), и т. д.), может предоставить дополнительные знания для рассуждений LLM, и поэтому во многих исследованиях эта информация была введена в процесс рассуждений LLM (Zhong et al.2024; Li et al.2023c; Фэн и Чэнь.2023; Ahmed et al.2023; Wei et al.2023a; Ren et al.2023; Zhang et al.2023bЭгбали и Прадель.2024; Shi et al.2022). Например, Ли и др.2023c) предложили новую технику подсказок под названием AceCoder, которая выбирает похожие программы в качестве примеров в подсказках, предоставляя большое количество контента (например, алгоритмы, API), связанного с целевым кодом.Feng и Chen (2023) предложили AdbGPT, облегченный подход без обучения и жесткого кодирования, который автоматически воспроизводит ошибки на основе сообщений об ошибках, используя методы контекстного обучения.Ahmed et al. (2023) обнаружили, что включение семантических фактов может помочь LLM улучшить производительность задачи обобщения кода.Wei et al.2023a) предлагает новую модель под названием Coeditor, которая предсказывает правки в областях кода на основе недавних изменений в той же кодовой базе в многораундовой системе автоматического редактирования кода. Кроме того, введение эмпирической информации, такой как историческая информация о взаимодействии, может помочь агентам на основе LLM лучше понимать контекст и принимать правильные решения. В некоторых работах эмпирическая информация из прошлых процессов рассуждений и принятия решений используется для получения более точных ответов путем итеративного запроса и модификации ответов. Например, Рен и др.2023) предложили KPC, подход к генерации кода на основе цепочек Prompt, основанный на знаниях, который декомпозирует генерацию кода на цепочки AI с итеративными шагами проверки-перезаписи.Zhang et al. (2023b) предложили RepoCoder, простую, универсальную и эффективную структуру для эффективного использования информации на уровне кодовой базы для завершения кода в итеративном конвейере генерации поисковых запросов.Eghbali и Pradel (2024) предложили De-Hallucinator, технику завершения кода на основе LLM, которая извлекает подходящие ссылки на API путем постепенного увеличения контекстной информации в подсказках и итерации модели запроса для повышения точности предсказаний.

2.2.3 Процедурная память

Процедурная память агента в программной инженерии состоит из неявных знаний, хранящихся в весах большой языковой модели (LLM), и явных знаний, записанных в коде агента.

Неявные знания хранятся в параметрах LLM. В существующих исследованиях обычно предлагаются новые LLM с богатыми неявными знаниями для различных задач, решаемых в процессе обучения моделей на большом количестве данных.Zheng et al.2023) организовал LLM кода в домене SE по типу принадлежности (включая компании, университеты, исследовательские группы и сообщества с открытым исходным кодом, частных лиц и анонимных авторов).

Явные знания Записываются в код агента, чтобы он мог работать автоматически. В ряде работ, Пател и др.2023); Shin et al. (2023); Zhang et al. (2023a) исследовали различные способы построения кода агента. В частности, Патель и др.2023) используют три типа контекстного контроля для указания библиотечных функций, включая демонстрации, описания и реализации.Shin et al. (2023) исследовали эффективность трех различных техник инженерии подсказок (т.е. базовых подсказок, контекстного обучения и специфических подсказок) с точной настройкой LLM на трех типичных задачах ASE. Zhang et al. (2023a) исследовали использование различных конструкций подсказок (т.е. базовых подсказок, подсказок со вспомогательной информацией и подсказок цепного мышления) с помощью теста ChatGPT Эффективность обнаружения уязвимостей в программном обеспечении.

2.3 Движение

Модуль действий состоит из двух типов: внутренние и внешние действия. Внешние действия взаимодействуют с внешней средой для получения обратной связи, включая диалог с людьми/агентами и взаимодействие с цифровой средой, а внутренние действия рассуждают и принимают решения на основе данных, полученных от LLM, и оптимизируют решения на основе полученной обратной связи, включая действия по выводу, поиску и обучению. Далее мы подробно опишем каждое действие.

2.3.1 Внутренние действия

Внутренние действия включают в себя действия рассуждения, поиска и обучения. Отдельно действия рассуждения отвечают за анализ проблемы, рассуждения и принятие решений на основе данных, полученных от агента LLM. Действия поиска извлекают релевантную информацию из базы знаний и помогают действиям рассуждения принимать правильные решения. Обучающие действия, с другой стороны, постоянно учатся и обновляют знания, изучая и обновляя семантическую, процедурную и ситуационную память, тем самым повышая качество и эффективность рассуждений и принятия решений.

Разумные действия. Строгий процесс рассуждений является ключевым для выполнения задач агентами LLM, а цепное мышление (CoT) - это эффективный способ рассуждения. С помощью CoT LLM могут глубоко понимать проблемы, декомпозировать сложные задачи и генерировать качественные ответы. Как показано на рисунке 3 Как показано, в существующих исследованиях изучались различные формы CoT, включая простой CoT/планирование, SCoT, мозговой штурм и древовидный CoT. В частности, простой CoT/план - это абзац в подсказке, который описывает процесс рассуждения над проблемой. В ранних работах простое предложение включалось в подсказку, чтобы направить LLM на создание цепного мышления для лучшего решения проблемы. Например, Ху и др. (2024bПредлагается подход контекстного обучения для руководства отладкой LLM с использованием метода "отладки по отпечатку". С развитием технологии LLM дизайн CoTs становится все более сложным. Вдохновившись процессом проверки разработчиками выполнимости тестовых сценариев, Су и др.2023) разработали систему рассуждений Chained Thinking (CoT) для извлечения знаний гуманоидов и логических рассуждений из LLM.Le et al. (2023) предложили новый фреймворк под названием CodeChain, который генерирует самокорректирующиеся цепочки, руководствуясь рядом репрезентативных субмодулей, созданных в предыдущих итерациях.Huang et al. (2024) предложили CodeCoT, который генерирует тестовые примеры для проверки кода на наличие синтаксических ошибок во время выполнения, а затем объединяет цепное мышление с процессом самопроверки при генерации кода через фазу самопроверки.Tian и Chen (2023) представляет новую технику подсказок, разрабатывает сложные подсказки, основанные на мыслях, и обратную связь, основанную на подсказках, и впервые исследует, как улучшить производительность генерации кода для LLM.

Учитывая особенности кода, некоторые исследователи предложили структурированную CoT (Chain of Thought) для введения структурной информации кода. Как показано на рис. 3 Как показано на рисунке (b), структурированный CoT представляет процесс рассуждения в виде псевдокода, включающего циклы, ветви и другие структуры. Например, Ли и др.2023a) предложили структурированные CoTs (SCoTs), которые могут эффективно использовать богатую структурную информацию в исходном коде, и новую технику создания подсказок для кода - SCoT hinting.Christianos et al. (2023) предлагает общую рамочную модель, которая использует построение внутренних и внешних функций для углубления понимания структуры рассуждений и включения структурированных рассуждений в стратегии интеллекта ИИ. Кроме того, в ряде исследований были предложены другие формы CoT, такие как мозговой штурм и древовидный CoT, как показано на рис. 3 (c) и (d) в следующих пунктах. Мозговой штурм основан на генерации релевантных ключевых слов на основе исходных данных. Например, Ли и др.2023e) предложили новую схему мозгового штурма для генерации кода, которая использует шаги мозгового штурма для генерации и отбора различных идей, облегчая алгоритмические рассуждения перед генерацией кода. Tree CoT является примером работы Feng и Chen (2023), которая динамически исследует и обновляет CoT с узлами дерева, находящимися в различных состояниях, включая завершенные, новые, вновь полученные и ожидающие узлы.

Кроме того, в ряде исследований изучались другие методы улучшения способности к рассуждению и эффективности рассуждений интеллекта на основе больших языковых моделей. Например, Ванг и др.2024a) предложили программу TOOLGEN, которая состоит из фазы вставки триггеров и тонкой настройки модели (офлайн) и фазы генерации кода интеграции инструментов (онлайн). TOOLGEN использует улучшения в данном корпусе кода, чтобы определить, где запускать автодополнение инструментов, и отметить специальные маркеры Token.Yang et al. (2023a) разработали новый метод COTTON, который автоматически генерирует коды CoT, используя облегченную языковую модель. Zhang et al. (2023c) предложили декодирование с самоинференцией - новую схему вывода, которая генерирует черновики Token, а затем проверяет вывод Token из этих черновиков с помощью исходной модели биграмм за один проход вперед.Zhou et al. (2023) представляет адаптивную схему решения, которая стратегически настраивает стратегию решения в зависимости от сложности задачи, что не только повышает эффективность вычислений, но и улучшает общую производительность.

软件工程中的智能体:调研、现状与展望

Рисунок 3. Различные CoT для разных подходов, где (a) - это "родной" CoT/план, полученный, если позволить модели большого языка думать шаг за шагом по подсказкам, содержащий подробный процесс анализа проблемы и шаги решения. (b) - структурированный CoT (SCoT), который объединяет особенности кода для создания структуры кода, содержащей ветвящиеся и циклические структуры на диаграмме. В аннотации синим шрифтом кратко описана большая языковая модель, генерирующая конкретный код на основе SCoT. (c) - результат мозгового штурма, в ходе которого анализируется описание проблемы и используются знания об алгоритмах, структурах данных и математике, чтобы предложить идеи решения. (d) - пример древовидного CoT, который динамически исследует и итеративно обновляет CoT для постепенной декомпозиции и завершения проблемы.

Операции извлечения. Операции поиска извлекают соответствующую информацию из базы знаний, чтобы помочь операциям рассуждения принять правильные решения. Входные данные, используемые для извлечения, и тип выходного содержимого, получаемого в результате извлечения, могут быть разными. Как показано в таблице 1 Как показано, входные и выходные данные могут представлять собой текст, код или смешанные сообщения, содержащие текст и код. В частности, их можно разделить на следующие категории: (1) Текст-код. Обычно требования используются в качестве входных данных для получения соответствующего кода или используемых API, которые добавляются к подсказкам для генерации кодов ответа. Например, Zan et al. (2022a) предлагают новый фреймворк, включающий модули APIRetriever и APICoder. В частности, APIRetriever извлекает полезные API, а затем APICoder использует эти извлеченные API для генерации кода. de-Hallucinator Eghbali и Pradel (2024) Получите соответствующие ссылки на API с помощью подсказок и используйте полученные подсказки для итеративного запроса к модели. (2) Текст-текст. Иногда требования также используются в качестве исходных данных для получения соответствующих документов или аналогичных вопросов, помогающих выполнить задачу. Например, Zhou et al. (2022) представили DocPrompting - метод генерации кода на основе естественного языка, который явно реагирует на заданное намерение NL, извлекая соответствующие фрагменты документов. Zhang et al. (2024) предлагает CodeAgent, новую структуру агентов, основанную на большой языковой модели, которая интегрирует внешние инструменты для получения релевантной информации для эффективной генерации кода на уровне кодовой базы, а также поддерживает взаимодействие с программными артефактами для поиска информации, навигации по символам кода и тестирования кода. (3) Код-код. Код также может быть использован в качестве входных данных для получения аналогичного или связанного кода, чтобы обеспечить ссылки для генерации целевого кода. Например, Zhang et al.2023b) предлагает RepoCoder, простую, универсальную и эффективную систему, которая использует итеративный процесс генерации поиска для получения информации на уровне кодовых баз, основанной на сходстве. (4) Гибридный код. Помимо использования одного типа информации (например, текста или кода) в качестве входных данных для поиска релевантных кодов, для повышения точности поиска можно объединить несколько типов информации в гибридную информацию. Например, Ли и др.2022a) использует мощную модель генерации кода, дополняя запрос к документу фрагментами кода, сгенерированными моделью генерации (создавая одноранговые секции), а затем используя дополненный запрос для получения кода.ToolCoder Zhang et al. (2023d) Используйте онлайновые поисковые системы и средства поиска документации для получения соответствующих рекомендаций по API, чтобы помочь в выборе API и создании кода. Кроме того, поиск не ограничивается одним типом информации. (5) Гибрид кода. Использует код в качестве исходных данных и извлекает разнообразную релевантную информацию. Например, Nashid et al.2023) предложили новую методику создания подсказок под названием CEDAR, которая автоматически извлекает презентации кода, относящиеся к задаче разработчика, на основе встраивания или частотного анализа.Geng et al. (2023) Использование парадигмы контекстного обучения для создания мультиинтенциональных аннотаций к коду путем выбора различных примеров аннотаций к коду из пула примеров. (6) Смешивание текстов. Использует требования в качестве входных данных для получения релевантного кода и аналогичных проблем для справки. Например, Ли и др.2023b) предложили LAIL (LLM-Aware In-context Learning) - новый метод выбора примеров для генерации кода, основанный на обучении.Li et al. (2023c) представляет новый механизм под названием AceCoder, который использует поиск по запросу похожих программ в качестве примеров в подсказках для предоставления большого количества релевантного контента (например, алгоритмов, API).

Согласно предыдущему исследованию Li et al.2022c); Zhao et al. (2024); Hu et al. (2023a), существующие методы поиска можно разделить на поиск в разреженном пространстве, поиск в плотном пространстве Wang et al.2024e), и другие методы Hayati et al.2018); Zhang et al. (2020); Poesia et al.2022); Ye et al. (2021); Shu et al. (2022). Рис. 4 показывает конвейер разреженного и плотного поиска. Метод плотного поиска преобразует входные данные в высокоразмерный вектор и выбирает k образцов с наибольшим сходством путем сравнения семантических сходств, в то время как метод разреженного поиска вычисляет BM25 или метрики, такие как TF-IDF, для оценки сходства текстов между образцами. Кроме того, были изучены различные альтернативные методы поиска. Например, некоторые исследования посвящены вычислению дистанции редактирования между текстами на естественном языке Hayati et al.2018), или абстрактное синтаксическое дерево (AST) фрагментов кода Zhang et al. (2020); Poesia et al.2022). Существуют также методы, использующие графы знаний для поиска информации Ye et al.2021); Shu et al. (2022).

Плотный и разреженный методы поиска - это два наиболее распространенных метода поиска. Из них методы плотного поиска обычно работают лучше, чем методы разреженного поиска. Однако разреженный поиск, как правило, более эффективен и в некоторых случаях может быть сопоставим по производительности с плотным поиском. Поэтому во многих исследованиях по соображениям эффективности предпочитают использовать разреженные методы поиска.

软件工程中的智能体:调研、现状与展望

Таблица 1: Различные типы поисковых операций, классифицированные по входу и выходу.

软件工程中的智能体:调研、现状与展望

Рисунок 4: Блок-схема различных методов поиска. Левая часть представляет собой поток плотного метода поиска, который может использовать различные модели для преобразования текста в высокоразмерный вектор вложения и извлечения наиболее похожих образцов путем сравнения семантического сходства. Правая часть представляет собой поток разреженного метода поиска, который сравнивает только сходство текста и игнорирует семантику.

Обучающееся поведение. Обучающееся поведение - это непрерывное усвоение и обновление знаний путем освоения и обновления семантической и процедурной памяти для повышения качества и эффективности рассуждений и принятия решений. (1) Использование знаний для обновления семантической памяти. Семантическая память в основном существует в виде базы знаний, хранящей базовые знания о мире, которые могут быть обновлены путем обновления базы знаний с использованием распознанного кода знаний или создания новой базы знаний. Например, Ляо и др.2023) предложили новую систему генерации кода, названную A3-CodGen, для создания кода более высокого качества путем использования трех типов информации, полученной из найденных библиотек (локально осведомленная информация из текущего файла кода, глобально осведомленная информация из других файлов кода и информация из сторонних библиотек).Du et al. (2024) предложили новую технику обнаружения уязвимостей Vul-RAG, основанную на больших языковых моделях (LLM), которая извлекает многомерные знания из существующих экземпляров CVE с помощью LLM для создания базы знаний об уязвимостях. (2) Обновление неявных знаний. Поскольку неявные знания хранятся в параметрах большой языковой модели, параметры LLM могут быть обновлены путем точной настройки модели. В более ранних работах обычно создаются новые данные для надзора за тонкой настройкой предварительно обученных моделей, что приводит к обновлению полных параметров моделей Xia et al.2023b); Wei et al. (2023a(математика) родb); Tao et al. (2024); Wang et al. (2024d); Liu et al. (2023a); Wang et al. (2023d); Shi et al. (2023b). Однако стоимость тонкой настройки модели возрастает с увеличением размера параметров. В некоторых работах предпринимались попытки исследовать эффективные с точки зрения параметров методы тонкой настройки Weyssow et al.2023); Shi et al. (2023c). Например, Weyssow et al.2023) провели всестороннее исследование методов эффективной тонкой настройки параметров (PEFT) для больших языковых моделей в сценариях автоматической генерации кода.Wang et al. (2023b) вставили и точно настроили эффективно настроенный адаптер структуры вместо того, чтобы точно настраивать предварительно обученную модель. В большинстве современных работ для тонкой настройки модели используются эффективные методы тонкой настройки Guo et al. (2024); Shi et al. (2023d).

(3) Обновление кода агента. Код агента - это программы или алгоритмы, которые агент выполняет, чтобы управлять своим поведением и процессом принятия решений. Агенты, основанные на больших языковых моделях, делают это, создавая соответствующие подсказки в виде кода агента, чтобы регулировать восприятие окружающей среды, принимать рассуждения и решения, а также выполнять операции. Во многих работах используются методы выравнивания инструкций для согласования выходных данных большой языковой модели с входными инструкциями. Например, Муэннигофф и др.2023) использует преимущества естественной структуры коммитов Git для сопряжения изменений кода с указаниями человека и использования этих указаний для внесения корректировок.Hu et al. (2023b) создали первый набор данных InstructCoder, настроенный на инструкции, предназначенный для адаптации больших языковых моделей к редактированию кода общего назначения. Эти высококачественные данные могут принести новые знания и обновить семантическую память для больших языковых моделей.Zan et al.2023) провели обширные эксперименты с восемью популярными языками программирования на StarCoder, чтобы выяснить, могут ли языки программирования улучшать друг друга за счет настройки инструкций.

2.3.2 Внешние действия

Диалог с людьми/агентами Агенты могут взаимодействовать с людьми или другими агентами и получать богатую информацию в качестве обратной связи в процессе взаимодействия, расширяя знания агента и делая ответы Большой языковой модели более точными. В частности, была проделана большая работа по использованию больших языковых моделей в качестве агентов для взаимодействия, например, Lu et al.2024); Jain et al. (2023); Пол и др.2023); Shojaee et al. (2023); Liu et al. (2023b); Wang et al. (2023e); Му и др.2023); Madaan et al. (2023Jain et al. (2023) предложили RLCF, которая использует обратную связь от различных больших языковых моделей для сравнения сгенерированного кода с эталонным кодом с целью дальнейшего обучения предварительно обученных больших языковых моделей с помощью обучения с подкреплением.REFINER Paul et al. (2023) - это фреймворк для взаимодействия с критическими моделями, которые обеспечивают автоматическую обратную связь.Yang et al. (2023b) рассмотрели и прояснили, как большие языковые модели выигрывают от дискриминантного моделирования.Moon et al.2023) создали новый набор данных, предназначенный специально для ремонта кода, и использовали его для получения модели, которая могла бы автоматически генерировать полезные отзывы с помощью Preference-Optimised Tuning and Selection.PPOCoder Shojaee et al. (2023) состоит из двух компонентов, критика и исполнителя, и оптимизируется с помощью PPO путем взаимодействия этих двух моделей.RLTF Liu et al.2023b) взаимодействует с другими моделями, которые используют реальные данные и онлайн-кэшированные данные, созданные в результате взаимодействия с компилятором, для расчета потерь и обновления весов модели с помощью градиентной обратной связи.Wang et al. (2023e) предложили ChatCoder, метод уточнения требований путем общения в чате с большой языковой моделью.Sun et al.2023a) предложили Clover, инструмент, который проверяет согласованность между кодом, строками документации и формальными комментариями.ClarifyGPT Mu et al. (2023) побуждает другую большую языковую модель генерировать целевые уточняющие вопросы для уточнения неоднозначных требований пользовательского ввода.Reflexion Shinn et al.2023) может взаимодействовать с людьми и другими агентами для создания внешней обратной связи.Self-Refine Madaan et al.2023) использует одну большую языковую модель в качестве генератора, корректора и поставщика обратной связи без каких-либо контролируемых учебных данных, дополнительного обучения или обучения с подкреплением.Repilot Wei et al.2023c) синтезируют патчи-кандидаты посредством взаимодействия между Большой языковой моделью и механизмом завершения. В частности, Repilot отсекает невыполнимые Token, основываясь на предложениях, предоставленных Большой языковой моделью.Wang et al. (2023c) представили MINT - эталонный тест, позволяющий оценить способность большой языковой модели решать многораундовые интерактивные задачи с помощью обратной связи на естественном языке от пользователей, моделируемых GPT-4. Hong et al. (2023b) предложили MetaGPT - инновационный фреймворк метапрограммирования, который включает эффективные человеческие рабочие процессы в совместную работу мультиагентов на основе большой языковой модели.Huang et al. (2023a) представили AgentCoder - новое решение для генерации кода, включающее мультиагентный фреймворк со специализированными агентами: агентом-программистом, агентом-дизайнером тестов и агентом-исполнителем тестов.

Цифровая среда Агенты могут взаимодействовать с цифровыми системами, такими как платформа OJ, веб-страницы, компиляторы и другие внешние инструменты, а информация, полученная в ходе взаимодействия, может быть использована в качестве обратной связи для самооптимизации. В частности, наиболее распространенными внешними инструментами являются компиляторы, например, Jain et al (2023); Shojaee et al. (2023); Liu et al. (2023b); Wang et al. (2022); Zhang et al.2023e). Например, RLCF Jain et al. (2023) проверяет, что генерируемый им код проходит набор проверок на корректность путем обучения предварительно обученной большой языковой модели с использованием обратной связи от компилятора.PPOCoder Shojaee et al. (2023) могут включать обратную связь с компилятором и структурное выравнивание в качестве дополнительных знаний для оптимизации модели, чтобы точно настроить модель генерации кода с помощью глубокого обучения с подкреплением (RL).RLTF Liu et al. (2023b) взаимодействует с компилятором для генерации пар обучающих данных и хранит их в онлайн-кэше.Wang et al.2022) предложили COMPCODER, который использует обратную связь с компилятором для генерации компилируемого кода.Zhang et al. (2023e) предложили Self-Edit, подход генерации и редактирования для улучшения качества кода в конкурентных задачах программирования, используя результаты выполнения кода, сгенерированного на основе большой языковой модели. Кроме того, много работ посвящено созданию инструментов, таких как поисковые системы, системы дополнения и т. д., для расширения возможностей интеллектуальных агентов, Wang et al. (2024a); Zhang et al.2024); Agrawal et al. (2023); Wei et al.2023c); Zhang et al.2023fВан и др. (2024a) представили TOOLGEN, метод интеграции инструментов автодополнения в процесс генерации большой языковой модели кода для устранения ошибок зависимостей, таких как неопределенные переменные и отсутствующие члены.Zhang et al. (2024) представили CodeAgent, новую агентную структуру для моделирования больших языков, которая объединяет пять инструментов программирования, позволяющих взаимодействовать с документацией по программному обеспечению для получения информации, навигации по символам кода и тестирования кода для эффективной генерации кода на уровне репозитория.Agrawal et al. (2023) предложили MGD - метод декодирования, управляемый монитором, в котором монитор использует статический анализ для управления декодированием.Repilot Wei et al. (2023c) синтезирует патчи-кандидаты путем взаимодействия между Большой языковой моделью и механизмом завершения. В частности, Repilot завершает Token на основе предложений, предоставленных механизмом завершения.

3 Проблемы и возможности

После анализа материалов, связанных с работой над агентами на основе большой языковой модели (LLM) в программной инженерии, становится очевидным, что интеграция этих двух областей все еще сталкивается со многими проблемами, которые ограничивают их развитие. В этом разделе мы подробно рассмотрим текущие проблемы, с которыми сталкиваются агенты на основе LLM в программной инженерии, и обсудим возможности для будущей работы на основе анализа существующих проблем.

3.1 Недостаточное изучение сенсорных модулей

например, № 1 2.1 Как описано в разделе, агенты на основе LLM для перцептивных модулей в программной инженерии изучены недостаточно. В отличие от естественного языка, код - это особый вид представления, который можно рассматривать как обычный текст или преобразовывать в промежуточные представления с функциями кода, такие как абстрактные синтаксические деревья (AST), графы потоков управления (CFG) и т.д. Существующие работы, такие как Ahmed et al.2024); Аль-Касван и др.2023); Аракелян и др.2023); Beurer-Kellner et al.2023); Алькарни и Азим (2022) код обычно рассматривается как текст, и до сих пор не хватает исследований, изучающих древовидные/графические модальности ввода в агентах на базе LLM, работающих в области программной инженерии. Кроме того, визуальные и слуховые модальности ввода также остаются недостаточно изученными.

3.2 Навыки ролевой игры

Агенты на основе LLM часто должны играть разные роли в различных задачах, каждая из которых требует определенных навыков. Например, агенту может потребоваться выступать в роли генератора кода, когда его просят сгенерировать код, и в роли тестировщика кода, когда он выполняет тестирование кода. Кроме того, в некоторых сценариях агентам может потребоваться одновременно обладать несколькими способностями. Например, в сценариях генерации кода агент должен выступать и в роли генератора кода, и в роли тестировщика, а значит, должен обладать способностью генерировать и тестировать код (Huang et al. 2023b). В области программной инженерии существует множество нишевых задач, для которых обучения LLM недостаточно, а также сложных задач, требующих от агентов наличия множества возможностей, таких как сценарии генерации тестов, разработка внешних компонентов и решение проблем на уровне репозитория. Таким образом, дальнейшие исследования того, как дать агентам возможность эффективно принимать новые роли и справляться с требованиями многоролевой работы, представляют собой перспективное направление будущей работы.

3.3 Неадекватная база поиска знаний

Внешние базы знаний являются важной частью семантической памяти в модуле памяти агента и важным внешним инструментом, с которым агенты могут взаимодействовать. В области обработки естественного языка (NLP) в качестве внешних поисковых баз используются базы знаний, такие как Википедия (Zhao et al. 2023). Однако в области программной инженерии не существует авторитетной и признанной базы знаний, содержащей обширные сведения о коде, такие как базовый синтаксис различных языков программирования, часто используемые алгоритмы, знания, связанные со структурами данных и операционными системами. В будущих исследованиях можно предпринять усилия по разработке всеобъемлющей базы знаний о коде, которая может быть использована в качестве основы для внешнего поиска агентов. Эта база знаний обогатит доступную информацию, повысив тем самым качество и эффективность процесса рассуждений и принятия решений.

3.4 Иллюзорные явления в агентах на основе LLM

Во многих исследованиях, посвященных агентам на основе LLM, LLM рассматривается как когнитивное ядро агента, а общая производительность агента тесно связана с возможностями лежащего в его основе LLM. Существующие исследования (Pan et al. 2024; Liu et al. 2024a) говорит о том, что агенты на основе LLM могут создавать галлюцинации, например, генерировать несуществующие API при выполнении задач по разработке программного обеспечения. Уменьшение этих галлюцинаций может повысить общую производительность агента. В то же время оптимизация агента может обратно пропорционально уменьшить галлюцинации агентов на базе LLM, что указывает на двунаправленную связь между производительностью агента и уменьшением галлюцинаций. Несмотря на то, что в нескольких исследованиях изучался феномен галлюцинаций в LLM, остаются значительные проблемы в решении проблемы галлюцинаций в агентах на основе LLM. Изучение типов галлюцинаций, присутствующих в агентах на базе LLM, глубокий анализ причин их возникновения и предложение эффективных методов борьбы с галлюцинациями - важные возможности для будущих исследований.

3.5 Эффективность взаимодействия нескольких разведок

При взаимодействии нескольких интеллектов каждый отдельный интеллект должен играть свою роль для выполнения конкретной задачи, а затем результаты решений каждого интеллекта объединяются для совместного решения более сложных задач Чен и др.2023b); Хонг и др.2023a); Huang et al. (2023b); Wang et al. (2023a). Однако этот процесс обычно требует большого количества вычислительных ресурсов для каждого интеллекта, что приводит к нерациональному использованию ресурсов и снижению эффективности. Кроме того, каждый отдельный интеллект должен синхронизироваться и обмениваться различной информацией, что приводит к дополнительным затратам на связь и негативно сказывается на реальном времени и оперативности совместной работы. Эффективное управление и распределение вычислительных ресурсов, минимизация затрат на коммуникацию между интеллектами и снижение накладных расходов на рассуждения отдельных интеллектов - ключевые задачи повышения эффективности совместной работы нескольких интеллектов. Решение этих проблем открывает широкие возможности для будущих исследований.

3.6 Применение методов программной инженерии для интеллигенции на основе больших языковых моделей

Технологии в области программной инженерии, в частности методы кодирования, способны значительно продвинуть интеллигенцию, что позволяет говорить о взаимовыгодных отношениях между этими двумя областями. Например, методы тестирования программного обеспечения могут быть адаптированы для выявления аномального поведения и потенциальных дефектов в интеллигенции на основе больших языковых моделей. Кроме того, совершенствование программных инструментов (например, API и библиотек) также может повысить производительность интеллигенции на основе больших языковых моделей, особенно для интеллигенции с возможностями использования инструментов. Кроме того, для эффективного управления системой интеллектуального тела могут быть адаптированы методы управления пакетами. Например, контроль версий может применяться для мониторинга и координации обновлений различных интеллектов в системе интеллектуального тела, что повышает совместимость и целостность системы.

Однако исследования в этой области остаются ограниченными. Поэтому изучение возможности включения более сложных методов SE в интеллектуальные системы тела представляет собой перспективное направление для будущих исследований, которое может продвинуть обе области.

4 Заключение

Для глубокого анализа работ по сочетанию интеллекта на основе больших языковых моделей с программной инженерией мы сначала собрали множество исследований по сочетанию интеллекта на основе больших языковых моделей с задачами в области программной инженерии. Затем, обобщив и проанализировав исследования, полученные в период сбора данных, мы представили структуру интеллекта на основе больших языковых моделей в программной инженерии, которая включает три ключевых модуля: восприятие, память и действие. Наконец, мы представляем подробную информацию о каждом модуле фреймворка, анализируем текущие проблемы, с которыми сталкивается интеллигенция на основе больших языковых моделей в программной инженерии, и указываем на некоторые возможности для будущей работы.

© заявление об авторских правах

Похожие статьи

Нет комментариев

Вы должны войти в систему, чтобы участвовать в комментариях!
Войти сейчас
нет
Нет комментариев...