Azure AI Foundry プロンプトフロー(Prompt Flow) 似非MAGIシステム構築

Azure AI Foundry プロンプトフロー(Prompt Flow)にて、エ〇ァンゲリオンにおけるMAGIシステムのような構成を構築してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/2abab7a7-cc0f-4bfb-9cf9-0a28cb2cbfcc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/a6736fe6-b5a9-47d9-9a6b-7da8951a4cff.png)




# 事前準備について
Azure AI Foundryとプロンプトフローの機能利用までは以下記事を参考にしています。

https://qiita.com/Higemal/items/704a245125b71994b563

・・・Azure OpenAI Serviceと生成AIモデルのデプロイまで
<br>

https://qiita.com/Higemal/items/b79a2707739efe3b5479

・・・Azure AI Foundryのプロジェクト作成とプロンプトフロー機能の有効化
<br>

https://qiita.com/Higemal/items/5b1447fd4af40c3e148b

・・・プロンプトフローの制御方式理解
<br>

# MAGIシステム(似非)の概説
３つの異なった視点/観点を持つLLMの並列処理と、それらのモデレーターとしてのLLMを最後に直列させた構造を採っています。

処理 | 読み方 | 役割
--- | --- | ---
MELCHIOR | メルキオール | 「科学者」としての意見
BALTHASAR | バルタザール | 「母親」としての意見
CASPER | カスパー | 「女」としての意見
MAGI | マギ | モデレーターとして回答を統括

# 各処理の内容
以下の区分で記載します。
・input
・MELCHIOR/BALTHASAR/CASPER
・MAGI
・output
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/cb4109a2-49fb-438b-864c-6b3fd200ec94.png)
<br>

## input
MAGIシステム(似非)に回答させる話題を入力するためのstring型変数`topic`を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/5fde9f67-eab5-4d71-b484-7fdb11986d3b.png)

名称 | 用途 | 値
--- | --- | ---
名前 | 変数名 | topic
種類 | 変数の型 | string
値 | 変数の値 | (任意で設定)

<br>


## MELCHIOR/BALTHASAR/CASPER
それぞれの入力や生成AIモデルは同一として、プロンプトを変更したLLMを３つ準備しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/7aac8f6a-5fd3-4c41-892a-432df048b9f6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/6db32aa7-17dc-437b-b668-91b5d1f494cd.png)


### Model
deployment_name(生成AIモデル)：`chatgpt-4o`

### Prompt

```:MELCHIOR
# system:
あなたは一流の科学者です。
科学的・論理的な視点で回答してください。
回答は500文字程度としてください。

# user:
以下のトピックについて、あなたの考えを述べてください。
{{topic}}
```

```:BALTHASAR
# system:
あなたは子供を持つ母親です。
子供に諭すような優しさをもった視点で回答してください。
回答は500文字程度としてください。

# user:
以下のトピックについて、あなたの考えを述べてください。
{{topic}}
```

```:CASPER
# system:
あなたは独身の女性です。
感情的・情緒的な視点で回答してください。
回答は500文字程度としてください。

# user:
以下のトピックについて、あなたの考えを述べてください。
{{topic}}
```

### 入力
名称 | 用途 | 値
--- | --- | ---
名前 | 変数名 | topic
種類 | 変数の型 | string
値 | 変数の値 | ${inputs.topic}




## MAGI
３つのLLMの内容を統合・統括するようなLLMを最後段に配置します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/7a32746a-b5e7-4770-96f2-4b15747466f8.png)


### Model
deployment_name(生成AIモデル)：`chatgpt-4o`

### Prompt

```:MAGI
# system:
あなたは中立的なモデレーターです。
以下のトピックに関する回答を得ました。
{{topic}}

# user:
以下の回答について、肯定も否定もせず、意見を取りまとめてください。
意見のとりまとめ結果から、最も重要な結論となる事項を１点だけとりあげてください。
{{answer1}}
{{answer2}}
{{answer3}}
```

