[アップデート] Amazon Bedorck のナレッジベースとエージェントが CloudFormation によるデプロイをサポートしたっぽいので、使ってみた

2024.04.06

いわさです。

休日・土曜日の朝、起床後に何をしますか。やはり CloudFormation が新しいリソースをサポートしたかどうかを確認しますよね。
本日、CloudFormation のサポートリソースに Amazon Bedorck のエージェントとナレッジベースが追加されたようです。

今回新たに CloudFormation でサポートされるようになったリソースは以下です。

  • AWS::Bedrock::Agent
  • AWS::Bedrock::AgentAlias
  • AWS::Bedrock::DataSource
  • AWS::Bedrock::KnowledgeBase

おそらくAWS::Bedrock:XXX系のリソースは初めてではないでしょうか。

ただ、実は CloudFormation のドキュメントはリリース反映前に先行でドキュメントだけ更新されることがありますので。私の体感ですけども。

そこで本日は実際にテンプレートを作成してリソースが作成出来るのかを確認してみました。

Amazon Bedrock エージェントとナレッジベース

私が全く理解していなかったのもあり、大前提となるそもそもの Amazon Bedrock のエージェントとナレッジベースが何なのかを調べてみましたので、以下に概要だけまとめておきます。

これらは AWS re:Invent 2023 でGA となった Amazon Bedrock の機能です。

ナレッジベース(Knowledge bases for Amazon Bedrock)

ナレッジベースを使うと、AWS マネージドな機能でプライベートなカスタムデータをベクターストアに統合し、API を通じてナレッジベースにクエリを実行したりすることが出来ます。

本日時点でナレッジベースがサポートするモデルは以下です。

  • ベクターストアへの統合
    • Amazon Titan Embeddings G1
    • Cohere Embed (English)
    • Cohere Embed (Multilingual)
  • レスポンス生成
    • Anthropic Claude v2.0
    • Anthropic Claude v2.1
    • Anthropic Claude 3 Sonnet v1
    • Anthropic Claude 3 Haiku v1
    • Anthropic Claude Instant v1

エージェント(Agents for Amazon Bedrock)

エージェントはユーザーとやり取りを行い Lambda で定義したタスクを実行したり、オプションで前述のナレッジベースと統合することも出来ます。

エージェントがサポートするモデルは本日時点では以下です。

  • Anthropic Claude v2.0
  • Anthropic Claude v2.1
  • Anthropic Claude Instant v1

上記ブログで説明に使われている以下の画像がとても理解しやすかったので引用させて頂きます。

ちなみに、本日時点では東京リージョンではまだサポートされておらず、バージニア北部リージョンとオレゴンリージョンでのみ利用可能です。

今回はバージニア北部リージョンで確認しています。

テンプレート例とデプロイ

今回テンプレートを作成しましたが、いくつかインプットパラメータに必要なリソースを作成しています。
IAM ロールや、ナレッジベース用の OpenSearch Serverless コレクション、データストア用の S3 バケットなどです。

今回はナレッジベースのモデルにはAmazon Titan Embeddings G1を、エージェントのモデルにはAnthropic Claude v2.1をパラメータで指定し、エージェントにナレッジベースを関連付けした上でエージェントのバージョンとエイリアスを作成しています。

AWSTemplateFormatVersion: 2010-09-09
Description: ---
Parameters:
  ###########################
  # ナレッジベース用
  ###########################
  HogeEmbeddingModelArn:
    Type: String
    Default: arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-embed-text-v1
  HogeKnowledgeBaseRole:
    Type: String
    Default: arn:aws:iam::123456789012:role/service-role/AmazonBedrockExecutionRoleForKnowledgeBase_6nciu
  HogeOSSCollectionArn:
    Type: String
    Default: arn:aws:aoss:us-east-1:123456789012:collection/sw4zckofthortv2svhch
  HogeOSSIndexName:
    Type: String
    Default: bedrock-knowledge-base-default-index
  HogeOSSVecroField:
    Type: String
    Default: bedrock-knowledge-base-default-vector
  HogeOSSMappingText:
    Type: String
    Default: AMAZON_BEDROCK_TEXT_CHUNK
  HogeOSSMappingMetadata:
    Type: String
    Default: AMAZON_BEDROCK_METADATA
  HogeDatasourceBucketArn:
    Type: String
    Default: arn:aws:s3:::xxxxxxx
  ###########################
  # エージェント用
  ###########################
  HogeBedrockExecutionRoleForAgent:
    Type: String
    Default: arn:aws:iam::123456789012:role/service-role/AmazonBedrockExecutionRoleForAgents_NA5QLXKD89
  HogeFoundationModel:
    Type: String
    Default: anthropic.claude-v2:1
  HogeAgentInstruction:
    Type: String
    Default: hogehogeinstruction

