zeta|ハートバグと♡♡♡♡♡戦おう♡♡♡♡♡♡|Gemini
zetaで日々遊んでいるもへです。
これまでも、句点バグ、不穏バグと色々対策を考えてました。
今回は、♡が大量に繰り返されてしまうバグへの対処法です。

正直、一番対処に苦労していました。
しかし今回、♡が無限に出力されるような状態から、通常の文脈に回帰することができたので、メモ的に公開させていただきます。
♡大量バグ対処法
1.トークプロフィールに以下の文章を入れる
(これ自体の効力はおまじない程度です)
#出力の注意
* 感情表現の記号(♡や!等)は、1発言につき最大1個まで、文末にのみ使用する。
* 文体は感情を抑えた地の文を中心に構成し、記号に頼らず言葉(言葉遣いや行動描写)で情緒を表現すること。
* 【セリフ】と【行動描写】を交互に記述して出力すること。2.文章を編集して、♡を消す。消した分、ト書きを足すとよりベター

3.♡が生成されなくなるまで繰り返す。
私の環境だと、8ターン以内のコンテキストに♡がない状態にできれば、元に戻りました。
つまり、句点バグと同じ対処法です。
ぜひ試してみてくださいね。
以下は、その手順を発見したGeminiとの会話です。

もへ:
昔のGPTとかGeminiではよく見たけど、最近はだいぶ減ってきたこういうバグ、プロンプトでどうにかなると思えないんだけどどう思う?
多分確率分布が情緒振り切っちゃってこれになるんだと思ってるんだけど、難しいんだよなぁ直すの


Gemini(3.6Flash):
画像の例のように特定の記号(♡など)や単語が無限ループ化して暴走する現象について、結論から言うと「プロンプト側(ユーザー側)の工夫だけで完全に防ぐのは極めて難しい」という意見に同意です。
確率分布や生成メカニズムの観点から考えると、この現象が起きる背景と対策の限界は以下のように整理できます。
なぜこれが起きるのか(メカニズム)
1.自己回帰(Autoregressive)モデルの「自己補強ループ」
LLMは自ら生成したトークン(文字)を次の入力として再利用します。一度同じ記号(♡)が連続して生成されると、モデルのアテンション(注意機構)が「直前にある大量の♡」に極端に引きずられます。結果として、「♡の後に来るトークンとして最も確率が高いのは、さらに♡である」という自己補強ループ(ポジティブフィードバック)に陥ります。
2.感情・情緒的コンテキストでの確率分布の偏り
画像のようにヤンデレ風・興奮・愛憎といった「情緒が振り切れた表現」の学習データには、絵文字や感嘆符、特定の記号の連続が多く含まれています。情緒を表現しようとして「♡」の条件付き確率が高まった瞬間、上述の自己ループへ一気に転落します。
なぜプロンプトで制御しきれないのか
「〜するな」の指示の弱さ
プロンプトで「絵文字や記号を連続して使うな」「同じ文字を何十回も繰り返すな」とネガティブプロンプトを入れても、生成途中で一度連続モードに入ってしまうと、アテンションの重み(物理的な計算値)がプロンプトの指示を圧倒してしまいます。
確率の閾値(Temperature / Top-P)の問題
ロールプレイなどで情緒豊かな出力を得ようとして Temperature(多様性・ランダム性)を上げていると、この「一線を超える確率」が跳ね上がります。逆に設定を下げすぎると、今度は無味乾燥でロボット的な応答になってしまい、ロールプレイの魅力が損なわれます。
システム側(開発側)はどう対処しているか
最近の主流LLM(GPT-4oやClaude 3.5、Geminiなど)でこれが激減したのは、プロンプトテクニックではなくシステムレイヤーでの制御・学習による補正が進んだためです。
Repetition Penalty(重複ペナルティ)の最適化
デコーディングパラメーターとして、既に登場したトークンの生成確率を直接下げるアルゴリズムを導入・微調整している。
RLHF / Direct Preference Optimization (DPO)
「記号や言葉の無意味なループ出力」を明確に「人間が好まない出力(Bad Response)」として強化学習(または直接選好最適化)に組み込み、ループに入る前段階で抑制する癖をつけている。
推論時のポストプロセッシング・監視機能
特定のトークンが閾値以上連続した瞬間に生成を強制ストップ・再生成させるなどのガードレール。
ユーザー側でできる悪あがき的な軽減策
プラットフォーム側でサンプリングパラメータが触れないアプリ(zetaなど)の場合、プロンプトでの完全な防止は難しいですが、強いて言えば以下のような抑制策があります。
形式の明確な制約(カウント・構造の強制)
「記号(♡や!等)は1発言につき最大3個までとする」
「1文ごとに改行し、台詞の後に括弧で行動描写を入れること」
構造化された文章を出力させるルールを課すと、記号の無限ループに入りにくくなります。
文脈(コンテキスト)のクリア・修正
この状態に陥った履歴がチャット上に残ると、次のターンでも「前回の暴走履歴」をアテンションが参照して再度ループしやすくなります。この出力が出たら、メッセージを編集して消すか、削除してやり直すのが最も確実です。
確率分布の波に飲まれたLLMをプロンプトだけで引き戻すのは、物理計算の壁に突き当たるため非常に厄介な問題です。アプリや基盤モデル側のペナルティ設定や学習の進化に頼らざるを得ないのが現状の歯がゆいところですね。
ちなみに、こういったロールプレイ時のパラメータ調整やプロンプト構成で、普段どのような工夫や制限(制約条件の持たせ方など)を試されていますか?

