[プレビュー] Amazon CodeWhisperer はユーザーが所有するプライベートなコード資産を使って推奨事項をカスタマイズ出来るようになりました

2023.10.19

いわさです。

Amazon CodeWhisperer は AI がコード中に推奨コードを提案してくれるサービスです。
先日のアップデートでなんとプライベートなコード資産を使ったカスタマイズ機能というものがプレビューリリースされました。

通常、Amazon CodeWhisperer などの AI コーディングのモデルは、ほぼオープンソースコードでトレーニングされているそうです。
そのため、組織内独自の内部 API やライブラリなどに関する推奨コードを受け取ることは出来ませんでした。

今回登場したカスタマイズ機能を使うことで、カスタマイズ機能に対して非公開のコード資産を使って学習させ、その内容に応じた推奨事項を生成してくれるようになります。

CodeWhisperer Professional でのみ利用出来る

CodeWhisperer は AWS Builder ID を使って無料で利用出来る Individual と、IAM Identity Center のユーザーにライセンスを割り当てる有償(1ユーザー月額:$19)の Professional の 2 種類があります。

今回登場したカスタマイズ機能は CodeWhisperer Professional でのみ利用が可能です。
Professional 導入の流れは次の記事を参照してください。

カスタマイズ機能の料金は GA 後に発表される予定

アップデートアナウンスに次のように、カスタマイズ機能の料金面について記載があります。

Pricing will be available with general availability.

本日時点では料金は発生しませんが、上記の記載からするとアドオンのような形で基本料金の 1 ユーザー 月額 19 ドルに追加される可能性がありますね。

サポートされている開発言語

Amazon CodeWhisperer 自体は、本日時点で Java, Python, JavaScript, TypeScript, C#, Go, PHP, Rust, Kotlin, SQL, Ruby, C++, C, Shell, Scala をサポートしています。

カスタマイズ機能のサポート言語については本日時点で公式ドキュメントには次の言語がサポートされていると記述されています。

CodeWhisperer Customizations supports the following languages: - Java - JavaScript - Python - TypeScript

ただし、CodeWhisperer の FAQ ページには次のようにも記載されています。

Currently, you can customize CodeWhisperer recommendations on codebases written in all languages that CodeWhisperer supports, including Python, Java, JavaScript, TypeScript, C#, Go, Rust, PHP, Ruby, Kotlin, C, C++, Shell scripting, SQL and Scala

どっちやねんという感じですが、プレビューなので将来的には全部サポートされそうだなと私は勝手に解釈しました。
本日は Java を使ってカスタマイズ機能を実際に有効化してみましょう。

導入手順

導入の流れですが、大きくは次のような流れとなっています。

  1. コード資産を使ってカスタマイズ機能を作成
  2. カスタマイズ機能をアクティブ化
  3. カスタマイズ機能にユーザーを割り当てる
  4. エディター側でカスタマイズ機能を指定して使う

1 のカスタマイズ機能の作成がちょっと時間がかかる部分で、おそらくモデルの学習が走るからだと思いますが、コード量によって数時間かかります。
それ以外はササッと導入出来ました。

前提として次のように CodeWhisperer Professional にサブスクライブしている状態とします。

なお、本機能というか CodeWhisperer 自体はバージニア北部リージョンのサービスとなっています。
この記事では東京リージョンの IAM Identity Center を使い、バージニア北部リージョンの CodeWhisperer を有効化した環境で導入をしています。

コード資産を使ってカスタマイズ機能を作成

AWS マネジメントコンソールの CodeWhisperer メニューに「Customization」というメニューが追加されています。
こちらからカスタマイズ機能を作成出来るのですが、組織内で複数のカスタマイズが作成出来るという点を覚えておきましょう。
プレビュー時点では最大 8 つまでのカスタマイズを作成出来ると FAQ に記述がありました。

そのため、言語別とかシステム別とかにカスタマイズ機能を用意することが出来ます。 後述しますが、カスタマイズ機能が割り当てられたユーザーはコーディングの際にどのカスタマイズ機能を使うかを選択して使う形となります。

コード資産をカスタマイズ機能に読み込ませる形になるのですが、ソースコードは CodeStar 接続による外部リポジトリの指定か、S3 バケットにアップロードしたコードを読み込ませるかが可能です。

CodeStar 接続なので、GitHub、GitLab、Bitbucket がサポートされています。

コードの状態次第で結構カスタマイズ作成に失敗する

ここでは、まずは私の GitHub アカウントを読み込ませてみました。

言語分布はこんな感じになっているのと、サンプルコードみたいなものばかりアップされているのであまり良い学習ソースにはならない気がしますけど。

次のように接続を作成して選択しました。
リポジトリは指定していないことに注意してください。

ステータスが Creating となりました。
ここから学習にちょっと時間が必要で、次のバナーには「It may take up to a few hours, depending on the size of your repository.」との記載が。
少し待ちましょう。

30 分後くらいにステータスが「Creation failed」となり失敗しました。

カスタマイズ作成時にエラーが発生した場合は次の公式ドキュメントのトラブルシューティングを確認しましょう。

エラーメッセージと上記トラブルシューティングページからどうやら私のリポジトリだとカスタマイズがサポートされている言語のコードの数あるいはサイズが足りていないようですね。

その後、外部のリポジトリコードを S3 バケットにアップロードして試してみましたが、SAM CLI や SaaS Boost のリポジトリの場合は同じようにカスタマイズ作成がうまく出来ませんでした。

S3 バケットの場合は次のように学習ソースとなるコードをアップロードしてパスを指定します。

Spring Boot で作成出来た

その後、Spring Boot のコードで試したところうまいこと作成することが出来ました。

