Home Машинное обучение Повысьте эффективность проверки и утверждения кода с помощью генеративного искусственного интеллекта с помощью Amazon Bedrock. | DeepTech

Повысьте эффективность проверки и утверждения кода с помощью генеративного искусственного интеллекта с помощью Amazon Bedrock. | DeepTech

0
Повысьте эффективность проверки и утверждения кода с помощью генеративного искусственного интеллекта с помощью Amazon Bedrock.
 | DeepTech

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

  • Отсутствие технических знаний – Менеджеры могут не иметь глубокого технического понимания используемого языка программирования или не заниматься разработкой программного обеспечения в течение длительного периода. Это приводит к пробелу в знаниях, из-за которого им может быть сложно точно оценить влияние и обоснованность предлагаемых изменений кода.
  • Временные ограничения – Проверка и утверждение кода может занять много времени, особенно в более крупных и сложных проектах. Менеджерам необходимо балансировать между тщательностью проверки и необходимостью соблюдать сроки проекта.
  • Объем запросов на изменение – Обработка большого количества запросов на изменения – обычная задача для менеджеров, особенно если они курируют несколько команд и проектов. Подобно проблеме нехватки времени, менеджеры должны иметь возможность эффективно обрабатывать эти запросы, чтобы не замедлять ход проекта.
  • Ручное усилие – Проверка кода требует от менеджеров ручных усилий, а отсутствие автоматизации может затруднить масштабирование процесса.
  • Документация – Надлежащая документация процесса проверки и утверждения кода важна для прозрачности и подотчетности.

С развитием генеративного искусственного интеллекта (ИИ) менеджеры теперь могут использовать эту преобразующую технологию и интегрировать ее с набором инструментов и сервисов развертывания AWS, чтобы упростить процесс проверки и утверждения ранее невозможным образом. В этом посте мы исследуем решение, которое предлагает интегрированный сквозной рабочий процесс развертывания, включающий автоматический анализ и обобщение изменений вместе с функциональностью рабочего процесса утверждения. Мы используем Amazon Bedrock, полностью управляемый сервис, который делает базовые модели (FM) от ведущих стартапов в области искусственного интеллекта и Amazon доступными через API, поэтому вы можете выбирать из широкого спектра FM, чтобы найти модель, которая лучше всего подходит для вашего варианта использования. Благодаря бессерверному использованию Amazon Bedrock вы можете быстро приступить к работе, конфиденциально настроить FM с использованием собственных данных, а также интегрировать и развернуть их в своих приложениях с помощью инструментов AWS без необходимости управлять какой-либо инфраструктурой.

Обзор решения

На следующей диаграмме показана архитектура решения.

Схема архитектуры

Рабочий процесс состоит из следующих этапов:

  1. Разработчик отправляет новые изменения кода в свой репозиторий кода (например, AWS CodeCommit), что автоматически запускает развертывание AWS CodePipeline.
  2. Код приложения проходит процесс сборки кода, выполняет сканирование уязвимостей и модульные тесты с использованием предпочитаемых вами инструментов.
  3. AWS CodeBuild извлекает репозиторий и выполняет команду git show, чтобы извлечь различия кода между текущей версией фиксации и предыдущей версией фиксации. Это создает построчный вывод, показывающий изменения кода, внесенные в эту версию.
  4. CodeBuild сохраняет выходные данные в таблицу Amazon DynamoDB с дополнительной справочной информацией:
    1. Идентификатор запуска CodePipeline
    2. Регион AWS
    3. Имя кодового конвейера
    4. Номер сборки CodeBuild
    5. Дата и время
    6. Положение дел
  5. Amazon DynamoDB Streams фиксирует изменения данных, внесенные в таблицу.
  6. Функция AWS Lambda запускается потоком DynamoDB для обработки полученной записи.
  7. Функция вызывает модель Anthropic Claude v2 на Amazon Bedrock через Amazon Bedrock. API-интерфейс InvokeModel вызов. Различия в коде вместе с подсказкой предоставляются в качестве входных данных для анализа модели, а сводка изменений кода возвращается в качестве выходных данных.
  8. Выходные данные модели сохраняются обратно в ту же таблицу DynamoDB.
  9. Менеджер уведомляется через Amazon Simple Email Service (Amazon SES) о сводке изменений кода и о том, что для развертывания требуется их одобрение.
  10. Менеджер просматривает электронное письмо и сообщает свое решение (одобрить или отклонить) вместе с комментариями по проверке через консоль CodePipeline.
  11. Решение об утверждении и комментарии к проверке фиксируются Amazon EventBridge, который запускает функцию Lambda для сохранения их обратно в DynamoDB.
  12. В случае одобрения конвейер развертывает код приложения с использованием предпочитаемых вами инструментов. В случае отклонения рабочий процесс завершается, и развертывание не продолжается дальше.

В следующих разделах вы развернете решение и проверите сквозной рабочий процесс.

Предварительные условия

Чтобы следовать инструкциям в этом решении, необходимы следующие предварительные условия:

Доступ к базовой модели

Развертывание решения

Чтобы развернуть решение, выполните следующие действия:

  1. Выбирать Запустить стек для запуска стека CloudFormation в us-east-1:
    Запустить стек
  2. Для Адрес электронной почты, введите адрес электронной почты, к которому у вас есть доступ. Сводка изменений кода будет отправлена ​​на этот адрес электронной почты.
  3. Для идентификатор моделиоставьте значение по умолчанию anthropic.claude-v2, которое является моделью Anthropic Claude v2.

Параметр идентификатора модели

