皆さんは普段LLMを使って課題の調査を行う際、1つだけを使っていますでしょうか。私は複数のLLMを契約しており、複雑な調査などは両方を使ってより網羅性の高い知識を得られるようにしています。また、LLMは古い知識に基づきもっともらしい間違った回答をしてしまうときもまだまだありますので、そういうときにダブルチェックとしてもLLM Aの回答をLLM Bで検証したりしています。
その際画面をいちいち切り替えるのではなく単一のアプリケーションでプロンプトで用いるLLMを切り替えたくなります。
と、いうことでDifyの質問分類器を今日は使っています。
質問分類器とは
ユーザーからの質問がどんな種類なのかをLLM(大規模言語モデル)を使って分類する仕組みです。あらかじめラベル(カテゴリ)を設定しておいてLLMに入力された質問がどのラベルに合致するかを分類してもらうことができます。
Difyの質問分類器ブロックを用いると、そこからラベル単位で処理フローを変えることが可能です。
うまく使えばサポートに問い合わせが来た際に
・FAQにある回答なのか
・オペレーターにすぐ接続すべき緊急性があるのか
・質問ではなくバグ報告なのか
・サポートで対応すべき技術的な質問なのか営業で対応すべき契約的な質問なのか
等を自動判別し処理フローを変えていくことができます。
さっそくやってみる
この記事ではDifyを使った簡単なチャットボットを作成できる方を対象としていますが、その手順は以下に纏めていますのでまだの方はやってみてください。
https://serverless.co.jp/blog/516d0fn69z/
スタジオからワークフローの作成
まずスタジオタブから最初から作成をクリックします。

ワークフローを選択し、適当名前をつけ、作成するをクリックします。

まず開始ブロックをクリックし入力フィールドの+ボタンを押します。以下の図を参考にinput
という変数を作成して保存します。

次に今回のメインとなる質問分類器ブロックを繋げます。

LLMモデルと先ほど作成したinput
変数を指定します。

ビジョンという箇所で質問を分類するラベルを指定します。

次にそれぞれのクラスに対してLLMブロックを繋ぎ同じ変数を指定します。


またSYSTEMには適当なプロンプトを入力しておきます


最後に終了ブロックでLLMブロックの出力を受け取れるよう変数を指定します。


実行をクリックして、映画、ゲームそれぞれについて質問すると質問分類器により処理が分離していることがわかります。ただしこの状態では出てくる回答はかなり汎用的です。例えばお勧めのSF映画について
という質問に対して以下のような回答が戻ってきます。

これはLLMのSYSTEMで入力された文字列のみがLLMへの問い合わせとして使われているためです。

以下の様に質問された文字列が格納されている変数を指定することで正しく入力された質問がLLMへの問い合わせに使用されます。

