Logotipo de Zephyrnet

Mejore la eficiencia de revisión y aprobación de código con IA generativa utilizando Amazon Bedrock | Servicios web de Amazon

Fecha:

En el mundo del desarrollo de software, la revisión y aprobación del código son procesos importantes para garantizar la calidad, seguridad y funcionalidad del software que se está desarrollando. Sin embargo, los gerentes encargados de supervisar estos procesos críticos a menudo enfrentan numerosos desafíos, como los siguientes:

  • Falta de experiencia técnica – Es posible que los gerentes no tengan un conocimiento técnico profundo del lenguaje de programación utilizado o que no hayan estado involucrados en la ingeniería de software durante un período prolongado. Esto da como resultado una brecha de conocimiento que puede dificultarles evaluar con precisión el impacto y la solidez de los cambios de código propuestos.
  • Limitaciones de tiempo – La revisión y aprobación del código puede ser un proceso que requiere mucho tiempo, especialmente en proyectos más grandes o complejos. Los gerentes deben equilibrar la minuciosidad de la revisión y la presión para cumplir con los cronogramas del proyecto.
  • Volumen de solicitudes de cambio – Lidiar con un gran volumen de solicitudes de cambio es un desafío común para los gerentes, especialmente si supervisan múltiples equipos y proyectos. De manera similar al desafío de la limitación de tiempo, los gerentes deben poder manejar esas solicitudes de manera eficiente para no frenar el progreso del proyecto.
  • esfuerzo manual – La revisión del código requiere un esfuerzo manual por parte de los gerentes y la falta de automatización puede dificultar la ampliación del proceso.
  • Documentación – La documentación adecuada del proceso de revisión y aprobación del código es importante para la transparencia y la rendición de cuentas.

Con el aumento de inteligencia artificial generativa (AI), los gerentes ahora pueden aprovechar esta tecnología transformadora e integrarla con el conjunto de herramientas y servicios de implementación de AWS para agilizar el proceso de revisión y aprobación de una manera que antes no era posible. En esta publicación, exploramos una solución que ofrece un flujo de trabajo de implementación integrado de extremo a extremo que incorpora análisis y resumen de cambios automatizados junto con la funcionalidad del flujo de trabajo de aprobación. Usamos lecho rocoso del amazonas, un servicio totalmente administrado que hace que los modelos básicos (FM) de las principales empresas emergentes de IA y Amazon estén disponibles a través de una API, para que pueda elegir entre una amplia gama de FM y encontrar el modelo que mejor se adapte a su caso de uso. Con la experiencia sin servidor de Amazon Bedrock, puede comenzar rápidamente, personalizar de forma privada los FM con sus propios datos e integrarlos e implementarlos en sus aplicaciones utilizando herramientas de AWS sin tener que administrar ninguna infraestructura.

Resumen de la solución

El siguiente diagrama ilustra la arquitectura de la solución.

Diagrama de arquitectura

El flujo de trabajo consta de los siguientes pasos:

  1. Un desarrollador envía nuevos cambios de código a su repositorio de código (como Compromiso de código de AWS), que activa automáticamente el inicio de una AWS CodePipeline despliegue.
  2. El código de la aplicación pasa por un proceso de creación de código, realiza análisis de vulnerabilidades y realiza pruebas unitarias utilizando sus herramientas preferidas.
  3. Construcción de código AWS recupera el repositorio y realiza un comando git show para extraer las diferencias de código entre la versión de confirmación actual y la versión de confirmación anterior. Esto produce una salida línea por línea que indica los cambios de código realizados en esta versión.
  4. CodeBuild guarda la salida en un Amazon DynamoDB tabla con información de referencia adicional:
    1. ID de ejecución de CodePipeline
    2. Región de AWS
    3. Nombre de CodePipeline
    4. Número de compilación de CodeBuild
    5. Fecha y hora
    6. Estado
  5. Secuencias de Amazon DynamoDB captura las modificaciones de los datos hecho a la mesa.
  6. An AWS Lambda La función es activada por la secuencia de DynamoDB para procesar el registro capturado.
  7. La función invoca el modelo Anthropic Claude v2 en Amazon Bedrock a través de Amazon Bedrock API de invocación de modelo llamar. Las diferencias de código, junto con un mensaje, se proporcionan como entrada al modelo para su análisis y se devuelve un resumen de los cambios de código como salida.
  8. El resultado del modelo se guarda nuevamente en la misma tabla de DynamoDB.
  9. El gerente es notificado vía Servicio de correo electrónico simple de Amazon (Amazon SES) del resumen de cambios de código y que se requiere su aprobación para la implementación.
  10. El administrador revisa el correo electrónico y proporciona su decisión (aprobar o rechazar) junto con los comentarios de revisión a través de la consola CodePipeline.
  11. La decisión de aprobación y los comentarios de revisión son capturados por Puente de eventos de Amazon, que activa una función Lambda para guardarlos nuevamente en DynamoDB.
  12. Si se aprueba, la canalización implementa el código de la aplicación utilizando sus herramientas preferidas. Si se rechaza, el flujo de trabajo finaliza y la implementación no continúa.

En las siguientes secciones, implementará la solución y verificará el flujo de trabajo de un extremo a otro.

Requisitos previos

Para seguir las instrucciones de esta solución, necesita los siguientes requisitos previos:

Acceso al modelo Bedrock

Implementar la solución

