AWS Bedrock Knowledgebase 開発メモ


質問の回答がまったく出鱈目、ちょっとずれる場合などは検索方法が間違っている可能性がある。「Semantic Search」に変更して試す。

〇Default search
Amazon Bedrock が検索戦略を決定します。


〇Hybrid search (semantic & text)
セマンティックおよびテキスト検索からの関連性スコアを組み合わせて、より高い精度を提供します。


●Semantic search
ベクトル埋め込みを使用して、関連する結果を提供します。






サポートされるデータソース内のファイル

サポートされるファイルは次の通り。

プレーンテキスト .txt
マークダウン .md
HyperText マークアップ言語 .html
Microsoft Word ドキュメント .doc/.docx
カンマで区切られた値 .csv
Microsoft Excel スプレッドシート .xls/.xlsx
ポータブルドキュメント .pdf

利用可能なモデル一覧の表示

2024/10 現在の状況。 aws コマンドで取得が可能。ユーザが別途申請が必要。

C:\>aws bedrock list-foundation-models | findstr modelId
"modelId": "amazon.titan-text-express-v1:0:8k",
"modelId": "amazon.titan-text-express-v1",
"modelId": "amazon.titan-embed-text-v1:2:8k",
"modelId": "amazon.titan-embed-text-v1",
"modelId": "anthropic.claude-instant-v1:2:18k",
"modelId": "anthropic.claude-instant-v1",
"modelId": "anthropic.claude-v2:1:18k",
"modelId": "anthropic.claude-v2:1:200k",
"modelId": "anthropic.claude-v2:1",
"modelId": "anthropic.claude-3-haiku-20240307-v1:0",
"modelId": "anthropic.claude-3-5-sonnet-20240620-v1:0",
,

ソースチャンクとは

うまく回答されない場合は「ソースチャンク 1」で結果を確認する。必要な結果が切れていたりする。ナレッジが理解できるようにソースのファイルをコンパクトにする。(不要なデータを削除するなど)あるはチャンクのサイズをあらかじめ大きくする。(後では変更できない)

データをナレッジベースに取り込む際に、Amazon Bedrock は各ファイルをチャンクに分割します。ナレッジベースにクエリを実行したときにチャンク単位で戻されます。
Amazon Bedrock には、データをチャンク化するために使用できるチャンク化戦略が用意されています。また、ソースファイルを自分でチャンク化してデータを前処理することもできます。

(設定場所:データソース→詳細設定→チャンク戦略)

(1)デフォルト
デフォルトでは各チャンクには最大で約 300 個のトークンが含まれます。300 個未満のトークンしか含まれない場合は分割されません。

2024/9でデフォルトチャンクサイズは500トークンでした。最大では8192個。これは作成後は変更できなようです。

(2)チャンクサイズの指定
ユーザがサイズを指定する

(3)チャンク化なし
Amazon Bedrock は各ファイルを 1 つのチャンクとして扱います。その場合S3 バケットにアップロードする前に、ドキュメントを別々のファイルに分割する必要がある。



うまく回答が生成されない場合(チャンクのチェック)

チャンクとは:生成AIにおける「チャンク」とは、テキストやデータを小さな単位に分割することを指します。これによってAIモデルは情報を効率的に処理し、適切な応答を生成できます。例えば、文章を文や単語レベルで分割し、それぞれのチャンクを分析して理解します。そうすることで、AIは文脈を把握しやすくなり、より精度の高い応答を提供できます。

AWS Bedrock ナレッジベースでうまく回答されない場合:
まずチャンクをチャンクをチェックする。生成されない原因はほとんどチャンク。
回答がうまく行かない場合チャンクをチェックする。その場合、そもそもチャンクが正しく分割されていない、あるいは分割されたチャンクが検索されていないケースが多い。
・ベクトル検索ではなく全文検索の場合正しくチャンクが戻されていない可能性があるので、検索タイプは "Hyblid" あるいは "Symantec"にする。(バージョンによる表記はことなる)
・時系列データのcsv などうまく検索されない場合がある。その場合は日付ごとにファイルを分割するとうまく行く。
・検索数はデフォルト5。しかしこの5と実際に戻されるチャンク数は異なる。チャンク数は100とかにする。コストには注意。
複雑な計算や多くの足し算などは正確にされない

