チャットフローを管理してみた【Dify部での学び①】アンバサダー佐藤広基
どうも、皆さんお久しぶりです!
KIRIKO.tech(株)代表の佐藤です!!
この度、Dify部Aチームのアンバサダーとして運営、サポート等をさせていただくことになりました。
早いもので、始動して3週目突入ということで、その時に学んだことを僕自身、そして皆さんに少しでもアウトプットできればと記録と学びを兼ねてこの度noteを書かせていただきます。
Dify部とは
そもそも、Dify部とはなんぞやと思われている方もいると思うので、簡単に説明します!
「Dify×ユースケース」をコンセプトに、様々な業界・職種ごとの生成AIのユースケースを爆速で開発していくコミュニティ。
Difyの情報共有やコミュニティー内の交流、現場レベルでのワークフローの追求を通じてDifyを存分に学びつくせる環境を提供!
ようは、AIって確かにすげぇってなってるけど
現場レベルでは使えないよね?いやそんなことないよ!ならその現場レベルのワークフローを共有してDify盛り上げて行こうぜ!って会です。
Dify部勉強会では
ただやみくもに作るのではなく、自身が困っていることや現状の問題(痛み)を明確にし、解決に向けてのDifyを活用する
それが、Dify部の本意になります!!
こちらDify部アンバサダーいわさわさんのワークフロー
こんな感じに「補助金」の情報取集からデータ転機までを一発でやっちゃうというまさに現場で使えるをモットーに運営しているコミュニティとなります!
パワフルですねぇ、まさに実用的!!
週一でワークフローを作成&発表
現在Dify部は大きく4チームにわかれており(今後拡大予定)、曜日ごとにそれぞれの担当が作成したワークフローを発表していくという流れになっています。
参加者はDifyをあまりさわったことのない初心者から、実際の業務で使用している方まで様々。
ええぇ、いきなり発表なんて出来ないよ…なんて方、心配しないでください。
そのためにアンバサダーとして僕らがいますし、今やチーム内外問わずフォローし合える環境が整いつつあります。
わからないことがあれば、その場で質問し、自分の理想のワークフローを作成するそんな場です。
僕の事例を紹介
こちら先ほどの自身が困っていることや現状の問題(痛み)の例でいうと
誰の
漫画blogの運営者が
何の課題を
今まではGPTsを基本として使っていたが、存在しない登場人物や勝手なストーリーなどの同じ内容をループとプロンプトの制御に課題
GPTsで制作をしていたが文字数制限があり、長文を出力ができない
漫画のブログ記事を書く際にリサーチやライティングに時間がかかっていた
どのように解消をするか?
ワークフローで文章作成の工程を細かくLLMに渡すことで出力を安定させる
ワークフローの工程を工夫し文字数の制限を解消する
といったようなゴールを設定して作成しました
ちなみに、こちらのワークフローDify初学者の方には、その複雑性ゆえDify部でやっていけるかしら?大丈夫かしら?という恐怖心を与えてしまった気がするので諸々と反省です…
それでも今も僕の担当するAチームの皆さんは、とても学び深く熱心に毎週ご参加くださり嬉しい限りです!
本当にありがとうございます!
さて、それでは前置きが長くなりましたが、早速今回の学びのアウトプット、チャットフローについて書いていきます。
チャットフローを管理してみる
今回、この記事を書こうと思ったのは、Dify部のいしださんさんが
「アンケートの結果を元に次のアクションを考えるチャットフロー」というどえらいワークフローを発表してくれました。
ありがとうございます!
ちなみに、石田さんは
といったようにDifyをとてもわかりやすくYoutubeで解説してくれているのでぜひ、この動画で学習してみてください!僕も観てます!!
話を戻すと、そのどえらいワークフローの中にチャットフローの動作があるんですが、この部分が少しクセありです。
実際Dify部勉強会の場でも!!?ってなってる方多かったと思います。
だた、フロー自体はとても強力なので僕自身でアレンジを加え、少し簡単な例を作成してみました。
以下、Dify部会員の皆さんはアーカイブ動画やDSLファイルを参考に復習も兼ねてくださると幸いです!
また、Dify部入会を考えている方はこんなことやってるんだ~って雰囲気だけでも感じてください~そしてぜひご一緒に!!
はじまり
さて、こちらワークフローの切り取りなんですが、
橙色がいしださん
が自分です
僕はこの「スマート」の部分をもう少しシンプルなブロック、わかりやすさを求めたいのかな?と解釈し、このようなお返事をしたのですが、いしださん的にはもっとブロック数を減らして単純化したいという意味でした🙇
結果の出力は同じとしても、その過程は様々でこの辺りは、好みになります。
1つのノードにまとめる情報量を多くするか、少なくしてブロックを増やすかはご自身に合ったやりやすい方を選んで下さい。
ただ、今のところDifyのブロック数の上限は50なのでそれ以上は作れないので注意が必要です。
さて
この会話からならば、環境変数を使わずに、STATUS という「コードブロック」 を作って会話ステータスの全状態を定数化してみよう!
と思ったわけです。
ようは、ちょっとシンプルにチャットフローを作ってみようと。
それでは、早速つくっていきます。
チャットフローの状態管理
もちろん作成する上でノード数に余裕があるので、引数には何も受け取らずにreturnだけを行うコードブロックを作成します。
今回の例では3つの会話進行状況があると仮定します。
setup: 0)初期状態
analyzed: 1)データ解析済状態
completed: 2)処理完了状態
前述の通り setup, analyzed, completed の3つを返すだけのmain関数で書き換えます。
こうすることのちょっとしたメリットとして、 IF/ELSE の Variable 設定時に Status/ のような表記になるのため設定を間違えにくくなります
変数代入時も同様です。
すると、プレビューでは会話ごとに別々の分岐が実行されていきます。
今回はループさせてます。
実際のフローでこれらを使用する場合には IF/ELSE と 変数代入 の間にそれぞれの分岐で必要な処理を書いていきましょう
メール作成の事例
やばい、わからん。。。
なんとなく、雰囲気は理解・・・な方もいると思うので、もう少し具体例を出してみます!
このチャットフロー出来ると何がいいかというと
間にLLMを挟めば
メールの下書き→送信前チェック→問題なければ送信
という動きがそれぞれできます。
この辺りも全部AIに判断させてもよいですが、よく聞く「最後は人の目」の部分をDifyで可視化できたって部分が大きいかなと。
全体像はこんな感じ
気を付けて欲しい点は、間に変数代入を挟まないとメールの下書きを保存しないので、もう一回送れって言ってきます。
つまりは、ずっと下書きを送ってこいっ!て言い続けるbotとなるんです、こいつやばい・・・
理由としては、メモリを使わないので会話を毎回忘れてしまうからです。
なので対策としては、LLMのメモリ機能を使うか、このように
変数代入を使い保存させておくとよいでしょう
これでいうと保存させるフローとしてが下書きがDraft、送信手前の本書保存がarticleとなります。
メールの下書き→送信前チェック→問題なければ送信
までのフローをこちらの確認をとりながら、作成してくれるようになりました!
繰り返しになりますが、実際の実務で使う場合は、IF/ELSE と 変数代入 の間にそれぞれの分岐で必要な処理を書いていくとかなり実用的なワークフローが出来ると思います。
また、このように最近実装されたボタン機能も作るとお洒落というか、それこそまさにアプリになっちゃいます!
ぜひ、みなさんもチャットフロー試してみてはいかがでしょうか。
結びのおむすび
こんな感じでDify部では、実際のワークフローの作成から発表、フィードバックまでやってます!
やる気さえあれば、Dify全くしらない、プログラミングやAI全然~って方も自分が欲しい、実務に使えるワークフロー作成できると思うのでぜひ新入部員の方々お待ちしてます!!
Dify部参加はこちらからどぞ!
※LINEに登録いただき「dify1」と入力するとDify部への案内が出ます!(無料で参加可能)
それでは、皆さんよい生成AIライフをお送りください!!