Para implementar la solución, complete los siguientes pasos:

  1. Elige Pila de lanzamiento para lanzar una pila de CloudFormation en us-east-1:
    Pila de lanzamiento
  2. Dirección de correo electrónico, ingrese una dirección de correo electrónico a la que tenga acceso. El resumen de los cambios de código se enviará a esta dirección de correo electrónico.
  3. ID del modelo, deje como predeterminado anthropic.claude-v2, que es el modelo Anthropic Claude v2.

Parámetro de identificación del modelo

La implementación de la plantilla tardará unos 4 minutos.

  1. Cuando reciba un correo electrónico de Amazon SES para verificar su dirección de correo electrónico, elija el enlace proporcionado para autorizar su dirección de correo electrónico.
  2. Recibirá un correo electrónico titulado "Resumen de cambios" para la confirmación inicial del repositorio de muestra en CodeCommit.
  3. En la consola de AWS CloudFormation, vaya a la Salidas pestaña de la pila implementada.
  4. Copie el valor de RepoCloneURL. Lo necesita para acceder al repositorio de código de muestra.

Prueba la solución

Puede probar el flujo de trabajo de un extremo a otro asumiendo el rol de desarrollador e impulsando algunos cambios en el código. Se ha preparado un conjunto de códigos de muestra en CodeCommit. A acceder al repositorio de CodeCommit, ingrese los siguientes comandos en su IDE:

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

Encontrará la siguiente estructura de directorios para un Kit de desarrollo en la nube de AWS (AWS CDK) que crea una función Lambda para realizar una clasificación de burbujas en una cadena de números enteros. Se puede acceder a la función Lambda a través de una URL disponible públicamente.

.
├── 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

Realiza tres cambios en los códigos de la aplicación.

  1. Para mejorar la función para que admita el algoritmo de clasificación rápida y de burbuja, tome un parámetro para permitir la selección del algoritmo a usar y devuelva tanto el algoritmo utilizado como la matriz ordenada en la salida, reemplace todo el contenido de lambda/index.py con el siguiente código:
# 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. Para reducir la configuración del tiempo de espera de la función de 10 minutos a 5 segundos (porque no esperamos que la función se ejecute más de unos pocos segundos), actualice la línea 47 en my_sample_project/my_sample_project_stack.py como sigue:
timeout=Duration.seconds(5),

  1. Para restringir la invocación de la función usando IAM para mayor seguridad, actualice la línea 56 en my_sample_project/my_sample_project_stack.py como sigue:
auth_type=_lambda.FunctionUrlAuthType.AWS_IAM

  1. Empuje los cambios de código ingresando los siguientes comandos:
git commit -am 'added new changes for release v1.1'
git push

Esto inicia el flujo de trabajo de implementación de CodePipeline desde los pasos 1 a 9, como se describe en la descripción general de la solución. Al invocar el modelo de Amazon Bedrock, proporcionamos el siguiente mensaje:

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:

En unos minutos recibirás un correo electrónico informándote que tienes un pipeline de implementación pendiente de aprobación, la lista de cambios de código realizados y un análisis del resumen de cambios generados por el modelo. El siguiente es un ejemplo del resultado:

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.

Finalmente, usted asume el rol de aprobador para revisar y aprobar (o rechazar) la implementación. En su correo electrónico, hay un hipervínculo que lo llevará a la consola de CodePipeline para que ingrese sus comentarios de revisión y apruebe la implementación.

Aprobar canalización

Si se aprueba, la canalización pasará al siguiente paso, que implementa la aplicación. De lo contrario, el oleoducto termina. A los efectos de esta prueba, la función Lambda en realidad no se implementará porque no hay pasos de implementación definidos en la canalización.

Consideraciones adicionales

Las siguientes son algunas consideraciones adicionales al implementar esta solución:

  • Diferentes modelos producirán diferentes resultados, por lo que debes realizar experimentos con diferentes modelos básicos y diferentes indicaciones para tu caso de uso para lograr los resultados deseados.
  • Los análisis proporcionados no pretenden reemplazar el juicio humano. Debe tener en cuenta las posibles alucinaciones cuando trabaje con IA generativa y utilizar el análisis solo como una herramienta para ayudar y acelerar la revisión del código.

Limpiar

Para limpiar los recursos creados, vaya a la consola de AWS CloudFormation y elimine la pila de CloudFormation.

Conclusión

Esta publicación explora los desafíos que enfrentan los gerentes en el proceso de revisión de código e introduce el uso de IA generativa como una herramienta mejorada para acelerar el proceso de aprobación. La solución propuesta integra el uso de Amazon Bedrock en un flujo de trabajo de implementación típico y brinda orientación sobre la implementación de la solución en su entorno. A través de esta implementación, los gerentes ahora pueden aprovechar el poder de asistencia de la IA generativa y afrontar estos desafíos con facilidad y eficiencia.

Pruebe esta implementación y háganos saber su opinión en los comentarios.


Sobre la autora

Foto de perfilXan Huang es arquitecto senior de soluciones en AWS y tiene su sede en Singapur. Trabaja con las principales instituciones financieras para diseñar y crear soluciones seguras, escalables y de alta disponibilidad en la nube. Fuera del trabajo, Xan pasa la mayor parte de su tiempo libre con su familia y recibiendo órdenes de su hija de 3 años. Puedes encontrar a Xan en Etiqueta LinkedIn.

punto_img

Información más reciente

punto_img