・設定したチャンク数と実際に回答が生成されるときに戻るチャンク数は異なる。
・重要な内容は一つのファイルにコンパクトにまとめて、プロンプトに「必ずxxxxファイルを参照してください」と書くとよい。こうしないと普段は正常に回答が生成されるが、まれに重要ファイルを参照せずに生成に失敗する場合があるからだ。

・データが入った大きな





・チャンクが大きすぎて精度が落ちる場合があり。csv ファイルから行、列で値を探すときなど。




メタデータによるフィルタリング




同期

マネコン上では同期は手動でしかできない。(自動同期はない)

Python では次のコードで同期が可能。これを一定間隔でループなどして自動更新とする。

(*)2024年現在ではこのプログラムでBedrock ナレッジベースを更新しても Bedrock Agent では反映されなかった。明示的にマネコン上のナレッジベースで更新する必要があった。

 import boto3

KnowledgeBaseId="**********"
DataSourceId="**********"

#client = boto3.client('bedrock-agent')
client = boto3.client('bedrock-agent', region_name='us-east-1')


response = client.start_ingestion_job(
knowledgeBaseId=KnowledgeBaseId,
dataSourceId=DataSourceId
)

Bedrock ナレッジベースに Boto3から問い合わせするサンプルは次の通り。

・デフォルトだとチャンク数が1で使いもにならない。「情報がありません」はおそらくチャンク数が1だから。'numberOfResults': 15 で指定している。
・'overrideSearchType': "HYBRID",にすることが重要。 'overrideSearchType': "SEMANTIC"だとうまく回答しない。

chatgptなどでインデントして使ってください。

import boto3

bedrock_agent_runtime = boto3.client('bedrock-agent-runtime', region_name="ap-northeast-1")

def ask_question_to_knowledgebase(knowledge_base_id, question):
response = bedrock_agent_runtime.retrieve_and_generate(
input={
'text': question
},
retrieveAndGenerateConfiguration={
'type': 'KNOWLEDGE_BASE',
'knowledgeBaseConfiguration': {
'knowledgeBaseId': knowledge_base_id,
'modelArn': 'arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-3-5-sonnet-20240620-v1:0',
'retrievalConfiguration': {
'vectorSearchConfiguration': {
'numberOfResults': 15,
'overrideSearchType': "HYBRID",
}
}

}
}
)
return response['output']['text']





# Example usage
knowledge_base_id = 'XXXXXXXXXX'

question = "あたなの質問をここに入力"

result = ask_question_to_knowledgebase(knowledge_base_id, question)
print(result)



エラーメッセージ

(1)

ナレッジベースを削除しようとしたところ、次のエラーが発生。

Delete unsuccessful
Unable to delete data from vector store for data source with ID **********. Check your vector store configurations and permissions and retry your request. If the issue persists, consider updating the dataDeletionPolicy of the data source to RETAIN and retry your request.

データソースを変更しようとしても次のエラー

undefined The policy is attached to 0 entities but it must be attached to a single role

原因はOpenSearchのコレクションが削除されていたこと。ナレッジから消す方法は引き続き調査中。(2024/6)



(2)

【Q】An error occurred (ConflictException) when calling the StartIngestionJob operation: There is an ongoing ingestion job for this knowledge base ・・・

エラーが出てナレッジベースのデータ同期に失敗する。

【A】

原因不明。S3のファイルの一部を再生成したところ復帰。

【Q】「リソースのロード中」でデータソースがいつまでも表示されない。よって質問もできないし「同期」ボタンもグレイアウトされたまま押せない。

【A】原因不明。S3ファイルに変更があったからかもしれない。5分程度まって解消した。2024/6











[ AWS Bedrock まとめに戻る]



【注意事項】本ページの内容は個人的に調査した結果がであり内容が正しいことは保証されません。
またAWSサービスは常に改良、アップデートされており本ページの内容が古く誤った内容になる可能性もあります。変更になっても本ページが正しく更新されるとは限りません。
あくまでも参考程度でご覧ください。内容により発生したいかなる時間的損害、金銭的損害、その他の損害に関しても何人も保証しません。