1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS CDKAdvent Calendar 2024

Day 9

bedrockのprompt flowsを作成したらnetwork errorになった話

Posted at

Amazon Bedrock Preview の Prompt Flows を試してみた

Amazon Bedrock のプレビュー機能である Prompt Flows を試してみました。
AWS CDK を使ってリソースを構築し、簡単なフローを動かしてみようとしたのですが、結果として Network Error が発生しました。それまでの流れを記載します。
※こちらの検証は10月頃に実施したものとなります

Prompt Flows の概要

Prompt Flows は、Amazon Bedrock 上で複数のプロンプトやデータフローを定義し、それをワークフローとして実行できる機能です。以下のような構造で、入力データからプロンプトを経由して出力を生成する流れを構築できます。

  • Input Node: フローに入力データを渡す
  • Prompt Nodes: プロンプトを使用して LLM を呼び出す
  • Output Node: プロンプトの結果を出力する

AWS CDK によるリソース構築

以下は、AWS CDK を使って Prompt Flows を構築したコードの概要です。
KMS キーの作成から IAM ロールの設定、Prompt ノードやフローの定義まで、一通りの設定を行っています。

1. KMS キーとリソースポリシー

まず、プロンプトやフローで使用するデータを暗号化するための KMS キーを作成し、適切なリソースポリシーを設定します。

const kmsKey = new kms.Key(this, "KmsKeyResource", {
  enableKeyRotation: true,
  alias: "AliasName",
  description: "A KMS key for encryption",
});

kmsKey.addToResourcePolicy(
  new iam.PolicyStatement({
    actions: ["kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey"],
    principals: [new iam.ServicePrincipal("service.amazonaws.com")],
    resources: ["*"],
  })
);

2. IAM ロールとポリシー

次に、Bedrock の Prompt Flows を実行するためのロールとポリシーを作成します。

const executionPolicy = new iam.Policy(this, "ExecutionPolicyResource", {
  document: iam.PolicyDocument.fromJson({
    Version: "2012-10-17",
    Statement: [
      {
        Action: ["kms:Decrypt"],
        Effect: "Allow",
        Resource: [kmsKey.keyArn],
      },
      {
        Action: ["bedrock:InvokeModel", "bedrock:GetPrompt", "bedrock:GetFlow"],
        Effect: "Allow",
        Resource: "*",
      },
    ],
  }),
});

const executionRole = new iam.Role(this, "ExecutionRoleResource", {
  assumedBy: new iam.ServicePrincipal("service.amazonaws.com"),
});
executionRole.attachInlinePolicy(executionPolicy);

3. Prompt ノードの作成

Prompt Flows で使用するプロンプトを作成します。

const prompt1 = new bedrock.CfnPrompt(this, "Prompt1Resource", {
  name: "Prompt1",
  customerEncryptionKeyArn: kmsKey.keyArn,
  variants: [
    {
      name: "DefaultVariant",
      modelId: "model-arn-example",
      templateType: "TEXT",
      inferenceConfiguration: {
        text: {
          maxTokens: 4096,
          temperature: 1.0,
          topP: 0.999,
          topK: 250,
        },
      },
      templateConfiguration: {
        text: {
          inputVariables: [{ name: "Variable1" }],
          text: `
            Template example: {{Variable1}}
          `,
        },
      },
    },
  ],
});

実際にアクセスしてみる

結果:Network Error の発生

Prompt Flows をデプロイし、実際にフローを実行しようとしたところ、以下のようなエラーが発生しました。

Network Error: Unable to reach the service endpoint.

エラーの原因は明確でないですが、推論時間を含めた待機時間が長いとprompt flows側で接続を切っている様でした。

まとめ

Amazon Bedrock の Prompt Flows を試してみた結果、エラー発生によりフローの実行は完了しませんでしたが、構築プロセスや機能の可能性を確認する良い機会となりました。

Prompt Flows の特長的なポイントとして、プロンプトのアウトプットを次のアウトプットに直接繋げることができる設計は非常に興味深いと感じました。

時間をおいてまた検証してみたいと思います。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?