以下の内容はhttps://blog.nocodelab.jp/entry/dify-workflowより取得しました。


生成AIを活用!Difyのワークフローの特徴とアプリ作成方法

こんにちは!生成AIを活用してWebアプリを簡単に開発できる「Dify」のワークフロー(β版)についてご紹介します。

Difyは、ノーコードで生成AIを活用したチャットボットや自動化アプリを簡単に開発できるプラットフォームです。 Difyのワークフローは、直感的に操作できるインターフェースを提供しており、ユーザーは簡単にノード(各ステップ)を繋げて処理の流れを設計できます。この方法により、複雑な業務の自動化がシンプルに実現できます。 本記事では、Difyのワークフローの特徴や基本的な使い方について解説します。最後までぜひご覧ください!

dify.ai

Difyについて詳しくはこちらの過去記事でも紹介していますので、ぜひ参考にしてください。 blog.nocodelab.jp

1. Dify概要復習

1.1 Dify概要

Difyは、プログラミング知識がなくても生成AIを活用したアプリやチャットボットを簡単に開発できるノーコードプラットフォームです。GPTやClaude、Llama2など多様なAIモデルに対応し、ニーズに応じて選択可能です。通常の大がかりな開発作業を省略し、クラウド環境でスムーズにアプリを作成・公開できます。さらに、オープンソースとして提供されており、自社サーバーやクラウドでのホスティングによりデータ制御やプライバシー保護が可能で、企業内利用にも適しています。

dify.ai

1.2 開発できるアプリの種類

Difyでは、次の4種類のアプリを開発できます。

  • チャットボット:ユーザーとチャット形式で対話し、質問応答や情報提供に適したアプリ。
  • テキストジェネレーター:プロンプトをもとにテキストを生成し、ストーリー作成や要約、翻訳などに利用可能なアプリ。
  • エージェント:プロンプトに応じて柔軟な動作を行い、外部ツールやデータベースと連携して複雑なタスクを処理するアプリ。
  • ワークフロー(β版):複数のステップにまたがるタスクを自動化し、定期的なルーティンタスクや手順化された操作を効率的に実行するアプリ。

本記事では、特にワークフローについて詳しく解説します。

ワークフロー以外のアプリについては、以下の記事をご覧ください。 blog.nocodelab.jp

2. Difyのワークフローとは?

2.1 ワークフローの定義

ワークフローとは、特定の目標を達成するために、複数のタスクや処理を順番に実行するプロセスのことです。各タスク(またはステップ)は、次のタスクに必要なデータや結果を渡しながら進行し、全体として効率的に業務を自動化・最適化します。ワークフローは、複雑な作業を簡潔に整理し、手順に沿って一貫して実行することを可能にします。

2.2 Difyワークフローの特徴

Difyのワークフローでは、タスクを小さな「ノード」に分け、それらを順番に繋げていきます。各ノードは個別の処理を担当し、前のノードの結果を次のノードに渡すことで、複雑なプロセスを効率的に進めます。各ノードは特定の役割があり、適切に組み合わせることで、効率的かつ柔軟なワークフローを構築できます。

ノード同士でデータを受け渡したり、複雑な処理をする際に変数を使います。変数をうまく使うことで、ワークフロー全体を柔軟に設計し、効率を高められます。たとえば、入力されたデータを一時的に保存して次の処理に渡すといった場面で活躍します。

画像は、Difyでテンプレートとして提供されている「Book Translation」アプリです。 docs.dify.ai

これらの要素を組み合わせて、

  • カスタマーサービス
  • コンテンツ生成(ブログ記事、製品説明、マーケティング資料等)
  • タスク自動化
  • データ分析とレポート
  • メール自動化処理

など、さまざまな用途に対応した柔軟な自動化システムを作成できます。

2.3. チャットフローとワークフローの違い

Difyワークフローには「チャットフロー」と「ワークフロー」の2種類があります。

チャットフロー

対話型シナリオに向いており、カスタマーサービス、セマンティック検索、その他の応答を構築する際に多段階のロジックが必要な対話式アプリケーションに適しています。

