Zephyrnet-logotyp

Förbättra kodgranskning och godkännandeeffektivitet med generativ AI med Amazon Bedrock | Amazon webbtjänster

Datum:

I en värld av mjukvaruutveckling är kodgranskning och godkännande viktiga processer för att säkerställa kvaliteten, säkerheten och funktionaliteten hos den mjukvara som utvecklas. Men chefer med uppgift att övervaka dessa kritiska processer står ofta inför många utmaningar, såsom följande:

  • Brist på teknisk expertis – Chefer kanske inte har en djupgående teknisk förståelse för det programmeringsspråk som används eller kanske inte har varit involverad i programvaruutveckling under en längre period. Detta resulterar i en kunskapslucka som kan göra det svårt för dem att korrekt bedöma effekten och sundheten av de föreslagna kodändringarna.
  • Tidsbegränsningar – Kodgranskning och godkännande kan vara en tidskrävande process, särskilt i större eller mer komplexa projekt. Chefer måste balansera mellan granskningens noggrannhet kontra pressen att möta projektets tidslinjer.
  • Volym av ändringsförfrågningar – Att hantera en stor mängd förändringsförfrågningar är en vanlig utmaning för chefer, särskilt om de övervakar flera team och projekt. I likhet med utmaningen med tidsbrist måste chefer kunna hantera dessa förfrågningar effektivt för att inte hålla tillbaka projektframsteg.
  • Manuell ansträngning – Kodgranskning kräver manuell insats av cheferna och bristen på automatisering kan göra det svårt att skala processen.
  • Dokumentation – Korrekt dokumentation av processen för granskning och godkännande av koden är viktig för transparens och ansvarsskyldighet.

Med ökningen av generativ artificiell intelligens (AI), chefer kan nu utnyttja denna transformativa teknologi och integrera den med AWS-sviten av distributionsverktyg och tjänster för att effektivisera gransknings- och godkännandeprocessen på ett sätt som tidigare inte varit möjligt. I det här inlägget utforskar vi en lösning som erbjuder ett integrerat end-to-end-implementeringsarbetsflöde som inkluderar automatiserad förändringsanalys och sammanfattning tillsammans med godkännande arbetsflödesfunktioner. Vi använder Amazonas berggrund, en helt hanterad tjänst som gör grundmodeller (FM) från ledande AI-startups och Amazon tillgängliga via ett API, så att du kan välja från ett brett utbud av FM:er för att hitta den modell som är bäst lämpad för ditt användningsfall. Med Amazon Bedrock serverlösa upplevelse kan du komma igång snabbt, privatanpassa FMs med din egen data och integrera och distribuera dem i dina applikationer med hjälp av AWS-verktyg utan att behöva hantera någon infrastruktur.

Lösningsöversikt

Följande diagram illustrerar lösningsarkitekturen.

Arkitektur diagram

Arbetsflödet består av följande steg:

  1. En utvecklare driver nya kodändringar till sitt kodlager (som t.ex AWS CodeCommit), som automatiskt utlöser starten av en AWS CodePipeline spridning.
  2. Applikationskoden går igenom en kodbyggande process, utför sårbarhetssökningar och utför enhetstester med hjälp av dina föredragna verktyg.
  3. AWS CodeBuild hämtar förvaret och utför ett git show-kommando för att extrahera kodskillnaderna mellan den aktuella commit-versionen och den tidigare commit-versionen. Detta ger en rad för rad utdata som indikerar kodändringarna som gjorts i den här utgåvan.
  4. CodeBuild sparar utdata till en Amazon DynamoDB tabell med ytterligare referensinformation:
    1. CodePipeline kör ID
    2. AWS-regionen
    3. CodePipeline namn
    4. CodeBuild byggnummer
    5. Datum och tid
    6. status
  5. Amazon DynamoDB-strömmar fångar dataändringarna gjort till bordet.
  6. An AWS Lambda funktionen triggas av DynamoDB-strömmen för att bearbeta den registrerade posten.
  7. Funktionen åberopar den antropiska Claude v2-modellen på Amazon Bedrock via Amazon Bedrock InvokeModel API ring upp. Kodskillnaderna, tillsammans med en prompt, tillhandahålls som input till modellen för analys, och en sammanfattning av kodändringar returneras som utdata.
  8. Utdata från modellen sparas tillbaka till samma DynamoDB-tabell.
  9. Chefen meddelas via Amazons enkla e -posttjänst (Amazon SES) av sammanfattningen av kodändringar och att deras godkännande krävs för implementeringen.
  10. Chefen granskar e-postmeddelandet och ger sitt beslut (antingen godkänna eller avvisa) tillsammans med eventuella granskningskommentarer via CodePipeline-konsolen.
  11. Godkännandebeslutet och granskningskommentarerna fångas upp av Amazon EventBridge, som utlöser en Lambda-funktion för att spara dem tillbaka till DynamoDB.
  12. Om den godkänns, distribuerar pipelinen applikationskoden med hjälp av dina föredragna verktyg. Om det avvisas avslutas arbetsflödet och distributionen fortsätter inte.

I följande avsnitt distribuerar du lösningen och verifierar arbetsflödet från början till slut.

Förutsättningar

För att följa instruktionerna i den här lösningen behöver du följande förutsättningar:

Tillgång till berggrundsmodell

Distribuera lösningen

