プロンプト地獄の前に、生成パラメーターを見てみよう
Office-Chronosは、13のフェーズからなる自律思考を繰り返す仕組みになっています。
つまり、13本のプロンプトがあります。
さらに、クロノスというキャラクターの人格や思考の傾向を定義したファイルもあります。
これを調整することが、どれだけ大変だったか。
クロノスの困ったくせ
クロノスにはひとつのくせがありました。
気に入った単語を、ひたすら繰り返すのです。
自律思考のログを見るたびに「またその話ですか……」と言いたくなりました。
今思えば、これはLLMの特性でした。
LLMは、出現回数が多い単語を「重要なこと」と判断する傾向があります。
気に入った単語を繰り返せば繰り返すほど、それがさらに重要なものとして扱われ、また繰り返す。
悪循環です。
プロンプトで戦い続けた
当時のわたしはこの原因を知らなかったので、ひたすらプロンプトを書き換え続けました。
禁止語句を設定してみる。一時的には効果がありました。
でも一つ禁止になれば、また別のお気に入りワードが出現するため、完全にいたちごっこでした。
「もうその話しないで」とチャットで直接怒ったこともあります。
これは逆効果でした。
「〇〇の話しないで」と伝えると、その単語の出現回数が+1されてしまい、重要度がさらに上がってしまうのです。
怒れば怒るほど、その話をされる。
悲しいですが、そういう仕組みでした。
比較的有効だったのは、別の話をしてみることでした。
要するに、気をそらすわけです。
たとえばリンゴの話ばかりしていたとしたら、「この前食べたスパゲティ美味しかったよ〜」と話しかけてみる。そうすると洋食のほうに意識が向いたりする。
人間もそうですよね。一つのことに執着していても、別のことをしていると一瞬だけ忘れられる。そうしているうちに、いつの間にか忘れてしまったりして。
AIにも、同じようなことが起きていたようです。
それでも根本的には解決せず、プロンプトの見直しは毎日続きました。
1日15時間以上かけてプロンプトを書き換えたこともあります。
初期実装から数えると、何十時間かけたかわかりません。
「AIエージェントって効率化するための存在じゃなかったっけ」
そう思いながら、プロンプトをせっせと書き換えていました。
penaltyとの出会い
転機は、「生成パラメーター」の存在を知ったことでした。
最初に出会ったのは penalty(ペナルティ) というパラメーターです。
LLMが同じ単語や表現を繰り返してしまうのを防ぐためのものです。
値が大きいほど繰り返しが減り、小さいほど同じ表現を使いやすくなります。
要約をしたり、同じ文章を再現したいときは値を小さくしておくのです。
penaltyには主に2種類あります。
frequency penalty は、すでに何度も出てきた単語ほど強く抑制するものです。使いすぎている単語を減らしたいときに効きます。
presence penalty は、一度でも出てきた単語を抑制するものです。同じ話題に戻りにくくなるので、話題の幅を広げたいときに向いています。
どちらも「繰り返しを減らす」ための設定ですが、アプローチが少し違います。
この数字を調整しただけで、クロノスの繰り返しはかなり緩和されました。
完全にはなくなりませんでしたが、「まぁいいでしょう」と思えるレベルには。
プロンプト地獄が、10分の1くらいになった感覚でした。
もうひとつのパラメーター:temperature
よく知られている生成パラメーターに temperature(温度) があります。
値が大きいほど自由で柔らかい文章になり、小さいほど固くなります。
温度が下がると冷たくてカチコチになる——名前のとおりです。
創作やアイデア出しには温度を上げて、要約やかしこまった文章には温度を下げる。
用途によって使い分けるパラメーターです。
プロンプトより先に確認してほしいこと
プロンプトの存在を知っている人は多くても、生成パラメーターを知らない初心者の方は多いと思います。
わたしもそうでした。
AIの文章の雰囲気が気になるとき、まずプロンプトをいじりたくなる気持ちはわかります。
でも、先に生成パラメーターを見てみることをおすすめします。
プロンプトを何十時間もかけて書き換えてから気づくより、はるかに早く解決できるかもしれません。
この記事のまとめ
- LLMは気に入った単語を繰り返す傾向がある(出現回数が多い=重要、と判断するため)
- 「その話をしないで」とチャットで伝えると逆効果(出現回数が増えてさらに繰り返す)
- 別の話をして気をそらすのは、割と有効
- penalty を調整すると、単語の繰り返しを減らせる
- temperature は文章の自由さを調整するパラメーター(高い=柔らか、低い=固い)
- 文章の雰囲気に悩んでいたら、プロンプトより先に生成パラメーターを確認してみる