![見出し画像](https://assets.st-note.com/production/uploads/images/143401821/rectangle_large_type_2_49de7b73bae561f17a894eaa0c8c9d32.png?width=800)
【最新アップデート対応】Difyワークフロー機能完全ガイド!【GAS Interpreterとの統合も】
話題になり始めてから大分時間も経ちましたが皆さんDifyを使っていますか?
Difyはアップデートも多く、またプログラミング経験が無いとイメージが湧きにくい機能もあり何ができるかキャッチアップが大変という方も多いと思います。
ということで今回はバージョン0.6.9のアップデートで追加された最新の機能も含め、ワークフロー機能について徹底的に解説していきます。
また、新機能のパラメーター抽出を使ってGAS Interpreterとの連携方法も解説します。
そもそもワークフロー機能とは?
ワークフロー機能とは、以下の写真のようにLLMを使った一連の処理を実装する機能です。
![](https://assets.st-note.com/img/1717697798306-fGjWVLymnN.png?width=800)
例えば
質問に答えて欲しい
さっと簡潔なプログラムを書いてほしい
画像の内容を解析して文字起こししてほしい
膨大なコードを理解して機能を追加してほしい
等のように用途によって処理の流れやプロンプトやAIモデルまで変更して、どれが適しているかの判断が必要な場合もワークフロー機能を使うことでAIに判断を任せることもできますし、それぞれの一連の処理をまとめて実行してもらうことができるようになります。
ワークフローとチャットフローの違いとは?
![](https://assets.st-note.com/img/1717697798950-GFHzKtI1Kh.png?width=800)
![](https://assets.st-note.com/img/1717770411140-Ceu0vbkQ9y.png?width=800)
実はChatflotとWorkflowで使えるツールとブロック自体にほとんど違いはありません。
では何が違うのかというとChatflowはチャットで使う前提なので、チャットの入力が必須になるなどチャット前提の機能があります。
逆にworkflowの場合は特に入力が無くても起動させることができます。
つまり固定の一連の処理を実行させることも可能です。
0.6.9のアップデートで、このワークフローを別のフローに追加することが出来るようになりました。
今回はそちらの設定方法も解説していきます。
また、次の章で解説するLLMのメモリ機能(会話履歴を保持する機能)などいくつかの機能はLLM関連の機能はチャットフローのみ使えるようになっています。
各ブロックについて
それでは、まずそれぞれのブロックについて解説していきます。
1.LLM
![](https://assets.st-note.com/img/1717697801907-QqQI8pz8WJ.png)
LLMブロックはこのような設定画面となります。
![](https://assets.st-note.com/img/1717697804315-BseBf1I6kw.png)
モデル:AIモデルを選択できます
コンテキスト:AIに与えるコンテキストを設定できます。
![](https://assets.st-note.com/img/1717697800222-gTmA3OQbHJ.png)
systemやuserの部分に/を入力して設定する必要があります。
メモリ:チャットフロー限定。会話履歴をウィンドウサイズ分だけ保持してくれます。
ビジョン:ビジョン機能があるモデルのみビジョン機能を有効にできます。解像度も指定することができます。
![](https://assets.st-note.com/img/1717697798380-JfITjRAueP.png)
2.知識取得
ナレッジに追加した文書ファイルなどを検索・読み取りすることができます。
![](https://assets.st-note.com/img/1717697798900-oB90skYxm7.png)
検索方法にはN-to-1 リトリーバルとマルチパスリトリーバルの2種類があります。
![](https://assets.st-note.com/img/1717697800750-wiOMbW6NC9.png)
具体的に、以下のように複数のナレッジベースを与える場合でお話ししていきます。
![](https://assets.st-note.com/img/1717697800301-87sQ86JJhk.png)
まず、N-to-1の場合はどちらが適しているナレッジベースかAIが判断して、その中から文書を検索してくれます。
例えば、「今月の経費の合計は?」という質問に対して営業部門のベースと経理部門のベースどっちが適しているかAIが判断して適していると判断したベース内から文書を検索してくれます。
逆に、マルチパスの場合は一度全てのベースから質問文に対して近い文書を検索し、再ランクモデル(rerankingモデル)を使って文書に順位付けを行います。
![](https://assets.st-note.com/img/1717697809040-IJy8UA82L4.png)
例えば、「今月の○○さんの売り上げは?」といった質問の場合営業ベースでは○○さんや他の人の売上関係の文書などが検索され、経理ベースでも売り上げなどの文書を検索してきます。
その後、再ランクモデルが質問と文書を比べてどの文書が適切かどうか順位付けを行い、トップKとスコア閾値に応じて結果を返します。
トップKは返す文書数、スコア閾値は質問文と文書の似てる度合の数値が閾値以下の場合は切り捨てるといったパラメータです。
3.回答
![](https://assets.st-note.com/img/1717697801620-JMbLukLGnO.png)
これはチャットフロー独自のブロックです。
実はこの回答のブロックの後にも処理を行うことが出来るので、例えば検索などの処理の最中に
「検索中です…」
などチャット上に現在何を行っているか、また検索結果の情報の表示など様々な情報をチャットに出力できます。
4.終了
これはワークフロー独自のブロックです。
文字通りワークフローを終了させて出力する情報を扱います。
![](https://assets.st-note.com/img/1717697799585-RF9K0sablY.png)
このように、出力する変数名と変数内に格納する情報を設定することができます。
この情報はチャットフローやワークフローからワークフローを使うときにどんな情報が出てくるのかを把握するために重要なので、しっかりと適した変数名を設定すると後々利用する際に使いやすくなります。
5.質問分類器
質問分類器は、入力された変数の内容と分類先に基づいて、次の処理の分岐を判断してくれるブロックです。
![](https://assets.st-note.com/img/1717697804300-CLnN6DSmrQ.png?width=800)
例えば以下の写真のようにユーザーからの入力を営業についての質問か、経理についての質問かAIモデルに分類してもらい、それぞれのナレッジベースやモデル・プロンプトに特化した処理に進めることができます。
![](https://assets.st-note.com/img/1717697802817-VcFqkTBrkz.png)
また、分類先を3つ以上に追加したりプロンプトを入れてルールを設定することもできます。
![](https://assets.st-note.com/img/1717697800472-Nazxy9iBuz.png)
6.IF/ELSE
IF/ELSEブロックはAIではなくルールベースで条件分岐させることができます。
![](https://assets.st-note.com/img/1717697799322-FYO4zrFp7y.png)
以下の画像のように、文章に単語を含んでいるか・最初に○○で始まるか・計算結果=1であるかorないかなどのように、条件によってIFの方に処理を進めるかELSEの方に処理を進めるか判断させることができます。
![](https://assets.st-note.com/img/1717697803880-3mWzBJ7y4v.png)
よくある使い方としては、ツールからAPI連携をした場合に処理が上手くいったかを表すステータスコードが200(成功)であれば処理を継続、その他(失敗)であればエラーの内容を出力などがあげられます。