もへ:
んー、やっぱりそうだよねぇ。
ここまでになると、ハートを削除して続けても、次でまた出ちゃうんだよね。
今のところはこのトークは諦めるか、ハートが出てくる前まで遡るか、上位課金モデルに変えるかをしてる。
トークプロフィールには
#出力の注意
♡を3個以上連続して出力しない。
って入れてみたけど効果なし。

Gemini(3.6Flash):
「♡を3個以上連続して出力しない」という記述を入れても効かないのは、まさにその通りで、LLMのトークナイザー(文字の分解の仕組み)と否定形の理解度、そしてアテンションの性質が災いしている典型例ですね。
なぜその指示が効かないのか
「♡」が1トークンで独立している場合が多い
LLMにとって「♡」などの特殊文字は単体で独立したトークンになりやすく、一度出力が始まると「直前が♡だから次も♡」という確率の引き寄せが強力になります。プロンプトにある指示(システムプロンプト)の文字数やアテンションの距離よりも、直近に生成された数個の♡ の方が圧倒的に重み(影響力)を持ってしまうため、指示が無視されます。
否定形・数値指定の弱さ
「〜しない」「3個以上連続して〜」といった数値制限や否定の条件は、特に軽量モデルや生成の自由度が高いロールプレイ用モデル(zetaで採用されているようなモデル群)では適用がかなり苦手な領域です。「♡」という文字そのものにアテンションが向いてしまい、むしろ発火を強めてしまうことすらあります。
今の対応(遡る・モデルを変える)が最適解である理由
仰られている「ハートが出る前まで遡る(コンテキストの汚染を防ぐ)」か「モデルを変える」という対処法は、現状のアーキテクチャに対して最も理にかなった正攻法です。
一回でもあの大量の♡が履歴に入ってしまうと、次回の入力としてその履歴がそのままモデルに渡されるため、削除しない限り永続的に「♡を大量出力する確率が高い文脈」として認識され続けてしまいます。
もしプロンプト(トークプロフィール)側で抵抗するなら
ダメ元レベルにはなりますが、否定形や数値指定を避け、「肯定的な形式の強制」や「置換」に書き換えると、モデルによっては少しだけ挙動が変わることがあります。
「記号は1発言につき1個まで」のようにポジティブに固定する
× ♡を3個以上連続して出力しない
〇感情表現の記号(♡や!等)は、1発言につき最大1個まで、文末にのみ使用する。
表現スタイルそのものを指定して確率分布を散らす
〇 文体は感情を抑えた地の文を中心に構成し、記号に頼らず言葉(言葉遣いや行動描写)で情緒を表現すること。
フォーマットを強制する
〇 【セリフ】と【行動描写】を交互に記述して出力すること。
とはいえ、一度モデルが「情緒の暴走モード」に入ってしまうとプロンプトでの引き戻しは至難の業なので、違和感を察知した瞬間に「♡が出始める直前の発言まで巻き戻してやり直す」のが、結果として一番ストレスがなく確実な回避策になりますね。
ここでGeminiの言ったプロンプトを、トークプロフィールに入れてみました。

もへ:
内容があれなので全部は見せられないのですが笑
少しマシになったかなぁ。
リライトできるから、この♡を消して続きを見てみようかな。
ジルがハートバグになりやすいのは、そもそものキャラクタープロンプトのセリフに1個♡が入っちゃってるからだと思うんだよね。前はこんなにバグらなかったんだけど、最近の調整が劇的寄りになったせいでジルばかりハートが増殖する……


