見出し画像

GPT4は有能秘書ではない。的確に指示を出すとはどういうことか

前回の続きです。もう修正させたりプロンプト出すのが楽しい今日この頃です。さて、前回作ったプログラム実は欠点がありまして

ロボ  胴  (in11*18/-36)=a11     
    手足 (in11*18*4/-36)=t11
    頭  (in11*18/-36)=d11
    ロボ (in11*18/36)=r11

ロボットを作るためのリソースの時間が36時間で、組んでるプログラムは18時間で計算してる
式の意味は胴1手足4頭1と36時間消費してロボ1台作るという意味である

前回作ったプログラムは「18時間の労働で生産・消費する量(小数点は四捨五入)です。棟数を変更すると、自動的に計算されます。」という代物。
これを数値を入れるとこうなる。

ロボット工場
1棟の時の変数 頭:手足:胴:ロボ=0:-2:0:0
2棟の時の変数 頭:手足:胴:ロボ=-1:-4:-1:1
3棟の時の変数 頭:手足:胴:ロボ=-2:-6:-2:1
4棟の時の変数 頭:手足:胴:ロボ=-2:-8:-2:2
5棟の時の変数 頭:手足:胴:ロボ=-2:-10:-2:2
6棟の時の変数 頭:手足:胴:ロボ=-3:-12:-3:3

どうやら工場を合算すればロボットが生まれると考えたようだ。どっかの企業の労働力計算法(二人その作業に従事すれば三人いるとみなす)じゃないんだからさ。そんなブラックいらないよ。

さて、いろいろ相談するとどうも18時間の計算の時間を変数にして18・24・36時間に変えればいいじゃんねぇと思いついたので投げた。その結果

elif factory == 'ロボ':
if resource == '胴':
result_value = round(value * current_working_hours * 1 / -36)
elif resource == '手足':
result_value = round(value * current_working_hours * 4 / -36)
elif resource == '頭':
result_value = round(value * current_working_hours * 1 / -36)
elif resource == 'ロボ':
result_value = value if current_working_hours >= 36 else 0
# ロボットの数は36時間以上でなければ0になります

このプログラムの時 ロボット工場1棟の時時間の変数を与えるとこう表示されます。
18時間での1棟の時の変数 頭:手足:胴:ロボ=0:-2:0:0
24時間での1棟の時の変数 頭:手足:胴:ロボ=-1:-3:-1:0
36時間での1棟の時の変数 頭:手足:胴:ロボ=-1:-4:-1:1

うーん。やっぱり確率論だからダメっ娘秘書だ。そこでこれを追加して投げてみた

これを18時間・24時間の場合何棟入れても頭:手足:胴:ロボがゼロ表示になるように表示を直したいのでプログラム修正をお願いします。
例)
18時間での1棟の時の変数 頭:手足:胴:ロボ=0:0:0:0
24時間での1棟の時の変数 頭:手足:胴:ロボ=0:0:0:0
36時間での1棟の時の変数 頭:手足:胴:ロボ=-1:-4:-1:1
18時間での2棟の時の変数 頭:手足:胴:ロボ=0:0:0:0
24時間での2棟の時の変数 頭:手足:胴:ロボ=0:0:0:0
36時間での2棟の時の変数 頭:手足:胴:ロボ=-2:-8:-2:2


18時間
24時間
36時間

おおおお、今度は無駄なやり取りしなくてちゃんと返せたぞ!

つまり、対人だとこういう指示でいいと思われる

僕「ここのロボなんだけど、36時間はちゃんとリソース表示するけど、それ以外の時間帯は棟数を入れても表示されないようにしてくれない?」
P「OKOK」

ダメっ娘秘書の場合はこれだと確率論で確実に外してくるので的確に的を絞る必要があるのだ。また、具体例を示すとより理解しやすいのは他の方の指示法や教科書を見ると分かっていたので要は「めんどくさがらずに的確に指示を出すこと」が大事だと思われる。

あと、ダメっ娘秘書は確率論で動くので複数の指示や作ってる途中に別の質問をするととたんにダメになる。

# それぞれの建物についての情報を持つクラスを定義します。
class Building:
def __init__(self, name, variables, equations):
self.name = name
self.variables = variables
self.equations = equations

# 各建物の定義を作成します。
buildings = [
Building("製材所", {"in": 1}, {"m": lambda x: x["in"]}),
Building("歯車", {"in": 2}, {"i": lambda x: x["in"], "h": lambda x: x["in"] * 3}),
Building("製紙", {"in": 3}, {"m": lambda x: x["in"], "s": lambda x: x["in"]}),
Building("加工所", {"in": 4}, {"i": lambda x: x["in"], "k": lambda x: x["in"]}),
Building("精錬所", {"in": 5}, {"m": lambda x: x["in"], "b": lambda x: x["in"]}),
Building("爆薬工場", {"in": 6}, {"s": lambda x: x["in"]}),
Building("燃料", {"in": 7}, {"p": lambda x: x["in"] * 18 * 2 / -3, "w": lambda x: x["in"] * 18 * 2 / -3, "n": lambda x: x["in"] * 18 * 30 / 3}),
Building("頭", {"in": 8}, {"i": lambda x: x["in"] * 18 / -18, "h": lambda x: x["in"] * 18 * 3 / -18, "b": lambda x: x["in"] * 18 / -18, "a": lambda x: x["in"] * 18 / 18}),
Building("手足", {"in": 9}, {"i": lambda x: x["in"] * 18 / -4.5, "h": lambda x: x["in"] * 18 * 3 / -4.5, "t": lambda x: x["in"] * 18 / 4.5}),
Building("胴", {"in": 10}, {"i": lambda x: x["in"] * 18 * 5 / -18, "b": lambda x: x["in"] * 18 / -18, "n": lambda x: x["in"] * 18 / -18, "d": lambda x: x["in"] * 18 / 18}),
Building("ロボ", {"in": 11}, {"a": lambda x: x["in"] * 18 / -36, "t": lambda x: x["in"] * 18 * 4 / -36, "d": lambda x: x["in"] * 18 / -36, "r": lambda x: max(0, x["in"] * 18 / 36)})
]

# 各建物を処理します。
for building in buildings:
print(building.name)
for var, equation in building.equations.items():
result = equation(building.variables)
print(f"{var}: {

途中質問を入れてcode出してといったらこの有様

なので

指示は一つ
途中に関係ない質問を入れない
具体的にエラーややりたいことを指示する

これだけでもかなり効率は上がる。

この記事が気に入ったらサポートをしてみませんか?