0
1

Difyで作成したRAGにて複数LLMで生成した回答結果を比較してみる

Last updated at Posted at 2024-09-21

はじめに

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の編集

LLMAnswerを紐づける
image.png

Answerブロックを選択して回答フィールドを編集する
どのモデルからの回答かをわかりやすくするためにgpt-3.5-turbo からの回答という文章を追加する
回答自体はLLM_textが出力されるようにする
image.png

複数LLM-ANSWERを数珠つなぎにする

同様にLLMANSWERの紐づけを作成し、複数のLLM-ANSWERを数珠つなぎにしていく
image.png

全ての編集が完了したら公開する -> 更新 ボタンをクリックする

アプリケーションの実行

プレビューからテスト実行が行える
image.png

モデルによって回答内容が異なることが確認できる
image.png

おわりに

生成AIアプリ開発においてはどのモデルを利用するのが良いか比較するケースがあり得る
Difyであれば今回紹介した方法で比較的容易にモデル間の比較ができると考えている

参考ページ

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1