Bedrockの新機能「Prompt flows for Amazon Bedrock」

Bedrockに新機能「 **Prompt flows for Amazon Bedrock** 」が追加されました。🎉🎉🎉
現段階でプレビュー扱いで、東京リージョンでも使用できます。

https://docs.aws.amazon.com/bedrock/latest/userguide/flows.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/f1dcdbdb-b676-34f0-bce3-cc4b71f3b736.png)

:::note
同時に追加されたPrompt flows for Amazon Bedrockについてはこちら

Bedrockの新機能「Prompt management in Amazon Bedrock」
https://qiita.com/moritalous/items/afb6b8a4ff26a71cfdb8
:::

早速試してみました。

このような画面です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/91c74308-cee2-c90e-681f-7333e79865c6.png)

左側からNodeを選んで追加します。Bedrockの呼び出しを行うNodeはPrompts（またはAgents）です。
それぞれ、Prompt management in Amazon BedrockとAgents for Amazon Bedrockが呼び出せると思えば良いと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/ecca33d5-c54c-8467-8223-0f9c1b85e701.png)

Promptsでは、Prompt management in Amazon Bedrockで定義済みのプロンプトを選ぶ方法と、この画面で直接指定する方法が選択できます。
本日時点で、Prompt managementのものを選択すると、うまく接続できませんでしたので、直接指定で試します。

プロンプトの変数が自動で認識され、Nodeにも反映されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/670660ea-ecf8-8d46-fc49-7654db460a2d.png)

Nodeのアウトプットは型の定義ができます。形の定義をあわせないと保存時にエラーになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/f49cc6d5-9efc-5a7a-9256-2c27f406ac93.png)

フローの入力を以下の形式で定義した場合、受け取る側でどの値をセットするかを指定できます。（下記の例では、languageとcontentをそれぞれ受け取っています）

```
{
  "language": "english",
  "content": "ニューヨークで開催されているAWS Summitでは、Bedrockに関する様々な新機能が発表されています"
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/8946a996-c645-a0c7-98e2-b3109d62ef2c.png)

一旦フローが完成したので保存します。
このタイミングで、Bedrockの呼び出しなどの必要な権限がIAMロールに自動付与されます。（Step Functionsのロール作成のような動作ですが、自動で行われます）

保存後、テスト実行が可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/86df0f4e-d2a5-bc6d-d658-9a394a8a4ee8.png)

選択できるNodeを紹介します。

* Logic
    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/24fa6862-2a9a-802b-1fc4-a5198f7ef3ed.png)

* OrchestrationとCode
    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/0c7fe1b6-36c8-9b34-7efa-5926a7b01ad4.png)

* Data
    S3 RetrievalはS3に格納したオブジェクトの内容（テキストなど）の取得を行います。
    S3 StorageはテキストをS3のオブジェクトとして保存します。
    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/d5bd1b54-6517-f58c-6353-f06e856a0ec7.png)

* Ai Services
    現時点ではLexのみです。
    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/1a829878-8a18-8e7e-06f4-c117040a360b.png)

APIで呼び出したい場合は、「InvokeFlow」APIを使用します。

https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeFlow.html

Boto3は最新の1.34.143で対応済みです。

:::note
「bedrock-runtime」ではなく「bedrock-agent-runtime」です。
:::

```python
import boto3

client = boto3.client("bedrock-agent-runtime")

response = client.invoke_flow(
    flowIdentifier="9GPLBZE7SF",
    flowAliasIdentifier="TSTALIASID",
    inputs=[
        {
            "content": {
                "document": {
                    "language": "english",
                    "content": "ニューヨークで開催されているAWS Summitでは、Bedrockに関する様々な新機能が発表されています",
                },
            },
            "nodeName": "FlowInputNode",
            "nodeOutputName": "document",
        }
    ],
)

event_stream = response["responseStream"]
for event in event_stream:
    print(event)
```

```
{'flowOutputEvent': {'content': {'document': "Here's the English translation:\n\nVarious new features related to Bedrock are being announced at the AWS Summit being held in New York."}, 'nodeName': 'FlowOutputNode'}}
{'flowCompletionEvent': {'completionReason': 'SUCCESS'}}
```

見慣れない形式なのですが、取得できました。