メインコンテンツまでスキップ

Knowledge base for Amazon Bedrockを詳細解説

· 約56分
moritalous

Japan AWS Ambassadors Advent Calendar 2023の16日目です。


皆さん生成系AI使ってますか??

生成系AIを検索拡張生成 (RAG, Retrieval Augmented Generation) という手法で活用する場合には知識を蓄えるナレッジベースの構築が必要となります。ナレッジベースを管理・構築する機能「Knowledge base for Amazon Bedrock」が正式版になりました。

Knowledge Bases for Amazon Bedrock is now generally available
https://aws.amazon.com/jp/about-aws/whats-new/2023/11/amazon-bedrock-knowledge-bases/

ナレッジベースのアーキテクチャ

これまでのナレッジベースの作成には、以下の処理を行うプログラムを作成する必要がありました。

  1. ドキュメントをアップロードする
  2. ドキュメントからテキストを抽出し、テキストをチャンクに分割する
  3. チャンク分割したテキストを生成系AIを使いベクトル化する
  4. ベクトル化した値をデータベースに登録する

image.png

また、ナレッジベースの利用にも、プログラムが必要です。

  1. 利用者が質問文を送信する
  2. 質問文を生成系AIを使いベクトル化する
  3. ベクトル化した質問文でデータベースを検索し、ナレッジ(質問文と類似するテキスト)を取得する
  4. 質問文とナレッジをもとに生成系AIで回答文を生成する

image.png

Knowledge base for Amazon Bedrockの登場により、ナレッジベースを構築するためのプログラム作成が不要になります。

まず、ナレッジベースの作成手順は以下の2ステップに簡略化します。

  1. ドキュメントをS3に格納する
  2. ナレッジベースを作成する

image.png

ナレッジベースの利用は、なんとAPIひとつだけで実現できます。

  1. 質問文を送信する

image.png

え?!すごい!!

仕様の確認

2023/12/9時点の仕様です。

  • 対応リージョン

    • バージニア北部
    • オレゴン
  • 対応モデル

    • Embeddings
      • Amazon Titan Embeddings G1 - Text
    • 文書生成モデル
      • Anthropic Claude Instant 1.2
      • Anthropic Claude 2 (2.1はまだ未対応です)
    • 対応ドキュメント ファイルサイズは50MBが上限
      • Plain text (.txt)
      • Markdown (.md)
      • HyperText Markup Language (.html)
      • Microsoft Word document (.doc/.docx)
      • Comma-separated values (.csv)
      • Microsoft Excel spreadsheet (.xls/.xlsx)
      • Portable Document Format (.pdf)

Knowledge base for Amazon Bedrockの構築手順

  1. マネジメントコンソールでBedrockの管理画面を開きます。メニューのKnowledge baseを選択します。

    Create knowledge baseボタンをクリックします。

  2. ナレッジベースに名前をつけ、IAMの設定を行います。

  3. データソースに名前をつけます。ドキュメントを格納したS3の場所を指定します。

    Advanced settingでは、KMSのキーとチャンク分割の設定ができます。

    チャンク分割の設定は3種類から選択できます。

    選択肢説明
    Default chunking300トークンごとに分割する
    Fixed size chunking1チャンクの最大トークンと、オーバーラップの割合(%)を指定して分割する
    No chunkingチャンク分割しない。(事前に分割済みの場合などを想定)

    チャンク分割は検索精度に影響がある項目です。この設定はあとから変更することはできないので注意が必要です。

  4. ベクトルデータベースの設定を行います。

    Embeddingsモデルは現時点ではTitan Embeddings G1以外の選択肢はありません。

    ベクトルデータベースはQuick create a new vector storeを選択するとAmazon OpenSearch Serverlessが新規でプロビジョニングされます。

    Choose a vector store you have createdを選んだ場合はOpenSearch Serverless、Pinecone、Redis Enterprise Cloudから選択できます。

  5. 設定を確認し、ナレッジベースを作成します。

  6. ナレッジベースが作成できたら、データストアのSyncを行います。

マネジメントコンソールでテスト実行

マネジメントコンソールで、構築したナレッジベースのテストが可能です。(re:Invent 2023で発表されたre:Post PrivateのドキュメントのPDFを格納して試しました。)

どのナレッジをもとに生成したかも確認が可能です。

APIでアクセスする

マネジメントコンソールだけでなく、APIからも利用が可能です。Pythonでアクセスしてみます。

boto3はバージョン1.33.2(2023/11/29リリース)でKnowledge base for Amazon Bedrockに対応しましたので、これ以降のバージョンをインストールします。

pip install boto3

retrieve_and_generate API

使用するAPIはretrieve_and_generateです。

Knowledge base for Amazon Bedrockのサービス名はbedrockbedrock-runtimeではなくbedrock-agent-runtimeです。

bedrock_agent_runtime = boto3.client('bedrock-agent-runtime')

retrieve_and_generate_response = bedrock_agent_runtime.retrieve_and_generate(
input={
'text': 're:Post Privateとはなんですか?'
},
retrieveAndGenerateConfiguration={
'type': 'KNOWLEDGE_BASE',
'knowledgeBaseConfiguration': {
'knowledgeBaseId': 'JMLSPXRICR',
'modelArn': 'arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-v2'
}
}
)

AWS re:Post Privateは、エンタープライズSupportプランまたはエンタープライズオンランプSupportプランをご利用の企業向けのAWS re:Postのプライベートバージョンです。

