[アップデート] Knowledge bases for Amazon Bedrockで「推論パラメーター」の設定が可能になりました

Amazon Bedrockのナレッジベースで、また新たなアップデートがありました。
2024.05.18

みなさん、こんにちは!
福岡オフィスの青柳です。

Amazon BedrockでRAGを実現する機能である「Knowledge bases for Amazon Bedrock」で、新たなアップデートがありました。

Knowledge Bases for Amazon Bedrock now lets you configure inference parameters

今までは設定できなかった「推論パラメーター」が設定できるようになった (カスタマイズできるようになった) というアップデートです。

「推論パラメーター」とは?

生成AIの「モデル」(LLM) を呼び出す時に、細かな挙動を調整するために与えるパラメーターのことです。

Bedrockの「プレイグラウンド」画面で、右の方に表示されている赤枠の部分のことですね。

BedrockでLLMを単体で利用する場合 (チャットや画像生成など) には、このように推論パラメーターを設定できたのですが、ナレッジベースを利用する際には推論パラメーターが設定できませんでした。

これが「設定できるようになった」というのが、今回のアップデートです。

推論パラメーターの設定方法

マネジメントコンソール利用時

ナレッジベースの「テスト」画面でRAGを実行する時に、推論パラメーターの設定を行えます。

推論パラメーターは「回答を生成」を有効にした場合のみ設定できます。 推論パラメーターは「RAG」の「Retrieve」(ナレッジの検索) で使われるのではなく「Generate」(検索結果を基にした回答の生成) に適用されるパラメーターであるためです。

「ナレッジベースをテスト」画面で「回答を生成」を有効にして、使用するモデルを選択した後に、左側の「設定」ボタンをクリックします。 (モデルを選択する前だと「推論パラメーター」の設定が出てこないので注意してください)

すると、左側に「Inference parameters」(推論パラメーター) の設定項目が現れます。

以下のパラメーターを設定することができます。

  • 温度 (Temperature)
  • トップP (TopP)
  • 最大長 (トークンの最大長)
  • 停止シーケンス

各パラメーターの意味はAWS公式ドキュメントなどで確認してください。

Amazon Titan Text
https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/model-parameters-titan-text.html

Anthropic Claude
https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/model-parameters-anthropic-claude-messages.html

ここに挙がっているもの以外のパラメーター、例えば「TopK」などは、マネジメントコンソールでは設定することができません。

次に説明する「API/SDK」を使用してください。

API/SDK利用時

APIや各種SDKを使用する場合は、RetrieveAndGenerateAPIに新たに追加されたパラメーターを設定します。 (検索のみを行うRetreaveAPIでは設定できません)

knowledgeBaseConfigurationまたはexternalSourcesConfigurationgenerationConfigurationに追加された以下のパラメーターをセットします。

  • inferenceConfig
  • additionalModelRequestFields

inferenceConfigの設定は以下のようになります。
マネジメントコンソールで設定可能な4つの推論パラメーターが設定可能です。

"inferenceConfig": { 
    "textInferenceConfig": { 
        "temperature": number,
        "topP": number,
        "maxTokens": number,
        "stopSequences": [ "string" ],
    },
}

additionalModelRequestFieldsの設定は以下のようになります。
inferenceConfigに含まれない推論パラメーターは、ここで設定します。

"additionalModelRequestFields": { 
    "top_k": number,
    ...
}

AWS SDK for Python (boto3) を使用した場合のサンプルコードは以下のようになります。 (boto3のバージョンが1.34.102以降である必要があります)

import boto3

client = boto3.client("bedrock-agent-runtime", region_name="us-east-1")

response = client.retrieve_and_generate(
    input={
        "text": "S3とEFSの暗号化方式を比較してください。",
    },
    retrieveAndGenerateConfiguration={
        "type": "KNOWLEDGE_BASE",
        "knowledgeBaseConfiguration": {
            "knowledgeBaseId": "XXXXXXXXXX", 
            "modelArn": "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0",
            "generationConfiguration": {
                "inferenceConfig": { 
                    "textInferenceConfig": { 
                        "temperature": 0,
                        "topP": 1,
                        "maxTokens": 2048,
                        "stopSequences": [ "Observation" ],
                    },
                },
                "additionalModelRequestFields": { 
                    "top_k": 50,
                },
            },
        },
    },
)

print(response["output"]["text"])

おわりに

ナレッジベース利用時にも推論パラメーターが設定できるようになったことで、細かなチューニングなどが行えるようになったと思います。

ナレッジベースにおける「回答の生成」の実行時には、他にも以下のような設定を行うことができます。 (いずれも、Knowledge bases for Amazon BedrockのGA以降のアップデートにより、設定できるようになったものです)

設定項目 説明
プロンプトテンプレート Generate実行時に与えるプロンプトをカスタマイズする。
フィルター メタデータを利用したコンテンツのフィルタリングを行う。
詳しくはこちら
ガードレール 作成した「ガードレール」を適用する。
ガードレールについてはこちらを参照

これらの設定を行うことで、より「期待に沿った」回答を得ることができます。 是非みなさんも試してみてください。