こんにちは、新人エンジニアの前田です。
最近、南海トラフ地震の臨時情報や台風などもあったりして、自衛のための事前準備は欠かせないなと思いました。
さて、今回はDifyを使って複数の大規模言語モデル(LLM)を切り替えるチャットチャットボットを作ってみたいと思います。
なぜ、この内容をやってみようかと思ったかというと、Difyは、複数のLLMを利用できるのですが、
それらは、事前に設定を行って利用するもので、ユーザーが実行時に切り替えて指定ができなかったのですよね。
とはいえ、これもノーコードで実現できるのが、Difyの強みです。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/a/acro-maeda/20240811/20240811231053.png)
1. 概要
1.1.Difyとは
Difyは、大規模言語モデル(LLM)を用いたオープンソースのアプリ開発プラットフォームです。
詳しくは、以下の記事で紹介されているので、参考にしてみてください。
acro-engineer.hatenablog.com
環境構築方法も紹介されているので、初めてDifyを触れる人はそちらも確認してみてください。
1.2. この記事で実現すること
Docker版のDify(バージョンは0.6.16)のチャットフローを使って複数のLLMを切り替えるチャットボットを作ります。
使っているブロックは以下の通りです。
- LLM
- IF/ELSE
- 変数集約器
次の章で各ブロックについて説明していきます。
2. アプリ作成
2.1. モデルの定義
今回、LLMは以下のものを定義します。
- GPT4o
- GPT4o-mini
- Claude3.5-sonnet
- Gemini1.5Pro
モデルの追加は以下の手順になります。
「ブロックの追加」>「LLM」を選択。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/a/acro-maeda/20240811/20240811004154.png)
追加されたLLMブロックを選択し、「モデル」>「gpt-4o」を選択。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/a/acro-maeda/20240811/20240811004210.png)
同様にブロックを3つ追加し、それぞれに「gpt-4o-mini」、「claude3-5-sonnet20240620」、「Gemini 1.5 Pro」のモデルを選択。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/a/acro-maeda/20240811/20240811004730.png)
2.2. モデルの選択
次に、複数モデルを切り替えるために、モデルの選択をIF/ELSEブロックで実装します。
開始ブロックを選択し、「入力フィールドを追加」からフィールドを追加してLLMを選択できるようにします。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/a/acro-maeda/20240811/20240811005509.png)
IF/ELSEブロックを追加し、開始ブロックと繋ぎ、条件を追加する。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/a/acro-maeda/20240811/20240811010153.png)
それぞれの条件に合うようにLLMブロックと繋ぐ。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/a/acro-maeda/20240811/20240811010356.png)
このとき、LLMブロック>「SYSTEM」にプロンプトを設定しないと動かないので、忘れずに設定するようにしてください。
ユーザーが入力した内容は「sys.query」に入るので、プロンプトにそのまま入れてしまってOKです。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/a/acro-maeda/20240811/20240811011104.png)
2.3. 変数の集約
以上で動くようになりますが、何個も回答ブロックを追加するのは面倒なので、分かれてしまった変数を一つにまとめましょう。
変数集約器ブロックを追加し、すべてのLLMブロックと繋ぎます。
変数集約器を選択>「変数を割り当てる」からそれぞれのLLMから出力されるテキストを割り当てます。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/a/acro-maeda/20240811/20240811011952.png)
最後に回答ブロックと繋ぎ、回答として変数集約器からの出力を選択します。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/a/acro-maeda/20240811/20240811012422.png)
3. 作成したアプリを動かしてみる
実際に複数のモデルを切り替えられているのか、動かして確認していきます。
Difyのデバッグとプレビュー機能を使って、想定通りの経路になっているか見てみます。
1. GPT4o-miniで動かしてみる
Q:
今日の晩御飯を考えて
A:
今日の晩御飯におすすめのメニューを考えてみました!メニュー案
メインディッシュ: 鶏の照り焼き鶏むね肉を醤油、みりん、砂糖で漬け込み、焼き上げます。ご飯と相性抜群です。
サイドディッシュ: ほうれん草のお浸しほうれん草をさっと茹でて、だし醤油で和えます。栄養満点でさっぱりとした一品です。
スープ: 味噌汁豆腐とわかめ、ネギを使った味噌汁で、体も温まります。
ご飯: 白ご飯炊きたてのご飯を添えて、照り焼きと一緒に楽しんでください。
デザート: 季節のフルーツ例えば、みかんや梨など、季節のフルーツをデザートにどうぞ。
このメニューは栄養バランスも良く、家庭的な味わいが楽しめると思います。お好みに合わせてアレンジしてみてください!
GPT4o-miniを通っていることが確認できますね。
2. Claude3.5-sonnetで動かしてみる
Q:
ウマい肉の調理法は何?
A:
ウマい肉の調理法はいくつかありますが、主なものを挙げると:グリル/バーベキュー: 直火で焼くことで香ばしさが出ます。
ロースト: オーブンでじっくり焼くことで肉汁を閉じ込めます。
ステーキ: フライパンで表面を焼き、中はジューシーに仕上げます。
煮込み: 長時間煮込むことで柔らかく風味豊かになります。
低温調理: 低温でゆっくり加熱し、均一な火の通りを実現します。
燻製: スモークの香りが肉に移り、独特の風味が楽しめます。
炒め物: 高温で手早く炒めることで、旨みを閉じ込めます。
焼き肉: 薄切り肉を網で焼き、タレと合わせて食べます。
肉の種類や部位、好みによって最適な調理法は異なりますが、これらの方法を組み合わせたり工夫したりすることで、おいしい肉料理を作ることができます。
こちらもClaude3.5-sonnetを通っているのが確認できます。
4. まとめ
Difyを使って複数モデルを切り替えるチャットボットを作ってみました。
やはり、ノーコードで作れるので、かなり簡単に作れますね。
他にも、Difyはワークフローをツールとして取り込んだりもでき、色々面白いことができそうです。
気になる人はぜひ試してみてください。
Acroquest Technologyでは、キャリア採用を行っています。
- Azure OpenAI/Amazon Bedrock等を使った生成AIソリューションの開発
- ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
- マイクロサービス、DevOps、最新のOSSやクラウドサービスを利用する開発プロジェクト
- 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
www.wantedly.com