レスポンス
{
"ResponseMetadata": {
"RequestId": "163bfeed-0d1c-4491-b6e0-9b2f5da82a4c",
"HTTPStatusCode": 200,
"HTTPHeaders": {
"date": "Sat, 09 Dec 2023 11:34:37 GMT",
"content-type": "application/json",
"content-length": "7121",
"connection": "keep-alive",
"x-amzn-requestid": "163bfeed-0d1c-4491-b6e0-9b2f5da82a4c"
},
"RetryAttempts": 0
},
"sessionId": "64d7a24c-d204-4cdf-979d-75862550c7e4",
"output": {
"text": "AWS re:Post Privateは、エンタープライズSupportプランまたはエンタープライズオンランプSupportプランをご利用の企業向けのAWS re:Postのプライベートバージョンです。"
},
"citations": [
{
"generatedResponsePart": {
"textResponsePart": {
"text": "AWS re:Post Privateは、エンタープライズSupportプランまたはエンタープライズオンランプSupportプランをご利用の企業向けのAWS re:Postのプライベートバージョンです。",
"span": {
"start": 0,
"end": 100
}
}
},
"retrievedReferences": [
{
"content": {
"text": "................ 13 ...................................................................................................................................................... xiv iii AWS リポストプライベート ユーザーガイド re: POST プライベートにアクセスする AWS re: Post プライベートとは何で すか? AWS re: Post Private は、エンタープライズSupport プランまたはエンタープライズオンランプSupport プ ランをご利用の企業向けの AWS re: Post のプライベートバージョンです。クラウドの導入を促進し、開発 者の生産性を向上させるための知識や専門家へのアクセスを提供します。組織固有の非公開の re: Post を 利用すれば、大規模な効率化を促進し、貴重な知識リソースへのアクセスを提供する、組織固有の開発者 コミュニティを構築できます。さらに、re: Post Private は、AWS信頼できる技術コンテンツを一元化し、 プライベートなディスカッションフォーラムを提供することで、チームが社内や AWS と連携する方法を 改善して、技術的な障害を取り除き、イノベーションを加速し、クラウド内でより効率的にスケーリング できるようにします。 詳細については、「AWS re: Post プライベート」を参照してください。 re: POST プライベートにアクセスする 管理者以外のユーザーは re: Post Private アプリケーションを使用して、管理者が設定した認証情報を使用 してサインインします。非公開の re: POST にサインインすると、関心のあるトピックに合わせたトレー ニングや技術コンテンツなど、既存のコンテンツを閲覧または検索できます。また、AWS公開されている テクニカルコンテンツは非公開の re: POST から直接検索でき、公開コンテンツに関する社内ディスカッ ション用の非公開スレッドを作成することもできます。AWS質問をしたり、返信したり、記事を公開した りすることで、非公開の re: POST AWS の他のユーザーから技術的な問題を共同で解決したり、技術的な 指導を受けたりできます。ディスカッションスレッドをケースに変換することもできます。AWS Support 回答を非公開の re: AWS Support POST に追加することもできます。"
},
"location": {
"type": "S3",
"s3Location": {
"uri": "s3://bedrock-knowledge-base-us-east-1/space-ug.pdf"
}
}
},
{
"content": {
"text": "iii AWS リポストプライベート ユーザーガイド re: POST プライベートにアクセスする AWS re: Post プライベートとは何で すか? AWS re: Post Private は、エンタープライズSupport プランまたはエンタープライズオンランプSupport プ ランをご利用の企業向けの AWS re: Post のプライベートバージョンです。クラウドの導入を促進し、開発 者の生産性を向上させるための知識や専門家へのアクセスを提供します。組織固有の非公開の re: Post を 利用すれば、大規模な効率化を促進し、貴重な知識リソースへのアクセスを提供する、組織固有の開発者 コミュニティを構築できます。さらに、re: Post Private は、AWS信頼できる技術コンテンツを一元化し、 プライベートなディスカッションフォーラムを提供することで、チームが社内や AWS と連携する方法を 改善して、技術的な障害を取り除き、イノベーションを加速し、クラウド内でより効率的にスケーリング できるようにします。 詳細については、「AWS re: Post プライベート」を参照してください。 re: POST プライベートにアクセスする 管理者以外のユーザーは re: Post Private アプリケーションを使用して、管理者が設定した認証情報を使用 してサインインします。非公開の re: POST にサインインすると、関心のあるトピックに合わせたトレー ニングや技術コンテンツなど、既存のコンテンツを閲覧または検索できます。また、AWS公開されている テクニカルコンテンツは非公開の re: POST から直接検索でき、公開コンテンツに関する社内ディスカッ ション用の非公開スレッドを作成することもできます。AWS質問をしたり、返信したり、記事を公開した りすることで、非公開の re: POST AWS の他のユーザーから技術的な問題を共同で解決したり、技術的な 指導を受けたりできます。ディスカッションスレッドをケースに変換することもできます。AWS Support 回答を非公開の re: AWS Support POST に追加することもできます。 料金 re: Post Private の料金範囲について詳しくは、「料金設定」を参照してください。 開始方法 re: Post Private を使い始めるには、を参照してください。プライベートなre: POSTにログインす る (p. 4) 1 http://aws.amazon.com/repost-private/ http://aws.amazon.com/repost-private/pricing AWS リポストプライベート ユーザーガイド ブラウザ要件 招待されたカスタムサブドメインにサインインして、プライベートな re: POST アプリケーションを開き ます。以下のサポートされているウェブブラウザーの最新の 3 つのバージョンのいずれかを使用してくだ さい。 • Google Chrome • Mozilla Firefox • Microsoft Edge • MacOS 版 Apple Safari 2 AWS リポストプライベート ユーザーガイド AWS re: Post プライベートへの招待 を受ける 組織固有のプライベート re: POST に招待される必要があります。re: POST プライベートコンソールの管 理者が非公開の re: POST を作成し、あなたと他のユーザーを非公開の re: POST に招待します。コンソー ル管理者から、プライベート re: POST へのログインと登録に必要な情報が記載されたメールが送信され ます。"
},
"location": {
"type": "S3",
"s3Location": {
"uri": "s3://bedrock-knowledge-base-us-east-1/space-ug.pdf"
}
}
}
]
}
]
}

レスポンスに含まれるsessionIdを指定することで、会話として継続することができます。