特徴

  • 作成した直後に、「開始」「LLM」「回答」の3つのノードでフローが設定された状態
  • 回答ノードはチャットフロー用で、テキスト内容をストリーミング出力するために使用され、プロセスの中間ステップでも出力をサポートします。
  • 開始ノードに内蔵されている変数には、sys.querysys.filessys.conversation_idsys.user_idが含まれます。
  • チャットメモリが内蔵されており、複数回の対話の履歴メッセージを保存および伝達するために使用されます。これはLLMや問題分類などのノードで有効にすることができます。

ワークフロー

自動化およびバッチ処理のシナリオに向いており、高品質な翻訳、データ分析、コンテンツ生成、電子メール自動化などのアプリケーションに適しています。

特徴

  • 作成した直後は、「開始」が設定された状態。様々な機能を持つノードをつなぐことによって、連続した操作を実行します。
  • 開始時に実行変数を定義する必要があり、これはプロセスの中で複雑な処理ロジックを実現するために使用します。
  • 終了ノードはプロセス終了時にのみ選択可能なノードです。
  • ワークフローにはメモリ関連の設定がなく、有効にできません。

チャットフローは直感的な操作で対話型アプリを簡単に構築でき、ワークフローは複雑なタスクを柔軟かつ効率的に処理するのに適しています。それぞれの特徴を生かすことで、用途に応じた効果的なシステムを実現できる点が魅力です。

3. 各ノードについての紹介

ここでは、各ノードの役割について紹介します。

3.1 開始

Difyワークフローの最初のステップとなるノードです。ワークフローが開始されると、このノードから処理が進行します。

設定ページには、以下の2つの設定項目があります。

  • 入力フィールド:ユーザーが入力できるフィールドを設定します。これにより、ワークフローが開始された際にユーザーからの入力を受け取ることができます。
  • システム変数:アプリ内で事前に設定されたシステムレベルのパラメータです(sys.から始まる変数)。これらの変数は、ワークフロー内の他のノードから参照でき、アプリの動作に必要な情報を提供します。

3.2 LLM

入力されたテキストに基づいて、Difyに設定されたAI(例:GPT-3やGPT-4など)が情報を生成したり、質問に答えたり、要約を作成したりします。

プロンプト設定: 「SYSTEM」フィールドにプロンプトを記入し、入力されたデータに基づいてカスタマイズした出力を生成します。このプロンプトを使用して、生成される内容を制御できます。

3.3 知識取得

AIが持っていない外部情報を取得するための仕組みです。登録した「ナレッジ」を基に検索し、データベースやリアルタイム情報を取得して結果を返します。

よくある質問(FAQ)とその回答を事前にまとめておき、ユーザーが質問をすると自動で適切な回答を返すことができます。

3.4 終了

ワークフローの終点を示すノードで、最終的な出力内容を定義します。このブロックは、ワークフローの結果をユーザーに返す際に使用されます。

処理結果をユーザーに表示する、または次のシステムに渡す役割を担います。ユーザーに対しては、最終的な回答や結果を表示します。

3.5 質問分類器

ユーザーからの質問を分析し、予め設定したカテゴリに分類するブロックです。これにより、適切な回答や処理を自動で選択することができます。 例えば、ユーザーから「天気はどうですか?」という質問があった場合、このノードは質問を「天気」に関するものと分類し、天気予報に関連した情報を返す処理を行います。

3.6 IF/ELSE

条件に基づいて処理を分岐させるノードです。IF条件が真である場合に実行する処理と、偽である場合に実行する処理を設定できます。 例えば、ユーザーからの入力値が「10」以上の場合に「合格」と表示し、それ以下の場合には「不合格」と表示する処理を作成することができます。

3.7 イテレーション

配列データ(リスト)内の各要素に対して、同一の処理を順次適用するための機能です。これにより、複数のデータ項目に対して効率的に同じ操作を実行できます。手動で行っていた繰り返し作業を自動化し、時間を節約できます。

3.8 コード

