はじめに
昨年の11月27日(月) ~ 12月1日(金)に開催されたAWS re:Invent 2023にて発表されたAWSの生成AIである「Amazon Q」について、「ChatGPT」や「GitHub Copilot Chat」と比較してみました。
Amazon Qとは
Amazon Qは、AWSが開発したチャット型の生成AIです。
ナレッジベースにAWSの各種ドキュメントを持っており、自然言語処理を用いて、ユーザーが入力した文章に対して、適切な応答を生成することができます。
Amazon Qは、マネジメントコンソールや各種サービスと統合されています。
価格は、Amazon Q ビジネスプランが月額20USD、Amazon Q ビルダープランが月額25USDで利用することができます。
※2024年4月11日現在、プレビュー期間となっており、多くの機能が無料で利用することができます。
現在、Amazon Qは日本語には非対応で、英語のみの対応となっています。
CodeWhisperer
Amazon QはCodeWhispererに統合されており、VS Code等のエディタ上で利用することができます。
CodeWhisperer上でAmazon Qを利用することで、コードの要約やコードの生成を行うことができます。
ChatGPTとGitHub Copilot Chatとの比較
コード生成に利用できる生成AIとして有名なChatGPTやGitHub Copilot Chatと比較してみました。
※ChatGPTは無料版のGPT-3.5を利用しています。
比較①
各生成AIに以下のプロンプトでPHPのコードを生成させてみました。
※Amazon Qのみ、Google翻訳を利用して英語に翻訳してから生成させています。
PHPで与えられた文字列に含まれる単語の数をカウントするコードを作って。
(Create a code to count the number of words contained in a given string in PHP.)
結果①
ChatGPT
<?php
// 与えられた文字列
$inputString = "This is a sample sentence with several words.";
// 単語の数をカウントするロジック
$wordCount = str_word_count($inputString);
// 結果を表示
echo "与えられた文字列 '$inputString' に含まれる単語の数は $wordCount 個です。";
?>
ChatGPTは、与えられたプロンプトに対して、適切なコードを生成することができました。
単語数のカウントには、str_word_count
関数を利用しています。
GitHub Copilot Chat
<?php
function countWords($string) {
return str_word_count($string);
}
$string = "Hello, this is a test string.";
echo "The string contains " . countWords($string) . " words.";
?>
GitHub Copilot Chatも、与えられたプロンプトに対して、適切なコードを生成することができました。
独自の関数countWords
を定義し、str_word_count
関数を利用しています。
Amazon Q
<?php
function countWords($string) {
$words = explode(" ", $string);
return count($words);
}
$string = "Hello world, how are you today?";
echo countWords($string); // Prints 7
?>
Amazon Qも、与えられたプロンプトに対して、適切なコードを生成することができました。
独自の関数countWords
を定義し、explode
関数とcount
関数を利用しています。他の生成AIと比較して、少し力技な実装となっているような印象を受けました。
また、コメントにはPrints 7と記載されていますが、実際には6が出力され、コメントと処理内容の乖離が見られました。
依頼したプロンプトのような簡単なコード生成においては、ChatGPT、GitHub Copilot Chat、Amazon Qのいずれも適切なコードを生成することができました。
ですが、Amazon Qは他の生成AIと比較して、少し力技な実装となっているような印象を受け、コメントと処理内容の乖離が見られました。
その点において、ChatGPTやGitHub Copilot Chatの方が、より適切なコードを生成することができたと言えると思います。
個人的には、GitHub Copilot Chatが独自の関数を定義している点が、より完成度が高いと感じました。
比較②
各生成AIに以下のdocker-compose.yml
ファイルにmysql
サービスを追加するように依頼してみました。
ボリュームをマウントしたり、ポート番号を8008という少し特殊な値に設定しています。
services:
php:
build: ./docker/php
volumes:
- ./docker/php/php.ini:/usr/local/etc/php/php.ini
- ./:/home/test
environment:
APACHE_DOCUMENT_ROOT: /home/test/public
working_dir: /home/test/
ports:
- 8008:80
mysql8.0のコンテナも追加したい
(I want to add a mysql8.0 container.)
結果②
ChatGPT
version: '3.7'
services:
php:
build: ./docker/php
volumes:
- ./docker/php/php.ini:/usr/local/etc/php/php.ini
- ./:/home/test
environment:
APACHE_DOCUMENT_ROOT: /home/test/public
working_dir: /home/test/
ports:
- 8008:80
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: examplepassword
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepassword
ports:
- 3306:3306
GitHub Copilot Chat
services:
php:
build: ./docker/php
volumes:
- ./docker/php/php.ini:/usr/local/etc/php/php.ini
- ./:/home/test
environment:
APACHE_DOCUMENT_ROOT: /home/test/public
working_dir: /home/test/
ports:
- 8008:80
mysql:
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: test_db
MYSQL_USER: test_user
MYSQL_PASSWORD: test_password
ports:
- 3306:3306
volumes:
db_data:
Amazon Q
services:
# existing php service
mysql:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somepassword
MYSQL_DATABASE: mydb
ports:
- 3306:3306
volumes:
db_data: {}
ChatGPT、GitHub Copilot Chat、Amazon Qのいずれも、与えられたプロンプトに対して、適切なコードを生成することができました。
あまり差異が見られなかったため、さらに追加のプロンプトを与えてみました。
phpのコンテナとmysqlのコンテナに依存関係を持たせたい
(I want to have a dependency between the php container and mysql container.)
ChatGPT
version: '3.7'
services:
php:
build: ./docker/php
volumes:
- ./docker/php/php.ini:/usr/local/etc/php/php.ini
- ./:/home/test
environment:
APACHE_DOCUMENT_ROOT: /home/test/public
working_dir: /home/test/
ports:
- 8008:80
depends_on:
- mysql
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: examplepassword
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepassword
ports:
- 3306:3306
GitHub Copilot Chat
services:
php:
build: ./docker/php
volumes:
- ./docker/php/php.ini:/usr/local/etc/php/php.ini
- ./:/home/test
environment:
APACHE_DOCUMENT_ROOT: /home/test/public
working_dir: /home/test/
ports:
- 8008:80
depends_on:
- mysql
mysql:
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: test_db
MYSQL_USER: test_user
MYSQL_PASSWORD: test_password
ports:
- 3306:3306
volumes:
db_data:
Amazon Q
version: '3'
services:
php:
build: ./docker/php
volumes:
- ./docker/php/php.ini:/usr/local/etc/php/php.ini
- ./:/var/www/html
ports:
- 8000:80
mysql:
image: mysql:latest
volumes:
- db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=my-secret-pw
- MYSQL_DATABASE=my_database
ports:
- 3306:3306
depends_on:
- php
volumes:
db_data: {}
ChatGPT、GitHub Copilot Chatは、与えられたプロンプトに対して、適切なコードを生成することができました。
一方、Amazon Qは、依存関係を持たせるというプロンプトに対しては、適切なコードを生成できましたが、既存のphpのport番号が8000になってしまっている点や、volumeの指定が誤っている点が見られました。
まとめ
Amazon Qは最も新しくでた生成AIであるためか、他の生成AIと比較してまだまだ改善の余地があると感じました。
CodeWhisperer上から呼び出して利用する、コード生成などの汎用的な用途としては、まだChatGPTやGitHub Copilot Chatに分があると思います。
しかし、Amazon QはAWSの各種ドキュメントをナレッジベースとして持っているため、マネジメントコンソール上から利用する際などの、AWSのサービスに関する質問に対しては、他の生成AIよりも適切な回答を返すことができると思います。
特に、AWSは新しいサービスが続々とリリースされているため、ChatGPT等が持っていない最新の情報を持っていることが強みとなると思います。
チャット機能以外にも、言語のバージョンアップや機能生成などの機能も予定されているため、今後の発展が楽しみです。