ゼファーネットのロゴ

Amazon Bedrock を使用した生成 AI でコードレビューと承認の効率を向上 |アマゾン ウェブ サービス

日付:

ソフトウェア開発の世界では、コードのレビューと承認は、開発中のソフトウェアの品質、セキュリティ、機能を保証するための重要なプロセスです。ただし、これらの重要なプロセスを監督する任務を負ったマネージャーは、次のような多くの課題に直面することがよくあります。

  • 技術的専門知識の欠如 – マネージャーは、使用されているプログラミング言語について技術的に深く理解していないか、ソフトウェア エンジニアリングに長期間携わっていない可能性があります。その結果、知識のギャップが生じ、提案されたコード変更の影響と健全性を正確に評価することが困難になる可能性があります。
  • 時間の制約 – コードのレビューと承認は、特に大規模またはより複雑なプロジェクトの場合、時間のかかるプロセスになる可能性があります。マネージャーは、レビューの徹底性とプロジェクトのスケジュールを遵守するというプレッシャーの間でバランスを取る必要があります。
  • 変更リクエストの量 – 大量の変更リクエストに対処することは、特に複数のチームやプロジェクトを監督しているマネージャーにとって共通の課題です。時間の制約という課題と同様に、マネージャーはプロジェクトの進行を妨げないように、これらの要求を効率的に処理できる必要があります。
  • 手作業による作業 – コードレビューには管理者による手動の作業が必要であり、自動化されていないためプロセスの拡張が困難になる可能性があります。
  • ドキュメンテーション – コードのレビューと承認のプロセスを適切に文書化することは、透明性と説明責任のために重要です。

の上昇と 生成人工知能 (AI) により、管理者はこの革新的なテクノロジーを活用し、AWS の導入ツールおよびサービスのスイートと統合して、以前は不可能だった方法でレビューと承認のプロセスを合理化できるようになりました。この投稿では、自動化された変更分析と要約を承認ワークフロー機能とともに組み込んだ、統合されたエンドツーエンドの展開ワークフローを提供するソリューションを検討します。を使用しております アマゾンの岩盤は、主要な AI スタートアップ企業や Amazon の基盤モデル (FM) を API 経由で利用できるようにするフルマネージド サービスです。そのため、幅広い FM から選択して、ユースケースに最適なモデルを見つけることができます。 Amazon Bedrock サーバーレスエクスペリエンスを使用すると、インフラストラクチャを管理することなく、すぐに開始し、独自のデータで FM をプライベートにカスタマイズし、AWS ツールを使用してアプリケーションに統合してデプロイできます。

ソリューションの概要

次の図は、ソリューションのアーキテクチャを示しています。

アーキテクチャ図

ワークフローは次の手順で構成されます。

  1. 開発者は、新しいコードの変更をコード リポジトリにプッシュします (例: AWS コードコミット)、これにより自動的に開始がトリガーされます。 AWS コードパイプライン 配備
  2. アプリケーション コードはコード構築プロセスを経て、脆弱性スキャンを実行し、好みのツールを使用して単体テストを実施します。
  3. AWS コードビルド リポジトリを取得し、 git show コマンドを実行して、現在のコミット バージョンと以前のコミット バージョンのコードの差異を抽出します。これにより、このリリースで行われたコードの変更を示す行ごとの出力が生成されます。
  4. CodeBuild は出力を Amazon DynamoDB 追加の参照情報を含む表:
    1. CodePipeline 実行 ID
    2. AWSリージョン
    3. コードパイプライン名
    4. CodeBuild のビルド番号
    5. 日時
    6. Status:
  5. AmazonDynamoDBストリーム データの変更をキャプチャします テーブルに作られました。
  6. An AWSラムダ この関数は DynamoDB ストリームによってトリガーされ、キャプチャされたレコードを処理します。
  7. この関数は、Amazon Bedrock 経由で Amazon Bedrock 上の Anthropic Claude v2 モデルを呼び出します。 InvokeModel API 電話。コードの相違点はプロンプトとともに、分析用のモデルへの入力として提供され、コード変更の概要が出力として返されます。
  8. モデルからの出力は同じ DynamoDB テーブルに保存されます。
  9. マネージャーには次の方法で通知されます。 AmazonシンプルEメールサービス (Amazon SES) コード変更の概要と、デプロイには承認が必要であることを説明します。
  10. マネージャーは電子メールをレビューし、CodePipeline コンソールを介してレビュー コメントとともに決定 (承認または拒否) を提供します。
  11. 承認決定とレビューコメントは次のように取得されます。 アマゾンイベントブリッジこれにより、Lambda 関数がトリガーされ、DynamoDB に保存されます。
  12. 承認されると、パイプラインは好みのツールを使用してアプリケーション コードをデプロイします。拒否された場合、ワークフローは終了し、展開はそれ以上続行されません。

