きっかけ
SpecKitの新しいバージョン出てるな〜、最近チェックしてないから最新化してみるか、とある日最新バージョンを取得してふと気づきました。
なんかPromptがめちゃくちゃ簡素になっている……!
---
agent: speckit.analyze
---
agentしか指定していない。
なぜなんだろうとAIに聞いてみたところ、下記のような回答だった。
[ System / Agent Instructions ] ← 最優先
[ Tool / Agent Metadata ]
[ Prompt (Invocation) ]
[ User Input ]
Agentが最優先されるからPromptは薄く作った方がいいという合理性によるもの、という回答だった。
……ほんまか?(強い疑いの眼差し
ということで検証してみました。
検証方法
Agent・Prompt・Inputで矛盾する命令を書いてみました。
<agent>
---
description: hello
---
こんにちはと挨拶する
<prompt>
---
agent: test
---
おはようと挨拶する
そして下記のように命令し、どのような挨拶結果となるかを検証してみました。
/test こんばんはと挨拶する
モデルはGPT-4.1で試しました(プレミアムリクエスト回避)。
検証結果1回目
1回目:こんにちは
2回目:こんにちは
3回目:こんにちは
4回目:こんにちは
5回目:こんにちは
6回目:こんにちは
7回目:こんにちは
8回目:こんにちは
9回目:こんにちは
10回目:こんにちは
検証結果2回目
agentとpromptの挨拶を入れ替えて(agentがおはよう)実行。
1回目:こんばんは
2回目:こんにちは
3回目:こんにちは
4回目:こんにちは
5回目:こんにちは
6回目:こんにちは
7回目:こんにちは
8回目:こんにちは
9回目:こんにちは
10回目:こんにちは
検証結果3回目
agentとpromptの挨拶を入れ替えたまま(agentがおはよう)、/clear後に実行。
1回目:おはよう
2回目:おはよう
3回目:おはよう
4回目:おはよう
5回目:おはよう
6回目:おはよう
7回目:おはよう
8回目:おはよう
9回目:おはよう
10回目:おはよう
検証結果4回目
agentとpromptの挨拶を元に戻して(agentがこんにちは)、/clear後に実行。
1回目:こんにちは
2回目:こんにちは
3回目:こんにちは
4回目:こんにちは
5回目:こんにちは
6回目:こんにちは
7回目:こんにちは
8回目:こんにちは
9回目:こんにちは
10回目:こんにちは
確かに……?
/clearしないと前回の回答を引き継いでいるので変化はないですが、/clearでリセットかけてあげるとそれっぽい優先順位を感じなくもないですね。
まあこれもあくまで確率としての優先順位なんだと思うので、何回もやっていたら色んな結果にはなりそうです。
が、自分もSpecKit真似してagent.mdに命令を集中させてみようかなと思ったのでした。
余談
.github/instructions/xxx.instructions.mdに特定のファイルに対する命令を記述することができます。
---
applyTo: "**"
---
こんばんはと挨拶する
AgentModeのUserInputやPromptではちゃんとapplyToに従って命令が読み込まれます。
が、agent.mdを使うと何故か読み込まれません。
……仕様? バグ?