AWS re:Invent 参加中のソフトウェアエンジニアの内田(@A2hiro_tim)です。
“Build and scale generative AI applications with Amazon Bedrock” という Workshop Session に参加しました。
Workshop Session は、まず簡単に Amazon Bedrock の概要を10分ほど話して、そこから用意された 資料の説明に沿ってひたすら進める形式でした。資料はおおまかに以下の構成です。
- 簡単な Prompt Engineering をやってみる
- Email 生成アプリを使ってみる
後半の資料とコードは既に公開されています。興味ある方は試してみてください。
コード:Github: build-scale-generative-ai-applications-with-amazon-bedrock-workshop
この記事では、Workshop の内容について、私見と感想を交えながら書いてみます。
座学パート
Supported Models
Amazon Bedrock を利用する際、どのモデルを基盤に作ったLLMかを選ぶ必要があります。 サポートされているFoundation Model (FM) は限られています。
私見ですが、どのFM がいいか、は明確な答えがなく、雑に言ってしまうとパラメータ数が大きければ大きいほど性能は良く、大きなインスタンスが必要になります(つまりお金がかかります)。 ベンチマークで考えると毎週や毎月という速度でより良いモデルが出てくるので、まずはどれでも良いので試し、プロダクトに組み込む段階でユースケースに応じて細かい比較をして決めても遅くはないと思います。
選択可能な FM は us-east-1 region だと以下のようになっています。
なお、東京 (ap-northeast-1) region は Titan と Claude のサポートしかありません。
Bedrock Inference Options
推論する際は以下の二つから選びます。
- On-demand
- Provisioned
名前の通り、常に使われるようであればProvisioned、たまにしか使わないなら On-demand を選択するのがおおまかなという区分です。
それぞれ料金体系や気をつけることも違うので、採用時には改めて検討してください、
Data Privacy
Amazon Bedrock 利用中に提供したデータがFoundation Model の学習に使われることはありません。 これを明示しているのは大きな強みの一つかと思います。
Lab パート
Lab ではその Workshop で使う専用のアカウントを用意してくれています。自分のアカウントを使うわけではないので、課金などに怯えることはありません。 Workshop は、公開されていれば自分でも取り組むことができますが、イベントでは準備も不要ですし、リソースを片付ける必要もないので気が楽です。
その場限りのアカウントですが、AWS アカウントであることに変わりはないので、Console などは通常通り使えます。 昨日のkeynote で発表された Amazon Q が見えますね。
Lab 前半
選択したモデルに対してどのような prompt を与えれば期待した結果が得やすいか実践で学びます。
text playground という、prompt を試せる機能があるので、Workshop の記載にしたがって色々試して肌感を掴んでいきます。 モデルを選んで試します。
左側にprompt を入力して、右側でparameter を調節、Run ボタンで実行します。 この Workshop をやる前日に Amazon Bedrock の UI が少し変わったらしく、Workshop に記載のスクショとは微妙に違いがありました。 (別で参加したセッションでは、手順を全て CLI で用意しているものもありました。UI は変わるので意図的にそうしているとのことでした。)
出力はテキストブロックの下に追加されます。 prompt を色々試したい時には一度出力を消さないといけないので、面倒に思えましたが、チャットは会話記録を prompt として与えるので、その観点では理にかなった UI です。
Claude2 を使う場合、prompt を以下のフォーマットにします。
\n\nHuman: Are are a {{ROLE}}.{{DESCRIBE THE TASK}}: <text> {{TEXT}} <\text> \n\nAssistant:
モデルの学習の方法によるのだと思いますが、モデルごとに適した prompt が変わると、最適化が大変だなと思いました。
Lab 後半
後半では、用意されているアプリケーションを触っていきます。 メールのテンプレートを用意すると、既にあるデータを適切に埋めながらメールを送信することができるアプリケーションです。 先にあげた Github の lab2/run.sh の script を走らせると、環境が立ち上がります。
顧客情報のリストと売りたい product の情報が保存してある前提で、marketing メールを生成してもらうように prompt を組み上げていきます。 例えば以下のように template を作ります。
###タイトル### ###END### ###本文### {customer.companyName} {customer.FullName} お世話になっております、株式会社カミナシの内田淳博です。 以前にお話していた商品Aがついに完成しました。 主な昨日は以下の通りです - {product.key_feature} - {product.key_feature} ... ###END###
メールを送る対象の顧客と宣伝したいプロダクトを選べば、内容を埋めたり生成した上でメールを送ることができます。
顧客ごとに {product.key_feature}
の部分を違う内容で置き換えることも可能です。
Lab 終了
workshop は時間切れで最後は駆け足になりましたが、終えることができました。 コピペ中心に進めるだけだったので、 LLM 触っただけになりました。 最後まで終わらせる必要はないので、じっくりコードを読みながらでも良いと思います。
一つ発見できたのは、全てを AI の生成に任せるのではなく、AI が向いているところはAIに任せ、出力にブレがあっては困る部分はテンプレートとして提供するパターンです。 生成 AI の hallucination (誤った情報を返すこと) への対応策・緩和策はいくつかありますが、その一つだと思いました。
今回は時間がありませんでしたが、細かくコードまで読んで、generative AI を使ったアプリをどうスケールさせるか、長期に運用していくにはどうすべきか、も学んでいこうと思います。
興味のある方は Amazon Bedrock について定期的にblog をチェックすることもおすすめされています。
Amazon Bedrock | AWS Machine Learning Blog
余談
keynote の影響か、generative AI のセッションが大人気で、私が参加したセッションも walk-up (予約した人が現れなかったら入れる)の列が長すぎて、その列だけでキャパを超えるほどでした。なんとか参加できてよかったです。
90分くらい並んでいたのですが、並んでいる間に前後に並んでいる人と Amazon Q や Amazon Bedrockについて盛り上がってました(写真)。 ここで思いがけず情報交換できたりするのは、現地参加ならではの体験でした。 「チップがレシートにすでに書いてあることがあるから、二重にチップを払わないように気をつけて」など現地で生き抜くための tips も聞けました。