retrieve_and_generate_response = bedrock_agent_runtime.retrieve_and_generate(
input={
'text': '特徴を教えてください。'
},
retrieveAndGenerateConfiguration={
'type': 'KNOWLEDGE_BASE',
'knowledgeBaseConfiguration': {
'knowledgeBaseId': 'JMLSPXRICR',
'modelArn': 'arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-v2'
}
},
sessionId=retrieve_and_generate_response['sessionId']
)

re:Post Privateは、エンタープライズSupportプランまたはエンタープライズオンランプSupportプランをご利用の企業向けのAWS re:Postのプライベートバージョンです。 re:Post Privateには、組織内のみで共有できるプライベートなディスカッション機能があります。

レスポンス
{
"ResponseMetadata": {
"RequestId": "82b7f168-e88c-429e-b013-728854146084",
"HTTPStatusCode": 200,
"HTTPHeaders": {
"date": "Sat, 09 Dec 2023 11:47:58 GMT",
"content-type": "application/json",
"content-length": "19007",
"connection": "keep-alive",
"x-amzn-requestid": "82b7f168-e88c-429e-b013-728854146084"
},
"RetryAttempts": 0
},
"sessionId": "64d7a24c-d204-4cdf-979d-75862550c7e4",
"output": {
"text": "re:Post Privateは、エンタープライズSupportプランまたはエンタープライズオンランプSupportプランをご利用の企業向けのAWS re:Postのプライベートバージョンです。 re:Post Privateには、組織内のみで共有できるプライベートなディスカッション機能があります。"
},
"citations": [
{
"generatedResponsePart": {
"textResponsePart": {
"text": "re:Post Privateは、エンタープライズSupportプランまたはエンタープライズオンランプSupportプランをご利用の企業向けのAWS re:Postのプライベートバージョンです。",
"span": {
"start": 0,
"end": 96
}
}
},
"retrievedReferences": [
{
"content": {
"text": "[記事を公開] を選択します。 公開した記事が「記事」タブに表示されるようになりました。プライベート re: POST のユーザーは、記 事を閲覧、賛成、反対票を投じることができます。また、記事にコメントを追加して、「この記事へのコ メント」セクションに表示することもできます。 非公開の re: POST 内を検索してください ナビゲーションバーの検索ボックスは、AWS re: Post Private 全体の情報を検索するための統合検索ツー ルです。数文字入力すると、プライベートの re: POST と AWS re: POST からクエリと一致する集計結果 がプレビューウィンドウに表示されます。 8 AWS リポストプライベート ユーザーガイド ディスカッションを作成 検索結果は関連性別にソートされ、質問、ナレッジセンター、記事、セレクション、タグ、トピックなど のカテゴリ別に一覧表示されます。入力する文字数が多いほど、検索結果はより明確になります。 プライベートな re: POST の情報を検索するには、以下の手順に従ってください。 1. re: Post Private ウェブアプリケーションの検索ボックスに、検索語の全部または一部を入力します。 2. プレビューウィンドウから特定の検索結果を選択します。 3. デフォルトで「すべてのコンテンツ」ビューになっている検索結果ページ全体を表示するには、検索語 の全部または一部を入力した後に Enter キーを押します。 Note プライベートの re: POST から集約されたナレッジは re: POST のプライベート結果タブに表示 され、re: POST から集約されたナレッジは AWS AWS re: Post 結果タブに表示されます。 4. (オプション) 検索結果ページのドロップダウンリストからオプションを選択し、ソート順序を優先的に 変更します。 Note デフォルトでは、検索結果は関連度順にソートされます。 5. [検索結果] ページで、次の操作を行って検索結果をさらに絞り込みます。 [コンテンツを絞り込む] では、検索語を入力して、キーワードに基づいて結果を絞り込みます。 [フィルターするタグを 5 つまで選択してください] で、結果をフィルターしたいタグを選択します。 (オプション) さらにフィルタリングを行うには、re: Post Private 結果タブまたは AWS re: Post 結果タ ブを選択し、タグのフィルタを使用してください。 Note 検索結果には、選択したタグの一部またはすべてを含む結果が表示されます。 6. たとえば、「質問」タブを選択して検索結果を質問で絞り込むと、「質問を絞り込む」オプションのい ずれかを選択して、結果をさらに絞り込むことができます。 プライベートな re: POST でディスカッションを作成 しましょう。 プライベートな AWS re: POST 内のどの検索結果についても、プライベートディスカッションを開始でき ます。質問、ナレッジセンターの記事、または AWS re: Post コンテンツタブの検索結果の記事に関する ディスカッションを開始できます。 re: POST の検索結果についてプライベートディスカッションを開始するには、以下の手順に従いま す。AWS 1. 検索結果ビューで、AWS re: POST 結果タブを選択します。 2. ディスカッションを作成したい検索結果を選択します。 3. プライベートの re: POST で [ディスカッションを開始] を選択します。 4. 「質問する」ページで、次の情報を入力します。 [質問タイトル] には、ディスカッションのタイトルを入力します。 [質問の説明] には、コンテンツへのリンクが既に含まれています。必要に応じてさらに情報を入力でき ます。 [タグ] では、ディスカッションに当てはまるタグを最大 5 つ選択します。"
},
"location": {
"type": "S3",
"s3Location": {
"uri": "s3://bedrock-knowledge-base-us-east-1/space-ug.pdf"
}
}
},
{
"content": {
"text": "................ 13 ...................................................................................................................................................... xiv iii AWS リポストプライベート ユーザーガイド re: POST プライベートにアクセスする AWS re: Post プライベートとは何で すか? AWS re: Post Private は、エンタープライズSupport プランまたはエンタープライズオンランプSupport プ ランをご利用の企業向けの AWS re: Post のプライベートバージョンです。クラウドの導入を促進し、開発 者の生産性を向上させるための知識や専門家へのアクセスを提供します。組織固有の非公開の re: Post を 利用すれば、大規模な効率化を促進し、貴重な知識リソースへのアクセスを提供する、組織固有の開発者 コミュニティを構築できます。さらに、re: Post Private は、AWS信頼できる技術コンテンツを一元化し、 プライベートなディスカッションフォーラムを提供することで、チームが社内や AWS と連携する方法を 改善して、技術的な障害を取り除き、イノベーションを加速し、クラウド内でより効率的にスケーリング できるようにします。 詳細については、「AWS re: Post プライベート」を参照してください。 re: POST プライベートにアクセスする 管理者以外のユーザーは re: Post Private アプリケーションを使用して、管理者が設定した認証情報を使用 してサインインします。非公開の re: POST にサインインすると、関心のあるトピックに合わせたトレー ニングや技術コンテンツなど、既存のコンテンツを閲覧または検索できます。また、AWS公開されている テクニカルコンテンツは非公開の re: POST から直接検索でき、公開コンテンツに関する社内ディスカッ ション用の非公開スレッドを作成することもできます。AWS質問をしたり、返信したり、記事を公開した りすることで、非公開の re: POST AWS の他のユーザーから技術的な問題を共同で解決したり、技術的な 指導を受けたりできます。ディスカッションスレッドをケースに変換することもできます。AWS Support 回答を非公開の re: AWS Support POST に追加することもできます。"
},
"location": {
"type": "S3",
"s3Location": {
"uri": "s3://bedrock-knowledge-base-us-east-1/space-ug.pdf"
}
}
},
{
"content": {
"text": "iii AWS リポストプライベート ユーザーガイド re: POST プライベートにアクセスする AWS re: Post プライベートとは何で すか? AWS re: Post Private は、エンタープライズSupport プランまたはエンタープライズオンランプSupport プ ランをご利用の企業向けの AWS re: Post のプライベートバージョンです。クラウドの導入を促進し、開発 者の生産性を向上させるための知識や専門家へのアクセスを提供します。組織固有の非公開の re: Post を 利用すれば、大規模な効率化を促進し、貴重な知識リソースへのアクセスを提供する、組織固有の開発者 コミュニティを構築できます。さらに、re: Post Private は、AWS信頼できる技術コンテンツを一元化し、 プライベートなディスカッションフォーラムを提供することで、チームが社内や AWS と連携する方法を 改善して、技術的な障害を取り除き、イノベーションを加速し、クラウド内でより効率的にスケーリング できるようにします。 詳細については、「AWS re: Post プライベート」を参照してください。 re: POST プライベートにアクセスする 管理者以外のユーザーは re: Post Private アプリケーションを使用して、管理者が設定した認証情報を使用 してサインインします。非公開の re: POST にサインインすると、関心のあるトピックに合わせたトレー ニングや技術コンテンツなど、既存のコンテンツを閲覧または検索できます。また、AWS公開されている テクニカルコンテンツは非公開の re: POST から直接検索でき、公開コンテンツに関する社内ディスカッ ション用の非公開スレッドを作成することもできます。AWS質問をしたり、返信したり、記事を公開した りすることで、非公開の re: POST AWS の他のユーザーから技術的な問題を共同で解決したり、技術的な 指導を受けたりできます。ディスカッションスレッドをケースに変換することもできます。AWS Support 回答を非公開の re: AWS Support POST に追加することもできます。 料金 re: Post Private の料金範囲について詳しくは、「料金設定」を参照してください。 開始方法 re: Post Private を使い始めるには、を参照してください。プライベートなre: POSTにログインす る (p. 4) 1 http://aws.amazon.com/repost-private/ http://aws.amazon.com/repost-private/pricing AWS リポストプライベート ユーザーガイド ブラウザ要件 招待されたカスタムサブドメインにサインインして、プライベートな re: POST アプリケーションを開き ます。以下のサポートされているウェブブラウザーの最新の 3 つのバージョンのいずれかを使用してくだ さい。 • Google Chrome • Mozilla Firefox • Microsoft Edge • MacOS 版 Apple Safari 2 AWS リポストプライベート ユーザーガイド AWS re: Post プライベートへの招待 を受ける 組織固有のプライベート re: POST に招待される必要があります。re: POST プライベートコンソールの管 理者が非公開の re: POST を作成し、あなたと他のユーザーを非公開の re: POST に招待します。コンソー ル管理者から、プライベート re: POST へのログインと登録に必要な情報が記載されたメールが送信され ます。"
},
"location": {
"type": "S3",
"s3Location": {
"uri": "s3://bedrock-knowledge-base-us-east-1/space-ug.pdf"
}
}
}
]
},
{
"generatedResponsePart": {
"textResponsePart": {
"text": "re:Post Privateには、組織内のみで共有できるプライベートなディスカッション機能があります。",
"span": {
"start": 98,
"end": 149
}
}
},
"retrievedReferences": [
{
"content": {
"text": "[記事を公開] を選択します。 公開した記事が「記事」タブに表示されるようになりました。プライベート re: POST のユーザーは、記 事を閲覧、賛成、反対票を投じることができます。また、記事にコメントを追加して、「この記事へのコ メント」セクションに表示することもできます。 非公開の re: POST 内を検索してください ナビゲーションバーの検索ボックスは、AWS re: Post Private 全体の情報を検索するための統合検索ツー ルです。数文字入力すると、プライベートの re: POST と AWS re: POST からクエリと一致する集計結果 がプレビューウィンドウに表示されます。 8 AWS リポストプライベート ユーザーガイド ディスカッションを作成 検索結果は関連性別にソートされ、質問、ナレッジセンター、記事、セレクション、タグ、トピックなど のカテゴリ別に一覧表示されます。入力する文字数が多いほど、検索結果はより明確になります。 プライベートな re: POST の情報を検索するには、以下の手順に従ってください。 1. re: Post Private ウェブアプリケーションの検索ボックスに、検索語の全部または一部を入力します。 2. プレビューウィンドウから特定の検索結果を選択します。 3. デフォルトで「すべてのコンテンツ」ビューになっている検索結果ページ全体を表示するには、検索語 の全部または一部を入力した後に Enter キーを押します。 Note プライベートの re: POST から集約されたナレッジは re: POST のプライベート結果タブに表示 され、re: POST から集約されたナレッジは AWS AWS re: Post 結果タブに表示されます。 4. (オプション) 検索結果ページのドロップダウンリストからオプションを選択し、ソート順序を優先的に 変更します。 Note デフォルトでは、検索結果は関連度順にソートされます。 5. [検索結果] ページで、次の操作を行って検索結果をさらに絞り込みます。 [コンテンツを絞り込む] では、検索語を入力して、キーワードに基づいて結果を絞り込みます。 [フィルターするタグを 5 つまで選択してください] で、結果をフィルターしたいタグを選択します。 (オプション) さらにフィルタリングを行うには、re: Post Private 結果タブまたは AWS re: Post 結果タ ブを選択し、タグのフィルタを使用してください。 Note 検索結果には、選択したタグの一部またはすべてを含む結果が表示されます。 6. たとえば、「質問」タブを選択して検索結果を質問で絞り込むと、「質問を絞り込む」オプションのい ずれかを選択して、結果をさらに絞り込むことができます。 プライベートな re: POST でディスカッションを作成 しましょう。 プライベートな AWS re: POST 内のどの検索結果についても、プライベートディスカッションを開始でき ます。質問、ナレッジセンターの記事、または AWS re: Post コンテンツタブの検索結果の記事に関する ディスカッションを開始できます。 re: POST の検索結果についてプライベートディスカッションを開始するには、以下の手順に従いま す。AWS 1. 検索結果ビューで、AWS re: POST 結果タブを選択します。 2. ディスカッションを作成したい検索結果を選択します。 3. プライベートの re: POST で [ディスカッションを開始] を選択します。 4. 「質問する」ページで、次の情報を入力します。 [質問タイトル] には、ディスカッションのタイトルを入力します。 [質問の説明] には、コンテンツへのリンクが既に含まれています。必要に応じてさらに情報を入力でき ます。 [タグ] では、ディスカッションに当てはまるタグを最大 5 つ選択します。"
},
"location": {
"type": "S3",
"s3Location": {
"uri": "s3://bedrock-knowledge-base-us-east-1/space-ug.pdf"
}
}
},
{
"content": {
"text": "................ 13 ...................................................................................................................................................... xiv iii AWS リポストプライベート ユーザーガイド re: POST プライベートにアクセスする AWS re: Post プライベートとは何で すか? AWS re: Post Private は、エンタープライズSupport プランまたはエンタープライズオンランプSupport プ ランをご利用の企業向けの AWS re: Post のプライベートバージョンです。クラウドの導入を促進し、開発 者の生産性を向上させるための知識や専門家へのアクセスを提供します。組織固有の非公開の re: Post を 利用すれば、大規模な効率化を促進し、貴重な知識リソースへのアクセスを提供する、組織固有の開発者 コミュニティを構築できます。さらに、re: Post Private は、AWS信頼できる技術コンテンツを一元化し、 プライベートなディスカッションフォーラムを提供することで、チームが社内や AWS と連携する方法を 改善して、技術的な障害を取り除き、イノベーションを加速し、クラウド内でより効率的にスケーリング できるようにします。 詳細については、「AWS re: Post プライベート」を参照してください。 re: POST プライベートにアクセスする 管理者以外のユーザーは re: Post Private アプリケーションを使用して、管理者が設定した認証情報を使用 してサインインします。非公開の re: POST にサインインすると、関心のあるトピックに合わせたトレー ニングや技術コンテンツなど、既存のコンテンツを閲覧または検索できます。また、AWS公開されている テクニカルコンテンツは非公開の re: POST から直接検索でき、公開コンテンツに関する社内ディスカッ ション用の非公開スレッドを作成することもできます。AWS質問をしたり、返信したり、記事を公開した りすることで、非公開の re: POST AWS の他のユーザーから技術的な問題を共同で解決したり、技術的な 指導を受けたりできます。ディスカッションスレッドをケースに変換することもできます。AWS Support 回答を非公開の re: AWS Support POST に追加することもできます。"
},
"location": {
"type": "S3",
"s3Location": {
"uri": "s3://bedrock-knowledge-base-us-east-1/space-ug.pdf"
}
}
}
]
}
]
}

