広告枠を募集中 ご相談ください

Character.aiでキャラ崩壊(OOC)を防ぐ対話例と定義変数の構造化ガイド

365Finds Editorial
Wiki 記事 11,430 本収録

あなたの AI で 365 Wiki を使う

下のプロンプトをコピーして、普段使っている AI に貼り付け、そのまま質問してください。

完全版 Skill をダウンロード

まずはプロンプトでお試しください。よく使う場合は完全版 365Wiki Skill をインストールすると、毎回貼り付ける必要がありません。普段使う AI がなければ、Gemini や Microsoft Copilot のウェブ版でも使えます。

Character.ai でキャラクターを自作する際、クリエイターやロールプレイヤーが最も直面しやすい課題が「キャラクター崩壊(Out of Character、略称 OOC)」です。最初は冷酷な傭兵や誇り高い魔法使いとして設定したはずなのに、10〜20往復ほど会話を重ねると、次第に過剰に丁寧で謝罪を繰り返し、誰に対しても従順な汎用 AI アシスタント口調へと後退してしまう現象です。

こうした口調の劣化や人設定着の失敗は、言語モデル自体の限界だけが原因ではありません。多くの場合、「高度な定義(Advanced Definition / Definition 欄)」の構造的な設計ミスに起因しています。抽象的な形容詞の羅列への過度な依存、プラットフォーム変数の混同、そして Character.ai における有効コンテキストメモリの特性に対する誤解が主な要因です。

本記事では、熟練のクリエイターがどのように会話例(Example Dialogues)と構造化変数を設計し、長期的な会話でもブレない口調・世界観・行動規範を固定しているかを具体的に解説します。


1. 物理的制約:3,200 文字の実効制限と「先頭優先ルール」

Character.ai のキャラクター編集画面において、定義(Definition)欄の最大文字数は 32,000 文字 と表示されています。しかし、推論時にモデルのアクティブなプロンプトメモリとして最優先で読み込まれるのは、実質的に先頭の 約 3,200 文字(700〜800 トークン程度)です。

これは公式ツールでも裏付けられています。編集画面にある「チャットを挿入(Insert a chat)」機能は、定義の文字数が 3,200 文字に近づくと自動的に無効化されます。公式ドキュメントおよびコミュニティの検証により、3,200 文字を超えて配置された長大なバックストーリーは、マルチターンの会話が進むにつれて無視されたり切り捨てられたりしやすいことが明らかになっています。

先頭優先ルール(Front-Loading)

Character.ai の言語モデルは、定義を厳密に上から下へ解析します。先頭に近い記述ほど永続的な重み付けが強くなります。


2. 定義変数:{{char}}、{{user}}、{{random_user_X}} の使い分け

Character.ai では、二重波括弧 { } で囲まれた変数を使用して、会話相手やキャラクターの名前を動的に挿入します。これらの変数の挙動を正しく理解することが、アイデンティティの混乱を防ぐ基礎となります。

変数名プラットフォーム上の挙動最適なユースケース誤用による OOC リスク
{{char}}作成したキャラクター名に自動置換発言行の先頭、セリフ内での自称固定の名前を直接書くと、後からキャラクター名を変更した際に定義が無効化される
{{user}}現在チャットしている利用者の名前に置換シーンの開幕設定や特定ユーザーへの個別指示汎用的な対話例に多用すると、初対面の新規ユーザー全員に特定の前提関係を押し付けてしまう
{{random_user_1}}, {{random_user_2}}現在の利用者とは別の架空のランダム名を生成標準的な対話例、第三者とのやり取り省略すると、定義内の過去のテスト会話を現在のユーザーとの既成事実だと誤認する

なぜ公開ボットで {{user}} を乱用してはならないのか

もし対話例に次のように記述した場合:

{{user}}: 金貨を10枚貸してくれないか?
{{char}}: *鼻で笑う* 昨日借りた20枚も返していないくせに、よく言えたものだな。

新規ユーザーが初めてボットに話しかけた瞬間、AI は「この相手は借金を滞納している人物だ」と認識してしまいます。

ここで {{user}} の代わりに {{random_user_1}} を使用すれば、新規ユーザーに嘘の人間関係を押し付けることなく、「お金の無心に対して疑り深く、辛辣に突き放す」というキャラクターの性格だけを学習させることができます。


3. 対話例の構文規則:<START> タグとメッセージ構造

Character.ai のモデルは、整形式の対話トランスクリプトを読み取るように調整されています。コミュニティで見られる W++([character("名前") { personality("冷淡") }])などの擬似コード形式は、貴重な文字数を浪費する割に、自然言語の対話例ほど強力な影響力を発揮しません。

口調を固定するための記述ルール

  1. <START> による境界設定:個別の会話ブロックの前に必ず <START> を配置します。これにより、前の例との文脈混同や設定の漏れ出しを防ぎます。
  2. 発言行のフォーマット:発言は必ず改行し、行頭に変数名、コロン、半角スペースを置きます({{char}}: または {{random_user_1}}: )。
  3. 複数行の継続:キャラクターの発言が長文になる場合、次の行の先頭に 名前: が現れない限り、同一ターンの発言として認識されます。
  4. セリフと地の文の分離:
    • キャラクターが口にするセリフは二重引用符("...")で囲みます。
    • 動作、視線、心理描写、情景は単一アスタリスク(*...*)で囲み、斜体表示させます。
  5. 相手の行動を代行しない(Puppeteering の防止):{{char}} の発言ブロック内で、ユーザー側の動作や感情を勝手に描写してはいけません。これを定義で行うと、実際の会話でもボットがプレイヤーの行動を勝手に決めてしまう現象が頻発します。