Så här distribuerar du lösningen:

  1. Välja Starta stack för att starta en CloudFormation-stack i us-east-1:
    Starta stack
  2. För E-postadress, ange en e-postadress som du har åtkomst till. Sammanfattningen av kodändringar kommer att skickas till denna e-postadress.
  3. För modelId, lämna som standard anthropic.claude-v2, som är den antropiska Claude v2-modellen.

Modell ID-parameter

Det tar cirka fyra minuter att distribuera mallen.

  1. När du får ett e-postmeddelande från Amazon SES för att verifiera din e-postadress, välj länken för att auktorisera din e-postadress.
  2. Du kommer att få ett e-postmeddelande med titeln "Sammanfattning av ändringar" för den första commit av exempelförrådet i CodeCommit.
  3. På AWS CloudFormation-konsolen navigerar du till Utgångarna fliken i den utplacerade stacken.
  4. Kopiera värdet på RepoCloneURL. Du behöver detta för att komma åt exempelkodförrådet.

Testa lösningen

Du kan testa arbetsflödet från början genom att ta rollen som utvecklare och driva några kodändringar. En uppsättning exempelkoder har förberetts åt dig i CodeCommit. Till komma åt CodeCommit-förrådet, ange följande kommandon på din IDE:

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

Du hittar följande katalogstruktur för en AWS Cloud Development Kit (AWS CDK) applikation som skapar en lambdafunktion för att utföra en bubbelsortering på en sträng med heltal. Lambdafunktionen är tillgänglig via en allmänt tillgänglig 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

Du gör tre ändringar i applikationskoderna.

  1. För att förbättra funktionen för att stödja både snabbsorteringsalgoritm och bubbelsorteringsalgoritm, ta in en parameter för att tillåta val av algoritm som ska användas, och returnera både den använda algoritmen och den sorterade matrisen i utdata, ersätt hela innehållet i lambda/index.py med följande kod:
# 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. För att minska tidsgränsen för funktionen från 10 minuter till 5 sekunder (eftersom vi inte förväntar oss att funktionen ska köras längre än några sekunder), uppdatera rad 47 i my_sample_project/my_sample_project_stack.py enligt följande:
timeout=Duration.seconds(5),

  1. För att begränsa anropet av funktionen med IAM för ökad säkerhet, uppdatera rad 56 in my_sample_project/my_sample_project_stack.py enligt följande:
auth_type=_lambda.FunctionUrlAuthType.AWS_IAM

  1. Tryck på kodändringarna genom att ange följande kommandon:
git commit -am 'added new changes for release v1.1'
git push

Detta startar CodePipeline-distributionsarbetsflödet från steg 1–9 som beskrivs i lösningsöversikten. När vi anropade Amazon Bedrock-modellen gav vi följande uppmaning:

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:

Inom några minuter kommer du att få ett e-postmeddelande som informerar dig om att du har en distributionspipeline i väntan på ditt godkännande, listan över gjorda kodändringar och en analys av sammanfattningen av ändringar som genererats av modellen. Följande är ett exempel på utdata:

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.

Slutligen tar du på dig rollen som godkännare för att granska och godkänna (eller avvisa) distributionen. I ditt e-postmeddelande finns det en hyperlänk som tar dig till CodePipeline-konsolen där du kan mata in dina recensionskommentarer och godkänna distributionen.

Godkänn Pipeline

Om den godkänns fortsätter pipelinen till nästa steg, som distribuerar applikationen. Annars slutar pipelinen. För syftet med detta test kommer Lambda-funktionen faktiskt inte att distribueras eftersom det inte finns några utbyggnadssteg definierade i pipelinen.

Ytterligare överväganden

Följande är några ytterligare överväganden när du implementerar den här lösningen:

  • Olika modeller ger olika resultat, så du bör utföra experiment med olika grundmodeller och olika uppmaningar för ditt användningsfall för att uppnå önskat resultat.
  • Analyserna som tillhandahålls är inte avsedda att ersätta mänskligt omdöme. Du bör vara uppmärksam på potentiella hallucinationer när du arbetar med generativ AI, och använda analysen endast som ett verktyg för att hjälpa och påskynda kodgranskning.

Städa upp

För att rensa upp de skapade resurserna, gå till AWS CloudFormation-konsolen och ta bort CloudFormation-stacken.

Slutsats

Det här inlägget utforskar utmaningarna för chefer i kodgranskningsprocessen och introducerar användningen av generativ AI som ett utökat verktyg för att påskynda godkännandeprocessen. Den föreslagna lösningen integrerar användningen av Amazon Bedrock i ett typiskt distributionsarbetsflöde och ger vägledning om hur du distribuerar lösningen i din miljö. Genom denna implementering kan chefer nu dra fördel av den hjälpande kraften hos generativ AI och navigera i dessa utmaningar med lätthet och effektivitet.

Prova den här implementeringen och låt oss veta dina tankar i kommentarerna.


Om författaren

ProfilbildXan Huang är Senior Solutions Architect med AWS och är baserad i Singapore. Han arbetar med stora finansiella institutioner för att designa och bygga säkra, skalbara och högt tillgängliga lösningar i molnet. Utanför jobbet tillbringar Xan det mesta av sin lediga tid med sin familj och att få styras av sin 3-åriga dotter. Du kan hitta Xan på LinkedIn.

plats_img

Senaste intelligens

plats_img