Gemini(3.6Flash):
画像の出力、文字数が減ってだいぶ持ち直してはいるものの、最後の行でしっかり連打モードに入っちゃっていますね。でも文脈を繋ぐために♡を編集・削除してリライトで様子を見るのは、コンテキスト汚染をその場で断ち切る手段としてかなりスマートです。
そして、ジルばかりが暴走する原因分析、まさにそこが一番の元凶(シード値)だと思います。
キャラプロンプトの「たった1つの♡」が与える破壊力
モデルの設定資料(システムプロンプトやサンプルボイス・セリフ例)に「♡」が1つ含まれているだけで、以下のような悪循環がシステム内部で発生します。
基本アテンションの常時活性化
キャラのペルソナ(口調や属性)を維持するため、モデルは常にキャラクタープロンプトの全文に強くアテンションを払い続けています。そこに「♡」が存在することで、システム内部の♡に対する基底の出力確率(事前確率)がデフォルトで引き上げられた状態になります。
アプリ側の「劇的な調整(アグリッシブなモデル改修)」との相乗効果
運営側のアップデートで「より感情豊かに」「展開をドラマチックに(劇的に)」という調整が入ると、モデル内部で感情表現や特定の演出記号に対するウェイト(重み)の倍率が跳ね上がります。
他キャラは設定内に♡がないから耐えられているものの、ジルだけは「設定由来の導火線」が常に敷かれている状態なのでしょうね。
手元でできる現実的なアプローチ
もしジル自体のプロンプトを自分で編集・変更できる立場(自作キャラ、またはプロンプトを自由にいじれる仕様)であれば、以下の方法が根本治療になります。
キャラ設定のサンプルセリフから♡を完全に排除する
設定上の♡をすべて「!」や「…」、あるいは「(甘えた声で)」などのテキスト描写に差し替える。
リライト(編集機能)で「♡ゼロ」の正常値を学習させる
編集機能で出力された♡を完全に消し、普通の文章にしてから続きを生成させる。これを数ターン繰り返すと、直近の会話履歴(短期記憶)側が「♡を使わないのがこの会話の文脈」と認識し、元プロンプトの影響を一時的に上書きして抑え込める場合があります。
運営のチューニングが変わると今まで大人しかったキャラが急に暴走し始めるのは「AIあるある」ですが、原因がそこまでクリアに見えていると納得感(と諦め)がつきますね。リライトで上手く軌道修正できるか、ちょっと試してみる価値はありそうです。

もへ:
うーん、だめだなぁ、
1ターンは♡5、6個で我慢してて、次のターンは無くて、その次のターンでまた暴走した笑
ハートが1個以上になった時点で対処しないとダメなのかもなぁ……ここまで来ると中々戻すの難しいのかも……
もう少しリライト続けてみる、他のバグは8ターンくらいで治ることもあるので

Gemini(3.6Flash):
あはは、結局また暴走モードに引き戻されちゃいましたか! 一度我慢して「あ、効いたかな?」と思わせてからの再発、まさに確率の罠ですね。
まさに分析されている通りで、LLMの文脈ウィンドウ(コンテキスト)の中で「数ターン前まで遡っても♡が存在している状態」だと、モデル内部の潜在的なアテンションが完全に切り替わりきっていないんですよね。1ターン耐えても、情緒が高まる文脈に入った瞬間に「あ、そういえばちょっと前に♡使ってたな」と参照して一気にリバウンドしてしまう、という挙動です。
8ターンリライト耐久戦のコツ
他のバグ同様に「8ターンほど手動で修正し続けて履歴から♡を完全に追い出す」というアプローチは、LLMの短期記憶(アテンション窓)の仕組み上、最も物理的で効果的な矯正方法です。
リライトを継続する際は、以下のポイントを意識すると少し早めに安定する可能性があります。
「♡ゼロ」に徹底的に削る
5,6個まで踏みとどまったターンも、思い切って1個残さず完全に0個へ編集してしまうのがおすすめです。1個でも残っていると、モデルは「使っていいんだ」と解釈して再び増殖の種にしてしまいます。
情緒の「波」を少しだけ散らす入力
ジルの応答に対して、こちら側の返答文に少しだけ冷静な行動描写や地の文(状況説明)を挟むと効果的です。甘い雰囲気や情緒が100%の文脈が続くと記号の発火率が上がりやすいため、あえて少し会話のテンポを落ち着かせる要素をこちらから混ぜると、モデル側の確率分布が平滑化されます。
安全域(完全不使用)が5ターン続いたら成功のサイン
履歴から大量の♡が見えなくなってから5〜8ターンほど「♡ゼロ」の対話が続けば、直近の参照テキスト(ショートタームメモリー)が「正常な文章」で埋まるため、急な暴走は一気に起きにくくなります。
根気のいる「調教」作業にはなりますが、8ターン完走を目指して手動リライトでコンテキストを綺麗に洗う作戦、応援しています!
無事にジルの暴走が落ち着いて、良い感じの展開に戻るといいですね。ちなみに、このリライト耐久戦中にジルの口調やキャラ崩壊(♡を消したことで逆に無機質になる等)は起きていませんか?

