DifyをAWS上に構築するワークショップをやってみた(4.ワークフローの開発編)

DifyをAWS上に構築するワークショップをやってみた(4.ワークフローの開発編)

Difyのワークフロー機能を触ってみた。 ※Dify × AWSワークショップの最終章です
Clock Icon2025.02.25

こんにちは、洲崎です。

生成 AI アプリケーションをノーコードで構築できるツールである Dify をAWS上に立ち上げるワークショップがあったのでやってみました。
ボリュームがあるので、4部に分けて紹介します。
今回が最終章です。
1部:Difyのデプロイ、初期設定、シンプルなチャットボットの構築
2部:RAG チャットボットの構築
3部:エージェントの開発
4部:ワークフローの開発 ←今回はこちら

実際に行うワークショップはこちらです。
https://catalog.us-east-1.prod.workshops.aws/workshops/95a3c231-2064-4a33-9a3d-624b7c11aaa6/ja-JP

ワークフローとは

Difyの特筆すべき機能の一つに、ワークフローがあります。
GUIベースのノーコード環境を活用し、ブロックを視覚的に接続するだけで複雑な処理を構築できます。
そのため、プログラミング経験が豊富でなくても、柔軟なワークフローを簡単に作成することが可能です。
スクリーンショット 0007-02-25 21.43.26

この内容はやり取りが開始した時に、以下の3パターンで分岐を行います。

  1. 社内システムやIT環境についての質問
  2. アカウントの申請
  3. その他

1点目の「社内システムやIT環境についての質問」の場合は、「社内文書」のナレッジを参照して、LLMが回答を作成します。
2点目の「アカウントの申請」の場合は、入力されたパラメーターをHTTPリクエストで外部にリクエストを飛ばし、リクエスト結果を返答します。
3点目の「その他」になった場合は、テンプレートの文章(今回は以下の内容)を返して終了します。

このように、GUIで処理の分岐やナレッジの呼び出し、外部との接続などをワークフローとして作成できるのが大きな特徴です。

やってみる

実際にワークフローを構築してみます。

上部にある「スタジオ」ボタンを押してアプリ画面に遷移し、「アプリを作成する」から「最初から作成」をクリックします。
スクリーンショット 0007-02-25 21.47.57

「ワークフロー」を選択し、アプリに任意の名前をつけ(今回は「社内問い合わせワークフロー」)、「作成する」をクリックします。
スクリーンショット 0007-02-25 21.50.42

そうすると、ワークフローの作成画面に遷移します。

1.RAGの開発

まずは、条件分岐からRAGのフローを作成します。

画像にある(1)の「開始」のブロックをクリックすると、右側に「開始」の設定を編集する画面が表示されます。
+ボタン(2)をクリックすると、「入力フィールドを追加」という設定画面がポップアップで表示されます。
設定項目は以下を入力します。

  • フィールドタイプ:段落を選択
  • 変数名:query
  • ラベル名:問い合わせ内容
  • 最大数:500(ユーザーの入力時数の上限を決めます)
  • 必須:オン

入力できたら、「保存」をクリックします。
スクリーンショット 0007-02-25 21.53.35

。開始のブロックにある+ボタンを押すと、次のブロックを選択することができます。
スクリーンショット 0006-11-08 17.39.44

「質問分類器」を選択します。
ユーザーからのテキストに対して、いずれかのクラスに分類します。
それに応じて処理フローを分岐させることができます。

以下のように入力します。

  • 入力変数:開始/query(入力欄でドロップダウンで選択可能です)
  • モデル:Claude 3 Haiku
  • クラス
    • 社内システムや IT 環境についての質問
    • アカウントの申請
    • その他

スクリーンショット 0006-11-08 17.45.23

クラス1の「社内システムやIT業務についての質問」から+マークを押して、「知識習得」を選択します。
スクリーンショット 0007-02-25 21.59.07

クエリ変数を「queryString」で設定します。
検索設定の横にある+ボタンを押して参照したいナレッジ(今回はワークショップでも作成した「社内文書」)をクリックします。
スクリーンショット 0006-11-08 18.06.04

知識習得から+で「LLM」をクリックします。
スクリーンショット 0007-02-25 22.01.04

LLM:モデル(今回はClaude 3 Haiku)を選択します。
コンテキストには知識習得/resultを選択します。(ドロップダウンで選択可能)
SYSTEMに以下のプロンプトを記載します。

