AWS Bedrockプロンプト管理機能のRuby SDKにおける使い方と注意点

AWS Bedrockにはプロンプト管理という機能があります。

docs.aws.amazon.com

ざっくりいうと、プロンプトをテンプレート化してバージョン管理できる機能です。プロンプトの一部を{{変数名}}のように二重中括弧で囲んで変数化することができます。

コンソールにて作成でき、テストもできます。が、ちょっと分かりにくく。「プロンプト」を入力してそのまま「ドラフトを保存」をクリックしても「ValidationException」がでて保存できません。

原因は「設定 - オプション」として書かれているところの「モデルを選択」を実施してないためです。必須条件ならオプションと書かないで欲しい...

ドラフトを保存したり、バージョンを作成することでSDKで実際に使うことができます。Rubyでは次のようにします。

まずは、aws-sdk-bedrockruntimegem installします。今回使ったバージョンは1.63.0です。

rubygems.org

あとは普通のようにconverse APIを呼び出します。

bedrock_client = Aws::BedrockRuntime::Client.new(region: 'ap-northeast-1')
bedrock_client.converse({
     model_id: "arn:aws:bedrock:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
     prompt_variables: { "team_name" => { text: "阪神タイガース" } }
})

model_idにはプロンプト管理から確認できるプロンプトARNを指定します。arn:aws:bedrock:リージョン:アカウントID:prompt/ランダムな英数字という形式のようです。バージョンを指定する場合は、arn:aws:bedrock:リージョン:アカウントID:prompt/ランダムな英数字:バージョン番号という形になるようです。

prompt_variablesにはプロンプト管理で指定した変数名とその値を与えます。

応答は以下のようなstructが返ります。

#<struct Aws::BedrockRuntime::Types::ConverseResponse
 output=
  #<struct Aws::BedrockRuntime::Types::ConverseOutput::Message
   message=
    #<struct Aws::BedrockRuntime::Types::Message
     role="assistant",
     content=
      [#<struct Aws::BedrockRuntime::Types::ContentBlock::Text
        text=
         "阪神タイガースは、日本のプロ野球・セントラル・リーグに所属するプロ野球球団です。(以下略)",
        image=nil,
        document=nil,
        video=nil,
        tool_use=nil,
        tool_result=nil,
        guard_content=nil,
        cache_point=nil,
        reasoning_content=nil,
        citations_content=nil,
        unknown=nil>]>,
   unknown=nil>,
 stop_reason="end_turn",
(略)

ちなみに、invoke_model APIaws-sdk-bedrockruntime(バージョンは1.63.0)の場合prompt_variablesを引数に取れないので、プロンプト管理は使えませんでした。

docs.aws.amazon.com