【AWS 生成AIハンズオン】Bedrockの新機能でマルチエージェントを作ろう!メモ

ナレッジベース作成時の埋め込みモデルについて
埋め込みモデル:Embed Multilingual v3
Vector store:Amazon Aurora PostgreSQL Serverless
埋め込みモデル(Embedding Model)
- 埋め込みモデルは、テキスト(文章や文書全体)を、その意味や文脈を反映した高次元の数値ベクトルに変換するためのモデルです。
- 「Embed Multilingual v3」とは、多言語対応のテキスト埋め込みモデルの最新版(バージョン3)を指し、自然言語テキストを高次元の数値ベクトルに変換するためのモデルです。
埋め込みモデルの種類
- 単語埋め込み(Word Embedding)
-
Word2Vec
- 特徴: 単語ごとに意味を捉えたベクトルを学習します。
- 手法: CBOW(Continuous Bag of Words)とSkip-gramの2種類の学習方式があり、文脈に基づいて単語のベクトルを予測します。
-
GloVe (Global Vectors for Word Representation)
- 特徴: 単語の共起統計量(どの単語がどの単語と一緒に現れるか)を利用して埋め込みを生成します。
- 利点: 全体のコーパスの統計情報を反映するため、意味的な類似性を効果的に捉えることができます。
-
FastText
- 特徴: 単語を文字 n-gram に分解して学習するため、未知語や細かな語形変化にも対応可能です。
- 利用シーン: 特に語彙が膨大で未知語が多い場合に有効です。
-
Word2Vec
- 文や文脈の埋め込み(Sentence/Contextual Embedding)
-
Universal Sentence Encoder (USE)
- 特徴: 文全体の意味をベクトル化するモデル。
- 利用シーン: 意味検索や文の類似性判定、チャットボットなどで広く利用されます。
-
Sentence-BERT (SBERT)
- 特徴: BERTをベースに、文同士の類似度を高精度に算出できるように調整されたモデル。
- 利点: 文単位での類似性計算やクラスタリング、意味検索などに適しています。
-
Embed Multilingual v3
- 特徴: 多言語対応の文埋め込みモデルで、複数言語間で一貫した意味表現が得られるように設計されています。
- 利用シーン: 国際化対応や多言語データを扱うシステムで、各言語の文章を同一のベクトル空間にマッピングすることで、言語をまたいだ類似性検索や意味理解が可能となります。
-
Universal Sentence Encoder (USE)
- 文書埋め込み(Document Embedding)
-
Doc2Vec
- 特徴: 単語埋め込みの考え方を文書全体に拡張したモデルで、文書単位での意味情報を捉えます。
- 利用シーン: 長い文章や複数の段落からなる文書の分類やクラスタリング、検索などに利用されます。
-
Doc2Vec
- Transformerベースの埋め込み
-
BERT、GPT などの大規模言語モデル
- 特徴: これらのモデルは主に生成や理解タスクに用いられますが、内部の隠れ層の出力を取り出すことで、単語や文、文書の埋め込みとして利用することが可能です。
- 利点: 文脈に依存した動的な埋め込みを生成できるため、従来の静的な埋め込みよりも柔軟で高精度な意味表現が可能です。
-
BERT、GPT などの大規模言語モデル
- ドメイン特化型埋め込みモデル
- 特徴: 一般的なモデルとは別に、特定の分野(例:医療、法律、金融など)に特化して学習された埋め込みモデルも存在します。
- 利点: 分野固有の専門用語や文脈をより正確に捉えることができるため、特定ドメインでの検索や分類タスクにおいて効果を発揮します。
Vector Store(ベクトルストア)
- Vector Storeは、埋め込みモデルで得られた高次元ベクトルと、それに付随するメタデータ(例えば、元の文書のIDや内容の一部)を効率的に保存・管理するためのデータベースシステムです。
- 一般的なキーバリュー型のデータベースとは異なり、ベクトル空間における類似性(コサイン類似度、ユークリッド距離など)に基づく高速な検索処理が可能となっています。

