Zephyrnet-logo

Verbeter de efficiëntie van codebeoordeling en goedkeuring met generatieve AI met behulp van Amazon Bedrock | Amazon-webservices

Datum:

In de wereld van softwareontwikkeling zijn codebeoordeling en -goedkeuring belangrijke processen om de kwaliteit, veiligheid en functionaliteit van de software die wordt ontwikkeld te waarborgen. Managers die belast zijn met het toezicht op deze kritieke processen worden echter vaak geconfronteerd met tal van uitdagingen, zoals de volgende:

  • Gebrek aan technische expertise – Managers hebben mogelijk geen diepgaand technisch inzicht in de gebruikte programmeertaal of zijn mogelijk al langere tijd niet betrokken bij software-engineering. Dit resulteert in een kennislacune die het voor hen moeilijk kan maken om de impact en deugdelijkheid van de voorgestelde codewijzigingen nauwkeurig te beoordelen.
  • Tijdsdruk – Codebeoordeling en goedkeuring kunnen een tijdrovend proces zijn, vooral bij grotere of complexere projecten. Managers moeten een evenwicht vinden tussen de grondigheid van de beoordeling en de druk om de projecttijdlijnen te halen.
  • Volume wijzigingsverzoeken – Het omgaan met een groot aantal wijzigingsverzoeken is een veel voorkomende uitdaging voor managers, vooral als ze toezicht houden op meerdere teams en projecten. Net als bij tijdgebrek moeten managers in staat zijn om deze verzoeken efficiënt af te handelen, zodat de voortgang van het project niet wordt tegengehouden.
  • Handmatige inspanning – Code review vereist handmatige inspanning van de managers, en het gebrek aan automatisering kan het moeilijk maken om het proces op te schalen.
  • Documentatie – Een goede documentatie van het beoordelings- en goedkeuringsproces van de code is belangrijk voor transparantie en verantwoording.