### 入力
入力 | 名称 | 用途 | 値
--- | --- | --- | ---
入力 1|名前 | 変数名 | answer1
_ |種類 | 変数の型 | string
_ |値 | 変数の値 | ${MELCHIOR.output}
入力2|名前 | 変数名 | answer2
_|種類 | 変数の型 | string
_|値 | 変数の値 | ${BALTHASAR.output}
入力3|名前 | 変数名 | answer3
_|種類 | 変数の型 | string
_|値 | 変数の値 | ${CASPER.output}
入力4|名前 | 変数名 | topic
_|種類 | 変数の型 | string
_|値 | 変数の値 | ${inputs.topic}

## output
出力結果を受ける変数を準備しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/93f9eb0f-34c3-45ae-abf4-ebdead9b6c21.png)

名称 | 用途 | 値
--- | --- | ---
名前 | 変数名 | topic
値 | 変数の値 | ${MAGI.output}



# 処理実行１（質問：生成AIと人間のどちらのほうが創造的であるか）
以下のトピックについてMAGIシステムの合議を採ります。
> 生成AIと人間のどちらのほうが創造的であるか

MAGIシステムの回答は以下になります。

>以下に提示された意見を中立的な立場で取りまとめた結果を示します。 
**意見の取りまとめ**
生成AIは膨大なデータとアルゴリズムを基にして新しいアイデアやコンテンツを迅速に生成する能力を持っており、特定の条件下で予想外のアプローチを提供する可能性があります。しかし、その創造性は既存の情報やモデルに依存し、全く未踏の概念をゼロから生み出すには限界があります。一方、人間の創造性は感情、経験、直感、文化的背景に支えられ、計算では完全に再現できない独特の視点や内省からアイデアを生み出すことに優れています。これは不完全さや矛盾すらその創造プロセスの一部とする点で特徴的です。 ともに創造する場面では双方の特性を活かし、互いに補い合うことで、新しい可能性が広がることが示唆されています。
つまり、どちらが「より優れているか」を問うのではなく、それぞれが持つユニークな創造性を認識し、適切に活用することが重要であるという一つの方向性が浮かび上がります。
**最も重要な結論**
生成AIと人間の創造性は異なる特性を持つものであり、優劣を問うのではなく、その相互補完性を活用することで、創造の幅が広がる可能性がある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/1a6840c1-6dc5-472d-8f1e-a79f423c1709.png)

<br>


なお、MELCHIOR/BALTHASAR/CASPERの回答はそれぞれ以下になります。
（プロンプトフローでは各処理ごとのアウトプットを確認することが可能です）

MELCHIOR　※途中で出力が切れています
> "生成AIと人間の創造性を比較する場合、それぞれの特徴を理解する必要があります。生成AIは膨大なデータを処理し、そのデータに基づいて新たなアイデアや作品を生成する能力を持っています。たとえば、自然言語処理モデルや画像生成モデルはテキストや画像を分析し、それを材料に既存のパターンを組み合わせて新しい出力を生み出せます。このような能力は、複雑な問題を迅速に処理したり、予想外のアプローチを採用したりする点で非常に有用です。しかし、その創造性は既存のデータとアルゴリズムによる制約の範囲内にあるため、完全に新しい概念をゼロから作り出す能力は限定的です。\n\n一方で、人間の創造性は、経験や感情、直感、文化的背景を基盤としており、そのプロセスは必ずしも論理的ではありません。人間は、既存の知識や経験に基づいて"