作成出来るとカスタマイズ詳細画面で次のような内容を確認することが出来ます。

注目したい点としては右側の Evaluation です。
読み込まれたコードを元に評価スコアが算出されます。管理者はこのスコアを参考にカスタマイズを有効化するべきか判断する必要があります。

この評価スコアを基にした判断基準としては公式ドキュメントに次のように記述されています。

  • Very good 8-10: CodeWhisperer recommends that you activate this customization.
  • Fair 5-7: CodeWhisperer recommends that you activate this customization.
    • If you do not see significant improvement, consider the optimization suggestions below. If those are not effective, consider switching to a different code source.
  • Poor 1-4: This customization is not likely to be useful. Consider the optimization suggestions below. If those are not effective, consider switching to a different code source.

引用元:Evaluating and optimizing your customization - CodeWhisperer

今回であればスコアが 5 なので、とりあえず有効化してみるか?といった感じでしょうか。
もし、使ってみてあまり有効な推奨事項が得られない場合はより学習ソースにコードを追加したり、自動生成されたコードなどのノイズになるファイルを除去する方法があります。

カスタマイズ機能をアクティブ化

カスタマイズ機能は作成して終わりではなくて、アクティブ化する必要があります。
プレビュー時点ではカスタマイズは 8 つまで作成することができ、さらにアクティブ化出来るのは 2 つまでとされています。

カスタマイズを選択して「Activate」ボタンを押します。

アクティベートはすぐに完了します。
完了するとステータスが「Activated」となります。

カスタマイズ機能にユーザーを割り当てる

アクティベートしてもまだ終わりではありません。
カスタマイズごとに使用可能なユーザーを割り当てる形となります。

本日時点では料金は発生しませんが、このあたりの割り当て状況によってユーザーあたりの料金が変わるのかもしれませんね。
また、組織内でチームごとに必要なカスタマイズの内容は違うことは想像出来るので、ユーザー割り当てについては運用のイメージがしやすいかもしれません。その開発者に全然関係ないプロダクトに関するコードがサジェストされても困りますからね。

手順としてはユーザータブからユーザーを選択して追加するだけなので簡単です。

エディター側でカスタマイズ機能を指定して使う

遂にこのユーザーでカスタマイズを使う準備が出来ました。
今回は Visual Studio Code で CodeWhisperer にサインインして使ってみましょう。

Professional の場合は以下から IAM Identity Center のアクセスポータル URL とリージョンを入力してサインインすることが出来ます。

AWS Toolkit の DEVELOPER TOOLS エリアに「Select Customization」というものが追加されていますね。

この機能は AWS Toolkit for Visual Studio Code の v1.95.0 から使えるようなので、表示されていない方は拡張のアップデートを行ってみてください。

Select Customization を選択すると、先程作成して割り当てしたカスタマイズが表示されています。
CodeWhisperer foundation (Default) というが事前学習済みで CodeWhisperer 標準で提供されているものです。

作成したカスタマイズを選択すると、ツールメニュー上も次のように選択されていることが確認出来ました。

では実際にコードを試してみましょう。と言いたいところなのですがオープンソースのコードを学習元に指定したせいかあまり良い結果は得られませんでした。
Spring Boot 寄りのコメントを入力してもカスタマイズと標準で同じような推奨コードになりました。

学習ソースがかなり重要ですね。
今回は残念ながら公式サイトの画像を引用させてもらいましょう。

次のように独自パッケージの名前空間のドメイン(anycompany)が推奨されていたり、配達サービスというドメイン寄りのコメントに対して内部 API を使ったコードが提案されているのがわかります。

画像引用元:AI Code Generator for Businesses – Amazon CodeWhisperer Customization Capability – AWS

なるほどって感じですが、学習ソースとしてより有効なのはドメイン寄りなコードな気がしますね。

ダッシュボードでカスタマイズごとの使用状況を確認出来る

CodeWhisperer のダッシュボードでは、CodeWhisperer の利用ユーザー状況や提案コードを受け入れた割合などを確認することが出来るのですが、今回のアップデートでカスタマイズごとの使用状況が追跡出来るようになっています。

管理者はこの内容を確認して、カスタマイズに対して調整が必要かなどを判断すると良さそうですね。

さいごに

本日は Amazon CodeWhisperer で所有している非公開のコード資産を使って推奨事項をカスタマイズ出来るようになったので実際に使ってみました。

導入は出来ましたが、残念ながら私が使った学習コードだと良い提案を受けることが出来ませんでした。
ただ、私はこの機能がすごい可能性を秘めてると感じましたね。

以前パッケージ開発やカスタマイズに関わっていたことがあるのですが、大規模な基幹システムなどだと既存の実装内容や仕様の確認・解析だけでもとんでもなく時間がかかるのですよね。
どうにかコーディング規約とかコードレビューとかで基準から逸脱しないようなコードに是正しながら開発していくわけですが、そもそも既存のコード資産をベースにした適切なレコメンドを受けれるというのはなかなか熱いのでは無いでしょうか。

なお、カスタマイズについては次のように、他の顧客との分離性やセキュリティについて FAQ にて言及されていますので、こちらも参考にしてください。(Amazon Translate 訳)

それぞれのカスタマイズは他の顧客から切り離されており、この新機能で構築されたカスタマイズはいずれも、CodeWhispererの基盤となる基盤モデルのトレーニングには使用されません。カスタマイズを作成する際、CodeWhisperer は AWS キー管理サービス (AWS KMS) のカスタマーマネージドキーを使用してカスタマイズデータを暗号化するオプションを提供することで、コードのセキュリティを維持するのに役立ちます。カスタマイズデータは、カスタマイズジョブが終了すると削除されます。