4
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Amazon BedrockでプロンプトログをS3に出力してみた

Posted at

はじめに

待ちに待ったAmazon Bedrock。ついにGAしました。
早速いじって遊んでいる訳ですが、数ステップの簡単な設定でプロンプトの入出力をS3やCloudWatch Logsへ転送する機能があったため手順を紹介します。

手順

Bedrockの利用準備

何はともあれBedrockを有効化する必要があります。
利用開始の手順はこちらの記事が参考になりますので、まずはこちらの準備を終わらせます。

ログ出力先バケットの作成

まずはプロンプトのログを保存するS3バケットを作成します。
今回は適当にbedrock-test-20230929というバケットを作成しました。
設定はデフォルト作成。

Bedrockがログを出力するためには、作成したバケットのバケットポリシーを編集する必要があります。
ポリシーは以下のような形式です。
{AccountID}は自身のAWSアカウントのIDに読み替えてください。
{Region}はBedrockの利用リージョンを指定してください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "bedrock.amazonaws.com"
      },
      "Action": [
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::{BucketName}/AWSLogs/{AccountID}/BedrockModelInvocationLogs/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{AccountID}" 
        },
        "ArnLike": {
           "aws:SourceArn": "arn:aws:bedrock:{Region}:{AccountID}:*"
        }
      }
    }
  ]
}

ここでResourceに指定されている
arn:aws:s3:::{BucketName}/AWSLogs/{AccountID}/BedrockModelInvocationLogs/*"
ですが、ログ格納パスを変えたければそれに合わせて変更します。
ただし、のちにBedrock側で設定するログ出力先の指定パスに自動で
AWSLogs/{AccountID}/BedrockModelInvocationLogs/{Region}/{yyyy}/{mm}/{dd}/{HH}/
というprefixがついた上でログが保存さるので、それも考慮してResourceを設定する必要があります。

実際の設定はこんな感じです。そのほかの設定はデフォルト。
image.png

Bedrockの設定

続いてBedrock側です。Amazon Bedrockを開き「Settings」を選択すると以下のようなページが出ます。
公式のアナウンスにもありますが、今のところS3とCloudWatch Logsにログ出力が可能なようです。

ここではログ出力対象として、Textのみ、S3 Onlyを選択しました。実際には用途に合わせてImage, Embeddingも選択する感じですね。
また、先ほど作成したS3バケット名をS3 bucketに指定します。簡単ですね。

image.png

設定した値に間違いがなければ「Save Change」をクリックすれば、完了です。
ポリシーに間違いがあるとpermission errorが出ます。bedrock側で設定したS3パス+/AWSLogs/{AccountID}/BedrockModelInvocationLogs/*への許可がバケットポリシー側で必要なので、間違いないようにしてください。

ログの確認

Bedrockの設定が終わった時点で、以下のようにjsonファイルが出力されていました。中身は空ファイルです。
設定ができているかの確認用ですね。(ファイル名にもアカウントIDが入ってたので黒墨してます)
image.png
上でも述べましたが、保存されるログは以下のパス形式で保存されます。
AWSLogs/{AccountID}/BedrockModelInvocationLogs/{Region}/{yyyy}/{mm}/{dd}/{HH}/

では実際にログを出していきましょう。
Playgroundsからチャットを利用してみます。モデルはClaude Instant V1です。適当にチャットします。
image.png

はい、ログが出力されました。成功です。
image.png

1回のリクエストに対して1ファイル出力されます。
実際のログはこんな感じです。(AccountIDはマスクしています)

{"Records":[{
    "schemaType":"ModelInvocationLog",
    "schemaVersion":"1.0",
    "timestamp":"2023-09-29T02:14:27Z",
    "accountId":"000000000000",
    "region":"us-east-1",
    "requestId":"3569241f-77fe-4842-b1d3-f45f7abb96f6",
    "operation":"InvokeModelWithResponseStream",
    "modelId":"anthropic.claude-instant-v1",
    "input":{
        "inputContentType":"application/json",
        "inputBodyJson":{
            "prompt":"\n\nHuman: 仕事って楽しい?\n\nAssistant:",
            "max_tokens_to_sample":300,
            "temperature":1,
            "top_k":250,
            "top_p":0.999,
            "stop_sequences":["\n\nHuman:"],
            "anthropic_version":"bedrock-2023-05-31"
        },
        "inputTokenCount":19
    },
    "output":{
        "outputContentType":"application/json",
        "outputBodyJson":[
            {"completion":" "},
            {"completion":"仕事が楽しいかどうかは、個人差が大"},
            {"completion":"きいと思います。\n\n楽しい要因としては:\n\n- "},
            {"completion":"やりがいのある仕事内容で感じられる成果\n-"},
            {"completion":" 好きな分野で仕事ができる\n- 良"},
            {"completion":"好なチームワークや会社風土\n-"},
            {"completion":" 新しい技能を学べる場所\n\n楽しくない要因としては"},
            {"completion":":\n\n- 面白くない仕事内容\n- チームメイトや上"},
            {"completion":"司との軋轢\n- 優れた技"},
            {"completion":"能が生かされない場所\n- 優れた仕事に見"},
            {"completion":"合わない報酬\n\n以上のように、仕"},
            {"completion":"事内容自体やその環境が楽しみ方に影響"},
            {"completion":"します。同じ仕事でも方向性や作業環"},
            {"completion":"境によって楽しみ方は異なり得ると思います。一"},
            {"completion":"番大切なのは、自分に合った仕事を見つけられ"},
            {"completion":"るかどうかだと"},
            {"completion":"思います","stop_reason":"max_tokens"}
        ],
        "outputTokenCount":300
    }
}]}

見たまんまで分かりやすいと思います。
input, outputも必要最低限は情報がそろっていそうです。TokenCountがあるのもよいですね。
個人的にはどのIAMユーザが実行したものかわかるとうれしいですが、今のところログとしては出力されないようです。今後に期待です。

なお、実行ユーザについてはCloudTrailを確認すればリクエストIDと、S3出力ログの"requestId"が一致するものがあるので、誰がどこから実行したのかの紐付けは可能です。

image.png

まとめ

ということでものの数分でBedrockのプロンプトログをS3に転送することができました。

実際の運用では、プロンプトの入力を監査目的や利用実態の調査、精度改善などのために記録しておきたいというニーズは結構あると思います。
こういったロギングの設定を数ステップで実現できるのはBedrockの強みと言っていいのではないかと思いました。S3に置きさえすれば、あとの料理は如何様にもって感じなので大変うれしい機能です。
この機能はまだプレビューとのことなので、今後のアップデートも楽しみですね。

4
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?