More than 1 year has passed since last update.
Difyで作成したRAGにて複数LLMで生成した回答結果を比較してみる
はじめに
RAGなどLLMを活用したアプリケーションを作成する際には、どのモデルを利用するのが良いか比較するケースがあると考えられる
Difyでは比較的簡単に複数のモデルの回答を比較できそうなので、その実装方法を検討した
今回はRAG構築する中で複数のモデルの回答を得られるアプリを実装した
チャット実行時にモデルを選択するタイプ
モデル選択式ワークフローの作成
スタジオ -> テンプレートから作成をクリックする
👁 image.png
Knowledge Retrieval + Chatbotのこのテンプレートを使用するをクリックする
👁 image.png
名前と説明を入力の上作成をクリック
👁 image.png
最終的に作成したワークフローは以下となる
👁 image.png
ポイントは以下
-
Startに使用するモデルを選択するパラメータを追加 -
LLMブロックを複数作成してそれぞれ使用するモデルを設定 -
IF/ELSEブロックにて選択したモデルを選択するパラメータに応じたLLMブロックを紐づける - 複数の
LLMブロックが出力した結果を変数集約器でまとめる -
ANSWERブロックで回答結果が分かりやすいように編集
モデル選択パラメータの追加
Startを選択して入力フィールド右の+をクリックする
👁 image.png
フィールドタイプは選択を選んだうえで、変数名,ラベル名では任意の値を設定し、オプションを追加ボタンを押して選択可能なモデル名のリストを追加して保存ボタンをクリックする
👁 image.png
複数LLMの追加
テンプレートとして追加されているLLMの名前を任意に修正し、モデルで使用したいモデルを選択する
コンテキストはKNOWLEDGE RETRIEVAL_resultを選択する
SYSTEMにはプロンプトを入力しておく
👁 image.png
LLMブロックの右上の...をクリックし、コピーを選択すると同じ設定のLLMブロックがコピーされる
スタジオパネル内で右クリックしここに貼り付けを選択するとコピーされたLLMブロックが貼り付けられる
👁 image.png
👁 image.png
貼り付けたLLMブロックを選択したうえで、モデルを他に使用したいモデルへ変更して複数のLLMブロックを作成できる
IF/ELSEロジックの追加
ブロックを追加ボタンからIF/ELSEを追加する
👁 image.png
Startにて追加したselectmodelパラメータに応じて使用するLLMブロックを紐づける
Dify v0.6.14からIF/ELSEブロックにELIFが追加されたので複数モデルを選択できる
👁 image.png
👁 image.png
変数集約器の追加
ブロックを追加ボタンから変数集約器を追加する
👁 image.png
各LLMと変数集約器を紐づける
👁 image.png
変数集約器ブロックの変数を代入するの右側の+をクリックして、各LLMからの出力を追加する
👁 image.png
Answerの編集
変数集約器とAnswerを紐づける
👁 image.png
Answerブロックを選択して回答フィールドを編集する
どのモデルからの回答かをわかりやすくするために``START_selectmodel からの回答という文章を追加する
回答自体は`変数集約器_output`が出力されるようにする
👁 image.png
全ての編集が完了したら公開する -> 更新 ボタンをクリックする
アプリケーションの実行
プレビューからテスト実行が行える
👁 image.png
selectmodelフィールドで利用したいモデルを選択する
回答結果のところのワークフロー処理を展開するとどのモデルが選択されたかが確認できる
👁 image.png
ワークフロー上でもどのモデルが選択されたかを確認できる
👁 image.png
複数モデルの回答を列挙するタイプ
複数モデル回答式ワークフローの作成
上記で作成したアプリを複製して作成する
上記で作成したアプリの右下隅の...ボタン -> 複製をクリックする
名前を修正したうえで複製ボタンをクリックする
👁 image.png
最終的に作成したワークフローは以下となる
👁 image.png
ポイントは以下
-
Startに追加した使用するモデルを選択するパラメータは不要のため削除 -
LLMブロックとANSWERブロックを直結して、数珠つなぎにしていく -
ANSWERブロックで回答結果が分かりやすいように編集
複数LLMの追加
テンプレートとして追加されているLLMの名前を任意に修正し、モデルで使用したいモデルを選択する
コンテキストはKNOWLEDGE RETRIEVAL_resultを選択する
SYSTEMにはプロンプトを入力しておく
👁 image.png
LLMブロックの右上の...をクリックし、コピーを選択すると同じ設定のLLMブロックがコピーされる
スタジオパネル内で右クリックしここに貼り付けを選択するとコピーされたLLMブロックが貼り付けられる
👁 image.png
👁 image.png
貼り付けたLLMブロックを選択したうえで、モデルを他に使用したいモデルへ変更して複数のLLMブロックを作成できる
Answerの編集
LLMとAnswerを紐づける
👁 image.png
Answerブロックを選択して回答フィールドを編集する
どのモデルからの回答かをわかりやすくするためにgpt-3.5-turbo からの回答という文章を追加する
回答自体はLLM_textが出力されるようにする
👁 image.png
複数LLM-ANSWERを数珠つなぎにする
同様にLLMとANSWERの紐づけを作成し、複数のLLM-ANSWERを数珠つなぎにしていく
👁 image.png
全ての編集が完了したら公開する -> 更新 ボタンをクリックする
アプリケーションの実行
プレビューからテスト実行が行える
👁 image.png
モデルによって回答内容が異なることが確認できる
👁 image.png
おわりに
生成AIアプリ開発においてはどのモデルを利用するのが良いか比較するケースがあり得る
Difyであれば今回紹介した方法で比較的容易にモデル間の比較ができると考えている
参考ページ
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme
