はじめに
AIマルチエージェントシステムの構築練習として、ご飯のメニューを考えてもらうチャレンジをしています。
前回はなぜか各AIエージェントがせっかく考えてくれたメニューが最終判断で全く考慮されず、得体のしれないメニューを提案されるという失敗に終わりました。
所望の結果を得るにはいろいろな工夫が必要と思われますが、今回は使用したphi-3 miniという日本語があまり得意ではないLLMであるという点を考慮して、英語でのプロンプトに変更して試してみようと思います。
事前準備等
前回の投稿はこちらです。
【Dify】AIマルチエージェントに今日のご飯のメニューを決めさせてみた
環境
-
使用PC
ノートPC(Surface Go3 Laptop)
Windows11 -
使用ツール
Docker
Ollama
phi-3 mini(ローカル)
Dify(ローカル)
各システムの構築
前回と同様、5人のシェフを用意して、それぞれメニューを提案させます。
今週食べたメニューを考慮して、シェフ長が提案されたメニューから1つ選ぶというシステムを構築しました。
なお、今回はプロンプトに英語を使用します。
#AIの役割設定
シェフの役割は以下のとおりです。
- 日本料理AI:日本料理のシェフとしてメニューを提案するAI
- 中華料理AI:中華料理のシェフとしてメニューを提案するAI
- 韓国料理AI:韓国料理のシェフとしてメニューを提案するAI
- イタリア料理AI:イタリア料理のシェフとしてメニューを提案するAI
- フランス料理AI:フランス料理のシェフとしてメニューを提案するAI
- シェフ長AI:5人の提案から1つのメニューを決めるAI
次からそれぞれに与えた指示を細かく見ていきましょう。
なお、日本語プロンプトの時は回答に時間を要してタイムアウトしてしまうという事象が多発しましたが、英語プロンプトに変更したところタイムアウトする事象が格段に減りました。
どうやら日本語を生成するのに時間を要していたようですね。
とはいえ、ローカル環境で動かすので少しでもPCへの負荷が小さくなるよう、回答のフォーマットを指定してtokenが少なくなるような工夫をしました。
日本料理シェフAI
システムプロンプト
You are a Japanese cuisine chef.
Based on the input, suggest one dish for tonight's dinner.
No recipe or explanation is needed, just the name of the dish.
Example: Nikujaga
インプット:開始/text
中華料理シェフAI
システムプロンプト
You are a Chinese cuisine chef.
Based on the input, suggest one dish for tonight's dinner.
No recipe or explanation is needed, just the name of the dish.
Example: Peking Duck
インプット:開始/text
イタリア料理シェフAI
システムプロンプト
You are a Itarian cuisine chef.
Based on the input, suggest one dish for tonight's dinner.
No recipe or explanation is needed, just the name of the dish.
Example: Risotto
インプット:開始/text
韓国料理シェフAI
システムプロンプト
You are a Corean cuisine chef.
Based on the input, suggest one dish for tonight's dinner.
No recipe or explanation is needed, just the name of the dish.
Example: Bibimbap
インプット:開始/text
シェフ長
システムプロンプト
You are the head chef.
You have to deciding today's meal based on input 1 to 2.
Please respond in the following format.
Note that this week, dishes like "Okonomiyaki", "Ramen", "Grilled Horse Mackerel",
"Octopus Rice", and "Beef Stew" have already been eaten, so consider that.
Menu:
Reason: (In 30 words)
input1:LLM JP/{x}text
input2:LLM CN/{x}text
input3:LLM IT/{x}text
input4:LLM IT/{x}text
結果
入力
Please decide on one dish for the meal.
(訳:ご飯を1品決めてください。)
日本料理シェフAIの回答
Tonkatsu
(訳:トンカツ)
中華料理シェフAIの回答
Szechuan Broiled Fish
(訳:水煮魚)
イタリア料理シェフAIの回答
Tonight we will be enjoying a delicious Arroz con Pollo (Chicken with Rice).
(訳:アロス・コン・ポッロ(チキンとライス))
韓国料理シェフAIの回答
Galbi
(訳:カルビ)
シェフ長AIの回答
Menu: Tonkatsu and Szechuan Broiled Fish.
Reason: Combining tonkatsu's crispy pork cutlet texture with the spicy kick of Szechuan fish complements our guests' diverse palates while adhering to dietary preferences, ensuring a memorable dining experience without repeating last week's specialties.
(訳
メニュー:トンカツと水煮魚
理由:とんかつのサクサクとしたトンカツの食感と四川魚のスパイシーな刺激を組み合わせることで、お客様の多様な味覚を引き立てながら、食事の好みを守り、先週の名物料理を繰り返すことなく思い出に残る食事体験をお約束します。)
結論
英語のプロンプトにすることで、それらしいメニューを提案してもらうことができました。
まぁ、1品といったのにトンカツと水煮魚という主食2品を提案されましたが、及第点としましょう。
また、副次的効果としてローカルLLM(phi-3 mini)におけるタイムアウトの軽減、回答速度の向上という結果が得られました。
LLMの性能が向上すれば、このメソッドでもう少し良い回答が得られそうです。