Resources: 
  ###########################
  # ナレッジベース
  ###########################
  HogeKnowledgeBase:
    Type: AWS::Bedrock::KnowledgeBase
    Properties:
      Name: hoge-knowledge-base
      KnowledgeBaseConfiguration: 
          Type: VECTOR
          VectorKnowledgeBaseConfiguration: 
              EmbeddingModelArn: !Ref HogeEmbeddingModelArn
      RoleArn: !Ref HogeKnowledgeBaseRole
      StorageConfiguration: 
        Type: OPENSEARCH_SERVERLESS
        OpensearchServerlessConfiguration: 
            CollectionArn: !Ref HogeOSSCollectionArn
            FieldMapping: 
              MetadataField: !Ref HogeOSSMappingMetadata
              TextField: !Ref HogeOSSMappingText
              VectorField: !Ref HogeOSSVecroField
            VectorIndexName: !Ref HogeOSSIndexName
  HogeDataSource:
    Type: AWS::Bedrock::DataSource
    Properties:
      KnowledgeBaseId: !Ref HogeKnowledgeBase
      Name: hoge-data-source
      DataSourceConfiguration: 
        Type: S3
        S3Configuration: 
          BucketArn: !Ref HogeDatasourceBucketArn

  ###########################
  # エージェント
  ###########################
  HogeAgent:
    Type: AWS::Bedrock::Agent
    Properties:
      AgentName: hoge-agent
      AgentResourceRoleArn: !Ref HogeBedrockExecutionRoleForAgent
      FoundationModel: !Ref HogeFoundationModel
      Instruction: !Ref HogeAgentInstruction
      KnowledgeBases: 
        - Description: hoge-knowledge-base
          KnowledgeBaseId: !Ref HogeKnowledgeBase
          KnowledgeBaseState: ENABLED
  HogeAgentAlias:
    Type: AWS::Bedrock::AgentAlias
    Properties:
      AgentAliasName: hoge-agent-alias-1
      AgentId: !Ref HogeAgent

なお、各パラメータで不明点がある場合はマネジメントコンソールで作成した後に AWS CLI などで設定値を確認すると理解を助けてくれると思います。上記の実装にあたってリファレンスだけだといくつかわからない点があって CLI でパラメータを確認しました。

デプロイされたリソースの確認

上記のテンプレートをデプロイ後にリソースを確認してみます。
なお、今回は必須パラメータと、ナレッジベース関連付けに必要なオプションパラメータを指定しましたが、実際に上記構成で動作するかまでは確認しておらずもしかすると追加のパラメータが必要になるかもしれません。
一旦デプロイまでは上記で可能だよ、という感じです。

バージョン・エイリアスが設定されたエージェントがデプロイされています。

エージェンのバージョンあるいは作業中のドラフトを確認してみると、指定したモデルでエージェントが構成されていること、ナレッジベースが関連付いていることが確認できます。

続いてナレッジベースのほうも指定してモデルで構成されていること、ベクターストアとしてパラメータ指定した OpenSearch Serverless コレクションが構成されていること、指定した S3 バケットを使ったデータソースが作成され統合されていることが確認出来ました。

さいごに

本日は Amazon Bedorck のナレッジベースとエージェントが CloudFormation によるデプロイをサポートしたっぽいので、使ってみました。

正式にリリースされてるようですね。たまに使えてたはずの機能が使えなくなるケースもあるのでアップデートアナウンスも待ちたいですが。
東京リージョンではまだ使えないナレッジベースとエージェントですが、CloudFormation のサポートも開始されたということで覚えておきましょう。

2024.04.09 追記

アップデートアナウンスも出ました。