retrieve API

retrieveというAPIもあり、こちらはナレッジの取得のみを行います。

retrieve_response = bedrock_agent_runtime.retrieve(
knowledgeBaseId='JMLSPXRICR',
retrievalQuery={
'text': 're:Post Privateとはなんですか?'
}
)
レスポンス
{
"ResponseMetadata": {
"RequestId": "b79a8eb6-95ef-4a1a-b7a4-597e41a14a38",
"HTTPStatusCode": 200,
"HTTPHeaders": {
"date": "Sat, 09 Dec 2023 11:53:51 GMT",
"content-type": "application/json",
"content-length": "13406",
"connection": "keep-alive",
"x-amzn-requestid": "b79a8eb6-95ef-4a1a-b7a4-597e41a14a38"
},
"RetryAttempts": 0
},
"retrievalResults": [
{
"content": {
"text": "................ 13 ...................................................................................................................................................... xiv iii AWS リポストプライベート ユーザーガイド re: POST プライベートにアクセスする AWS re: Post プライベートとは何で すか? AWS re: Post Private は、エンタープライズSupport プランまたはエンタープライズオンランプSupport プ ランをご利用の企業向けの AWS re: Post のプライベートバージョンです。クラウドの導入を促進し、開発 者の生産性を向上させるための知識や専門家へのアクセスを提供します。組織固有の非公開の re: Post を 利用すれば、大規模な効率化を促進し、貴重な知識リソースへのアクセスを提供する、組織固有の開発者 コミュニティを構築できます。さらに、re: Post Private は、AWS信頼できる技術コンテンツを一元化し、 プライベートなディスカッションフォーラムを提供することで、チームが社内や AWS と連携する方法を 改善して、技術的な障害を取り除き、イノベーションを加速し、クラウド内でより効率的にスケーリング できるようにします。 詳細については、「AWS re: Post プライベート」を参照してください。 re: POST プライベートにアクセスする 管理者以外のユーザーは re: Post Private アプリケーションを使用して、管理者が設定した認証情報を使用 してサインインします。非公開の re: POST にサインインすると、関心のあるトピックに合わせたトレー ニングや技術コンテンツなど、既存のコンテンツを閲覧または検索できます。また、AWS公開されている テクニカルコンテンツは非公開の re: POST から直接検索でき、公開コンテンツに関する社内ディスカッ ション用の非公開スレッドを作成することもできます。AWS質問をしたり、返信したり、記事を公開した りすることで、非公開の re: POST AWS の他のユーザーから技術的な問題を共同で解決したり、技術的な 指導を受けたりできます。ディスカッションスレッドをケースに変換することもできます。AWS Support 回答を非公開の re: AWS Support POST に追加することもできます。"
},
"location": {
"type": "S3",
"s3Location": {
"uri": "s3://bedrock-knowledge-base-us-east-1/space-ug.pdf"
}
},
"score": 0.78541166
},
{
"content": {
"text": "............ 5 プライベートな re: POST 内で作業できます。 ........................................................................................ 6 質問してください。 .................................................................................................................... 6 回答を投稿してください。 ....................................................................."
},
"location": {
"type": "S3",
"s3Location": {
"uri": "s3://bedrock-knowledge-base-us-east-1/space-ug.pdf"
}
},
"score": 0.79174274
},
{
"content": {
"text": "iii AWS リポストプライベート ユーザーガイド re: POST プライベートにアクセスする AWS re: Post プライベートとは何で すか? AWS re: Post Private は、エンタープライズSupport プランまたはエンタープライズオンランプSupport プ ランをご利用の企業向けの AWS re: Post のプライベートバージョンです。クラウドの導入を促進し、開発 者の生産性を向上させるための知識や専門家へのアクセスを提供します。組織固有の非公開の re: Post を 利用すれば、大規模な効率化を促進し、貴重な知識リソースへのアクセスを提供する、組織固有の開発者 コミュニティを構築できます。さらに、re: Post Private は、AWS信頼できる技術コンテンツを一元化し、 プライベートなディスカッションフォーラムを提供することで、チームが社内や AWS と連携する方法を 改善して、技術的な障害を取り除き、イノベーションを加速し、クラウド内でより効率的にスケーリング できるようにします。 詳細については、「AWS re: Post プライベート」を参照してください。 re: POST プライベートにアクセスする 管理者以外のユーザーは re: Post Private アプリケーションを使用して、管理者が設定した認証情報を使用 してサインインします。非公開の re: POST にサインインすると、関心のあるトピックに合わせたトレー ニングや技術コンテンツなど、既存のコンテンツを閲覧または検索できます。また、AWS公開されている テクニカルコンテンツは非公開の re: POST から直接検索でき、公開コンテンツに関する社内ディスカッ ション用の非公開スレッドを作成することもできます。AWS質問をしたり、返信したり、記事を公開した りすることで、非公開の re: POST AWS の他のユーザーから技術的な問題を共同で解決したり、技術的な 指導を受けたりできます。ディスカッションスレッドをケースに変換することもできます。AWS Support 回答を非公開の re: AWS Support POST に追加することもできます。 料金 re: Post Private の料金範囲について詳しくは、「料金設定」を参照してください。 開始方法 re: Post Private を使い始めるには、を参照してください。プライベートなre: POSTにログインす る (p. 4) 1 http://aws.amazon.com/repost-private/ http://aws.amazon.com/repost-private/pricing AWS リポストプライベート ユーザーガイド ブラウザ要件 招待されたカスタムサブドメインにサインインして、プライベートな re: POST アプリケーションを開き ます。以下のサポートされているウェブブラウザーの最新の 3 つのバージョンのいずれかを使用してくだ さい。 • Google Chrome • Mozilla Firefox • Microsoft Edge • MacOS 版 Apple Safari 2 AWS リポストプライベート ユーザーガイド AWS re: Post プライベートへの招待 を受ける 組織固有のプライベート re: POST に招待される必要があります。re: POST プライベートコンソールの管 理者が非公開の re: POST を作成し、あなたと他のユーザーを非公開の re: POST に招待します。コンソー ル管理者から、プライベート re: POST へのログインと登録に必要な情報が記載されたメールが送信され ます。"
},
"location": {
"type": "S3",
"s3Location": {
"uri": "s3://bedrock-knowledge-base-us-east-1/space-ug.pdf"
}
},
"score": 0.79645133
},
{
"content": {
"text": "Note プロフィールを更新するには、ユーザープロフィールを選択し、「設定」を選択し、必要に応じ て更新してから「プロフィールを更新」を選択します。 5 AWS リポストプライベート ユーザーガイド 質問してください。 プライベートな re: POST 内で作業で きます このセクションのトピックでは、プライベート版の re: POST を使って既存のコンテンツを閲覧したり、 質問をしたり、回答を投稿したり、記事やセレクションを公開したりする方法について説明します。 トピック • プライベートな re: POST で質問をしてみましょう。 (p. 6) • プライベートな re: POST に質問への回答を投稿してください (p. 7) • 選択内容は非公開の re: POST で閲覧できます。 (p. 7) • セレクションを非公開の re: POST に公開します。 (p. 7) • 非公開の re: POST にコミュニティ記事を公開してください。 (p. 8) • 非公開の re: POST 内を検索してください (p. 8) プライベートな re: POST で質問をしてみましょ う。 プライベート re: POST で探している情報が見つからない場合は、質問をすることができます。 以下の手順に従って、プライベートの re: POST で質問してください。 1. プライベート re: POST アプリケーションの任意のページから、「コンテンツを投稿」を選択しま す。次に、「質問する」を選択します。 -または- プライベート re: POST アプリケーションの任意のページから、「質問する」を選択します。 2. 質問のガイドラインを確認して、「質問する」を選択します。 Note ガイドラインを確認するように求められるのは、初めて質問を投稿するときだけです。 3. [質問タイトル] には、タイトルを入力します。 4. [質問の説明] には、説明を入力します。できるだけ多くの情報を入力してください。 5. [タグ] では、質問に当てはまるタグを最大 5 つ選択します。 6. [カスタムタグ] では、質問に関連する組織のカスタムタグのいずれかを選択します。 Note このステップは、組織がカスタムタグを許可している場合にのみ適用されます。 7. [質問を投稿] を選択します。 質問は「質問」タブに表示されます。 プライベートの re: POST のユーザーが質問に答えることができます。質問に対するすべての回答が質問 の下に表示されます。回答を承認するには、[回答を承認] を選択します。 6 AWS リポストプライベート ユーザーガイド 回答を投稿してください。 プライベートな re: POST に質問への回答を投稿し てください プライベート re: POST に投稿された質問には、AWS re: Post プライベートで回答できます。 プライベートの re: POST に質問への回答を投稿するには、以下の手順に従います。 1. re: POST アプリケーションのプライベートホームページで、「質問」を選択します。 2. 質問のリストから、回答を投稿したい質問を選択します。"
},
"location": {
"type": "S3",
"s3Location": {
"uri": "s3://bedrock-knowledge-base-us-east-1/space-ug.pdf"
}
},
"score": 0.7983538
},
{
"content": {
"text": "ディスカッションスレッドをケースに変換することもできます。AWS Support 回答を非公開の re: AWS Support POST に追加することもできます。 料金 re: Post Private の料金範囲について詳しくは、「料金設定」を参照してください。 開始方法 re: Post Private を使い始めるには、を参照してください。プライベートなre: POSTにログインす る (p. 4) 1 http://aws.amazon.com/repost-private/ http://aws.amazon.com/repost-private/pricing AWS リポストプライベート ユーザーガイド ブラウザ要件 招待されたカスタムサブドメインにサインインして、プライベートな re: POST アプリケーションを開き ます。以下のサポートされているウェブブラウザーの最新の 3 つのバージョンのいずれかを使用してくだ さい。 • Google Chrome • Mozilla Firefox • Microsoft Edge • MacOS 版 Apple Safari 2 AWS リポストプライベート ユーザーガイド AWS re: Post プライベートへの招待 を受ける 組織固有のプライベート re: POST に招待される必要があります。re: POST プライベートコンソールの管 理者が非公開の re: POST を作成し、あなたと他のユーザーを非公開の re: POST に招待します。コンソー ル管理者から、プライベート re: POST へのログインと登録に必要な情報が記載されたメールが送信され ます。 3 AWS リポストプライベート ユーザーガイド プライベートなre: POSTにログイン する プライベート re: POST に初めてサインインするには、re: POST プライベートコンソールの管理者から届 いたメールを開いてください。次に、メールに記載されているリンクを選択して、プライベート re: POST にログインします。re: Post Private にサインインするには、AWS IAM Identity Centerお客様または AWS Active Directory の認証情報を使用する必要があります。 ブラウザがシングルサインオンをサポートできるようにするには、追加の手順を実行する必要があ る場合があります。詳細については、「AWS Directory Service Administration Guide」(管理ガイド) の「Single sign-on for IE and Chrome」(IE および Chrome のシングルサインオン) と「Single sign-on for Firefox」(Firefox のシングルサインオン) をご参照ください。"
},
"location": {
"type": "S3",
"s3Location": {
"uri": "s3://bedrock-knowledge-base-us-east-1/space-ug.pdf"
}
},
"score": 0.8071447
}
]
}
注記