オンデマンドと推論プロファイル
オンデマンド推論
-
特徴
-
動的なリソース割り当て:
リクエストが発生したタイミングでモデルが自動的にロードされ、必要な分だけ計算リソースが割り当てられます。 -
従量課金制:
使用した分だけの料金が発生するため、使用頻度が低い、もしくは突発的なリクエストの場合に効率的です。 -
スケーラビリティ:
リクエスト数に応じて自動的にスケールアップ・ダウンする仕組みが備わっており、急な負荷変動にも対応可能です。
-
動的なリソース割り当て:
-
利用シーン
- 利用頻度が不定期または低頻度の場合
- 初期の試行やプロトタイピング段階で、事前のリソース確保を避けたい場合
推論プロファイル
-
特徴
-
事前構成されたリソース:
あらかじめ特定のインスタンス(またはコンテナ)サイズや数などのリソース設定が決められた状態でモデルがデプロイされ、常時利用可能な状態となります。 -
一貫したパフォーマンス:
固定リソース上で動作するため、リクエストごとにリソースの割り当てが変動するオンデマンドと比べ、レイテンシが低く、一貫した応答性能が期待できます。 -
固定料金(または一定のリソースコスト):
リソースが常に稼働しているため、利用頻度にかかわらず継続的なコストが発生しますが、予測可能なパフォーマンスが求められる場合に適しています。
-
事前構成されたリソース:
-
利用シーン
- 一定以上のリクエストが継続して発生するユースケース
- レイテンシや応答時間の安定性が重視される本番環境
- パフォーマンスのチューニングやリソース最適化が事前に明確にできる場合
まとめ
-
オンデマンド推論:
- メリット: 使用量に応じた自動スケーリング、従量課金で初期コストが抑えられる
- デメリット: リクエストごとにリソースが割り当てられるため、場合によってはレイテンシが高くなる可能性
-
推論プロファイル:
- メリット: 固定リソースにより一貫した低レイテンシを実現、パフォーマンスが予測可能
- デメリット: 常時リソースが稼働するため、利用量にかかわらず固定のコストが発生
選択する際は、利用するユースケースやワークロードの特性(リクエスト頻度、レイテンシ要件、コスト管理など)に合わせて、オンデマンド推論と推論プロファイルのどちらが適しているかを検討することが重要です。

エージェント設定時のCode Interpreterとは
AWS Bedrockでエージェントを作成する際に指定するCode Interpreterは、エージェントが自然言語で生成したコード(主にPythonなど)を実行するための機能・実行環境を指します。これは、単にテキストの回答を生成するだけでなく、以下のような高度なタスクを実現するためのツールとして活用されます。
Code Interpreterの主な特徴
-
動的なコード実行
- エージェントがユーザーの問い合わせに対して、計算やデータ処理、グラフ作成などを行う必要がある場合、生成されたコードを実行してその結果を取り込みます。
- たとえば、数値計算や統計分析、データの可視化など、コード実行が必要な処理を自動的に補完することが可能です。
-
安全かつサンドボックス化された実行環境
- Code Interpreterは、セキュリティやリソース管理が考慮された環境でコードを実行します。
- これにより、エージェントが生成するコードが予期しない動作をしても、システム全体に影響を及ぼすリスクが低減されます。
-
エージェントの機能拡張
- テキスト生成だけではなく、コード実行によるリアルタイムのデータ処理や計算結果を反映できるため、よりインタラクティブで高度な回答が可能になります。
- 例として、データセットの解析結果をグラフで返したり、計算結果をもとにしたレポートを作成したりするシナリオに有用です。
-
統合されたツールとしての利用
- エージェントの対話フローの中で、必要に応じてCode Interpreterが呼び出され、コードの生成と実行、そしてその結果をエージェントが再度処理するという流れが実現されます。
- これにより、複数ステップにわたる複雑なタスクもシームレスにこなすことができます。
利用シーンの例
-
データ分析・可視化:
ユーザーから「最新の売上データをグラフにしてほしい」といったリクエストがあった場合、エージェントは必要なデータ処理コードを生成し、Code Interpreterで実行してグラフ画像や統計情報を返す。 -
計算タスク:
数学的な計算やシミュレーションを行う必要がある場合、エージェントが生成したコードをそのまま実行し、計算結果をユーザーに提示する。 -
自動化タスク:
ログ解析やデータ変換など、特定の自動処理を行うコードを生成して実行することで、ユーザーの作業負担を軽減する。
まとめ
Code Interpreterは、AWS Bedrock上でエージェントがより高度なタスク(計算、データ処理、可視化など)を実行するために、生成したコードを安全かつ効率的に実行するための仕組みです。これにより、単なるテキスト応答にとどまらず、動的な情報処理やリアルタイムなフィードバックが可能になり、エージェントの応用範囲を大きく広げる役割を担っています。

web-searchアクショングループについて
- アクショングループは、エージェントがサポートするユーザーのアクションを定義する
- 次のいずれかの方法で定義
- OpenAIスキーマを設定
- 関数の詳細を設定
- アクショングループを作成すると自動でLambdaが作成される