Amazon Bedrockのナレッジベースをメタデータでフィルターしようとした際にエラーが発生しました。その際にエラーメッセージで調査したのですが、全く関係ない対応方法に惑わされてしまいました。その経験をご紹介します。
発生したエラー
Lambda関数からAWSのPython SDKを使用してAmazon Bedrockのナレッジベースをメタデータでフィルターしようと以下のコードを実行したらエラーが発生しました。
# RAG実行
response = client.retrieve_and_generate(
input={"text": conversation},
retrieveAndGenerateConfiguration={
"type": 'KNOWLEDGE_BASE',
"knowledgeBaseConfiguration": {
"knowledgeBaseId": "MO6IKBJA67",
"modelArn": "arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-3-haiku-20240307-v1:0",
},
"retrievalConfiguration": {
"vectorSearchConfiguration": {
"filter": metadata_filter
}
}
},
)
発生したエラーは以下の通りです。
Response
{
“statusCode”: 500,
“body”: “\”message: Parameter validation failed:\nUnknown parameter in retrieveAndGenerateConfiguration: \\”retrievalConfiguration\\”, must be one of: externalSourcesConfiguration, knowledgeBaseConfiguration, type\””
}
調査結果
エラーメッセージで調査したところ、たどり着いた対応方法は次のようなものでした。
I encountered the same issue, but it was resolved after updating boto3 version on lambda.
You can update boto3 directly within the Lambda code or by using a Lambda layer.
https://stackoverflow.com/questions/78317424/retrieveandgenerate-syntax-error-unknown-parameter-generationconfiguration-or-r
翻訳すると「同じ問題に直面しましたが、Lambda上でboto3のバージョンを更新した後、問題が解決しました。boto3をLambdaコード内で直接更新するか、Lambdaレイヤーを使用して更新することができます。」となります。
なるほど最新のboto3のレイヤーを作ればよいのかと思い、早速作ってLambdaに組み込んでみましたが同じエラーのまま動きませんでした。
引用元の記事には「It only works with minimum required fields like this:」つまり「最小減の必須パラメータだけにしたら動く」とも書いてあり、私も試そうとしていたretrievalConfiguration
のパラメータを削除して最小限のパラメータだけにしたら動いたので同じ事象だと勘違いしていました。
Lambdaレイヤーの作り方は以下の記事を参考にしてください。この記事を書いたばかりだったのでこの対応方法に飛びついてしまった可能性が高いです。
エラーの原因
原因は単純なシンタックスエラーです。retrievalConfiguration
を記述する場所が誤っていただけでした。
対応方法
以下のようにコードを修正したら動きました。
# RAG実行
"knowledgeBaseConfiguration": {
"knowledgeBaseId": "MO6IKBJA67",
"modelArn": "arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-3-haiku-20240307-v1:0",
"retrievalConfiguration": {
"vectorSearchConfiguration": {
"filter": metadata_filter
}
}
},
まとめ
公式ドキュメントを見ながら設定していたので設定場所に問題は無いと思い込んでいたのがいけませんでした。エラーメッセージに”Unknown parameter”や”must be one of”とあったので設定内容に問題があると疑うべきでした。このエラーメッセージで調べるとLambdaのバージョンアップの対応方法が記述されたサイトが多く見つかります。私と同じように単純なシンタックスエラーなのに無駄にLambdaレイヤーを作ってしまう人が減るように祈っています。
コメント