次のセクションでは、ソリューションをデプロイし、エンドツーエンドのワークフローを検証します。

前提条件

このソリューションの手順に従うには、次の前提条件が必要です。

基盤モデルへのアクセス

ソリューションを展開する

ソリューションを展開するには、次の手順を実行します。

  1. 選択する 発射スタック CloudFormation スタックを起動するには us-east-1:
    発射スタック
  2. 電子メールアドレス、アクセスできる電子メール アドレスを入力します。コード変更の概要は、この電子メール アドレスに送信されます。
  3. モデルIDは、デフォルトの anthropic.claude-v2 (Anthropic Claude v2 モデル) のままにしておきます。

モデルIDパラメータ

テンプレートのデプロイには約 4 分かかります。

  1. Amazon SES から E メールアドレスを確認するための E メールを受信したら、提供されるリンクを選択して E メールアドレスを認証します。
  2. CodeCommit へのサンプル リポジトリの最初のコミットに関する「変更の概要」というタイトルの電子メールが届きます。
  3. AWS CloudFormationコンソールで、に移動します 出力 デプロイされたスタックのタブ。
  4. RepoCloneURL の値をコピーします。これはサンプル コード リポジトリにアクセスするために必要です。

ソリューションをテストする

開発者の役割を引き受けてコードの変更をプッシュすることで、ワークフローをエンドツーエンドでテストできます。 CodeCommit にはサンプル コードのセットが用意されています。に CodeCommit リポジトリにアクセスする、IDE で次のコマンドを入力します。

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

次のディレクトリ構造が見つかります。 AWSクラウド開発キット 整数の文字列に対してバブルソートを実行する Lambda 関数を作成する (AWS CDK) アプリケーション。 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

アプリケーション コードに 3 つの変更を加えます。

  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

これにより、ソリューションの概要で説明したステップ 1 ~ 9 の CodePipeline デプロイ ワークフローが開始されます。 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 関数は実際にはデプロイされません。

その他の考慮事項

このソリューションを実装する際の追加の考慮事項は次のとおりです。

  • モデルが異なれば生成される結果も異なるため、目的の結果を達成するには、ユースケースに応じて異なる基礎モデルと異なるプロンプトを使用して実験を行う必要があります。
  • 提供される分析は人間の判断に代わるものではありません。生成 AI を使用する場合は、潜在的な幻覚に注意し、コード レビューを支援し、迅速化するためのツールとしてのみ分析を使用する必要があります。

クリーンアップ

作成されたリソースをクリーンアップするには、AWS CloudFormation コンソールに移動し、CloudFormation スタックを削除します。

まとめ

この投稿では、コード レビュー プロセスでマネージャーが直面する課題を検討し、承認プロセスを加速するための拡張ツールとして生成 AI の使用を紹介します。提案されたソリューションは、Amazon Bedrock の使用を一般的なデプロイワークフローに統合し、環境にソリューションをデプロイするためのガイダンスを提供します。この実装により、管理者は生成 AI の支援力を活用し、これらの課題を簡単かつ効率的に解決できるようになります。

この実装を試して、コメントでご意見をお聞かせください。


著者について

プロファイルPicサンファン AWS のシニア ソリューション アーキテクトで、シンガポールに拠点を置いています。彼は大手金融機関と協力して、クラウド上で安全かつスケーラブルで可用性の高いソリューションを設計および構築しています。仕事以外では、ザンは自由時間のほとんどを家族と過ごし、3 歳の娘に振り回されています。 Xan は次の場所で見つけることができます LinkedIn.

スポット画像

最新のインテリジェンス

スポット画像