StepFunctionsからKnowledge baseも呼べるようになったらしいので、前に作った以下のお試しから、RetrieverとしてKnowledge baseに差し替えてみます。
処理の流れ
- 最初のステップではユーザー入力を元にLLM(Claude Instant)に検索キーワードを考えてもらいます
- 真ん中のステップでは検索キーワードを元にKnowledge baseを検索します
- 最後のステップで、ユーザー入力(≠検索キーワード)とKnowledge baseの検索結果からLLM(Claude2.1)で回答を生成します
最初のステップと最後のステップ
前回と全く変えていないので省略
真ん中のステップ
AgentのRuntimeから、RetrieveAPIを呼び出します。
{
"KnowledgeBaseId": "各自のKnowledge base ID",
"RetrievalQuery": {
"Text.$": "$.step1.result"
},
"RetrievalConfiguration": {
"VectorSearchConfiguration": {
"NumberOfResults": 10
}
}
}
取得件数は10件にしています。
気になった点として、API仕様書では各パラメータ名が小文字始まりになっていますが、大文字始まりに変えないとエラーで弾かれました。
ResultSelectorは以下
{
"result.$": "$.RetrievalResults[*].Content.Text"
}
雑ですが、検索結果全配列(10件)のTextを引っこ抜いてます。
こちらもパラメータと同様に、項目名を大文字開始にする必要があります。
ResultPathは以下
$.step2
これで$.step2.resultにKnowledge baseの検索結果が入ります。
実行時に権限不足を言われると思うので、実行ロールにAmazonBedrockFullAccessを付与しておきます(ReadOnlyでも良いかも?(試していない))。
感想
Agent経由のKnowledge base呼出し(5件固定)と比べて、取得件数を増やす事が出来るので使い勝手が良さそうに思いました。Knowledge baseはチャンクサイズをカスタマイズする事も出来ますし。
ところで、Knowledge baseのEmbeddingsとして、CohereのEmbed Multilingualが選択できるようになってました。
上限512トークンというのをどう見るかというのはありますが、チャンクサイズを上限の512トークンにして試してみても良いかもしれません。