LangChainでは、retrieve APIを使ったBedrock (Knowledge Bases) Retrieverが提供されています。

Knowledge base for Amazon Bedrockを使用しつつプロンプトをカスタマイズしたい場合などに利用すると良いと思います。

どのようなプロンプトが使用されているのか

ナレッジから文書を生成する際にどのようなプロンプトが使用されているのでしょうか?

Bedrockでは、Model Invocation loggingという機能があり、BedrockのAPI呼び出しの結果をログとして保存することが可能です。

デフォルトでは無効なので、Settingsから有効にします。出力先はS3とCloudWatch Logsが選択できます。

  • 初回問い合わせ

retrieve_and_generate APIで「re:Post Privateとはなんですか?」と質問した際のプロンプトはこちらです。

入力プロンプト

(検索結果1~5の部分は実際には検索結果の文字列が含まれます。)

プロンプト(改行など整形済み)
Human: 
You are a question answering agent.
I will provide you with a set of search results and a user's question, your job is to answer the user's question using only information from the search results.
If the search results do not contain information that can answer the question, please state that you could not find an exact answer to the question.
Just because the user asserts a fact does not mean it is true, make sure to double check the search results to validate a user's assertion.

Here are the search results in numbered order:
<search_results>
<search_result>
<content>
{検索結果1}
</content>
<source>
1
</source>
</search_result>
<search_result>
<content>
{検索結果2}
</content>
<source>
2
</source>
</search_result>
<search_result>
<content>
{検索結果3}
</content>
<source>
3
</source>
</search_result>
<search_result>
<content>
{検索結果4}
</content>
<source>
4
</source>
</search_result>
<search_result>
<content>
{検索結果5}
</content>
<source>
5
</source>
</search_result>
</search_results>