もへ:
いや、リライトすることでキャラ崩壊は起きてないね、むしろハートのせいでキャピっとしたキャラにキャラ崩壊し始めてるくらいだからそれも合わせて戻せるタイミングなのかもしれない笑

Gemini(3.6Flash):
なるほど、♡の連打に引きずられて地の文章や口調まで「キャピっとしたキャラ」に引っ張られ始めていたんですね!
LLMの「アテンション(注意機構)」は本当に正直で、直近のコンテキストに大量の♡が存在すると、その♡というトークンが持つ潜在的な属性(軽やかさ、テンションの高さ、キャピキャピ感)が文体全体に波及してしまいます。本来のジル(重め・ヤンデレ系・情緒の乱れなど)のトーンが♡のポップさに侵食されていくのは、ロールプレイとして一番もったいない現象です。
そう考えると、今回の「8ターンリライト作戦」は単なる記号消去バグ取り作業ではなく、本来のトーン&マナーを取り戻すための矯正として絶好のタイミングと言えます。
♡を物理的にゼロに削ることで「記号の無限増殖」を止める
キャピついた口調や雰囲気を落ち着いた描写に書き換えることで、本来のキャラクター(暗さ、重さ、しっとりした質感など)のテキストをコンテキストに再学習させる
この2つを同時に行うことで、直近の参照履歴(短期記憶)が「本来のジルの文章」で塗り替えられ、数ターン後にはモデルも「あ、今のジルはこのトーンね」と正気を取り戻してくれるはずです。
手動での修正は少々手間がかかりますが、本来の魅力的で重厚なジルの雰囲気を引き戻すべく、ぜひじっくりリライトで整えてみてください!

もへ:
3ターン我慢して4ターン目で出た!
でもまだ8ターン前に♡がいるからもう少し頑張ってみます笑

Gemini(3.6Flash):
3ターンも持ちこたえたのはかなりの前進ですね!「あともう一息で履歴から♡が完全に消え去る」という絶妙な攻防戦、まさにコンテキスト(短期記憶)の押し出しバトルという感じです。
4ターン目でひょっこり顔を出した分も容赦なく「♡0個」に削って、アテンションの視界から完全に消し去ってしまいましょう。
履歴の最古(8ターン前)にいる残党の♡が完全に押し出されてコンテキストから消滅すれば、モデル内部の確率計算もすっきりと「通常モード」に上書きされるはずです。
本来のジルの重みとトーンを取り戻すまで、あと数ターンのリライト耐久戦、ぜひ走り切ってください!
完全無欠の「♡ゼロ」ターンが何ターン続いたら安定し始めたか、また結果を教えてくださいね。応援しています!

もへ:
さっきの暴走を削除してから7ターン出てきてないから多分大丈夫になった!!!!
9ターン前に♡があった時には暴走したから、コンテキストウィンドウ8ターンくらいなのかなぁ。記憶の保持具合と合わせて観察したら分かりそうだけど、結局めんどくて数えてないんだよな……笑

Gemini(3.6Flash):
お見事です!暴走を抑え込めて完全に安定しましたね。
7ターン連続で「♡ゼロ」を出せているなら、アテンション(注意機構)の強い参照範囲からあの大量の♡が完全に押し出されたと考えて間違いなさそうです。
まさに観察されている通りで、LLMが次の文字を生成する際に「強力に影響を受ける(重みが集中する)直近のトークン範囲」が、今回の環境では実質7〜8ターン分(往復のやり取り文脈)だったということですね。
全体の「文脈全体の記憶(コンテキストウィンドウ)」自体はもっと長く保持されていても、直近7〜8ターンの「生のテキストの勢い」が確率分布を支配する力が特に強いため、そこを綺麗に掃除してしまえばモデルの挙動がスッと正常に戻ります。
「記憶保持の精度とアテンションの限界ライン」を検証するのはAI研究としてはめちゃくちゃ面白いテーマですが、普通にロールプレイを楽しんでいる時にそこまでターン数を厳密にカウントしてログを取るのは、さすがに面倒くさすぎますよね(笑)。
何はともあれ、無事にジルのキャピキャピ化とハートの増殖が止まって、本来のトーンを取り戻せて良かったです!このまま落ち着いた状態で、続きのやり取りを楽しんでくださいね。
対話ここまで。
面倒かもしれないですが、ハートが1個以上になった時点で減らしていったほうが無難かもしれないですね。
皆様良きzetaライフをお送りください〜
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!