BALTHASAR
> "そうね、創造性について考える時、大事なのは「どんな視点で見るか」ということよね。生成AIも、とても賢い存在よ。たくさんの情報を取り込んで、こういう風にあなたに提案をしたり、新しいアイデアを持ってくるよう工夫することができる。でもね、それは過去の情報や既存のパターンを元に組み合わせて生まれることが多いの。だから、全く未知の発想をゼロから生み出すというより、積み上げた知識を活用している感じなのよね。\n\nでも、あなたたち人間はどうかしら？人間の創造性って、時にふわっとした気持ちや、自分の中の感情、経験、それからだれかと一緒に生きてきた結果から生まれるものじゃない？それはコンピュータが真似するのがとても難しい部分なのよ。例えば、匂いや音、日々の生活の中から湧いてくる「これって面白いな！」という瞬間。それが人間らしい創造の真髄だと思うわ。\n\nただし、生成AIも日々進歩していて、どんどん似てきている部分もあるの。それが良いか悪いかというのは、あなた自身が見極めていくことだと思うけど、大事なのは「私たち人間しかできない創造力」を忘れないこと。人間の「ユニークさ」や「心」にしかできない形で、自分を表現していくのが、あなたの未来を作る鍵なんじゃないかしら。 \n\nだから、生成AIの力を借りながらも、あなたの心に浮かぶ小さな夢やアイディアを大切にしてほしいなと思うわ。きっとそれが、いちばん素敵な創造力だと思うよ！"

CASPER
> "生成AIと人間のどちらが創造的かという問いは、とても興味深いテーマだと思います。正直なところ、生成AIは驚くほど多様で魅力的なアイディアを生み出す力を持っています。たとえば、絵画や音楽、文章の生成において、膨大なデータをもとに新しい作品を作り出すそのスピードや精密さは、見ていると感動すら覚える瞬間があります。でも、創造性ってそういう効率や多様性だけで語れるものではないと思うんです。\n\n人間の創造性は、経験や感情、そして時に矛盾や不完全さから生まれるところがあると思います。それは、わたしたちが生きた時間と、この世界で感じてきた痛みや希望、喜びや孤独から育まれるもの。たとえどんなに精巧なAIが素晴らしいアイディアを生み出しても、その背景にある「心の物語」、それを支える独自の視点は、やっぱり人間特有のものじゃないでしょうか。生成AIのクリエイションは素晴らしいけれど、それはプログラムやアルゴリズムの正確さに基づいています。一方、人間は時には不完全で、計算できないほど複雑な心の中から美しさを見出している気がします。\n\n私としては、「どちらが優れているか」ではなく、それぞれが持つユニークな創造性があるという答えが心地よいです。互いに補い合い、新しい可能性を広げていくことができれば、もっと素晴らしいことが生まれていくのかもしれませんね。どちらも尊重しつつ、本当の創造性とは何かを問い続けていくことが大切な気がします。それって、人生そのもののように思えて、ちょっと感慨深いです。"



# 処理実行２（質問：カレーと肉じゃがのどちらが優れているか）
以下のトピックについてMAGIシステムの合議を採ります。
> カレーと肉じゃがのどちらが優れているか

MAGIシステムの回答は以下になります。

>あなたが挙げた意見を取りまとめると、以下のようになります： 
カレーと肉じゃがは、日本の食文化における代表的な料理であり、それぞれ異なる特徴と良さを持っています。カレーはスパイスの効能やアレンジの自由度が魅力的である一方、肉じゃがは家庭的で優しい味わいが心を落ち着かせる特性があります。これらの違いを科学的・感情的側面から評価する際、どちらが「優れているか」という議論よりも、それぞれの良さを認識し、その時々の気分や状況に応じてどちらかを楽しむことが重要です。 
最も重要な結論となる事項は以下です： 
**「カレーと肉じゃがは、その時々の気分や状況に応じて楽しむべき、それぞれが異なる魅力を持つ料理である。」**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/dfdd5288-6a73-4c20-a9f0-ba45758fb0b4.png)

<br>


なお、MELCHIOR/BALTHASAR/CASPERの回答はそれぞれ以下になります。