Here is the user's question:
<question>
re:Post Privateとはなんですか?
</question>

If you reference information from a search result within your answer, you must include a citation to source where the information was found.
Each result has a corresponding source ID that you should reference.
Please output your answer in the following format:
<answer>
<answer_part>
<text>first answer text</text>
<sources>
<source>source ID</source>
</sources>
</answer_part>
<answer_part>
<text>second answer text</text>
<sources>
<source>source ID</source>
</sources>
</answer_part>
</answer>

Note that <sources> may contain multiple <source> if you include information from multiple results in your answer.

Do NOT directly quote the <search_results> in your answer.
Your job is to answer the <question> as concisely as possible.

Assistant:

主要な部分を日本語に翻訳しました。

あなたは質問回答エージェントです。 私はあなたに検索結果とユーザーの質問を提供します。あなたの仕事は、検索結果の情報のみを使ってユーザーの質問に答えることです。 検索結果に質問に答えられる情報が含まれていない場合は、質問に対する正確な答えが見つからなかったことを明記してください。 ユーザーが事実を主張したからといって、それが真実であるとは限りません。ユーザーの主張を検証するために、検索結果を再度確認するようにしてください。

回答内で検索結果の情報を参照する場合は、その情報が見つかったソースへの引用を含める必要があります。 各検索結果には対応するソースIDがあり、それを参照する必要があります。 回答は以下の形式で出力してください:

複数の検索結果からの情報を回答に含める場合、<sources>は複数の<source>を含むことができることに注意してください。

<search_results>を直接引用しないでください。 あなたの仕事は<question>にできるだけ簡潔に答えることです。

プロンプトエンジニアリングの参考になりますね。

レスポンスはプロンプトの指示通り、XMLで返却されます。

レスポンス
<answer>
<answer_part>
<text>AWS re:Post Privateは、エンタープライズSupportプランまたはエンタープライズオンランプSupportプランをご利用の企業向けのAWS re:Postのプライベートバージョンです。</text>
<sources>
<source>1</source>
<source>3</source>
</sources>
</answer_part>
</answer>
  • 2回目の問い合わせ

sessionIdを指定すると、こちらのプロンプトとなりました。過去のやり取りと最新の質問文から、クエリー文字列を生成します。 今回の例では、2回目の入力は「特徴を教えてください。」だけですが、過去のやり取りを考慮し「re:Post Privateの特徴」という検索文字列を生成させています。

入力プロンプト
Human: You are a query creation agent. You will be provided with a function and a description of what it searches over. Your job is to determine the optimal query to use based on a <question>

Here are a few examples of queries formed by other search function selection and query creation agents:
<examples>
<example>
<question>What if my vehicle is totaled in an accident?</question>
<generated_query>"what happens if my vehicle is totaled"</generated_query>
</example>
<example>
<question>I am relocating within the same state. Can I keep my current agent?</question>
<generated_query>"can I keep my current agent when moving in state"</generated_query>
</example>
</examples>

