私たちは9 月に、Amazon Bedrock のナレッジベースをプレビュー版として導入しました。11月28日より、Amazon Bedrock のナレッジベースが一般公開されました。
ナレッジベースを使用すると、Amazon Bedrock の基盤モデル (FM) を社内のデータに安全に接続して、検索拡張生成 (RAG) を行うことができます。追加データにアクセスすると、FM を継続的に再トレーニングすることなく、モデルがより関連性が高く、コンテキスト固有の正確な応答を生成できます。ナレッジベースから取得するすべての情報には、透明性を高め、ハルシネーションを最小限に抑えるためのソース属性が付いています。これがどのように機能するのか興味がある場合は、RAGの入門書を含む私の以前の投稿をチェックしてみてください。
11月28日のリリースにより、フルマネージド型の RAG の体験や、Amazon Bedrock で RAG を使い始める最も簡単な方法がナレッジベースで提供されます。ナレッジベースは、ベクトルストアの初期設定を管理し、埋め込みとクエリを処理し、本稼働の RAG アプリケーションに必要なソースアトリビューションと短期記憶を提供するようになりました。必要に応じて、特定のユースケース要件に合わせて RAG ワークフローをカスタマイズしたり、RAG を他の人工知能 (AI) ツールやアプリケーションと統合したりすることもできます。
フルマネージド RAG エクスペリエンス
Amazon Bedrock のナレッジベースが、お客様に代わってエンドツーエンドの RAG ワークフローを管理します。データの場所を指定し、データをベクトル埋め込みに変換する埋め込みモデルを選択し、Amazon Bedrockにベクトルストアを作成してベクトルデータを保存します。このオプションを選択すると (コンソールでのみ選択可能)、Amazon Bedrock がアカウントの Amazon OpenSearch Serverless にベクトルインデックスを作成します。ユーザーが何かを管理する必要はありません。
ベクトル埋め込みには、ドキュメント内のテキストデータの数値表現が含まれます。それぞれの埋め込みは、データのセマンティックまたはコンテキスト上の意味を捉えることを目的としています。Amazon Bedrock は、ベクトルストアへの埋め込みの作成、保存、管理、更新を行い、データが常にベクトルストアと同期することを保証します。
Amazon Bedrock は、埋め込みとクエリを処理し、本稼働の RAG アプリケーションに必要なソースアトリビューションと短期記憶を提供する、RAG 用の 2 つの新しい API もサポートするようになりました。
新しい RetrieveAndGenerate
API の使用すれば、API 呼び出しで FM を指定して、ナレッジベースから関連情報を直接取得し Amazon Bedrock で結果から応答を生成できるようになります。これがどのように機能するかをお見せしましょう。
RetrieveAndGenerate API を使用する
これを試すには、Amazon Bedrock コンソールに移動し、ナレッジベースを作成して選択し、[ナレッジベースをテスト] を選択します。このデモでは、AWS の生成系 AI の PDF にアクセスするナレッジベースを作成しました。FM を指定するには、[モデルを選択] で行います。
そこで、「アマゾン・ベッドロックとは?」と聞きます。
Amazon Bedrock は、背後でクエリを埋め込みに変換し、ナレッジベースにクエリを実行して、FM プロンプトに検索結果をコンテキスト情報として追加し、私の質問に対する FM 生成の回答を返します。複数の会話では、ナレッジベースが会話の短期メモリを管理して、よりコンテキストに沿った結果を提供します。
これは、AWS SDK for Python (Boto3) で API を使用する方法の簡単なデモです。
def retrieveAndGenerate(input, kbId):
return bedrock_agent_runtime.retrieve_and_generate(
input={
'text': input
},
retrieveAndGenerateConfiguration={
'type': 'KNOWLEDGE_BASE',
'knowledgeBaseConfiguration': {
'knowledgeBaseId': kbId,
'modelArn': 'arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-instant-v1'
}
}
)
response = retrieveAndGenerate("Amazon Bedrock とは何ですか?", "AES9P3MT9T")["output"]["text"]
RetrieveAndGenerate
API の出力には、生成された応答、ソース属性、および取得されたテキストのチャンクが含まれます。私のデモでは、API 応答は次のようになります (簡潔にするために出力の一部が編集しています) 。
{ ...
'output': {'text': 'Amazon Bedrock は、AWS のマネージド サービスで…'},
'citations':
[{'generatedResponsePart':
{'textResponsePart':
{'text': 'Amazon Bedrock は…', 'span': {'start': 0, 'end': 241}}
},
'retrievedReferences':
[{'content':
{'text': 'すべての AWS 管理サービス API アクティビティ...'},
'location': {'type': 'S3', 's3Location': {'uri': 's3://data-generative-ai-on-aws/gaia.pdf'}}},
{'content':
{'text': '...を使用して画像の一部を変更します。'},
'location': {'type': 'S3', 's3Location': {'uri': 's3://data-generative-ai-on-aws/gaia.pdf'}}}, ...]
...}]
}
生成された応答は以下のようになります。
Amazon Bedrock は、シンプルな API を介して生成系 AI のサーバーレスエクスペリエンスを提供するマネージドサービスです。テキスト生成、画像生成、会話型エージェントの構築などのタスクのために、Amazon やサードパーティの基盤モデルにアクセスできます。Amazon Bedrock を介して処理されたデータはプライベートで暗号化されます。
RAG ワークフローをカスタマイズする
取得したテキストのチャンクをさらに処理したり、検索結果の関連性スコアを確認したり、テキスト生成のための独自のオーケストレーションを開発したりする場合は、新しい Retrieve
API を使用できます。この API は、ユーザークエリを埋め込みに変換し、ナレッジベースを検索し、関連する結果を返すため、セマンティック検索結果に基づいてカスタムワークフローをより詳細に構築できます。
Retrieve API を使用する
Amazon Bedrock コンソールで、スイッチを切り替えて [応答を生成] を無効にします。
そして、もう一度「アマゾン・ベッドロックとは?」と聞きます。 今回、この出力には、テキストチャンクの元であるソースドキュメントへのリンクを含む検索結果が表示されます。
boto3 で Retrieve
API を使用する方法は次のとおりです。
import boto3
bedrock_agent_runtime = boto3.client(
service_name = "bedrock-agent-runtime"
)
def retrieve(query, kbId, numberOfResults=5):
return bedrock_agent_runtime.retrieve(
retrievalQuery= {
'text': query
},
knowledgeBaseId=kbId,
retrievalConfiguration= {
'vectorSearchConfiguration': {
'numberOfResults': numberOfResults
}
}
)
response = retrieve("Amazon Bedrock とは何ですか?", "AES9P3MT9T")["retrievalResults"]
Retrieve
API の出力には、取得したテキストチャンク、ソースデータのロケーションタイプと URI、および取得のスコアが含まれます。スコアは、クエリとより厳密に一致するチャンクを判断するのに役立ちます。
私のデモでは、API 応答は次のようになります (簡潔にするために出力の一部が編集しています) 。
[{'content': {'text': '...を使用して画像の一部を変更します。'},
'location': {'type': 'S3',
's3Location': {'uri': 's3://data-generative-ai-on-aws/gaia.pdf'}},
'score': 0.7329834},
{'content': {'text': '自然言語でユーザーに返します。...の場合'},
'location': {'type': 'S3',
's3Location': {'uri': 's3://data-generative-ai-on-aws/gaia.pdf'}},
'score': 0.7331088},
...]
RAG ワークフローをさらにカスタマイズするには、カスタムチャンク戦略を定義し、カスタムのベクトルストアを選択できます。
カスタムチャンク戦略 — データから効果的に取得できるようにするには、まずドキュメントを管理しやすいチャンクに分割するのが一般的です。これにより、情報をより効果的に理解して処理するモデルの能力が強化されるため、関連性の高い検索と一貫した応答の生成を改善できます。Amazon Bedrock のナレッジベースは、大量のドキュメントを管理します。
ナレッジベースのデータソースを設定するときに、チャンク戦略を定義できるようになりました。デフォルトのチャンキングは、データを最大 200 トークンのチャンクに分割し、質疑応答のタスクに最適化されています。データの最適なチャンクサイズがわからない場合は、デフォルトのチャンキングを使用してください。
また、カスタムのチャンクサイズを指定して、固定サイズのチャンクとオーバーラップさせることもできます。データの最適なチャンクサイズとオーバーラップ (ファイル属性、精度テストなどに基づく) がわかっている場合は、固定サイズのチャンキングを使用してください。チャンク間のオーバーラップが 0~20 パーセントの推奨範囲にあると、精度を向上させることができます。オーバーラップ率が大きいほど、関連性スコアが低下する可能性があります。
ドキュメントごとに 1 つの埋め込みを作成することを選択した場合、ナレッジベースでは各ファイルが 1 つのチャンクとして保持されます。Amazon Bedrock にデータをチャンクさせたくない場合は、このオプションを使用してください。例えば、ユースケースに固有のアルゴリズムを使用してデータをオフラインでチャンクしたい場合などに使用します。一般的なユースケースには、コードドキュメントが含まれます。
カスタムベクターストア — カスタムベクトルストアを選択することもできます。利用可能なベクトルデータベースのオプションには、Amazon OpenSearch Serverless 用ベクトルエンジン、Pinecone、Redis Enterprise Cloud が含まれます。カスタムのベクトルストアを使用するには、サポートされているオプションのリストから新しい空のベクトルデータベースを作成し、ベクトルデータベースのインデックス名とインデックスフィールドとメタデータフィールドのマッピングを指定する必要があります。このベクトルデータベースは Amazon Bedrock 専用である必要があります。
RAG を他の生成系 AIツールやアプリケーションと統合する
多段階のタスクを実行し、会社のデータソースにアクセスして、より関連性が高くコンテキストを認識した応答を生成できる AI アシスタントを構築したい場合は、Agents for Amazon Bedrock とナレッジベースを統合できます。LangChain 用のナレッジベース取得プラグインを使用して、RAG ワークフローを生成系 AI アプリケーションに統合することもできます。
可用性
Amazon Bedrock のナレッジベースは現在、米国東部 (バージニア北部) と米国西部 (オレゴン) の AWS リージョンでご利用いただけます。
詳細はこちら
– Antje
原文はこちらです。