質問の回答がまったく出鱈目、ちょっとずれる場合などは検索方法が間違っている可能性がある。「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 |
ポータブルドキュメント |
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