標準のノード以外にも、カスタムコードを追加することができます。このノードを使うことで、特定の処理をより細かく制御したり、外部APIを呼び出すなどの高度な操作を行うことが可能です。例えば、ユーザーから入力された数値を特定の式で計算する処理や、外部API(天気予報サービスなど)を呼び出して、その結果をワークフローで使用する場合に使用されます。

3.9 テンプレート

特定のフォーマットに基づいたデータやメッセージを動的に生成できます。これにより、定型的な情報を簡単に作成し、反復的な作業を減らすことができます。サポートチーム向けの自動返信メッセージや、カスタマイズされた通知メッセージなどに活用できます。

3.10 変数集約器

変数集約器ノードは、複数の変数をまとめて集約し、1つの統合された出力を生成するためのノードです。このノードを使用することで、異なるソースから得られた複数のデータを1つにまとめることができます。このノードを活用することで、複雑なワークフローでもデータの一貫性と整理整頓が可能になります。 例えば、ユーザーの名前、住所、電話番号などの個別の情報をまとめて1つのユーザー情報として表示する場合に使用します。

3.11 テキスト抽出ツール

LLM(大規模言語モデル)は文書の内容を直接読み取ることができないので、ユーザーがアップロードした文書を”テキスト抽出ツールノード”を介して解析し、文書ファイルの情報を読み取り、テキストに変換して内容をLLMに送信します。ユーザーがアップロードしたファイルの内容を分析およびチェックすることに活用できます。

3.12 変数代入

変数代入ノードは、特定の値を変数に保存するためのツールです。これにより、後続のステップでその値を再利用できます。

現在サポートされている可書き入れの変数は

  • 会話変数

使用方法:このノードを使用することで、ワークフローの中で変数の値を会話変数に一時的に保存し、後続の会話でその値を参照することができます。これにより、処理フローを変更したり、適切な返答を行うことが可能です。

3.13 パラメーター抽出

概要 パラメーター抽出ノードは、テキストデータやAPIレスポンスなどから特定の情報を抽出するためのノードです。これにより、必要なデータをワークフロー内で活用するために整形できます。

3.14 HTTPリクエスト

HTTPリクエストノードは、外部APIやサービスと安全に通信するために使用されます。GETやPOSTメソッドを利用してデータを送信したり、取得したりできます。リクエストに必要なパラメータを設定し、レスポンスを処理することで、外部システムとの連携を実現します。

3.15 ツール

Difyのワークフローに外部ツールを組み合わせるノードです。 外部ツールを組み合わせることで、AIアプリケーションの機能を拡張できます。例えば、Google検索ツールを使うことでリアルタイムの情報を取得したり、翻訳ツールを活用して多言語対応のアシスタントを作成することができます。また、画像生成ツールを使って、ユーザー入力に基づく画像生成を行い、視覚的なコンテンツを提供することが可能です。

認証が必要なものに関しては、ツールを選択した後に設定します。 GoogleSearchを使用する場合、「承認するには」のボタンを押す。

「SerpApi API key」の部分にAPIキーを入力し保存します。 「取得方法」をクリックして、APIキーの確認をします。

4. アプリ作成手順

それでは、Difyでワークフローを開発してみましょう!今回は、歴史上の出来事や人物を入力すると、その概要説明と確認用のクイズを出力する「歴史学習アプリ」を作成します。

このアプリは、WikipediaSearchで情報を検索し、その検索結果をLLMで処理して要約やクイズを生成する仕組みです。こうした処理の連携には、データの受け渡しや条件分岐が柔軟に設計できるワークフロータイプが最適です。

4.1 ワークフロー作成

まずは、スタジオ画面の「最初から作成」を選択します。

「ワークフロー」を選び、「アプリのアイコンと名前」や「説明」を入力し、「作成する」をクリックします。

アプリが作成されました。「開始」をクリックし、右側に表示される設定画面の「入力フィールド」で「+」を押します。

「入力フィールドを追加」画面が表示されるので、「フィールドタイプ」の選択、「変数名」「ラベル名」「最大長」を入力し、「保存」を押します。

