AWS Community Day Hong Kong 2025 Recap

GenAIエージェントの再考:RAGとMCP

Recap Series

エージェント型アーキテクチャにおけるRAとMCP

セッションの焦点

  • エージェントの世界における2つの従来技術、検索拡張(RA)とMulti-Chain Processing(MCP)について議論する。
  • エージェント型アーキテクチャで重要な点と、エージェントの性能を高める方法を重視する。

要点

  • エージェントのオーケストレーション:エージェントはモデルによってオーケストレーションされるため、モデルが極めて重要になる。
  • モデルの進化:独自トレーニングを行わない限り、モデルの論理的思考と能力の進化は主にモデルプロバイダーによって推進される。
  • 外部システムとの接続:外部システムに接続し、正確に処理を実行できるエージェントの能力が不可欠。

検索拡張(RA)

  • 定義:RAを使用すると、大規模言語モデル(LLM)は再トレーニングせずに独自のナレッジベースへアクセスできる。
  • 利点:モデルのファインチューニングや再トレーニングに伴う計算能力とコストを削減できる。
  • ユースケース:Few-shotまたはOne-shot学習を使ったプロンプトエンジニアリングでは不十分な場合がある、複雑なワークロードに適している。

目標

  • エージェント本来の性能を向上させる。
  • エージェント型アーキテクチャにおけるRAの性能を向上させる。

アーキテクチャ概要

  • このセッションでは、RAとMCPがシステム全体の性能にどのように寄与するかに焦点を当て、エージェント型システムのアーキテクチャを詳しく掘り下げる。

検索拡張(RA)アーキテクチャの詳細

RAを実装する手順

  1. ドキュメントの準備: 独自のドキュメント(PDF、メディア、動画)から始める。
  2. チャンキング: ドキュメントをチャンク(意味のあるテキストのまとまり)に分割する。
  3. 埋め込み: 埋め込みモデルを使用して、チャンクを数値表現(ベクトル)に変換する。
  4. ベクトルの保存: ベクトルをデータベース(リレーショナルデータベース、またはNeo4jやPineconeのようなベクトルストア)に保存する。

クエリ処理

  • ユーザーが質問すると、その質問がベクトルに変換される。
  • ベクトルデータベースが類似度検索を行い、最も関連性の高い回答を見つける。
  • 回答が大規模言語モデル(LLM)へ返され、ユーザーに合わせた応答が生成される。

RAの性能を高める主要な要素

チャンキング戦略

  • チャンキングの重要性:
  • 初期のLLMではコンテキストウィンドウが限られていた。
  • チャンキングにより、重要な情報が見落とされる「中間部分の喪失」現象を防ぐ。
  • 主な検討事項:
  • チャンクサイズ:主観や個人の好みによって異なる。
  • チャンキングロジック:テキストを意味のある単位に分割する方法。

埋め込みモデルの選択

  • 正確なベクトル表現を得るには、適切な埋め込みモデルの選択が重要。

ベクトルデータベースの選択

  • ベクトルデータベースごとに使用するアルゴリズムやライブラリが異なる。
  • 適切なデータベースの選択は、性能と精度に影響する。

チャンキングが重要な理由

  • コンテキストウィンドウの制限:初期のLLMは大規模な入力を処理できなかったが、チャンキングにより扱いやすい単位に分割できる。
  • 中間部分の喪失の回避:処理中に重要な情報を見落とさないようにする。
  • チャンクサイズとロジック:主観的な選択であり、チャンキングの有効性に影響する。

チャンキング戦略とその影響の詳細

チャンクサイズの影響

  • チャンクサイズは、応答時間や忠実性、関連性などの性能指標に影響する。
  • LlamaIndexは、チャンクサイズと性能の関係を示している。

AWSでのチャンキング戦略

固定サイズチャンキング

  • テキストを一定サイズのチャンクに規則的かつ構文的に分割する。

セマンティックチャンキング

  • 自然言語処理(NLP)を使用してテキストを理解し、意味のある単位に分割する。

階層型チャンキング

  • 親子関係を用いる方式で、階層構造を持つドキュメントによく使用される。

チャンキングで考慮すべき主な点

  • 意味のあるチャンク:単に構文的に分割するのではなく、チャンクが意味的にまとまっていることを確認する。
  • テキストの理解:テキストを理解し、チャンクに意味があるかを判断することが目標。
  • チャンキングしない戦略:データセットが網羅的、または十分にトレーニングされている場合、チャンキングは不要なこともある。

