Agents for Amazon Bedrock の "ユーザー入力" を CloudFromation で有効にする
結論
以下のように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にはユーザーの質問に回答するためには情報が不足している場合、エージェント側からユーザーに質問することを許可するかどうかを指定するフラグあります。
マネジメントコンソールでの編集画面だとコレ。
ラジオボタンです
これを CloudFormation から有効にする、というのがやりたいことです。
ナニがハマりどころなのか
ところが、このリソースに対応するAWS::Bedrock::Agentにはそれらしきプロパティが定義されていません。
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.
ところが、上記ドキュメントには必須項目である 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