ナレッジベース環境
前提としてナレッジベースの環境は次の通り作成しています。
-
ベクトルデータベース: Amazon Aurora
-
埋め込みモデル: Titan Text Embeddingsv2
-
チャンキング戦略: Semantic chunking
-
Parsing strategy: Claude 3.5 Sonnet v1 (Bedrock model parsing)
※ Parsing strategy を Amazon Bedrock default parser
ではなく、Claude 3.5 Sonnet v1 (Bedrock model parsing)を選択したかは検証3で説明します -
LLM: anthropic.claude-3-5-sonnet-20241022-v2:0
-
temperature: 0.1
-
topP: 0.9
ナレッジベースの作り方は他の沢山の方が記事を出していると思いますので、他の方の記事やAWSドキュメントを参考にして下さい
検証1
-
映画ランキング.pdf
- 令和6年の邦画と洋画のランキング
-
キングダム_大将軍の帰還.pdf
- Wikipediaの情報。概要や出演者や監督などの情報
-
山崎賢人.pdf
- Wikipediaの情報。山崎賢人の情報
をデータソースとして使います。
「令和6年の邦画のランキング3位を教えて下さい。また、主演を演じた俳優と誕生日を教えて。」
と質問します。
この場合、
①邦画のランキング3位
であることは、「映画ランキング.pdf」
②主演が山崎賢人
であることは、「キングダム_大将軍の帰還.pdf」
③山崎賢人の誕生日
は、「山崎賢人.pdf」
に書かれており、この情報を回答してくれることを期待します。
"numberOfResults": 10 に設定してみる
うーん、①だけしか回答してくれません。
"numberOfResults": 50 に設定してみる
うーん、これも①②だけしか回答してくれません。
"numberOfResults": 100 に設定してみる
①②③まで回答してくれました。
考慮点
今回はデータソースが少ないですが、
複雑な質問に対しては、numberOfResultsを増やすと回答してくれる。
ただし、numberOfResultsを増やすと、同じプロンプトに対して複数の異なる回答が生成され、各結果は確率的なサンプリングによって生成されるため、情報のばらつきが大きくなり、一部の回答が誤情報を含む可能性が高まるかなと思っています。
検証2
「令和6年の映画のランキング3位を教えて下さい。」
と質問します。
データソースは検証1と同じです。
検証1よりシンプルな質問です。
ただし、邦画なのか洋画なのかはわからない状態なので、
邦画では「キングダム 大将軍の帰還」
洋画では「ウィッシュ」
の回答を期待します。
"numberOfResults": 10 に設定してみる
うん、良い感じですね。
"numberOfResults": 50 に設定してみる
邦画しか回答してくれませんね。
"numberOfResults": 100 に設定してみる
邦画しか回答してくれませんね。
考慮点
シンプルな回答に関しては、numberOfResultsを小さくする必要がありそう
検証3
冒頭で、Parsing strategy を Amazon Bedrock default parser ではなく、Claude 3.5 Sonnet v1 (Bedrock model parsing) を選択していましたが、Amazon Bedrock default parser で試してみます。
検証1と同じように、
①邦画のランキング3位
であることは、「映画ランキング.pdf」
②主演が山崎賢人
であることは、「キングダム_大将軍の帰還.pdf」
③山崎賢人の誕生日
は、「山崎賢人.pdf」
のこの情報を回答してくれることを期待します。
"numberOfResults": 100 に設定してみる
おっと、①②③全て回答してくれなくなりました。
"numberOfResults": 50 に設定してみる
①②まで回答してくれるようになりました。
①②まで回答してくれますが、③は回答しれくれないようです。