まとめ

  • チャンキングではサイズだけでなく、テキストを理解して意味のある単位に分割することが重要。
  • AWSでは、固定サイズ、セマンティック、階層型など、さまざまなチャンキング戦略を利用できる。
  • チャンキング戦略は、テキストの性質と求める性能に応じて選択する。

埋め込みモデルと類似度指標の詳細

埋め込みモデル

  • 埋め込みモデルは、テキストを数値表現(ベクトル)に変換する。
  • 例:「ABC」(A:「ランニングが好き」、B:「お気に入りの場所はランニング」、C:「今日は天気が良い」)を、[0.8, 0.6, 0.11]のようなベクトルに埋め込む。
  • これらのベクトルが持つ意味は、埋め込みモデルによって決まる。

類似度指標

  • ユークリッド距離:2つのベクトル間の直線距離を測定する。距離が小さいほど類似度が高い。
  • コサイン類似度:2つのベクトル間の角度を測定する。値が1に近いほど類似度が高い。

  • ABCの例では、ユークリッド距離とコサイン類似度のどちらでも、AとBの数学的な類似度が高く、互いに近い。

適切な埋め込みモデルの選択

  • [ 1 ] ユースケースと言語:
  • 具体的なユースケースと言語要件(多言語対応など)を明確にする。
  • [ 2 ] トークンサイズまたはウィンドウサイズ:
  • モデルがテキスト資料のサイズを処理できることを確認する。
  • [ 3 ] 次元数:
  • 次元数が多いほど多くの意味を捉えられるが、より多くのメモリが必要になる場合がある。
  • 情報の捕捉とメモリコストの間にはトレードオフがある。

AWSの埋め込みモデル

  • AWSではさまざまな埋め込みモデルを利用でき、最近ではNova embeddingのような新しいモデルもリリースされている。
  • 選択には、テスト結果とモデルの能力を理解することが不可欠。

まとめ

  • 埋め込みモデルはテキストを数値ベクトルに変換し、類似度検索を可能にする。
  • 類似度は、ユークリッド距離とコサイン類似度を使用して測定する。
  • 適切な埋め込みモデルを選択するには、ユースケース、トークンサイズ、次元数を考慮する。

ベクトルデータベースと検索アルゴリズムのまとめ

ベクトルデータベース(ベクトルDB)

  • テキストを数値表現(ベクトル)に変換した後、それらをベクトルデータベースへ保存する必要がある。
  • AWSでは、PineconeやMuのようなオープンソースのサーバーレスソリューションを含む、さまざまなデータベースの選択肢が提供されている。
  • 検索手法を理解するための例として、OpenSearchを取り上げる。

検索手法

  • [ 1 ] Hierarchical Navigable Small World(HNSW):
  • グラフ状の階層構造を作成し、検索を高速化する。
  • 欠点:メモリ消費量が多い。
  • [ 2 ] Inverted File Index(IVF):
  • ベクトルをバケットに分け、サブバケットを検索する。
  • 利点:HNSWに比べてメモリ使用量が少ない。

適切な検索手法の選択

  • クエリのレイテンシー、品質、メモリ使用量、インデックス作成を考慮する。
  • OpenSearchでは、手法を選ぶ際にこれらの要素を考慮することを推奨している。
  • FAISSのような手法では、最適な性能を得るためにHNSWとIVFを組み合わせる場合がある。

ベクトルDB選択のトレードオフ

  • 単純な正解はなく、求める性能と許容水準はユーザーごとに異なる。
  • 品質、コスト、レイテンシーのバランスを取る。
  • メモリ使用量を増やすとコストは高くなるが、より正確な結果を得られる。

まとめ

  • ベクトルDBと検索アルゴリズムの選択は、具体的なユースケースと要件によって決まる。
  • 判断フロー図やツリー図は、適切な選択肢を決める際に役立つ。

MCPへの移行

  • ここからはMulti-Chain Processing(MCP)について議論し、MCPに関する経験を共有する。

Multi-Chain Processing(MCP)入門

MCPとは

  • MCPはModel Context Protocolの略で、AIアプリケーションを外部システム、データベース、ナレッジベースへ接続するためのオープンソース標準。
  • システムからより効果的な応答を得られるようにすることを目的としている。

