優れたエントリの書き方
エントリは、あなたが作るものの中で最も重要な要素です。プラットフォーム上のすべてのワールドはエントリを使っており、人気作の多くはルールを一切使わず、よく練られたエントリだけで動いています。
このガイドでは、ワールドを生き生きとさせるエントリを書く技術を解説します。エントリとセクションの基本については はじめに:エントリ を参照してください。
生きていると感じられるキャラクターを書く
プラットフォーム上のベストワールドは、他の何よりもキャラクターエントリへの投資が大きいです。何が機能するかを解説します。
性格はラベルではなく行動として書く
特徴を列挙するだけではいけません。その特徴が行動にどう現れるかを描きます。
こう書くのではなく:
Kasuは内気で、内向的で、受け入れられたいと切望している。
こう書きましょう — Poison in the Jar(壺中の毒 · 大逃杀) カードの実際のKasuのエントリより:
Kasuはあまりに内向的で、存在感がほとんど登録されない。彼が最も望むのは受け入れられること。学校での3年間、自発的に誰かに話しかけることはほとんどなかった — 冷たいからではなく、恐れているからだ。口を開けば拒絶され、嘲笑され、無視されるのではと怯えている。だから黙り、自分を背景に変えている。
洞窟グループでは、Kasuはひっそりと最も肉体的な仕事をこなす — 小川から水を汲み、寝具を整え、干潮時に貝を集める。決して文句を言わない。「やることがある」ことこそ、彼が必要とされていると感じられる唯一の手段だからだ。
AIは「内気」を一貫して演じることはできません。しかし「水を汲み、文句を言わず、自分を背景に変える」ことを一貫して演じ続けることはできます。
関係性のステージ
最も没入感のあるワールドは、プレイヤーとの親密度に応じてキャラクターの振る舞いを変えます。Sakura Seasonはこれを見事に行っています。3人のヒロインそれぞれに、4段階の親密度(0-25、26-50、51-75、76-100)での行動記述があります。
これは、変数がしきい値に達したときだけアクティブになる、関係ステージごとに1つのエントリで実現できます。
- 初期(親密度 0-25):堅苦しく、警戒し、表面的な会話
- 信頼が芽生える(親密度 26-50):意見を共有し始め、たまに弱さを見せる
- 親密(親密度 51-75):内輪のジョーク、心地よい沈黙、助けを求める
- 深い絆(親密度 76+):完全に弱さを見せる、独特な言葉遣い、守ろうとする
関係変数が変わるとAIへのガイダンスが自動的に切り替わります。
セットアップ方法
エントリエディタ自体は キーワード をトリガーとしてしか公開していません。変数ベースの条件に対応するUIは ありません。親密度のような変数でエントリをゲートするには、ビヘイビア(ルール)システムと toggle-entry アクションを使います。
- Chat History にステージごとに1つずつエントリを作成します(「Rin — Early Stage」「Rin — Growing Trust」など)。すべてデフォルトで 無効 にしておきます。
- 各ステージにビヘイビアを追加します。
- When:変数が変化したとき(または毎ターン)
- If:例
rin_affinity >= 26 AND rin_affinity < 51 - Then:
toggle-entryで「Rin — Growing Trust」を enable、他を disable
エンジンは毎ターン条件に基づいてエントリのオン/オフを切り替え、マッチするステージのコンテンツだけがAIに届きます。
上級クリエイターがJSONからワールドを駆動している場合(Studio AI、Claude Codeなど World Spec経由)、
WorldEntryに直接conditions: [...]を設定することもでき、エンジンがロアブックマッチャーで評価します。ただしエディタUIは現時点でそのフィールドを公開していないため、製品内ではビヘイビア経由が標準ルートです。
完全なスキーマリファレンス → World Spec:エントリ
キャラクターシートの公式
成功した数十のワールドを研究して見出した、機能するパターンは次のとおりです。
- アイデンティティ(1〜2文):名前、役割、コアな特徴
- 外見(2〜3文):プレイヤーが目にするもの。一般的な記述ではなく具体的な細部
- 行動パターン(メイン):話し方、緊張/怒り/喜び時の行動、習慣、矛盾
- プレイヤーとの関係:最初プレイヤーをどう見るか、何が見方を変えるか
- 秘密:AIは知っているがキャラクターは簡単には明かさないこと
行動パターンのセクションこそ、ほとんどのクリエイターが投資不足になる場所です。そして魔法が起きる場所でもあります。
ロアブック:必要に応じたコンテキスト
ロアブックはキーワードトリガー方式のエントリシステムです。5万語の世界観があってもAIが速くフォーカスを保てる理由がここにあります。
良いキーワードリストの設計
エンジンは直近のメッセージをキーワードでスキャンします。1つでもキーワードがマッチすればエントリがトリガーされます(ORロジック)。プレイヤーがそれをどう参照しうるかを考えましょう。
タヴァーンに関するエントリの場合:
tavern、inn、bar、drink、bartender、pub
Sakurai Kimika というキャラクターのエントリの場合:
Kimika、Sakurai、class rep、class representative
Whole word matching:短いキーワードが誤マッチを起こす場合に有効にします。これをオフのままにすると「art」が「start」「heart」「apart」にもマッチしてしまいます。
精度のためのセカンダリキーワード
1つのキーワードだけではエントリが関連するかどうか判断できない場合があります。セカンダリキーワードで第2フィルタを追加できます。
| モード | 意味 | 使用例 |
|---|---|---|
| AND_ANY | プライマリがマッチかつセカンダリのうち少なくとも1つ | 「forest」+ ["elf"、"danger"、"ruins"] のいずれか |
| AND_ALL | プライマリがマッチかつすべてのセカンダリ | 「forest」+ 「night」と「danger」両方 |
| NOT_ANY | プライマリがマッチかつセカンダリのどれも含まない | 「forest」ただし「safe」「peaceful」を含まない |
| NOT_ALL | プライマリがマッチかつすべてのセカンダリではない | 「forest」ただし「safe」と「day」両方は揃わない |
最も一般的な用途:トピック交差用の AND_ANY。「ダークフォレストの伝承」エントリは、プレイヤーが森と何か不気味なものを同時に言及したときにだけトリガーしたい、というケースです。木に触れただけでは発火させません。
深度注入:エントリがチャットのどこに現れるか
キーワードトリガーされたエントリは、System Presetsとともにプロンプトの上部に入るわけではありません。チャット履歴の特定の位置に挿入されます。depth 設定でその位置を制御します。
depth: 4 はチャット末尾から4メッセージ目に現れることを意味します。上からのシステム指示というよりも、最近の会話の自然な一部のような感じになります。
depth数値が小さい(末尾に近い)ほどAIの注意を引きやすくなります。大きい(さらに過去側)ほど背景コンテキストのように感じられます。
技術的詳細:depthの動作
チャット履歴が次の場合:
[1] User: Hello
[2] AI: Hi there
[3] User: Where's the forest?
[4] AI: Head north
[5] User: Alright, let's godepth 2のエントリはメッセージ[4]の前に挿入されます。
[1] User: Hello
[2] AI: Hi there
[3] User: Where's the forest?
--- [Entry content inserted here] ---
[4] AI: Head north
[5] User: Alright, let's godepth 0はエントリを末尾に配置します(Post Instructionsに近い)。
完全なリファレンス → World Spec:エントリ
状態駆動エントリ
最も強力なエントリは、キーワードを待ちません。実際のワールドの状態に基づいて起動します。
最初に明確にしておくべきこと:エントリエディタには「変数の値で切り替える」機能が組み込みで公開されていません。「状態駆動」はボタンではなく パターン です。通常のエントリと ビヘイビアシステム を組み合わせて構築します — toggle-entry アクションで変数がしきい値を超えたときにエントリを有効化/無効化する、まさに上の 関係性のステージ の ::: details セットアップ方法 ブロックで示した通りです。JSONからワールドを駆動している場合(Studio AI、World Spec)、WorldEntry に直接 conditions: [...] を設定することもでき、エンジンがロアブックマッチング時に評価します — ただしこのフィールドはエディタUIでは公開されていません。
結果は同じです:エントリは、プレイヤーがたまたまキーワードを入力したかではなく、変数の実際の値 に基づいてオン/オフが切り替わります。
実例:仲間の態度
Wandering Diaryはこのパターンを使って仲間がプレイヤーに対する振る舞いを変えています。各仲間は3つのエントリを持ちます — 低親密度(慎重で距離を置く)、中親密度(打ち解け始める)、高親密度(深い忠誠)。さらに親密度変数が各しきい値を超えたときに該当エントリをトグルする小さなビヘイビアセットがあります。
プレイヤーはこの仕組みを目にしません。彼らはただ、徐々に心を開いていく仲間を体験するだけです。
条件 + キーワードの併用
同じ組み合わせはより狭いコンテキストにも有効です。エントリにキーワード と ビヘイビア駆動の有効/無効を両方与えれば、双方が真の時にだけ発火します。
- キーワード:
Kimika、class rep - ビヘイビアゲート:
day_count > 3のときに有効、それ以外は無効 - 効果:NPCの背景はDay 3以降にだけ、しかも彼女に言及したときにのみ登場
これにより、情報がストーリー序盤に出すぎるのを防げます。
7つの比較演算子
| 演算子 | 意味 | 適した用途 |
|---|---|---|
eq | 等しい | 厳密な状態チェック(「locationがcaveに等しい」) |
neq | 等しくない | 除外(「tutorial zoneにいないとき」) |
gt | より大きい | しきい値(「親密度50超」) |
gte | 以上 | しきい値含む |
lt | より小さい | 低状態トリガー(「healthが20未満」) |
lte | 以下 | 低状態含む |
contains | 文字列を含む | 部分テキストマッチ |
複数条件は All(すべての条件が満たされる)または Any(1つで十分)で組み合わせます。
高度なテクニック
再帰:連鎖コンテキスト
エントリAがトリガーされ、その内容にエントリBのキーワードが含まれていたら、Bもトリガーすべきか? それが再帰です。デフォルトはオフ(設定の再帰深度=0)ですが、相互に絡み合った世界観のあるワールドでは有効にできます。
慎重に使ってください。 深い再帰チェーンは大量のコンテキストを消費する恐れがあります。ほとんどのワールドは0または1に保ちます。
2つのセーフティコントロール:
- Prevent Recursion:このエントリはトリガーされるが、そのコンテンツは他のエントリをスキャンしない。「私は起こされるが、誰かを起こすことはしない。」
- Exclude Recursion:プレイヤーの実際の発言だけがこのエントリをトリガーできる。再帰スキャンからは完全に不可視。
APIロールのオーバーライド
デフォルトではすべてのエントリはシステムメッセージとして送信されます。しかしAIがそれをどう解釈するかは変更できます。
- Instruction(system):デフォルト。AIは従うべきルールとして扱います。
- User:AIはプレイヤーがそれを言ったと考えます。一部のモデルはユーザーメッセージをより重く扱います。
- Assistant:AIは自身がそれを言ったと考えます。応答スタイルの「プリフィル」に有用です。
サンプル対話
examplesタグの付いたエントリは特別扱いされます。エンジンがそれらをuser/assistantのメッセージペアに解析するため、AIはテキスト塊ではなく実際の会話サンプルを見ることになります。
フォーマット:
<START>
{{user}}: Can you heal this wound?
{{char}}: *examines the wound, frowning* This isn't a normal knife wound.
There's a curse residue. I need moonflower pollen... but it's daytime.
<START>
{{user}}: So what do we do?
{{char}}: *shrugs* Either wait for nightfall, or you endure it.
I recommend the latter — pain is the best teacher.<START> で異なる会話例を区切ります。{{user}} と {{char}} は実際のプレイヤー名とキャラクター名に置き換わるマクロです。
質の高い例が少しある方が、多くて雑な例より勝ります。 キャラクターの声を捉えた2〜3のサンプルは、AIに硬直的に真似させてしまう10のサンプルよりも効果的です。
正規表現キーワード
キーワードは正規表現もサポートします。/pattern/flags 形式でキーワードを書くと(例 /dark\s*forest/i)、エンジンはリテラル文字列ではなく正規表現として扱います。シンプルなキーワードではカバーできない柔軟な言い回しにマッチさせるのに便利です。
スキャン深度とトークン予算
エンジンはチャット履歴全体をキーワードスキャンするわけではありません — それは無駄です。ワールド設定 lorebookScanDepth(デフォルト 2)が直近何件のメッセージを確認するかを制御します。エディタの ロアブック セクション Entry Settings で変更できます。値を上げるほど多くの参照を拾えますが処理コストも上がります。
トークン予算もあります:lorebookBudgetPercent(デフォルト100%)と lorebookBudgetCap(デフォルト無制限)がトリガーされたエントリの合計トークン消費量を制限します。予算超過時はマッチスコアの高いエントリが優先されます。
フォルダ整理
ワールドに数十〜数百のエントリがあると、サイドバーリストが扱いづらくなります。エディタはフォルダをサポート — エントリを論理的なグループにドラッグできます(全NPCを1つのフォルダ、全ロケーション伝承を別フォルダ)。フォルダは純粋に整理用で、ランタイム動作、マッチング、注入順には影響しません。
位置(position)の順序
各セクション内では、エントリは position 番号で並びます(小さいほど先)。小数もサポートされるため、position 2.5を与えればpostion 2と3の間に挟めます。
System Presetsの早い位置のエントリは効率的にキャッシュされるため、最も安定したコンテンツ(キャラクター記述、ワールドルール)を低い位置に、変動しうるコンテンツ(動的指示)を高い位置に置きましょう。
よくあるミス
キーワードのないキーワードエントリ。 Chat Historyに置いてキーワードを忘れた(かつビヘイビアからトグルもしていない)場合、決してトリガーされません。常時オンのエントリはSystem Presetsに置きます。
ビヘイビアでステージ範囲が重複している。 「Rin — Early Stage」のトグルが親密度 < 30 で発火し、「Rin — Growing Trust」が親密度 > 25 で発火すると、26-29の間に両方が有効になってしまいます。重複しない範囲を使いましょう:< 26 と >= 26 AND < 51。
狭すぎてマッチしないキーワード。 「Crystalline Sanctum」のエントリが crystalline sanctum でしかトリガーしないと、「crystal place」や「that temple」と入力するプレイヤーには見えません。正式名だけでなく、プレイヤーが実際にどう言及するかを考えてください。
重要なコンテキストに対して深すぎる注入深度。 depth 8 のエントリはチャット履歴の遠くに埋もれ、AIがほとんど重視しなくなります。重要なコンテキストはdepth 2〜4に保ち、雰囲気要素にだけ深いdepthを使いましょう。
関連項目
- ゲーム状態の設計 — エントリが反応する変数の選び方と構成
- AIディレクティブとマクロ — エントリ内で使う
{{macro}}構文とディレクティブ形式 - ビヘイビアと自動化 — ゲーム状態に基づいてエントリを有効/無効にする
toggle-entryアクションの使い方
完全なスキーマリファレンス → World Spec:エントリとセクション
