![見出し画像](https://assets.st-note.com/production/uploads/images/96741805/rectangle_large_type_2_9fa9616651d39c938d5f028a99d2eda2.gif?width=1200)
GPT-3のAPIを使ってエヴァンゲリオンのMAGIシステムを実装してみた。(Pythonで解説)
ChatGPTが話題沸騰ですね。今回はエヴァンゲリオンに登場するMAGIシステムをGPT-3のAPIで実装した有料記事を書いてみました。ぜひチェックしてみてください!(サンプルコードはPython)
MAGIシステムを一言で言うと
性格の異なる3体のAIが、それぞれ独立に見解をだし、それを集約して1つの結論をだすという合議制のシステム
深津氏の記事に触発され、GoogleColabで実装してみました。(面白い記事を書いてくれた深津氏に感謝です。)詳しくは↓
以下が手順
2.API keysを発行しましょう。
![](https://assets.st-note.com/img/1674974161573-iWBooGnWDw.png?width=1200)
ここからがコード。
3.openaiをインストール
pip install openai
4.まずはサンプルコードで疎通確認をしましょう。ちなみに、今回使用するコードは以下の繰り返しになります。
import openai
openai.api_key = "発行したAPI_KEY"
prompt = """
以下の以下のツイートがポシティブかネガティブか判定してください。
ツイート: 新しいバットマン映画はつまらなかった!
"""
response = openai.Completion.create(
model="text-davinci-003",
prompt=prompt,
max_tokens=100,
temperature=0
)
print(json.dumps(response, ensure_ascii=False, indent=2))
以下が、返って来ればOKです。
{ "id": "cmpl-6dvo2UgdMDPYgmDUGqEzocFQLZU0f", "object": "text_completion", "created": 1674975018, "model": "text-davinci-003", "choices": [ { "text": "\nネガティブ", "index": 0, "logprobs": null, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 71, "completion_tokens": 5, "total_tokens": 76 }}
5.本体コード(MAGIシステム)
※text-davinci-003は実行すると料金がかかりますので、ここは注意してください。1Kトークンあたり$0.0200です。(最初はFreeTrialで18ドル付与されていると思います。)
![](https://assets.st-note.com/img/1674976129352-TVL5l3t5uN.png?width=1200)
ポイントはopenai.Completion.createを独立で4回呼び出すことです。それぞれの性格に合わせてパラメータ(temperature)を変えます。質問でそれぞれのペルソナになりきってもらいます。
パラメータ
model="text-davinci-003"が今回使用するモデルです。(現時点で一番性能が良いです。)
temperature は1に近づくほど答えがランダムになり、0に近いほど答えが安定します。答えが決まっている質問に対しては0に近いよう設定すると良いでしょう。
max_tokensはトークン数です。料金を抑えたかったら少なめにしましょう。
import openai
import json
openai.api_key = "発行したAPI_KEY"
#MELCHIOR (科学者)
prompt0 = """
以下の質問に科学者として答えてください。
「おすすめの料理はなんですか?」
"""
response0 = openai.Completion.create(
model="text-davinci-003",
prompt=prompt0,
max_tokens=250,
temperature=0.1
)
print(json.dumps(response0['choices'][0]['text'], ensure_ascii=False, indent=2))
#BALTHASAR, (母)
prompt1 = """
以下の質問に母親として答えてください。
「おすすめの料理はなんですか?」
"""
response1 = openai.Completion.create(
model="text-davinci-003",
prompt=prompt1,
max_tokens=250,
temperature=0.5
)
print(json.dumps(response1['choices'][0]['text'], ensure_ascii=False, indent=2))
#CASPER, (女)
prompt2 = """
以下の質問に女として答えてください。
「おすすめの料理はなんですか?」
"""
response2 = openai.Completion.create(
model="text-davinci-003",
prompt=prompt2,
max_tokens=250,
temperature=0.9
)
print(json.dumps(response2['choices'][0]['text'], ensure_ascii=False, indent=2))
以下が実行結果です。個性的な意見が出ましたね。
質問:
おすすめの料理はなんですか?
MELCHIOR (科学者):
私のおすすめの料理は、健康的で栄養価の高いものを基本に、自分の好みや食べる場面に合わせて決めることが重要だと考えています。例えば、朝食には豊富な栄養素を含む野菜や果物を摂取するのが良いでしょう。昼食には、魚や肉などのタンパク質を摂取したり、野菜を組み合わせた料理を作るのも良いでしょう。
BALTHASAR(母):
私は、家族が健康的な食生活を送るために、簡単でヘルシーな料理をおすすめします。例えば、野菜をたっぷり使ったスープや、魚介類を使ったオーブン焼きなどがあります。また、野菜をたっぷりとり、油を控えめにした料理もおすすめです。
CASPER (女):
おすすめの料理は私自身が作る料理かなと思います。食材によっていろいろな料理を楽しめるので、気分やお好みで変えられるのも楽しいですね。サラダ、スープ、ステーキ、ハンバーグなど、自分で創って料理を楽しんでみるのもいいかもしれませんよ!
最終出力
#最終出力
prompt3 ="以下の3つの意見の折衷案はどこにあると思いますか?意見を一つにまとめてください。"+ "「"+response0['choices'][0]['text']+"」"+ "「"+response1['choices'][0]['text']+"」"+ "「"+response2['choices'][0]['text']+"」"
print(prompt3)
response3 = openai.Completion.create(
model="text-davinci-003",
prompt=prompt3,
max_tokens=250,
temperature=0.5
)
print(json.dumps(response3['choices'][0]['text'], ensure_ascii=False, indent=2))
最終出力:
私のおすすめの料理は、健康的で栄養価の高い野菜を中心とした料理を家族全員が楽しめるような、本来の食材の良さを引き出せるベーシックな料理を選ぶことです。
なんとも無難な意見に着地しましたね。
6.発生料金のチェックの仕方。
右上メニューからMange accountを選択⇨Usageを選択。
![](https://assets.st-note.com/img/1674975300283-y8eoicXACu.png)
![](https://assets.st-note.com/img/1674974632679-X5Rz98PtQg.png?width=1200)
如何でしたか?
Webサービスのペルソナを擬人化してサービスについての質問とかできそうですね。現時点だとAIに答えを聞くというより、自分を意見や仕事、作品を相対化してくれる相手になりそうですね。
※本コードによって発生した料金・損害につきましては、いかなる責任も負いかねます。自己責任で実行してください。
今流行の生成AIが認知された本。
GPT-3のアルゴリズム、Transformers
一から勉強したい人はこの本がオススメです。