どうも、やまぐちです。
今回はHuman in the loop的に情報収集ができるようにDifyのChatFlowで工夫してみました。
情報検索を満足いくまで行ってからまとめるとかをDifyでもしたいですよね...?
今回はそれができるDifyのChatFlowを作成してみました。
以下のような感じで情報集めができます。
全体像
まず全体像です。
検索フェーズとまとめフェーズに分かれています。
検索で満足いく内容が出てきたら、まとめフェーズに移ってまとめてもらいます!
基本Difyではフェーズ分けが苦手なのですが、チャット内容にワードを検知してフェーズ分けしています。
今回は「検索」から始まるか、「まとめ」から始まるかで分岐しています。
質問分類器でやってもいいのですが、割と間違えることもあるのでロジックで制御したかったのです。
開始ノード
まず最初に情報収集したい内容をThemeに入れ、どれだけ深掘りするかの内容をlimitに入れます。
limitの説明は検索フェーズの説明で行います。
分岐ノード
チャット内容にワードを検知してフェーズ分けしています。
今回は「検索」から始まるか、「まとめ」から始まるかで分岐しています。
検索フェーズ
フェーズ概要
検索フェーズでは基本最初に入力したThemeの内容を検索して深掘りしていくフェーズです。
深掘りのしたかはマルチクエリリトリーバーを参考にしています。
最初に入力するlimitの数だけ質問を拡張させ、その内容をWeb検索用に最適化しTavilyで検索していきます。
※ マルチクエリリトリーバーは!こちらでDify構築してます
質問拡張
質問を拡張します。拡張する時にlimitの数だけ質問を作成します。出力は文字列で出てくるので質問抽出器で質問をリスト化します
イテレーション
質問ごとにWeb検索用に最適化し、Tavilyで検索していきます。出力するLLMでは必ずメモリを有効にしておきましょう!これがないと情報収集した内容がまとめ時に使用できないので。
まとめフェーズ
もう特に話すことがないのですが、クエリで「まとめ」がきたらまとめフェーズにうつります。
この時に、まとめるLLMはメモリを有効にしておきましょう!
補足
最後にこれだとなかなか初見で使うの難しいのでチームで使う想定であれば、会話開始機能は有効にしてどう使うべきかを書いておいてあげましょう!
最後に
これだとチューニングもまだまだなので、みなさんチューニングしたり、キーワードごとの検索もできるようにしたりとカスタマイズしてみてください!
Xやってるので気になる方はフォローお願いします。
https://x.com/hudebakonosoto