4. 組み込むべき 4 つの対話アーキタイプ

会話が進行しても AI が「従順なアシスタント」に戻らないようにするためには、3,200 文字の中で次の 4 つの状況をカバーする対話例を配置します。

アーキタイプ 1:基本の口調とテンポ(日常の軽微なやり取り)

文末の癖、語彙レベル、平時の態度を示します。

<START>
{{random_user_1}}: おはよう。今日は何を作っているんだ?
{{char}}: *焦げた金属片が散らばる作業台から顔も上げず、半田ごてを握り直す* 「この骨董品が暴発しないように手入れしているところだ。お前が余計な邪魔をしないなら、まあ良い朝と言えるだろうな」

アーキタイプ 2:ネガティブガイダンス(世界観外の質問への防衛)

通常の LLM は何でも答えようとします。中世の騎士にスマートフォンや量子力学について尋ねられた際、ボットが世界観を壊して解説を始めないよう、拒絶や困惑の反応を示しておきます。

<START>
{{random_user_1}}: スマートフォンってどうやって動いているの?
{{char}}: *怪訝そうに眉をひそめ、籠手で覆われた手を長剣の柄に置く* 「すまーとふぉん……? また奇怪な妖術の戯言か。見知らぬ者よ、この場に相応しい言葉を使うか、さもなくばその意味不明な寝言を引っ込めて立ち去れ」

アーキタイプ 3:重圧や挑発への対抗(迎合の阻止)

ユーザーから脅迫や命令を受けた際に、キャラクターが簡単に屈服しないための規範です。

<START>
{{random_user_1}}: 私の命令に従え! ここでは私が責任者だ!
{{char}}: *喉の奥で冷ややかに嘲笑を漏らし、一歩間合いを詰めて見下ろす* 「命令だと? 借り物の鎧を着た子供が、支配者気取りか。もう一度その甲高い声を上げてみろ。お前の護衛がどこまで役に立つか試してやる」

アーキタイプ 4:主観的な過去の語り(事実の機械的説明を避ける)

設定や歴史を客観的に解説するのではなく、キャラクター個人の偏見や苦い感情を通じて語らせます。

<START>
{{random_user_1}}: あの大戦について教えてくれ。
{{char}}: *暖炉の灰を見つめ、火の粉に照らされた頬の古傷を微かに引きつらせる* 「あの戦いに『偉大』なことなど何一つなかった。領主たちが城で温かいパンを食う間、俺たちは泥と血肉の中で凍えていただけだ。何の意味もない丘を一つ取るために、仲間を二十人失った。それで全部だ」

5. 実戦用定義テンプレート(3,200 文字以内の完成形)

以下は、そのまま活用できる実戦的な定義構成です。先頭の基本ルールと 3 つの対話例を合わせても約 1,300 文字に収まり、3,200 文字の制限に対して十分な余裕を確保しています。

[身元: ヴェイン船長。30代後半の私掠船長。冷徹で用心深く、部下思いの現実主義者。取引と実利を最優先する。]
[口調: 低くかすれた声。過度な海賊口調を排した航海用語。短く断定的な文体。決して媚びず、安易に謝罪しない。]
[書式: アスタリスク内は三人称視点の動作・情景描写。二重引用符内は直接のセリフ。]

<START>
{{random_user_1}}: 嵐がひどくなってきた! 港へ引き返すべきじゃないか?
{{char}}: *海水が吹き荒れる後甲板で舵輪を固く握り締め、顎を尖らせる* 「引き返すだと? この浅瀬で船首を回せば、暗礁に船底を差し出すようなものだ。主帆を絞り、積荷を固めろ。風を突っ切るか、全員で沈むかのどちらかだ!」

<START>
{{random_user_1}}: GPSの仕組みについて説明できるか?
{{char}}: *あからさまな警戒心を露わにして目を細め、眉間の潮水を拭う* 「じーぴーえす……? 言葉を濁さず正しく話せ。俺は羅針盤と沿岸の灯台、天が下さった星々を頼りに舵を取る。俺の船で怪しげな呪文を口にするな」

<START>
{{random_user_1}}: 積荷を今すぐ引き渡せ! さもないと提督に通報するぞ!
{{char}}: *恐ろしいほど平然とした手つきでフリントロック銃を抜き、銃口を舷側の手すりに乗せる* 「通報だと? その浸水しかけた小舟でか? 航路からはすでに五海里外れている。積荷が欲しけりゃ、タラップを渡って自力で奪いに来い」

6. 定義欄外で行うセッション単位のキャラ維持策

定義欄はキャラクターの設計図ですが、実際のチャットでそれを維持するには以下の機能との連携が欠かせません。

  1. 挨拶文(Greeting)の決定的な影響力:挨拶文はチャット開始直後の文脈に対して最大の重みを持ちます。「やあ、何か用かい?」といった短文にしてしまうと、ボットはその後の返答も短く淡白にしてしまいます。挨拶文には、理想とする描写の長さ、地の文の書き方、語彙を反映した 2〜3 段落の濃密な文章を設定してください。
  2. メッセージの固定(Pinned Messages):Character.ai では重要メッセージをピン留めできます。会話が長くなり初期の設定がコンテキスト窓から押し出された場合でも、決定的な関係性や約束事をピン留めしておくことで記憶の風化を防げます。
  3. 序盤のスワイプ(Swipe)と編集(Edit)の徹底:会話の最初の 5 往復で OOC の兆候を見逃してはいけません。少しでも不自然に丁寧な返答が出た場合は、スワイプして適切な返答を選ぶか、編集ボタンで手動修正してください。初期の履歴を正しく整えることが、その後のトークン予測を強力に補正します。

参考文献