今回は「短文」で作成します。

「フィールドタイプ」は、何を入力するかによって設定することができます。

  • 短文:短いテキストで、ユーザーが自分で内容を入力します。最大文字数は256文字。
  • 段落:長いテキストで、ユーザーが自分で内容を入力します。
  • 選択:固定された選択肢で、ユーザーは設定された選択肢の中からのみ選ぶことができます。
  • 数値:数字のみ入力可能。
  • 単一ファイル:ユーザーが単独でファイルをアップロードできる機能で、サポートされるファイルタイプは文書、画像、音声、動画、その他のファイルです。
  • ファイルリスト:ユーザーが複数のファイルを一括でアップロードできる機能で、サポートされるファイルタイプは文書、画像、音声、動画、その他のファイルです。

次に「開始」の横の「+」を押して、ブロックの項目が表示されるので、「ツール」を選びます。 今回はWikipediaSearchを使用して情報を取得するので、「WikipediaSearch」を探して設定します。

追加された「WikipediaSearch」をクリックして、設定画面を表示します。

「入力変数」の「Query String」のテキストボックスに「/」を入力すると、変数が表示されます。 「開始」で作成した変数「topic」を設定します。

「Language」には日本語の言語コード「ja」を設定します。

次にブロック項目から、「LLM」を追加します。

「モデル」は今回はGPT-4を使いました。

「コンテキスト」にはWikipediaSearchの出力変数「text」を設定します。

「SYSTEM」の項目には、 「{」を入力し表示される項目から「コンテキスト」を選択します。

その後に続いて下記のようなプロンプトを入力しました。

{コンテキスト}の内容から、以下の条件で出力してください。
1. 出力内容は、教育目的に基づき、学校のテストや学習において重要視される内容を優先してください。 
2. 必須情報は次の通りです:
・ 人物の場合:その人物の具体的な功績、歴史的意義、関わった重要な出来事。 
・出来事の場合:その背景、具体的な経過、結果、および影響。 
3. 次の情報は出力しないでください: 
・現代の文化的解釈(小説、映画、ドラマなど)や副次的な情報(逸話や非歴史的な影響)。 
4. 出力形式:
・最初に、テーマに関連する重要事項を要約してください。 
・その後、学習内容を確認するためのクイズを3問生成してください。

出力形式:
要約:
クイズモード:
問題1:
問題2:
問題3:
答え:
答え1:
答え2:
答え3:

「終了」のブロックを「+」より追加し、出力変数にLLMの「text」を設定します。

以上で設定は終わりです。 とても直感的にワークフローが簡単に設定することができました。

4.2 テスト実行とプレビュー

それでは、ここまで設定した内容をテストしてみます。 「実行」を押して表示されたTest Runで調べたい内容を入力し、「実行を開始」をクリックします。今回は「坂本竜馬」と入力しました。

正常に終了すると、、「結果」「詳細」「トレース」が確認できます。

[結果]

指示通りに要約した内容とクイズの出題をしてくれています。

[詳細]

経過時間、トークンの合計も表示されています。 入力と出力内容も確認できます。

[トレース]

トレースは以下のように表示さています。

それぞれに、入力、出力内容を確認できます。

4.3 アプリの公開

テストで問題がなければ、右上の「公開」→「公開する」→「アプリで実行する」を選択します。

別画面で、アプリが表示されます。 テキストに調べたい内容を入力し、実行します。

これでアプリの公開までの手順は一通り完了です。URLを共有することでアプリを共有できます。

5. まとめ

Difyのワークフローを使ってみて、視覚的に処理を整理できる点がとても便利だと感じました。ノードやブロックを活用して、直感的に設定が進められるので、開発がスムーズに行えます。外部システムとの連携も簡単に実現でき、これによりAIアプリケーションの開発が大きく加速する可能性を感じます。柔軟性が高いため、さまざまな分野で活用できるツールなので、これからも期待したいです。




以上の内容はhttps://blog.nocodelab.jp/entry/dify-workflowより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14