こんにちは! カスタマーサクセス本部 CS4課 櫻庭です。 今回は、Bedrockフローについて紹介させて頂きます。
想定読者
- Bedrockフローを触ったことがない
- Bedrockフローを触ってみようとしたが、何ができるかよくわからない
Bedrockフローとは?
複数のプロセス(ノード)をビジュアル的に組み上げて、フローを作成することができます。 Bedrockエージェントでも、複数のタスクを実行させて最終的な結果を得る、ということは可能ですが、比較した際
- フローを可視化した状態で組み上げることができる
- 個人的な所感ですが、Bedrockエージェントに慣れている方でなければ、フローの方が取っつきやすいと思います
- プロセスの順序や分岐等を厳密に指定できる
- エージェントにも指示は出来るが、若干の不確実性が残る
ノードには様々な種類がありますが、ここでは「プロンプト」(Bedrockモデルへのプロンプトを入力し、生成された回答を出力するノード)について扱います。
フローの作成
「Amazon Bedrock > フロー > フローを作成」からフロービルダーを立ち上げることができます。

任意の名称を設定し、「フローを作成」します。

フロービルダー(以下のような画面)に遷移します。

基本的(※)には、「Flow input」ノードから始まり「Flow output」ノードで終わるフローを作成します。(※厳密には、「Flow input」以外からのインプット、「Flow output」以外へのアウトプットを行う分岐もあり得ます)
ノードは、画面左部の「ノード」タブから、任意の種類のノードをドラッグし、画面中央にドロップすることで配置できます。
ノードの設定
基本的なBedrockモデルの呼び出しプロセスを定義するには、「プロンプト」ノードを利用します。 メッセージの中にプレースホルダ({{topic}}のように、{{}}で括った部分)を記載することで、前のノードからの入力を受け付けることができます。


「モデルを選択」も必須項目ですので、任意のモデルを選択します。ここではClaude 3.7 Sonnetとしていますが、お好きなモデルを選択してください。(対象のモデルアクセスを有効化している必要があります。Add or remove access to Amazon Bedrock foundation models - Amazon Bedrock)

動作確認
画面中央上部の「保存」を押下することで、画面右側の「フローをテスト」で動作確認ができるようになります。
わざわざ説明するほどのことでは無いかもしれませんが、この例では以下のような動きをします。
- フローへの入力値が「Flow input」ノードのOutputとして渡って来て、「Prompt_1」ノードのInputとして渡される(例:「犬」)
- {{topic}} の部分に1の値が埋め込まれた(例:「Write a paragraph about 犬」)状態でBedrockモデルが呼び出される
- Output(modelCompletion)が「Flow output」ノードに渡され、フローからの出力となる(例:(生成された、犬に関する文章))
一つのインプットから複数のプロンプトを別々に処理し、後段のノードで統合するフロー
さて、もう少し発展的な構成とし、以下のようなフローを作成してみます。
1 . 入力として、任意の動物を想定します。
2-A . 入力された動物の、外見的特徴をモデルに説明させます。
2-B . 入力された動物の、内面的特性をモデルに説明させます。
3 . 2-A、2-Bの出力結果をまとめて、自然な文章を作文させます。
※「○○について、外見的特徴、内面的特性を踏まえて説明して」といった1つのプロンプトで完結させても十分な精度の回答が得られるレベルかと思いますので、この程度の構成であればメリットは薄いかもしれませんが、1つのプロンプトで処理させるテーマを絞ることで、精度向上を狙う意図があります。
上記に沿って、下記のように設定します。
2-A. 入力された動物の、外見的特徴をモデルに説明させます。

2-B. 入力された動物の、内面的特性をモデルに説明させます。

3 . 2-A、2-Bの出力結果をまとめて、自然な文章を作文させます。

テストしてみます。

結果が出力されました。各ノードのトレースも見てみます。

Prompt_2(入力トレース、出力トレース)

FlowInputNode(出力トレース)

Prompt_1(入力トレース、出力トレース)

Prompt_3(入力トレース)

Prompt_3(出力トレース)、FlowOutputNode(入力トレース)

各ノード毎のインプットとアウトプットが確認できますね。 トレースの表示順は、処理順とは限らないようです。(フローエディタ上も、タイムスタンプ上も、FlowInputNodeが最初のはずですが、Prompt_2が最初に表示されています)
このように、一つのインプットから複数のプロンプトを別々に処理し、後段のノードで統合する、といったこともできるので、アイデア次第で、「プロンプト」ノードだけでも色々なことができそうですね。
「プロンプト」以外のノード
加えて、ノードの種類は「プロンプト」以外にもさまざまなものがあります。 条件分岐させることもできますし、Bedrockエージェントやナレッジベース、Lambdaの呼び出し等を行うこともできます。
「プロンプト」以外のノードにももう少し詳しく触れておきたいところですが、今回はここまでとしたいと思います。
まとめ
いかがでしたでしょうか。 ごく一部の機能にしか触れませんでしたが、気になった方は是非触って見て下さい!
Yushi.Sakuraba(記事一覧)
アプリ出身クラウドエンジニア(絶賛奮闘中)