目的
もうどこもかしこも話題は生成AIばかりですね。
今や中学生でもchatGPTをブラウザ上から遊ぶ程度には触っているのではないでしょうか。
今回は実際にAmazon Bedrockを使って生成AIアプリケーションを構築する際に、
考えるべき事柄4選を順番にまとめました。
※ここではそれぞれを深ぼりません。
詳細は各ドキュメントを参照ください。
公式サイトはこちら↓
https://aws.amazon.com/jp/bedrock/
本記事はAWS INNOVATE AI/ML AND DATA EDITIONの内容を参考にしています。
1. 基盤モデル(FM)の選択
まずは兎にも角にもモデルの選択を行います。
2024年3月現在、Amazon Bedrockでは様々な基盤モデルが扱えます。
各々のやりたいことに沿ったモデルを選びます。
- AI21labs -> JURASSIC-2
- ANTHROPIC -> CLAUDE
- co:here -> COMMAND & EMBED
- Meta AI -> LLAMA 2
- stability.ai -> SDXL 1.0
- amazon -> AMAZON TITAN
それぞれのモデルでできること(テキスト生成・画像生成・埋め込み)が異なります。
各ページを確認しましょう。
2024年3月時点では日本語のテキスト生成を行いたい場合、Claude一択かと思われます。
中には同じことができるモデルがあります。
その場合はユースケースに最適なモデルを選択する必要があります。
ユースケースに最適なモデルの選択
2023年末、Model Evaluation on Amazon Bedrock という機能がBedrock上で利用可能になりました。
これは複数の基盤モデルをコード不要で比較・評価し、ユースケースに最適なモデルを選択可能にします。
2. 独自データの活用方法を考える
Bedrockの基盤モデルをそのまま扱うだけでも、生成AIアプリケーションを作ることは可能でしょう。
ただし、それでは一般的な汎用性しか持ちません。
加えて、基盤モデルは学習データに含まれていないような情報は回答できません。(例えば最近起きたニュースなど)
生成AIアプリケーションを作ろうと考えた場合、他と差別化を図るために大抵は独自データの活用を視野に入れます。
基盤モデルは最新のデータや特定の組織独自のデータには対応できない(学習していない)
そこで重要になってくるのがRAG(検索拡張生成) と ファインチューニング になります。
先に答えを言うと以下のように使い分けます
プロンプトの調整 -> RAG(検索拡張生成)
モデル自体の更新(再学習) -> Fine Tuning / Continued Pre-training
RAG(検索拡張生成)
RAGを使うケースは以下が考えられます。
- 検索システムのレスポンスを元に基盤モデルの回答を出力させたい場合
- 最新情報を出力に反映させたい場合
- プロンプト内で与えられた知識のみで十分対応可能な場合
BedrockでRAGを行うためには
Knowledge Bases for Amazon Bedrock 機能を活用します。
これは基盤モデルと自社データソースを組み合わせたRAGをフルマネージドに提供してくれます。
ファインチューニング
ファインチューニングを使うケースは以下が考えられます。
- 独自のデータを用いて追加の学習を行うことで、モデル自体のカスタマイズを行いたい場合
- 出力のスタイルやドメイン知識の補完など、モデルの振る舞いをカスタマイズしたい場合
- 特定のユースケースにおける推論のコストパフォーマンスを最大限に高めたい場合
Bedrockでファインチューニングを行うためには
Bedrockでのファインチューニングは カスタムモデル を作ることになります。
その方法は2つあります。
-
Fine Tuning
- ラベル付きデータを新たに学習して、特定のタスクの精度を高める手法
- 入力と出力のペアを用意してファインチューニングを行う
- 主に出力のスタイルをカスタマイズしたい場合に有効
-
Continued Pre-training
- 大量のラベル無しデータを用いてモデルに新たなドメイン知識を習得させる手法
- テキストデータを用意してファインチューニングを行う
以下のブログも参考にしてください。
ファインチューニングをする際の選択肢としてAmazon SageMaker JumpStartも挙げられる。
ここでは割愛!
ただ、SageMaker JumpStartではより詳細なカスタマイズが可能。
RAG(検索拡張生成)とファインチューニング
プロンプトの調整 -> RAG(検索拡張生成)
RAGとファインチューニングで特徴は異なる。
目的に応じて使い分けたり、併用したりする
3. 外部のデータやAPIとの連携を考える
基盤モデル単体では外部との連携が必要なタスクの実現は難しいものになります。
そのため、外部API連携と組み合わせてタスクの完了までを実現させる必要があります。
基盤モデルはそのままでは外部API連携ができない
そこで重要になってくるのが Agent になります。
Agent
Agentはユーザーの入力を複数のタスクに分割し、タスクごとに適切なAPIを呼び出すことで回答を生成します。
たとえばユーザー入力に対してAgentの役割はこのような感じになります。
ARIの会社情報を教えてください。
それと、ARIに関する最近のニュースを教えてください。
思考:
(文脈によると、ARIは企業名だな。)
(会社情報は回答できそうだ。最近のニュースについてはWebやKnowledge Baseから検索してくる必要があるな。)
(これらの情報をまとめたら、回答が生成できそうだ。)
回答:
ARIの会社情報は○○です。
最近のニュースは××です。
BedrockでAgentを行うためには
Agents for Amazon Bedrock 機能を活用します。
これはAPIを呼び出しタスクを実行するAgent機能をフルマネージドで提供してくれます。
その他
他には以下のような候補があります
- LangChainの活用
- AWS Step Functionsとの統合
※ ここでは割愛します。
4. 生成AIアプリの適切な利用状況の維持と安定稼働を考える
生成AIアプリを作る場合、生成AIが不適切な利用や有害な結果の出力を避けられているか、
ユーザーのリクエストに安定的にこたえられているか、管理・維持する必要があります。
その際に活躍するのが以下の機能になります。
ここでは詳細は割愛しますが、アプリのリリース前には考慮するようにしましょう。
-
Guardrails for Amazon Bedrock
- 基盤モデルの不適切な入出力をブロックし、責任あるAIポリシーを実現します
-
Model invocation logging
- 基盤モデルの入出力結果をログとして記録します
-
Provisioned Throughpu
- スループットを確保し安定したAPI実行を可能にします
まとめ
これからは生成AIが使えて当たり前の世の中になります。
アプリケーションを作る際にもいかに生成AIを活用するかが今後生き残れるかの分かれ道になるといっても過言ではありません。
今回はAmazon Bedrockに焦点を当てましたが、興味がある人もない人も知識だけでも入れるようにしときたいですね。