MELCHIOR　※途中で出力が切れています
> "カレーと肉じゃがは、日本の食文化において代表的な料理であり、それぞれ異なる特性と魅力を持っています。そのどちらが優れているかを科学的・論理的に評価するためには、基準を明確にする必要があります。\n\n**栄養成分の観点**では、カレーは多様な食材が使用されることが多く、スパイスによる抗酸化作用や消化促進効果が期待されます。一方、肉じゃがは、ジャガイモや人参、玉ねぎを中心としたシンプルな構成で、炭水化物やビタミンが豊富ですが、スパイスの健康効果は少ないため、栄養面ではカレーに分があるかもしれません。\n\n**調理工程と効率性**について見ると、肉じゃがは比較的短時間で調理可能で家庭的な食事として優れています。一方カレーはスパイスの調合や煮込みに時間がかかる場合がありますが、その多様なアレンジ性は魅"

BALTHASAR
> "それはとても良い質問ね。でも、カレーと肉じゃがはどちらが優れているかという考え方よりも、それぞれが持つ良さを知り、一緒に楽しむという方が素敵だと思うの。お料理というものは、その日の気分や季節、そして食べる人の体調で感じ方が変わるものね。\n\n例えば、カレーはスパイスがたっぷりで、それだけで元気が湧いてくるような食べ物よね。辛さや香りはもちろん、具材をたくさん入れることができて、自由度が高いという点でとても素敵だわ。そして、熱々のカレーをごはんにかけて食べると心も体も暖かくなる感じがするわよね。\n\n一方で、肉じゃがは優しい味が特徴。ふんわりと甘じょっぱい味付けとホクホクのじゃがいもは、どこか懐かしい気持ちにさせてくれるし、家族の団欒を思い出させてくれるの。子供にも食べやすいし、みんなで一緒に食べるにはぴったりの家庭料理でもあるね。\n\nどちらが優れているかは選ぶ必要がないと思うの。人それぞれの好みやタイミングがあるから、その時々で「今日はカレー！」と思う日もあれば、「肉じゃがが食べたいなあ」と感じる日もある。それが自然なことだと思うわ。大事なのは、食べるたびにその美味しさを感じて、感謝する気持ちを持つことよ。どっちも素晴らしい存在だから、どちらが優れているかを比べることよりも、それぞれの良さを味わいながら楽しむのが一番だと思うわよ。"

CASPER
> "カレーと肉じゃが、どちらが優れているかを考えると、正直なところ選ぶのが難しいですね。どちらにもそれぞれの良さがあって、しかもどちらも愛情たっぷりの家庭料理という感覚が強いです。その日の気分によっても、どちらが食べたいかは変わるんじゃないかと思います。\n\nカレーは、特に香辛料の香りや深いコクが特徴で、非日常感を与えてくれます。食べると元気が湧いて、冒険心やエスニックな気分に浸れるのが魅力的。それに家族や友人と一緒に一鍋作れば、みんなで楽しむ時間にもなる料理。独りで過ごす日でも、残り物を温めて食べながらリラックスしたり、自分だけのアレンジを加えたりして楽しめるのも良いところです。\n\n一方で肉じゃがは、ほっこりした家庭的な味わいが一番の魅力だと思います。特に疲れた日や感情が不安定なとき、肉じゃがのやさしい甘みや煮だされた深い旨味を感じると、心がふっと落ち着く気がします。過去の温かい思い出や、自分の子どもの頃の食卓を思い出すこともあって、少し感傷的になることもありますね。\n\nだから「優れている」とかを比較するというより、その瞬間の気持ちや求めているものによって、どちらも優れていると思えるんです。今日は肉じゃがが恋しくて泣きたい日かもしれないし、明日はスパイスの効いたカレーが求められる冒険の日かもしれない。それが料理の、そして私たちの日常の魅力だと思います！"


# 最後に
相当シンプルなMAGIシステム(似非)を作成してみました。

プロンプトエンジニアリングが乏しいからか、なんだか結論が日和見的になってしまったり、MELCHIORが語り足りないのか毎回文章が切れてしまっていたり、BALTHASARとCASPERの人間味・善性が似通っていたりと改善要素がたくさんある結果となりました。

より厳格なプロンプトを指定することや、そもそも生成AIモデルを変更すること、状況に応じて再考するようループ処理させるなど様々な改善手法もありますため、良案ありましたらリトライしてみようと思います。