MCPアーキテクチャ概要

  • MCPホスト:複数のMCPクライアントを持つ中心的なコンポーネント。
  • MCPクライアント:MCPサーバーとやり取りする。
  • MCPサーバー:ファイルシステム、データベース、その他のアプリケーションなど、さまざまなシステムを表す。

MCPクライアントの中核機能

  • Sampling:MCPサーバーへ送信するリクエスト数を制御する。
  • Roots:クライアントがMCPサーバーから取得したいディレクトリやデータの種類を指定する。
  • Elicitation:クライアントがMCPサーバーから受け取りたいデータの設定を定義する。

AWSにMCPサーバーをデプロイするためのリファレンスアーキテクチャ

  • CloudFrontとBuff:性能向上と悪意ある攻撃に対するセキュリティに使用。
  • Amazon Cognito:認証に活用し、MCPクライアントからのリクエストが正当であることを確認。

まとめ

  • MCPは、AIアプリケーションと外部システムのやり取りを強化するプロトコル。
  • アーキテクチャには、MCPホスト、クライアント、サーバーが含まれる。
  • MCPクライアントの主要機能には、Sampling、Roots、Elicitationがある。
  • MCPサーバーを安全かつ効率的にデプロイするには、CloudFront、Buff、Amazon CognitoなどのAWSサービスが推奨される。

AWSへのMCPデプロイに関する続き

MCPサーバーのバックエンドサービス

  • AWS FargateとAWS Lambda:
  • Fargate:長時間稼働する必要があるMCPサーバーをホストする。
  • Lambda:イベントによってトリガーされ、一時的に実行されるコードをホストする。

その他のAWSサービス

  • Amazon CloudWatch:MCPサーバーの性能を監視する。
  • Parameter Store:MCPサーバーの環境変数を保存する。
  • Amazon ECR:MCPサーバーの構築に使用するイメージをホストする。
  • ACM(AWS Certificate Manager):証明書により、転送中のデータを確実に暗号化する。

AWSへのMCPサーバーデプロイのデモ

  • CDK(Cloud Development Kit):MCPサーバーのアーキテクチャをデプロイするために使用する。
  • [ 1 ] 手順:
  • CDKツールキットを構築する。
  • AWSが提供するCDKを使用して、バックエンドアーキテクチャをデプロイする。
  • [ 2 ] デプロイされるスタックの内容:
  • VPC
  • セキュリティグループ
  • CloudFront
  • 認証用のCognitoユーザープール
  • MCPサーバー

デプロイプロセス

  • ソースコードからDockerイメージを構築してECRへプッシュし、ECS FargateやLambdaなどのサービスへデプロイする。
  • サーバーの構築とデプロイが複雑なため、このプロセスには時間がかかる。

まとめ

  • MCPサーバーのバックエンドには、FargateやLambdaなどのサーバーレスプラットフォームを活用する。
  • CloudWatch、Parameter Store、ECR、ACMなどのAWSサービスを、監視、変数の保存、イメージのホスティング、暗号化の確保に使用する。
  • CDKを使用したデモでは、AWSへのMCPサーバーのデプロイを示し、このプロセスに必要な複雑さと時間を明らかにしている。

MCPクライアントとの連携とベストプラクティスに関する最後の説明

MCPサーバーとのやり取り

  • バックエンドのデプロイ後、MCPクライアントを使用してMCPサーバーとやり取りできる。
  • 米国の気象警報を提供する外部Webサイト(API)に接続されたMCPサーバーとのやり取りを実演。
  • 例:経度と緯度を入力して気象警報を予測し、api.weather.govから応答を受け取る。

ベストプラクティスのヒント

  • MCPクライアントをコールバックホストと同居させない:
  • MCPクライアントを、MCPサーバーのコールバックホストと同じホストに配置しないことを推奨。
  • この構成により、コールバックのタイムアウト問題を回避できる。

まとめ

  • MCPクライアントはMCPサーバーと効果的に連携し、外部システムからデータを取得できる。
  • タイムアウト問題を防ぐため、MCPクライアントとコールバックホストを分離することがベストプラクティス。
  • デモでは、MCPサーバーから外部APIを呼び出し、気象警報を予測する方法を示した。