🤖

Agents for Amazon Bedrock の "ユーザー入力" を CloudFromation で有効にする

2024/04/26に公開

結論

以下のようにActionGroupsに特定の値のAgentActionGroupを登録することで有効にすることが出来ます。

    HogeHogeAgent:
        Type: AWS::Bedrock::Agent
        Properties:
            AgentName: HogeHogeAgent
            AgentResourceRoleArn: !Ref AgentRoleArn
            FoundationModel: anthropic.claude-3-haiku-20240307-v1:0
            Instruction: |
                あなたはユーザーからの質問や要望に対応するエージェントです。
                質問には丁寧に回答してください。
            AutoPrepare: true
            ActionGroups:
                - ActionGroupName: UserInputAction
                  ActionGroupState: ENABLED
                  ParentActionGroupSignature: AMAZON.UserInput

その際、以下の注意事項をちゃんと守りましょう。

  • Description, ApiSchema, ActionGroupExecutor に値を指定してはいけません。
  • ParentActionGroupSignature の値は AMAZON.UserInput にします。
  • ActionGroupName は UserInputAction にします。
  • ActionGroupState は ENALBED にします。

特にハマりどころになるのがActionGroupNameです。必須項目なので何かしら値を設定しないとならないのですが、UserInputAction 以外の値だと意図した結果になりません。

ナニをしようとしているのか

Agents for Amazon Bedrockにはユーザーの質問に回答するためには情報が不足している場合、エージェント側からユーザーに質問することを許可するかどうかを指定するフラグあります。
https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/agents-create.html

マネジメントコンソールでの編集画面だとコレ。

ラジオボタンです

これを CloudFormation から有効にする、というのがやりたいことです。

ナニがハマりどころなのか

ところが、このリソースに対応するAWS::Bedrock::Agentにはそれらしきプロパティが定義されていません。
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-bedrock-agent.html

Type: AWS::Bedrock::Agent
Properties:
  ActionGroups: 
    - AgentActionGroup
  AgentName: String
  AgentResourceRoleArn: String
  AutoPrepare: Boolean
  CustomerEncryptionKeyArn: String
  Description: String
  FoundationModel: String
  IdleSessionTTLInSeconds: Number
  Instruction: String
  KnowledgeBases: 
    - AgentKnowledgeBase
  PromptOverrideConfiguration: 
    PromptOverrideConfiguration
  SkipResourceInUseCheckOnDelete: Boolean
  Tags: 
    Key: Value
  TestAliasTags: 
    Key: Value

諦めずに探していると、ActionGroupsプロパティに指定する配列の要素であるActionGroupオブジェクトのParentActionGroupSignatureに以下の記載が見つかりました。このプロパティに特定の値を設定するのが肝のようです。

ParentActionGroupSignature
If this field is set as AMAZON.UserInput, the agent can request the user for additional information when trying to complete a task. The description, apiSchema, and actionGroupExecutor fields must be blank for this action group.

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-bedrock-agent-agentactiongroup.html

ところが、上記ドキュメントには必須項目である AgentGroupName に何を設定すべきなのかの記載がありません。必須項目なので何かは設定しないとダメです。何か考えられる値を片っ端から試すのは嫌なので、ここはマネジメントコンソールからユーザー入力を許可したリソースで何が設定されているのか確認する方法を使ってみました。

$ aws bedrock-agent list-agent-action-groups --agent-id FXZXXXXXWB --agent-version 3 --region us-east-1
{
    "actionGroupSummaries": [
        {
            "actionGroupId": "RU5JSSVDY5",
            "actionGroupName": "UserInputAction",
            "actionGroupState": "ENABLED",
            "updatedAt": "2024-04-26T00:31:45.086139+00:00"
        }
    ]
}

無事、ActionGroupName に設定する値は UserInputAction であると確認が出来ました。結果、冒頭のテンプレートのユーザー入力の許可を有効化するテンプレートが導き出された、というワケです。

必要とされるのは期間限定な気もしますが、同じような問題にはハマっている方の助けになれば幸いです。

Discussion