Difyのワークフロー用node---Templateの使い方01
はじめに
今回は、Difyのnodeの一つであるtemplate(テンプレート)の便利な使い方の紹介があったので、それをメモしておきます。
アプリ開発において同じ処理内容等が繰り返し出てくる時に、一つの変数にその共通の内容をいれておいて適宜引用できるようにする、という方法と、複数の出力をマージして出力するという方法の2つです。
一見異なるこれらの処理が、同じtemplateというnodeで実現できます。
Dify関連の記事
最近、DifyをローカルでMacbookAirに設定しました。
早速AIアプリとして、DifyのChatFlowのいくつかの基本nodeを使って、複数のLLMから選んで質問できるチャットボットを作ってみました。
その結果をメモとして記事にしました。
今回のメモの内容
今回は、その関連でnodeの使い方のメモで、ワークフロー用のnodeのひとつであるTemplateの使い方についてです。
実は、このTemplateの使い方がよく分からず説明を読んでもピンと来なかったのですが、これを説明していたYouTube動画があったので、そこで紹介されていた使い方2点を実際に試してみた、ということです。
これは、上記の02でもご紹介した、下記のいしださんのYouTube動画にあります。覚えておくと今後結構便利そうだったので、使ってみました。
Templateの使い方
ここで紹介されているのは、2つの使い方です。
テンプレートの出力変数の値を後のnodeで引用する方法
前のnodeの複数の出力変数の値をマージ(結合)して、一つの出力変数にまとめる方法
2番目の方法は、DifyのHelpのTemplateの説明にも記載されています。こちらも、いしださんの実例動画をみて、やっと納得がいきました。
以下、それぞれについて具体的に使い方と設定の仕方をメモします。
今回は、まず、1に関してのメモです。
1. テンプレートの出力変数の値を後のnodeで引用する方法
これは、例えば、前回のチャットボットアプリの構成である下記のように、同じプロンプトが記載されたLLMが複数ある場合などに使えます。
これは、複数のLLMから一つを選んで動作させる、という内容です。
従って、LLMの種類は異なりますが、縦に並んだ各LLMには、同じシステムプロンプトを設定しています。
この例では、前回までの " 黒魔女ベラドンナ様の人生相談 " のフローからLLMが一つ増え、Claudeが追加されて6つのLLMが選択肢として並んでいます。
それぞれのLLM内のシステムプロンプトは、これらの例では全く同じです。Claudeの場合を示します。
この赤枠のプロンプトの内容を修正したい場合、現状だと、まず一つを修正して、コピーして他の5つにペーストする、という手順になります。
5つもあると結構手間です。一回ならまだしも、結構微修正があります。
何回もやってると、嫌になってきます。
そこで、このSystemプロンプトを変数に置き換え、その変数の値(プロンプトの内容)をTemplateを使って定義します。
この場合、このTemplateはサブルーチンのような役割をするわけです。
Templateの設定
Templateの初期設定の状態を示します。
はじめに初期値として入力変数名が一つ、赤枠で囲んだ { arg1 }、として自動的に定義されています。通常は、まず、この{ arg1 }の内容を右側の " 変数を設定 " で定義して使います。
しかしながら、今回の使い方では、上の設定のコードに定義した内容を出力変数の{output (String)}にインプットして、後の各nodeでその出力変数を引用する、という使い方をします。
従って、入力変数は、不要です。そこで、オレンジの丸で囲んだゴミ箱をクリックして消します。下図のようになります。
次にコードの部分にある{{ arg1}}を消して、先ほどのLLMにあったプロンプトをテキスト文で入れます。
なお、templateの名称を変更して、" システムプロンプト "にします。これがこのnodeの名称になります。
下図に結果を示します。
このテンプレート(システムプロンプト)の出力変数である{{output}}は
他から引用する場合は、{{・システムプロンプト/{x}output }}という表現となります。/ を入力すると選択肢に {{ }} 内のこれが登場します。
なお、冒頭の"・”には、テンプレートを示すアイコンが表示されます。
templateの設定は以上です。
他のnode(LLMなど)からの本templateの引用例
先ほどのLLM1-3 Claudeにテンプレートの出力変数を適用した場合は、次のようになります。赤枠が引用している変数です。
なお、このテンプレート(システムプロンプト)を導入したフローは、たとえば次のようになります。
赤枠で定義したテンプレート(システムプロンプト)の出力変数の値が、オレンジ枠の6つのLLM内で引用している変数にそれぞれ反映されます。
つまり、各LLMのシステムプロンプトの変更が、赤枠で囲んだtemplate(システムプロンプト)の内容を変えることで、一発で可能となります。
この方法は、色々のシーンで使えると思います。
改めて、いしださん、ありがとうございます。
ver.0.6.11について
なお、ここで用いているDifyは、ver.0.6.11です。一昨日、ローカルでバージョンアップしました。
Note
このバージョンから、フローの左上の水色のように、ノートが使えるようになりました。各nodeの説明などをいれることでドキュメント性が向上します。
Firecrawl
また、ver.0.6.11では、Firecrawlを使ったウェブスクレイピングが可能となりました。これについては、既に、いろんな方々が設定方法などをリリースしてくれてます。AIアプリ開発の可能性がまた広がったと思います。
ちなみに私の場合、昨日入手したFirecrawlのAPIでは、冒頭の " fc-…. "というのが抜けており、DIfyで使えなかったのですが、本日Firecrawlのダッシュボードをみたら、それがついてました???、よく分からないのですが、、、いずれにせよ、使えるようになったので、いずれ、試してみたいと思います。
これを使えるようになると、やっとAIアプリらしくなる気がします。Difyの特徴であるRAG活用の世界に突入です。
ClaudeのAPI
なお、先ほど引用したclaudeのモデルでは、claude-3-sonnetを使っています。実は、今話題のclaude-3.5-sonnetを使いたくて、新たにAPIの契約をしたのですが、現時点では、Dify側の選択のリストに出てきませんでした。
Difyのバージョンアップが必要なのかもしれません。待ち、ですかね。
ということで、次回は、今回の続きをメモしていきたいと思います。
Dify関連の次回予定
2.前のnodeの複数の出力変数の値を結合して、一つの出力変数にまとめる方法、、など、、