はじめに
Japan AWS Ambassadors Advent Calendar 2024の5日目の記事です。
昨年の Advent Calendar 記事 から早1年! 今年は つい先日(11/22) GA となった、Bedrock Flows と Q Developer Agent の組み合わせで爆速プロトタイピングをしてみようと思います。
- 作成したもの
- Bedrock Flowsについて
- Q Developer Agentについて
- Step1. Bedrock Flowsで生成AI ワークフローの作成
- Step2. Webアプリケーションの作成
- Tips
- まとめ
作成したもの
下記のような構成/手の入れ具合です
- 生成AIパート は Bedrock Flows で ノーコード
RAG用に S3 + Opensearch Serverlessを利用、Guardrail有り - バックエンド (Flask) は 生成されたものを 少し編集
- フロントエンド (HTML/CSS/Javascript) ノータッチ
不慣れでも1時間程でできましたので、慣れてくると本当に爆速になりそうです!
※本記事中のプロンプトで作成したFlaskアプリ/フロントエンドについてはあくまでもとりあえず動くものであり、そのまま本番環境のワークロードで動作させる事には適しませんのでご注意ください。
Bedrock Flowsについて
re:Invent 2024の少しまえ、11/22にAmazon Bedrock FlowsがGAされました。
GAと同時に下記新機能が追加されました。
- ガードレールを利用した安全面の強化
- トレーサビリティの強化
構築したフローを視覚的に確認し、エラーのデバッグや、フロー内の最も時間のかかる部分の特定などを行う事ができる
Amazon Bedrock Flows が 2 つの新機能を追加して一般提供開始
https://aws.amazon.com/jp/about-aws/whats-new/2024/11/amazon-bedrock-flows-new-capabilities/
事前に作成したリソースは下記となります
- ガードレール
有害カテゴリFilter/ハルシネーションフィルタリング有効
機密情報フィルタとしてメールアドレスが入った場合には「質問に答えられない」を返却する - ナレッジベース
S3に文章ファイルを配置しベクトルDBとしてOpenSearch Serverlessを利用したRAG
費用
0.035 USD/1,000 ノード遷移あたり
https://aws.amazon.com/jp/bedrock/pricing/
※生成AIモデルの呼び出しは別途トークンで課金
Q Developer Agentについて
別記事を書こうと思っておりますので、簡単にまとめます。
- VSCode や IntelliJ に統合され利用できる生成AIソフトウェア開発エージェント
- これまでもあった機能
- /dev コード生成
- /transform アプリケーションが新しいRuntimeで動作するようにアップグレード
- re:Invent2024発表以降、下記新機能が利用できるようになった
- /doc ドキュメンテーション
- /test ユニットテスト作成 (Java/Python)
- /review レビュー (CVEベースの脆弱性検知・修正も)
Step1. Bedrock Flowsで生成AI ワークフローの作成
新規作成後の画面
新規フローを作成するとこのような画面となります。
Inputされた内容がそのままOutputに出る形ですね。
Promptsノードを追加し、モデルを選択
Promptsノードに生成AI問い合わせプロンプトを設定
プロンプトの中に {{input}}
と記載すると、丸ポチが現れ接続できるようになります。
メッセージを入れ動作確認する
ガードレールを設定
新機能として追加されたガードレール設定への対応
予め作成しておいた、機密情報フィルタにメールアドレスを追加したもの
ガードレールのテスト
新機能のトレーサビリティ強化を確認
各ノードの実行時間、入力・出力を確認できました。
複雑なフローになるほど威力を発揮しそうですね。
ナレッジベース問い合わせノードを追加
入力プロンプトに対して、RAG機能での問い合わせ結果も返却するようにしてみました。
Step2. Webアプリケーションの作成
Visual Studio Codeの Q 拡張にて下記のようなプロンプトを英訳した上で入力しました。
日本語でも受け付けてくれるのですが、生成結果がよろしくない事が多かったので、英訳してからにしています。
1 2 3 4 |
下記のようなPython Flask Webアプリケーションを作成して - Bedrock Flows を 呼び出す - 入力フォームは TextArea - ロボットのようなキャラクターが応答するように |
Visual Studio Code上での操作としては、新規フォルダを作成し開いただけの真っ新な状態です
が、残念ながら Bedrock Flowsを叩くコードになっていなかったので、下記を参考にしながら修正します。
Run Amazon Bedrock Flows code samples
https://docs.aws.amazon.com/bedrock/latest/userguide/flows-code-ex.html
せっかくなので新機能のドキュメント作成を /doc にて依頼
このドキュメントが素晴らしくて感動します。
プロジェクトによって項目が少なくなったり多くなったりしましたが、下記のような項目でした。
(項目を追加して欲しい場合は、Update existing README で具体的な指示を出すと良いです)
- プロジェクト概要
- ファイル構成
- 利用方法
- 設定方法について
- APIについて
- テストについて
- トラブルシューティングについて
- データフローについて
インストールドキュメント例
Dataflow例
動作確認
ここまで修正/追加した行数は30行ほどですが、無事動作しました。
アプリケーションは確かにオーダー通りになっています。
イメージと異なる場合にはさらに /dev チャット画面で指示を出すと改変してくれます、が時間がそのたびに掛かる事もあるので、ある程度の段階になったら、自前で修正した方が速そうです。
Tips
Bedrock Flows APIの呼び出し
Bedrock Flowsを叩く際の引数で必要な
flowIdentifier, flowAliasIdentifier について
サンプルをベースに少しだけ改変して下記のような形で応答を得ることができました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# Bedrock Flows Client client_runtime = boto3.client('bedrock-agent-runtime') flow_id = "XXXXX" flow_alias_id = "arn:aws:bedrock:ap-northeast-1:XXXXXX:flow/XXXXX/alias/XXXXX" def invoke_bedrock_flows(prompt): result = {} response = client_runtime.invoke_flow( flowIdentifier=flow_id, flowAliasIdentifier=flow_alias_id, inputs=[ { "content": { "document": prompt }, "nodeName": "FlowInputNode", "nodeOutputName": "document" } ] ) for event in response.get("responseStream"): result.update(event) if result['flowCompletionEvent']['completionReason'] == 'SUCCESS': print("Flow invocation was successful! The output of the &pf; is as follows:\n") print(result['flowOutputEvent']['content']['document']) else: print("The &pf; invocation completed because of the following reason:", result['flowCompletionEvent']['completionReason']) return result['flowOutputEvent']['content']['document'] |
Run Amazon Bedrock Flows code samples
https://docs.aws.amazon.com/bedrock/latest/userguide/flows-code-ex.html
Bedrock Flowsの参考動画
以下の動画では、最終的にプロンプトを(生成AI問い合わせ&条件ノードで判断)分類し、特定の問合せにはナレッジベースを参照した上で回答、それ以外は生成AIモデルから直接回答されるフローを構築するデモとなっています。
とても分かりやすい動画となっておりますので是非ご覧ください。
まとめ
昨年はPartyRockを触り今後の生成AIツールのノーコード/ローコード化が楽しみだなと思っていたのも束の間、様々なフレームワークや、Difyのようなツールも多数でてきました。
ユースケースに応じた最適な選定のため、引き続きアンテナを張っていこうと思います!