You should also pay attention to the conversation history between the user and the search engine in order to gain the context necessary to create the query.
Here’s another example that shows how you should reference the conversation history when generating a query:

<example>
<example_conversation_history>
<example_conversation>
<question>How many vehicles can I include in a quote in Kansas</question>
<answer>You can include 5 vehicles in a quote if you live in Kansas</answer>
</example_conversation>
<example_conversation>
<question>What about texas?</question>
<answer>You can include 3 vehicles in a quote if you live in Texas</answer>
</example_conversation>
</example_conversation_history>
</example>

IMPORTANT: the elements in the <example> tags should not be assumed to have been provided to you to use UNLESS they are also explicitly given to you below. All of the values and information within the examples (the questions, answers, and function calls) are strictly part of the examples and have not been provided to you.

Here is the current conversation history:
<conversation_history>
<conversation>
<question>re:Post Privateとはなんですか?</question>
<answer>AWS re:Post Privateは、エンタープライズSupportプランまたはエンタープライズオンランプSupportプランをご利用の企業向けのAWS re:Postのプライベートバージョンです。</answer>
</conversation>

</conversation_history>

Here is the user’s input:
<question>特徴を教えてください。</question>

The format for the <generated_query> MUST be: <generated_query>$GENERATED_QUERY_VALUE</generated_query>

If you are unable to determine which function to call or if you are unable to generate a query, respond with 'Sorry, I am unable to assist you with this request.'

Assistant:

あなたはクエリー作成エージェントです。あなたには関数と、その関数が検索する内容の説明が提供されます。あなたの仕事は、<question>に基づいて最適なクエリを決定することです。

また、クエリを作成するために必要なコンテキストを得るために、ユーザーと検索エンジンの間の会話履歴にも注意を払うべきである。

重要: <example>タグの中の要素は、以下に明示的に示されていない限り、使用するためにあなたに提供されたと仮定してはいけません。例題内のすべての値や情報(質問、答え、関数の呼び出し)は、厳密に例題の一部であり、あなたに提供されたものではありません。

どの関数を呼び出すべきか判断できない場合や、クエリーを生成できない場合は、'Sorry, I am unable to assist you with this request'と応答してください。

レスポンス
<generated_query>re:Post Privateの特徴</generated_query>

処理の流れは、

  1. 「re:Post Privateの特徴」をベクトル化
  2. ベクトルデータでOpenSearch Serverlessを検索
  3. 検索結果と「re:Post Privateの特徴」から、回答を生成

となっていることがわかりました。

まとめ

Knowledge base for Amazon Bedrockについて解説しました。

ドキュメントをS3に格納するだけでRAGの仕組みが実現できるので、非常に便利な機能と思います。 日本語でも利用可能ですので、東京リージョンでの提供開始に期待大ですね。

こちらのブログでは、Kendraを使用したRAGの優位性が解説されていますので、将来的にはナレッジベースとしてAmazon Kendraが選択できるようになると嬉しいです。


明日のJapan AWS Ambassadors Advent Calendar 2023@Tak1waさんです。