Met de opkomst van generatieve kunstmatige intelligentie (AI) kunnen managers deze transformatieve technologie nu benutten en integreren met de AWS-suite van implementatietools en -diensten om het beoordelings- en goedkeuringsproces te stroomlijnen op een manier die voorheen niet mogelijk was. In dit artikel verkennen we een oplossing die een geïntegreerde end-to-end implementatieworkflow biedt die geautomatiseerde wijzigingsanalyse en samenvatting omvat, samen met goedkeuringsworkflowfunctionaliteit. We gebruiken Amazonebodem, een volledig beheerde service die basismodellen (FM's) van toonaangevende AI-startups en Amazon beschikbaar maakt via een API, zodat u uit een breed scala aan FM's kunt kiezen om het model te vinden dat het meest geschikt is voor uw gebruiksscenario. Met de serverloze ervaring van Amazon Bedrock kunt u snel aan de slag, FM's privé aanpassen met uw eigen gegevens en deze integreren en implementeren in uw applicaties met behulp van AWS-tools, zonder dat u enige infrastructuur hoeft te beheren.

Overzicht oplossingen

Het volgende diagram illustreert de oplossingsarchitectuur.

Architectuurdiagram

De workflow bestaat uit de volgende stappen:

  1. Een ontwikkelaar pusht nieuwe codewijzigingen naar zijn coderepository (zoals AWS Codecommit), wat automatisch het begin van een activeert AWS CodePipeline implementatie.
  2. De applicatiecode doorloopt een codebouwproces, voert kwetsbaarheidsscans uit en voert unit-tests uit met behulp van uw favoriete tools.
  3. AWS CodeBuild haalt de repository op en voert een git show commando uit om de codeverschillen tussen de huidige commit-versie en de vorige commit-versie te extraheren. Dit levert een regel-voor-regel uitvoer op die de codewijzigingen aangeeft die in deze release zijn aangebracht.
  4. CodeBuild slaat de uitvoer op in een Amazon DynamoDB tabel met aanvullende referentie-informatie:
    1. CodePipeline-uitvoerings-ID
    2. AWS-regio
    3. CodePipeline-naam
    4. CodeBuild-buildnummer
    5. Datum en tijd
    6. Status
  5. Amazon DynamoDB-streams legt de gegevenswijzigingen vast op tafel gemaakt.
  6. An AWS Lambda functie wordt geactiveerd door de DynamoDB-stream om de vastgelegde record te verwerken.
  7. De functie roept het Anthropic Claude v2-model op Amazon Bedrock aan via Amazon Bedrock InvokeModel-API telefoongesprek. De codeverschillen worden, samen met een prompt, geleverd als invoer voor het model voor analyse, en een samenvatting van de codewijzigingen wordt als uitvoer geretourneerd.
  8. De uitvoer van het model wordt terug opgeslagen in dezelfde DynamoDB-tabel.
  9. De manager wordt op de hoogte gebracht via Amazon eenvoudige e-mailservice (Amazon SES) van de samenvatting van codewijzigingen en dat hun goedkeuring vereist is voor de implementatie.
  10. De manager beoordeelt de e-mail en geeft zijn beslissing (goedkeuren of afwijzen) samen met eventuele beoordelingsopmerkingen via de CodePipeline-console.
  11. Het goedkeuringsbesluit en de beoordelingsopmerkingen worden vastgelegd door Amazon EventBridge, die een Lambda-functie activeert om ze weer op te slaan in DynamoDB.
  12. Indien goedgekeurd, implementeert de pijplijn de applicatiecode met behulp van de tools van uw voorkeur. Indien afgewezen, eindigt de werkstroom en gaat de implementatie niet verder.

In de volgende secties implementeert u de oplossing en verifieert u de end-to-end workflow.

Voorwaarden

Om de instructies in deze oplossing te volgen, hebt u de volgende vereisten nodig:

Toegang tot basismodellen

Implementeer de oplossing

Voer de volgende stappen uit om de oplossing te implementeren:

  1. Kies Start Stack om een ​​CloudFormation-stack te lanceren us-east-1:
    Start Stack
  2. Voor E-mailadres, voer een e-mailadres in waartoe u toegang heeft. Het overzicht van de codewijzigingen wordt naar dit e-mailadres verzonden.
  3. Voor modelId, laat het standaard anthropic.claude-v2 staan, wat het Anthropic Claude v2-model is.

Model-ID-parameter

Het implementeren van de sjabloon duurt ongeveer 4 minuten.

  1. Wanneer u een e-mail ontvangt van Amazon SES om uw e-mailadres te verifiëren, kiest u de verstrekte link om uw e-mailadres te autoriseren.
  2. U ontvangt een e-mail met de titel “Samenvatting van de wijzigingen” voor de eerste commit van de voorbeeldrepository in CodeCommit.
  3. Navigeer op de AWS CloudFormation-console naar de Uitgangen tabblad van de ingezette stapel.
  4. Kopieer de waarde van RepoCloneURL. U hebt dit nodig om toegang te krijgen tot de voorbeeldcoderepository.

Test de oplossing

U kunt de workflow van begin tot eind testen door de rol van ontwikkelaar op u te nemen en enkele codewijzigingen door te voeren. In CodeCommit is een set voorbeeldcodes voor u klaargemaakt. Naar toegang krijgen tot de CodeCommit-repository, voer de volgende opdrachten in op uw IDE:

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

U vindt de volgende mapstructuur voor een AWS Cloud-ontwikkelingskit (AWS CDK) applicatie die een Lambda-functie creëert om een ​​bellensortering uit te voeren op een reeks gehele getallen. De Lambda-functie is toegankelijk via een publiekelijk beschikbare 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

U brengt drie wijzigingen aan in de applicatiecodes.

  1. Om de functie te verbeteren die zowel het snelle sorteer- als het bellensorteeralgoritme ondersteunt, neemt u een parameter in waarmee u het algoritme kunt selecteren dat u wilt gebruiken, en retourneert u zowel het gebruikte algoritme als de gesorteerde array in de uitvoer, vervangt u de volledige inhoud van lambda/index.py met de volgende code:
# 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. Om de time-outinstelling van de functie terug te brengen van 10 minuten naar 5 seconden (omdat we niet verwachten dat de functie langer dan een paar seconden zal werken), update je regel 47 in my_sample_project/my_sample_project_stack.py als volgt:
timeout=Duration.seconds(5),

  1. Om de aanroep van de functie met IAM te beperken voor extra veiligheid, update je regel 56 in my_sample_project/my_sample_project_stack.py als volgt:
auth_type=_lambda.FunctionUrlAuthType.AWS_IAM

  1. Push de codewijzigingen door de volgende opdrachten in te voeren:
git commit -am 'added new changes for release v1.1'
git push

Hiermee wordt de CodePipeline-implementatieworkflow gestart vanaf stap 1 tot en met 9, zoals beschreven in het oplossingsoverzicht. Bij het aanroepen van het Amazon Bedrock-model hebben we de volgende prompt gegeven:

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:

Binnen een paar minuten ontvangt u een e-mail waarin u wordt geïnformeerd dat er een implementatiepijplijn is die wacht op uw goedkeuring, de lijst met aangebrachte codewijzigingen en een analyse van de samenvatting van de wijzigingen die door het model zijn gegenereerd. Het volgende is een voorbeeld van de uitvoer:

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.

Ten slotte neem je de rol van goedkeurder op je om de implementatie te beoordelen en goed te keuren (of af te wijzen). In uw e-mail staat een hyperlink die u naar de CodePipeline-console brengt, waar u uw beoordelingsopmerkingen kunt invoeren en de implementatie kunt goedkeuren.

Pijplijn goedkeuren

Indien goedgekeurd, gaat de pijplijn door naar de volgende stap, waarbij de applicatie wordt geïmplementeerd. Anders eindigt de pijplijn. Voor het doel van deze test wordt de Lambda-functie niet daadwerkelijk geïmplementeerd omdat er geen implementatiestappen in de pijplijn zijn gedefinieerd.

Aanvullende overwegingen

Hier volgen enkele aanvullende overwegingen bij het implementeren van deze oplossing:

  • Verschillende modellen zullen verschillende resultaten opleveren, dus u moet experimenten uitvoeren met verschillende basismodellen en verschillende aanwijzingen voor uw gebruiksscenario om de gewenste resultaten te bereiken.
  • De verstrekte analyses zijn niet bedoeld ter vervanging van het menselijk oordeel. U moet rekening houden met mogelijke hallucinaties wanneer u met generatieve AI werkt, en de analyse alleen gebruiken als hulpmiddel om de codebeoordeling te ondersteunen en te versnellen.

Opruimen

Om de aangemaakte bronnen op te ruimen, gaat u naar de AWS CloudFormation-console en verwijdert u de CloudFormation-stack.

Conclusie

Dit artikel onderzoekt de uitdagingen waarmee managers worden geconfronteerd in het codebeoordelingsproces, en introduceert het gebruik van generatieve AI als een uitgebreid hulpmiddel om het goedkeuringsproces te versnellen. De voorgestelde oplossing integreert het gebruik van Amazon Bedrock in een typische implementatieworkflow en biedt richtlijnen voor het implementeren van de oplossing in uw omgeving. Door deze implementatie kunnen managers nu profiteren van de ondersteunende kracht van generatieve AI en deze uitdagingen gemakkelijk en efficiënt aangaan.

Probeer deze implementatie uit en laat ons uw mening weten in de reacties.


Over de auteur

Profiel fotoXan Huang is een Senior Solutions Architect bij AWS en is gevestigd in Singapore. Hij werkt samen met grote financiële instellingen om veilige, schaalbare en zeer beschikbare oplossingen in de cloud te ontwerpen en bouwen. Buiten zijn werk brengt Xan het grootste deel van zijn vrije tijd door met zijn gezin en krijgt hij de leiding over zijn driejarige dochter. Je kunt Xan vinden op LinkedIn.

spot_img

Laatste intelligentie

spot_img