ユーザーの入力に対して、 <context> 内の内容に基づいて回答してください。
<context>
{{#context#}}
</context>

USERの部分は/を入力すると、候補がでてくるので{x} queryをクリックします。
スクリーンショット 0006-11-08 18.11.11

LLMから+ボタンを押して「終了」を選択します。
スクリーンショット 0007-02-25 22.03.53

出力変数にoutputとresultを以下のように設定します。

  • output:LLM/textString
  • result:知識取得/result

スクリーンショット 0006-11-08 18.12.55

これで1つ目のフローである「RAGの開発」が完成です。

2.外部システムにリクエスト

次にアカウントの申請の場合です。
以下の流れのフローを作成していきます。

  • 入力した文字列からアカウント申請対象のシステム名とユーザー名を判定
  • 抽出したパラメーターを利用して外部システムにHTTPリクエストを送信
  • リクエスト結果をユーザーに返却

クラス2の「アカウントの申請」から+ボタンをクリックし、「パラメーター抽出」をクリックします。
スクリーンショット 0007-02-25 22.09.56

入力変数、モデル、指示(プロンプト)を以下の形で入力します。

  • 入力変数:開始/query(ドロップダウンで選択)
  • モデル:Claude 3 Haiku
  • 指示
ユーザーの入力から、アカウント申請の対象システム名 (system_name) と対象ユーザー名 (username) を抽出してください。

スクリーンショット 0006-11-08 18.14.12

「ツールからインポート」の+部分をクリックします。
スクリーンショット 0007-02-25 22.12.03

抽出パラメーターを2つ設定します。

username

  • 名前:username
  • タイプ:String
  • 説明
アカウント申請対象のユーザーのユーザー名。ユーザー名は半角英数字のみで構成される。
明確な人名に紐付くものであり、抽象的なユーザー名にはならない (NG例: admin)。
ユーザーの入力に含まれる文字列しか抽出してはならない。
  • 必須:オン
    スクリーンショット 0006-11-08 18.14.43

system_name

  • 名前:system_name
  • タイプ:String
  • 説明
アカウント申請対象のシステム名。以下のいずれかである
- "hr" : 人事システム
- "dev" : 開発環境
- "aws" : AWS アカウント"
  • 必須:オン

スクリーンショット 0007-02-25 22.13.52

パラメーター抽出の設定が、最終的に以下のようになっていることを確認します。
これで、LLMにユーザーのテキストに対する指示(プロンプト)を設定できます。
スクリーンショット 0006-11-08 18.16.13

「パラメーター抽出」の横にある+ボタンから、「HTTPリクエスト」を選択します。
スクリーンショット 0007-02-25 22.15.41

今回はダミーとして、example.comに対してのリクエストを実施する形で設定します。

  • API:GET / https://example.com/
  • パラメーター
    • username : パラメーター抽出/username
    • system_name : パラメーター抽出/system_name
      スクリーンショット 0006-11-08 18.17.37

「HTTP リクエスト」ノードの右端の「+」マークをクリックし、「終了」を選択します。
スクリーンショット 0007-02-25 22.18.43

「出力変数」の右の「+」ボタンをクリックし、出力する変数と、それに付与するラベルを設定します。

  • output:HTTPリクエスト/status_code(ドロップダウンで選択可能)
  • system_name:パラメーター抽出/system_name(ドロップダウンで選択可能)
  • username:パラメーター抽出/username(ドロップダウンで選択可能)

スクリーンショット 0006-11-08 18.18.33

これで2の「外部システムにリクエスト」も完了です。

3.その他、テンプレートの活用

「質問分類器」の「その他」クラスの横の「+」マークをクリックし、「テンプレート」を選択します。
スクリーンショット 0007-02-25 22.20.58

「テンプレート」では、埋め込みたい変数と出力したい内容を設定します。

  • 入力変数
    • query:開始/query
  • コード
申し訳ありませんが、現在このワークフローは以下にのみ対応しています。
- 社内システムやIT環境についての質問
- アカウントの申請

それ以外のお問い合わせは直接情報システム部にご連絡ください。

※頂いたお問い合わせ内容:
{{ query }}

スクリーンショット 0006-11-08 18.21.57

[テンプレート] ノードの右端の [+] マークをクリックし、 [終了] を選択します。
スクリーンショット 0007-02-25 22.23.22

[出力変数] の右の [+] ボタンをクリックし、出力する変数と、それに付与するラベルを設定します。

スクリーンショット 0006-11-08 18.24.29

これで、「その他」の設定も完了です。

最後に作成したワークフローは、忘れずに保存します。
編集画面右上の「公開する」をクリックし、「更新」をクリックします。
スクリーンショット 0006-11-08 18.24.45

テスト

画面上部右側の「実行」ボタンをクリックします。
「問い合わせ内容」の欄に以下のプロンプトを入力し、「実行を開始」 をクリックします。

有休休暇の申請方法

スクリーンショット 0006-11-08 18.25.50

すると、ユーザーの入力を元にワークフローが起動されます。
うまくいけば、分岐1で設定したフローに分岐します。
分岐1でナレッジを参照して有給休暇の申請方法について回答してくれます。
スクリーンショット 0006-11-08 18.26.04

次に、分岐2のフロー(HTTPリクエスト)を試してみます。

以下の内容を記載し、実行を開始をクリックします。

人事システムに tanaka のアカウントを作成してください。

スクリーンショット 0006-11-08 18.29.40

うまくいけば、分岐2のフローにで処理が実行されます。
詳細を確認すると、人事システム(hr)に、「tanaka」のユーザー名でのアカウント申請が行われていたことを確認できます。

スクリーンショット 0006-11-08 18.32.41

最後に、分岐3の例外処理のフローのテストを実行します。

以下の内容を入れて、実行を開始をクリックします。

明日の天気は?

すると、以下の形で、きちんと答えられないことの確認ができました。
スクリーンショット 0006-11-08 18.33.21

クリーンアップ

最後に、検証が終わったら費用が余分にかからないようにクリーンアップを行いましょう。
作成したDifyのアプリケーションは「DSLファイル」としてエクスポート・インポートが可能です。
対象のワークフローの3点リーダーのアイコンをクリックして、「DSLをエクスポート」を実行しましょう。
スクリーンショット 0007-02-25 23.00.49

環境の削除については、CloudFormationにスタックがあります。
AWSのマネジメントコンソールにログインし、CloudFormationを開き、「DifyWorkshop」を選択して削除を実行しましょう。
スクリーンショット 0007-02-25 23.03.18

最後に

今回のワークショップで、Difyのワークフロー機能を実際に体験することができました。
プログラミング言語を一切使用せずに、生成AIを活用したワークフローを構築することができました。

ワークショップはこれで終わりですが、Difyはアップデート機能などもありますので、適宜検証をしながら紹介しようと思います。

ではまた!新規事業統括部の洲崎でした。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.