はじめに
RAGなどLLMを活用したアプリケーションを作成する際には、どのモデルを利用するのが良いか比較するケースがあると考えられる
Difyでは比較的簡単に複数のモデルの回答を比較できそうなので、その実装方法を検討した
今回はRAG構築する中で複数のモデルの回答を得られるアプリを実装した
チャット実行時にモデルを選択するタイプ
モデル選択式ワークフローの作成
Knowledge Retrieval + Chatbotのこのテンプレートを使用するをクリックする

ポイントは以下
-
Startに使用するモデルを選択するパラメータを追加 -
LLMブロックを複数作成してそれぞれ使用するモデルを設定 -
IF/ELSEブロックにて選択したモデルを選択するパラメータに応じたLLMブロックを紐づける - 複数の
LLMブロックが出力した結果を変数集約器でまとめる -
ANSWERブロックで回答結果が分かりやすいように編集
モデル選択パラメータの追加
フィールドタイプは選択を選んだうえで、変数名,ラベル名では任意の値を設定し、オプションを追加ボタンを押して選択可能なモデル名のリストを追加して保存ボタンをクリックする

複数LLMの追加
テンプレートとして追加されているLLMの名前を任意に修正し、モデルで使用したいモデルを選択する
コンテキストはKNOWLEDGE RETRIEVAL_resultを選択する
SYSTEMにはプロンプトを入力しておく

LLMブロックの右上の...をクリックし、コピーを選択すると同じ設定のLLMブロックがコピーされる
スタジオパネル内で右クリックしここに貼り付けを選択するとコピーされたLLMブロックが貼り付けられる


貼り付けたLLMブロックを選択したうえで、モデルを他に使用したいモデルへ変更して複数のLLMブロックを作成できる
IF/ELSEロジックの追加
Startにて追加したselectmodelパラメータに応じて使用するLLMブロックを紐づける
Dify v0.6.14からIF/ELSEブロックにELIFが追加されたので複数モデルを選択できる


変数集約器の追加
変数集約器ブロックの変数を代入するの右側の+をクリックして、各LLMからの出力を追加する

Answerの編集
Answerブロックを選択して回答フィールドを編集する
どのモデルからの回答かをわかりやすくするために``START_selectmodel からの回答という文章を追加する
回答自体は`変数集約器_output`が出力されるようにする

全ての編集が完了したら公開する -> 更新 ボタンをクリックする
アプリケーションの実行
selectmodelフィールドで利用したいモデルを選択する
回答結果のところのワークフロー処理を展開するとどのモデルが選択されたかが確認できる

複数モデルの回答を列挙するタイプ
複数モデル回答式ワークフローの作成
上記で作成したアプリを複製して作成する
上記で作成したアプリの右下隅の...ボタン -> 複製をクリックする
ポイントは以下
-
Startに追加した使用するモデルを選択するパラメータは不要のため削除 -
LLMブロックとANSWERブロックを直結して、数珠つなぎにしていく -
ANSWERブロックで回答結果が分かりやすいように編集
複数LLMの追加
テンプレートとして追加されているLLMの名前を任意に修正し、モデルで使用したいモデルを選択する
コンテキストはKNOWLEDGE RETRIEVAL_resultを選択する
SYSTEMにはプロンプトを入力しておく

LLMブロックの右上の...をクリックし、コピーを選択すると同じ設定のLLMブロックがコピーされる
スタジオパネル内で右クリックしここに貼り付けを選択するとコピーされたLLMブロックが貼り付けられる


貼り付けたLLMブロックを選択したうえで、モデルを他に使用したいモデルへ変更して複数のLLMブロックを作成できる
Answerの編集
Answerブロックを選択して回答フィールドを編集する
どのモデルからの回答かをわかりやすくするためにgpt-3.5-turbo からの回答という文章を追加する
回答自体はLLM_textが出力されるようにする

複数LLM-ANSWERを数珠つなぎにする
同様にLLMとANSWERの紐づけを作成し、複数のLLM-ANSWERを数珠つなぎにしていく

全ての編集が完了したら公開する -> 更新 ボタンをクリックする
アプリケーションの実行
おわりに
生成AIアプリ開発においてはどのモデルを利用するのが良いか比較するケースがあり得る
Difyであれば今回紹介した方法で比較的容易にモデル間の比較ができると考えている