Развертывание шаблона займет около 4 минут.

  1. Когда вы получите электронное письмо от Amazon SES для подтверждения вашего адреса электронной почты, выберите предоставленную ссылку для авторизации вашего адреса электронной почты.
  2. Вы получите электронное письмо с заголовком «Сводка изменений» для первоначальной фиксации образца репозитория в CodeCommit.
  3. В консоли AWS CloudFormation перейдите к Выходы вкладка развернутого стека.
  4. Скопируйте значение RepoCloneURL. Это необходимо для доступа к репозиторию примеров кода.

Проверьте решение

Вы можете протестировать рабочий процесс от начала до конца, взяв на себя роль разработчика и внеся некоторые изменения в код. В CodeCommit для вас подготовлен набор примеров кода. Чтобы получить доступ к репозиторию CodeCommit, введите в своей IDE следующие команды:

git clone <replace_with_value_of_RepoCloneURL>
cd my-sample-project
ls

Вы найдете следующую структуру каталогов для приложения AWS Cloud Development Kit (AWS CDK), которое создает функцию Lambda для выполнения пузырьковой сортировки строки целых чисел. Доступ к функции Lambda осуществляется через общедоступный URL-адрес.

.
├── README.md
├── app.py
├── cdk.json
├── lambda
│ └── index.py
├── my_sample_project
│ ├── __init__.py
│ └── my_sample_project_stack.py
├── requirements-dev.txt
├── requirements.txt
└── source.bat

Вы вносите три изменения в коды приложений.

  1. Чтобы улучшить функцию для поддержки как быстрой сортировки, так и алгоритма пузырьковой сортировки, возьмите параметр, позволяющий выбрать используемый алгоритм, и верните как используемый алгоритм, так и отсортированный массив на выходе, замените все содержимое lambda/index.py со следующим кодом:
# function to perform bubble sort on an array of integers
def bubble_sort(arr):
    for i in range(len(arr)):
        for j in range(len(arr)-1):
            if arr(j) > arr(j+1):
                arr(j), arr(j+1) = arr(j+1), arr(j)
    return arr

# function to perform quick sort on an array of integers
def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    else:
        pivot = arr(0)
        less = (i for i in arr(1:) if i <= pivot)
        greater = (i for i in arr(1:) if i > pivot)
        return quick_sort(less) + (pivot) + quick_sort(greater)

# lambda handler
def lambda_handler(event, context):
    try:
        algorithm = event('queryStringParameters')('algorithm')
        numbers = event('queryStringParameters')('numbers')
        arr = (int(x) for x in numbers.split(','))
        if ( algorithm == 'bubble'):
            arr = bubble_sort(arr)
        elif ( algorithm == 'quick'):
            arr = quick_sort(arr)
        else:
            arr = bubble_sort(arr)

        return {
            'statusCode': 200,
            'body': {
                'algorithm': algorithm,
                'numbers': arr
            }
        }
    except:
        return {
            'statusCode': 200,
            'body': {
                'algorithm': 'bubble or quick',
                'numbers': 'integer separated by commas'
            }
        }

  1. Чтобы уменьшить время ожидания функции с 10 минут до 5 секунд (поскольку мы не ожидаем, что функция будет работать дольше нескольких секунд), обновите строку 47 в my_sample_project/my_sample_project_stack.py следующее:
timeout=Duration.seconds(5),

  1. Чтобы ограничить вызов функции с помощью IAM для дополнительной безопасности, обновите строку 56 в my_sample_project/my_sample_project_stack.py следующее:
auth_type=_lambda.FunctionUrlAuthType.AWS_IAM

  1. Нажмите на изменения кода, введя следующие команды:
git commit -am 'added new changes for release v1.1'
git push

Это запустит рабочий процесс развертывания CodePipeline с шагов 1–9, как описано в обзоре решения. При вызове модели Amazon Bedrock мы предоставили следующую подсказку:

Human: Review the following "git show" output enclosed within <gitshow> tags detailing code changes, and analyze their implications.
Assess the code changes made and provide a concise summary of the modifications as well as the potential consequences they might have on the code's functionality.
<gitshow>
{code_change}
</gitshow>

Assistant:

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

Based on the diff, the following main changes were made:

1. Two sorting algorithms were added - bubble sort and quick sort.
2. The lambda handler was updated to take an 'algorithm' query parameter to determine which sorting algorithm to use. By default it uses bubble sort if no algorithm is specified. 
3. The lambda handler now returns the sorting algorithm used along with the sorted numbers in the response body.
4. The lambda timeout was reduced from 10 mins to 5 seconds. 
5. The function URL authentication was changed from none to AWS IAM, so only authenticated users can invoke the URL.

Overall, this adds support for different sorting algorithms, returns more metadata in the response, reduces timeout duration, and tightens security around URL access. The main functional change is the addition of the sorting algorithms, which provides more flexibility in how the numbers are sorted. The other changes improve various non-functional attributes of the lambda function.

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

Утвердить конвейер

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

Дополнительные соображения

Ниже приведены некоторые дополнительные соображения при реализации этого решения:

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

Очистить

Чтобы очистить созданные ресурсы, перейдите в консоль AWS CloudFormation и удалите стек CloudFormation.

Заключение

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

Попробуйте эту реализацию и сообщите нам свои мысли в комментариях.


об авторе

Картинка профиляКсан Хуанг — старший архитектор решений в AWS, живет в Сингапуре. Он сотрудничает с крупными финансовыми учреждениями над проектированием и созданием безопасных, масштабируемых и высокодоступных облачных решений. Вне работы Ксан проводит большую часть своего свободного времени со своей семьей и находится под руководством своей трехлетней дочери. Вы можете найти Ксана на LinkedIn.

LEAVE A REPLY

Please enter your comment!
Please enter your name here