LLMでリフレクションをさせると回答が良くなるらしい。

LangGraphを使ったReflection Agent: SNS投稿コンテンツ提案Agent|はち

リフレクションと言うのは何か?というと、普通はLLMが出した答えをそのままファイナルアンサーとしてお出しするわけだが、リフレクションでは一旦立ち止まってLLM自身に回答をチェックさせてから、それを踏まえて改めてもう一度ファイナルアンサーを出させるという手法である。

つまり、こういう感じでプロンプトを渡す

①普通に質問をLLMに入力して回答させる

②①の回答を入れて、「この回答を改善するフィードバックを書いてください」として回答させる。

③①の回答と②のフィードバックを入れて、「前回の回答とそのフィードバックを踏まえて改善された回答を答えてください」として回答させる。

まあこんだけの事だ。

ただ単にLLMにリフレクションさせるのとリフレクションエージェントさせるのでは何が違うのか?というと、普通のリフレクションは決め打ちで1回とか2回とかリフレクションさせるが、エージェントの方はLLM自身が納得いくまで改善を繰り返して、完璧だと判断したタイミングでファイナルアンサー出してくださいと意思決定をLLMに委ねている点が違うと思う。

普通にLLMに答えさせるだけなら1回API叩けば済むのに、リフレクションを使うと1回フィードバックさせるだけで3回もAPI叩くハメになって、コストも時間も3倍かかるのが弱点だと思う。

とは言え、たとえばGemini1.5FlashとGemini1.5Proではそもそもコストが50倍も違う。だからGemini1.5Flashをリフレクションさせてコストが3倍になったところで、それで性能がグンと上がるならGemini1.5Pro使うより全然オトクになっちゃう可能性もあるから、試してみる価値があるかもしれない。

てなわけでやってみた。リフレクションを行ったファイナルアンサーの回答をShaberi3ベンチにかけてみた。ちなみにリフレクションは毎回必ず1回だけ行わせるようにした。(つまり1問ごとに3回の推論)エージェント的な継続判断は今回させてない。

結果、リフレクションなしの普通の回答ではスコア8.03だったのが、リフレクションありの回答ではスコア7.98だった。スコア上は全然性能上がってないし、なんならちょっと下がった。

image.png

まあ、Shaberi3のベンチスコアは結構ブレがあるので、もう一回やればスコア上がる可能性もあるが、いずれにせよ目に見えてハッキリと性能が上がった…なんて事にはなってないようだ。

どうしてスコアが上がらないのだろうか?リフレクションで精度が上がるには元々ある程度の賢さが必要という話もあるので、もしかするとGemini1.5Flashでは賢さが足りないのかもしれない。

あるいはフィードバックを書かせるプロンプトがザツすぎるのが悪いのかもしれない。もっとちゃんとプロンプト調整すると良くなるかもしれない?いずれにせよ、テキトーなリフレクションだけではスコアは上がらないらしいという事だ。