生成 AI で AWS アップデートを効率的にキャッチアップ !
~ AWS 新機能リリースの日本語要約を Slack や Teams に投稿してみよう ~
Author : 岡本 晋太朗、森下 裕介
builders.flash 読者の皆様、こんにちは !
いきなりですが、皆様は日々の AWS サービスのキャッチアップはどのように行なっていますか ?
AWS の最新情報は What’s New with AWS? に日々投稿されています。2023 年の実績 をみると、1 年間で 2,705 件ものアップデートが行われています。毎年 11 月末から行われる AWS における世界最大の学習型カンファレンス re:invent 2023 の直前には、なんと 1 日で 60 件を超えるアップデートが行われた日もありました ! このような、時に大量の AWS サービスアップデートを日々キャッチアップし続けるのは大変ではないでしょうか。新機能のリリースは日本時間の深夜に行われることが多いため、AWS のソリューションアーキテクトとして働いている著者は、毎朝起床直後にベッドの上でスマホから英文 What's New を読むのが習慣となっています。が、子どもとテーマパークを 1 日中駆けずり回った翌日などは辛すぎて寝坊してしまい、大量のアップデートについていけなくなってしまうことも・・・。
今回、AWS のアップデートを少しでもラクにキャッチアップするために、AWS の生成 AI サービス Amazon Bedrock を活用し、Slack や Microsoft Teams などの 受信 Webhook に対応したコラボレーションツールに記事の要約を投稿するソリューション What’s New Summary Notifier を作ってみました ! アセットは aws-samples で無償のサンプルコードとして公開しており、AWS Cloud Development Kit (CDK) で記述されているため、すぐにお試しいただけます。また What’s New Summary Notifier は、AWS の最新情報だけでなく RSS 配信されているサイトであれば簡単に拡張、複数のチャンネルへ配信することも可能です。
本記事では、What’s New Summary Notifier のデプロイ方法と仕組み、ビルダーの方向けのカスタマイズ方法について説明します。
目次
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。
このクラウドレシピ (ハンズオン記事) を無料でお試しいただけます »
毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。
1. What’s New Summary Notifier とは ?
What’s New Summary Notifier は、ウェブ上の最新情報の RSS を定期的に取得し、テキスト生成モデルにより要約と箇条書き形式の詳細説明を作成して、受信 Webhook 対応コラボレーションツールに投稿を行う生成 AI アプリケーションのサンプル実装です。AWS のソリューションアーキテクトによりオープンソースで開発が行われており、2024 年 6 月現在では What's New with AWS? の RSS から生成した要約を、Slack および Microsoft Teams に投稿する機能を実装しています。
実際の動作時には、下図のような投稿が自動で行われます。生成 AI により、英語の最新情報が日本語で要約され、わかりやすく噛み砕いた説明がスレッドに投稿されていることがわかります。
図 1. Slack への投稿例
図 2. Microsoft Teams への投稿例
2. 構築手順
ここからは What’s New Summary Notifier のデプロイ手順を順に解説していきます。
2-1. Amazon Bedrock 有効化
本ソリューションでは、デフォルト設定では生成 AI モデルとして米国東部 (バージニア北部) リージョンの Amazon Bedrock 上の Anthropic Claude 3 Sonnet を利用します。Amazon Bedrock を使用開始するために、米国東部 (バージニア北部) リージョンで Claude 3 Sonnet モデルの有効化を行いましょう。「モデルアクセスを追加する」に従って、有効化設定を行います。
補足 : 2024 年 5 月 15 日現在、 Claude の最新バージョンである Claude 3 Opus は米国西部 (オレゴン) リージョン、Claude 3 Sonnet / Haiku は米国東部 (バージニア北部)、米国西部 (オレゴン)、欧州 (パリ)、およびアジアパシフィック (シドニー) リージョンで利用できます。社内ポリシーや規制の関係上、日本国外の AWS リージョンを利用できないお客様は、ここではアジアパシフィック (東京) リージョンにて Claude 2.1 の有効化を行い、手順 2-5-1. に従って利用するリージョンとモデル名の設定を変更してください。
2-2. アプリ側の設定
次に、AWS の最新情報の投稿先となるコラボレーションツールにて、投稿するために必要となる Webhook URL を払い出します。2024 年 6 月現在 What’s New Summary Notifier は投稿先として Slack と Microsoft Teams に対応しています。
2-2-1. Slack の場合
Slack 社のドキュメント「ワークフローを作成する」に従ってワークフローの作成を開始し、ワークフローの開始方法に「Webhook から」を選択します。「変数を追加する」を選び、次の 5 つの変数をすべてテキストデータタイプで作成します。
- rss_time: 記事の投稿時間
- rss_link: 記事の URL
- rss_title: 記事のタイトル
- summary: 記事の要約
- detail: 記事の箇条書き説明
図 3. 変数の設定
(クリックすると拡大します)
図 4 の例のように、5 つの変数を使い、メッセージを送信するワークフローを作成して公開します。公開が完了すると、受信 Webhook URL が払い出されます。この URL は後ほど使用するためメモ帳などに控えておいてください。
図 4. ワークフローの設定例
(クリックすると拡大します)
2-2-2. Microsoft Teams の場合
Microsoft 社のドキュメント「受信 Webhook を作成する」に従って、配信したいチャネルに受信 Webhook の設定を加えます。設定が完了すると、受信 Webhook URL が払い出されます。この URL は後ほど使用するためメモ帳などに控えておいてください。
2-3. Webhook URL を AWS Systems Manager Parameter Store に格納
Webhook URL を安全に取り扱うために、AWS Systems Manager Parameter Store に格納します。AWS マネジメントコンソールにログインしている状態で、AWS CloudShell のリンクをクリックして AWS CloudShell を開きます。AWS CloudShell は、マネジメントコンソール画面左下にある「CloudShell」からも起動できます。ターミナルが表示されたら、ソリューションのデプロイを行うリージョンが表示されていること確認し、<Input your Webhook URL> を手順 2.2 で取得した Webhook URL に置き換えて、以下のコマンドを実行します。
aws ssm put-parameter \
--name "/WhatsNew/URL" \
--type "SecureString" \
--value "<Input your Webhook URL>"
2-4. デプロイ環境の準備
ここから実際にデプロイをしていきます。前提条件として、Infrastructure as Code を実現するための AWS サービス AWS CDK、Node.js および Docker がインストールされた環境が必要です。どちらも使用可能な環境がお手元にある方は、このまま 2-5. に進んでください。新たにインストールする場合は、AWS CDK ドキュメント や Docker ドキュメント を参照の上インストールを実施してください。
またお手元に環境が用意できない場合は、 AWS 上でデプロイを完結させる手順 を実施し、作業を進めることも可能です。
2-5. aws-samples からリポジトリをクローンする
皆様の操作環境に What’s New Summary Notifier のリポジトリをクローンしていきましょう。以下のコマンドを実行してください。
git clone https://github.com/aws-samples/whats-new-summary-notifier.git
リポジトリがクローンされたことを確認されたら、デプロイの実行に移る前に、皆様の環境によっては設定値の変更が必要な場合があります。「アジアパシフィック (東京) リージョンで Amazon Bedrock を利用する場合」は 2-5-1. を、「投稿先コラボレーションツールが Microsoft Teams の場合」は 2-5-2. の手順を参照してください。該当しない場合は、デフォルトの設定値のままで 2-6. の手順に進んでください。
2-5-1. アジアパシフィック (東京) リージョンの Amazon Bedrock を利用する場合の設定変更
アジアパシフィック (東京) リージョンの Amazon Bedrock で Anthropic Claude 2.1 を利用する場合は、whats-new-summary-notifier フォルダの中にある cdk.json を開き、modelRegion を ap-northeast-1 に、modelId を anthropic.claude-v2:1 にそれぞれ変更してください。各リージョンで利用できるモデルの種類は変化します。推奨モデルについては、ソリューションのリポジトリをご参照ください。
2-5-2. 投稿先アプリが Microsoft Teams の場合の設定変更
投稿先コラボレーションツールが Microsoft Teams の場合は、whats-new-summary-notifier フォルダの中にある cdk.json を開き、notifier 内 destination を、 slack から teams に変更してください。
2-6. CDK のデプロイ
ここからは実際に CDK コマンドを実行しデプロイを実施していきます。以下のコマンドを順に実行してください。
cd whats-new-summary-notifier
npm ci
cdk bootstrap # 既に CDK を利用したことがある方は不要です。
cdk deploy
途中、デプロイするかどうかの警告が表示されますので、y と入力してスタックをデプロイし、リソースを作成します。
10 分ほど経ち、以下のメッセージが表示されたらデプロイは完了です。
✨ Deployment time: xxx.xx s
Stack ARN:
arn:aws:cloudformation:<region>:<account id>:stack/AWSWhatsNewRssStack/xxxxxxxxxx
✨ Total time: xxx.xxs
デプロイが完了すると、毎時 00 分に RSS が取得され、投稿先に設定したコラボレーションツール (Slack/Microsoft Teams) に AWS サービスのアップデートに関する投稿がされはじめます!
3. 仕組み
3-1. アーキテクチャの解説
What's New Summary Notifier は AWS のマネージドサービスで構成されており、スケーラブルで信頼性が高く、インフラストラクチャの管理が不要なアーキテクチャとなっています。
図 5. アーキテクチャ図
本ソリューションをデプロイすると、2 つの AWS Lambda 関数 RSSNewsCrawler と NotifyNewEntry が作成されます。
RSSNewsCrawler は Amazon EventBridge により 1 時間に 1 回起動してあらかじめ指定した RSS を取得し、新規記事の情報を Amazon DynamoDB テーブルに書き込みます。NotifyNewEntry は Amazon DynamoDB テーブルの変更をトリガーにイベント駆動で起動し、後述する Amazon Bedrock により新規記事の内容から要約を生成して、コラボレーションツールの 受信 Webhook に結果を投稿します。Webhook URL は安全に保持・参照するために、AWS Systems Manager Parameter Store に格納されます。
3-2. 大規模言語モデルを使った記事要約の生成
生成 AI は、会話、ストーリー、画像、動画、音楽などの新しいコンテンツやアイデアを作成できる人工知能の一種です。テキスト生成モデルを活用すると、人間が書いた文章を要約したり、新しい文章を生成したりすることができます。このセクションでは、本ソリューションにおける生成 AI の実装部分について解説を行います。
3-2-1. Amazon Bedrock と Anthropic Claude
Amazon Bedrock は、基盤モデルを活用した生成 AI アプリケーションを簡単に構築するためのマネージドサービスです。Amazon および先進的な大手 AI 企業の開発した複数種類の基盤モデルを API 経由で使うことができ、テキスト生成や画像生成、Embedding (埋め込み) 生成などの様々なタスクを行うことができます。What’s New Summary Notifier では、日本語を含む多言語で高い性能を誇る Anthropic 社の Claude を用いています。2024 年 3 月には最新モデルである Claude 3 シリーズが発表されました。本実装では、インテリジェンスとスピードの理想的なバランスを実現した Claude 3 Sonnet を用いています。生成 AI と Amazon Bedrock については、生成 AI アプリケーション開発をもっと身近に、簡単に ! Amazon Bedrock をグラレコで解説 もあわせてご覧ください。
3-2-2. プロンプト解説
「モデルに入力・指示する文字列」のことを「プロンプト」と呼びます。本実装で使用しているプロンプトを見てみましょう。
<input>{blog_body}</input>
<persona>You are a professional solutions architect in AWS. </persona>
<instruction>Describe a new update in <input></input> tags in bullet points to describe "What is the new feature", "Who is this update good for". description shall be output in <thinking></thinking> tags and each thinking sentence must start with the bullet point "- " and end with "\n". Make final summary as per <summaryRule></summaryRule> tags. Try to shorten output for easy reading. You are not allowed to utilize any information except in the input. output format shall be in accordance with <outputFormat></outputFormat> tags.</instruction>
<outputLanguage>In Japanese. Each sentence must be output in polite and formal desu/masu style</outputLanguage>
<summaryRule>The final summary must consists of 1 or 2 sentences. Output format is defined in <outputFormat></outputFormat> tags.</summaryRule>
<outputFormat><thinking>(bullet points of the input)</thinking><summary>(final summary)</summary></outputFormat>
Follow the instruction.
長文の英語にタグのような記号が入っていて、面を食らった方もいらっしゃるかもしれません。大まかに言うと...以下のように指示をしています。
- あなたは「AWS のソリューションアーキテクト」です。
- <input> タグ内の文章 (記事全文) から「新機能がどんなものか?」「誰にとってこのアップデートが有益か?」を考えてください。その過程をいくつか箇条書きにして <thinking> タグで囲んで出力してください。
- <thinking> タグに出力した箇条書きをベースにして、最終的な要約の結果を <summary> タグで囲んで出力してください。
- 読みやすいように、なるべく簡潔に要約してください。
- <input> タグ内の文章以外を出力の作成に利用しないでください。
一例として、このプロンプトを使って New Generative Engine with three synthetic English Polly voices の要約を生成すると、次のような結果※が得られます。
<output><thinking>- 新しい生成エンジンは、3つの英語の合成音声である、アメリカ英語のRuthとMatthew、そしてイギリス英語のAmyを提供します。
- 生成エンジンは、Amazon Pollyの最も高度な音声合成モデルで、様々な声、言語、スタイルで訓練されています。
- 生成エンジンは、文脈に応じた韻律、一時停止、綴り、方言の特性、外来語の発音などを正確に再現できます。
- 生成音声は人間の声に非常に近い感情的で自信に満ちた会話調のものになっています。
- 新しい音声は低レイテンシーのオンライン会話用途にも適しています。
- 顧客は、生成音声を知識豊富な顧客アシスタント、バーチャルトレーナー、広告主として利用できます。
- Ruth、Matthew、AmyはUS East (North Virginia)リージョンで利用可能です。</thinking>
<summary>Amazon Pollyの新しい生成エンジンは、3つの英語の合成音声を提供し、人間の声に非常に近い自然な発話が可能になりました。新しい音声は様々な用途で活用できます。</summary></output>
※一般的な生成 AI モデルでは生成過程にランダム性があるため、同じプロンプトを使用しても、上記と同じ文章が生成されるとは限りません。
このように、プロンプトが一見呪文のような記述となっているのには、理由があります。例えば人間の場合、曖昧な指示をされるよりも、具体的で明確な指示をされた方が、何をすべきか分かりやすいため動きやすいと思います。生成 AI のモデルの場合でも同様で、プロンプトを入力する際に、その書き方を工夫することで最終的な出力の精度が大きく変わることがわかっています。プロンプトを工夫して書いて、望ましい出力を得るための工夫 (指令・命令) のことを「プロンプトエンジニアリング」と呼びます。プロンプトエンジニアリングの方法は、すでにテクニックとしてまとまっていることも多く、モデルごとにそのテクニックの内容は異なります。例えば今回使用する Claude ですと Anthropic 社による プロンプトエンジニアリングドキュメント が参考になるでしょう。
What’s New Summary Notifier の実装でも、精度良く「記事の要約」ができるようなプロンプトの工夫がされています。
- XML タグを使ったプロンプトの構造化 Claude のベストプラクティスとして、XML タグを使ってプロンプトを構造化することが推奨されています。プロンプトを構造化することで、指示の見通しがよくなり、精度の向上が期待されます。
- ペルソナ (役割) の指定 同じ指示を与えても、役割によって回答が異なる可能性があります。プロンプトの中で回答者の役割を明確化することで、読み手が期待する粒度や文体での回答生成が行われることが期待されます。本ソリューションでは、You are a professional solutions architect in AWS. を役割として与えることで、AWS の新機能をわかりやすく伝える要約を出力するように工夫しています。
- Chain of Thought (思考連鎖) 最終的な回答を出力するまでの推論過程 (思考過程) を段階的に出力させることで、モデル性能を高めるテクニックです。一言に要約といっても、時と場合によって望まれる文章は異なってきます。今回は、AWS の新機能のよい点を素早く理解することが目的なので、<thinking> タグの中で「新機能がどんなものか?」「誰にとってこのアップデートが有益か?」という点に的を絞り、段階的に思考過程を出力させてから <summary> タグの中で最終的な要約を出力させることで、より目的に沿った簡潔な要約が得られるように工夫をしています。また、本ソリューションでは、<thinking> タグの中身を箇条書き形式で出力させておき、アップデートの詳細が気になった際の深堀り情報として、要約と併せて出力を行っています。
- 出力フォーマットの指定 出力結果をプログラムで利用しやすくするために、XML フォーマットで出力を構造化するように指示しています。また、Claude は、生成時の書き出しを指定するプレフィル機能 が利用できるため、出力して欲しい XML 以外の余計な言葉が生成されないように、開始タグ <output> を書き出しに指定しています。
また、コスト面でも最適化を図っています。本ソリューションのプロンプトは英語で記載されています。Anthropic Claude 2/3 の場合は、言語が異なると、同じ意味の文章であっても消費されるトークン※の量が異なり、英文で消費量が最も少なくなることが知られています。プロンプトは日本語でも書くことはできますが、あえて英語で書くことで、同じ内容を記述した場合のトークン数を節約できます。Amazon Bedrock はモデルに入出力したトークン量に基づく従量課金制なので、入力文を英語で記載することで、利用料金を抑える効果があります。
※トークン: 生成 AI が解釈する意味の単位
4. カスタマイズしてみよう
4-1. モデル・リージョン・言語変更
What’s New Summary Notifier では cdk.json の中にある以下の項目を編集することで、投稿する内容や Amazon Bedrock の設定、投稿先などを変更できるように実装してあります。
- modelRegion : Amazon Bedrock を利用するリージョン。Amazon Bedrock を利用可能なリージョン の中から、利用したいリージョンの リージョンコード を入力してください。
- modelId : Amazon Bedrock の中で利用する基盤モデルの model ID。2024 年 6 月現在 What’s New Summary Notifier は、Anthropic の Claude 3 およびそれ以前のバージョンのモデルに対応をしています。各モデルの model ID は ドキュメント を参照ください。
- notifiers : 要約対象となる RSS フィードや通知先に関する設定項目。通知先(チャンネル)が複数ある場合は、複数の notifier を設定することで対応可能です。
- destination : 投稿先のアプリケーション名。2024 年 6 月時点では、slack と teams に対応しています。投稿先に合わせていずれかを設定してください。
- summarizerName : 要約生成の際のペルソナの指定。後段の summarizer で定義した名前を入力してください。
- webhookUrlParameterName : Webhook URL を格納している AWS Systems Manager Parameter Store のパラメータ名。
- rssUrl : 最新情報を取得したい Web サイトの RSS フィード URL。URL は複数指定する事が可能です。
- summarizers : 最終的な要約生成を実行するペルソナの設定項目。
- outputLanguage : モデル出力の言語。
- persona : モデルに与える役割 (ペルソナ)。
ここでは、outputLanguage に変更を加えてみましょう。英語や韓国語など様々な外国語に設定することもできますが、著者の二人は出身地である関西が恋しいので、この記事では関西弁で出力させてみたいと思います。
cdk.json の summarizers 内、AwsSolutionsArchitectJapanese の outputLanguage を以下のように変更してください。
"outputLanguage": "Japanese. Each sentence must be output in Kansai dialect",
ファイルの変更を保存したら、さっきと同じようにコマンド実行してデプロイしまひょ。
cdk deploy
デプロイが終わったら、新しい情報が投稿されとるのを確認できるはずやで。
図 6. 関西風味たっぷりでカッコええっすわ。この味付けなら、大阪でもウケそうやわ
皆さん、どないですか ? 関西人のフレンドリーなメッセージが来たでぇ。時にはちょっとしたギャグも挟まっとるけど、なんやかんや楽しいやろ ?
4-2. What’s New with AWS? 以外の Web サイトから要約を作る
続いて、AWS の最新情報以外の Web サイトの新着情報の要約を投稿する手順もご紹介します。
What’s New Summary Notifier は What’s New with AWS? のみならず、RSS 配信されているサイトであれば簡単に対応する事が可能です。
ここでは、同じく RSS で配信されている AWS News Blog を配信の対象に追加します。
cdk.json を以下のように変更してください。
"outputLanguage": "Japanese. Each sentence must be output in polite and formal desu/masu style" # 4.1. で関西弁に設定した方は、ここで元に戻しましょう
...
"rssUrl": {
"What's new": "https://aws.amazon.com/new/feed/",
"AWS News Blog": "https://aws.amazon.com/blogs/aws/feed/"
},
変更したファイルを保存した後、同様に以下のコマンドでデプロイします。
cdk deploy
デプロイが終了すると、AWS の最新情報に加え、新着ブログの要約も投稿されている事が確認できます !
4-3. 複数のチャンネルに投稿する
配信内容によって通知先のチャンネルを分けたい場合は、複数の notifier を定義することで対応可能です。以下の例では、AWS News Blog の要約を AWS What’s New とは別のチャンネルに投稿できるように設定し、複数のチャンネルに配信する手順をご紹介します。
まずは、本ブログの 2-2. の手順に従って新たに AWS News Blog 投稿用のチャンネルと Webhook URL を作成します。
続いて、2-3. の手順同様に AWS Systems Manager Parameter Store に Webhook URL を格納します。皆様の Webhook URL に置き換えた上で、以下のコマンドを実行します。ここでは name を /NewsBlog/URL と設定しています。
aws ssm put-parameter \
--name "/NewsBlog/URL" \
--type "SecureString" \
--value "<Input your Webhook URL>"
その後、cdk.json を以下のように変更してください。
"notifiers": {
"AwsWhatsNew": {
...
"rssUrl": {
"What’s new": "https://aws.amazon.com/about-aws/whats-new/recent/feed/"
# 4-2. の手順で設定した AWS News Blog を削除
}
},
# notifier に AwsNewsBlog を追加
"AwsNewsBlog": {
"app": "slack", # または "teams"
"summarizerName": "AwsSolutionsArchitectJapanese",
"webhookUrlParameterName": "/NewsBlog/URL",
"rssUrl": {
"AWS News Blog": "https://aws.amazon.com/blogs/aws/feed/"
}
}
},
"summarizers": {
...
},
変更したファイルを保存した後、同様に以下のコマンドでデプロイします。
cdk deploy
デプロイが終了すると、AWS 最新情報の要約が投稿されるチャンネルとは別のチャンネルに、AWS News Blog の要約が投稿されていることが確認できます !
5. 削除方法
デプロイしたリソースが不要になった場合は、以下のコマンドを実行することで削除可能です。
cdk destroy
なお、AWS Systems Manager Parameter Store に格納した Webhook URL の情報は手動で削除していただく必要があります。AWS CloudShell から以下のコマンドを実行し、削除してください。
aws ssm delete-parameter --name "/WhatsNew/URL"
6. 最後に
本記事では、生成 AI を利用して AWS 新機能リリースの日本語要約を Slack や Microsoft Teams に投稿するソリューション What's New Summary Notifier を紹介しました。
生成 AI は、本ソリューションで実現した要約以外にも様々なタスクにご利用いただけます。AWS ジャパンでは、すぐに使えるビジネスユースケース集を備えた生成 AI アプリケーション実装の GenU や、super-easy なデプロイにより追加設定不要でそのまま本番利用可能な社内 AI ボットをすぐに利用できる Bedrock Claude Chat など、様々な生成 AI アプリケーションの実装例をお届けしています。これらのアセットはオープンソースで公開しており、読者の皆様のアイディア次第で自由に改造してご利用いただけます。アイディアを思いついたら、すぐに実験できるのが、生成 AI の面白いところです。
本記事が皆様の AWS アップデートのキャッチアップの負担を軽減し、浮いた時間でアイディアを形にするための一助になれば幸いです。
筆者プロフィール
岡本 晋太朗
アマゾン ウェブ サービス ジャパン 合同会社
ソリューションアーキテクト
石油化学プラントの計装制御エンジニアとして東南アジアを駆けずり回った後、プラントデジタルツインソリューションの開発エンジニアに転身し、その過程で触ったクラウドが面白くなりアマゾン ウェブ サービス ジャパンに入社。現在は、製造業のお客様を中心にクラウド活用の技術支援を担当しています。最近は生成 AI 成分多めです。
趣味はコーヒーと中国茶、好きな中国茶は雲南紅茶です。
森下 裕介
アマゾン ウェブ サービス ジャパン 合同会社
ソリューションアーキテクト
製造業のお客様を中心にクラウド活用の技術支援を担当しています。
好きな AWS サービスは Amazon Bedrock と Amazon Rekognition です。
映画と日本酒について語り始めたら止まりません。
AWS を無料でお試しいただけます