Lost in the Middle
位置によるアテンションの影響を学びます。
「Lost in the Middle」はCoddyKit上の無料AI Prompt Engineeringレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Prompt Engineering学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Prompt Engineeringコースには全4レッスンが含まれています。
中央部で失われる効果
長大なコンテキストを扱うモデルでは、検索精度は位置によってU字曲線を描きます。コンテキストの先頭と末尾にある事実はよく想起される一方、中央にある事実は最も想起されにくくなります。これが「中央部で失われる」効果です。
- これはランダムな現象ではなく、アテンションと学習の特性です。
- 答えが明確に含まれている場合でも、この現象は続きます。
位置は中立ではありません。設計で考慮すべき信頼性の要因です。
中央部が不利になる理由
中央部では、いくつかの要因が重なります。位置バイアスは直近のトークンと最初のトークンを優先し、学習データでは「答えが先頭または末尾の近くにある」パターンが過剰に含まれ、さらに内部には競合する無関係な情報が非常に多いため、個々の事実へのアテンションが薄まります。
モデルからこのバイアスを取り除くことはできませんが、バイアスに逆らう設計をやめることはできます。
重要な内容を端に配置する
最初に行う最も信頼性の高い対策は、モデルが必ず使う内容を境界に置くことです。タスクの指示と最も価値の高い根拠は、中央に埋め込まず、先頭と末尾の近くに配置します。
- タスクと重要な事実から始めます。
- 最後の一番端で中核となる指示を繰り返します(「タスクの確認:...」など)。
context = (
TASK_INSTRUCTION +
KEY_EVIDENCE +
bulk_supporting_material +
TASK_REMINDER # restate at the tail
)関連性に基づく配置順
検索したチャンクの順序を制御できる場合、検索スコアの順に前から後ろへ並べるだけにしてはいけません。最も関連性の高いチャンクを両端に置き、最も関連性の低いチャンクを中央に配置するよう交互に並べ、U字曲線を意図的に活用します。
この「エッジ配置」によって、中央位置で失われる性能のかなりの部分を回復できます。
def edge_load(chunks):
# chunks sorted by relevance desc
head, tail = [], []
for i, c in enumerate(chunks):
(head if i % 2 == 0 else tail).append(c)
return head + list(reversed(tail))探索対象を減らす
中央部で失われる問題に対する最も安価な対策は、中央部そのものを減らすことです。積極的な事前フィルタリング、つまり組み立てる前に無関係なチャンクを削除することで、事実が失われる内部領域を縮小し、重要な内容にアテンションを集中させます。
焦点を絞った1万5,000トークンのプロンプトには、脆弱な中央部がほとんどありません。一方、60万トークンのプロンプトは大部分が中央部です。
道標とインデックス
モデルに地図を与えます。先頭に目次を置き、明確なセクションアンカーを用意すると、モデルは生の位置情報だけに頼らず、関連する領域へ移動できます。
- セクションに番号を付け、質問内で参照します。
- モデルが検索できるよう、「SECTION 7: PRICING」のような明示的なアンカーを追加します。
構造によって、位置に依存する信頼性を部分的に補えます。
# Top of prompt
# INDEX: [S1 Overview] [S2 Risks] [S3 Pricing] [S4 Appendix]
# Question: 'Using S3 only, what is the renewal fee?'回答前にスキャンさせる
回答する前に、関連する内容がどこにあるかを列挙するようモデルに指示します。まず根拠の位置を特定させることで、中央部を読み飛ばす傾向を抑えられます。
「まず更新料金に言及しているすべてのセクションを、そのアンカーとともに列挙してから回答してください」と指示します。明示的なスキャンによって、直接質問するだけでは見落とす中央部の内容が表面化します。
ask = (
'Step 1: list all anchors mentioning the topic. '
'Step 2: quote the relevant line from each. '
'Step 3: answer using only those quotes.'
)位置を変えて再質問する
重要な事実が死角に入り、想起が不確かな場合は、その事実を端へ移して呼び出しを再実行します。複数の事実を扱うタスクでは、どの事実が強い位置を占めるかを入れ替えながら複数回実行し、結果を突き合わせることもできます。
位置を入れ替える方法は、1つのレイアウトが信頼できない場合に使える、実践的な堅牢化のテクニックです。
チャンク分割とマージで網羅する
「すべての違反を見つける」のような網羅的なタスクでは、1回の巨大な処理では中央部の項目を見落とします。弱い中央部が生じない程度に小さく、かつ重複を持たせたウィンドウに分割してそれぞれを処理し、その後で結果をマージして重複を除去します。
- 重複部分によって境界上の見落としを防ぎます。
- マージの段階で重複や矛盾を調整します。
網羅性が求められるタスクでは、1回の巨大な処理よりも、多数の小さな処理が有効です。
def coverage(doc, win, overlap):
out = []
for w in windows(doc, win, overlap):
out += extract(w)
return dedupe(out)独自のU字曲線を測定する
この効果の深刻さは、モデルやプロンプトの形状によって異なります。深さを変えながらカナリアを挿入し、想起率をプロットして特性を把握します。その曲線を使って、そのモデルで安全に使えるコンテキスト長とエッジ配置の方針を決めます。
通説ではなく、測定した挙動に基づいて設計します。
depths = [0.0, 0.25, 0.5, 0.75, 1.0]
recall = {d: probe_canary_at(d) for d in depths}
# Expect a dip around 0.5位置に対する堅牢性の実践ガイド
中央部で失われる問題に対処するには、探索対象を縮小し、最も関連性の高い内容を端に配置し、タスクを末尾で再提示し、インデックスを追加して回答前の位置特定スキャンを強制し、再質問時には位置を入れ替え、網羅的な処理にはチャンク分割とマージを使います。何よりも、モデルごとに曲線を測定し、その特性に合わせて設計します。
クイックチェック
必ず使わなければならない事実が1つあり、それを補足する大量のコンテキストもありますが、モデルがその事実を無視することがあると気づきました。
振り返り:位置によるアテンション効果
長大なコンテキストの想起はU字型です。端は信頼できますが、中央は信頼できません。探索対象を縮小し、最も関連性の高いチャンクを端に配置し、タスクを末尾で再提示し、インデックスを追加して回答前の位置特定スキャンを強制し、再質問時には位置を入れ替え、網羅的な処理にはチャンク分割とマージを使って対処します。均一な想起性能を信頼するのではなく、モデルの実際の曲線を測定し、それに合わせて配置を設計します。
AI チューターと学ぶ AI Prompt Engineering — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 53
- レッスン
- 199
よくある質問
「Lost in the Middle」レッスンは無料ですか?
はい。「Lost in the Middle」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Prompt Engineeringコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Prompt Engineeringコースには全4レッスンが含まれています。
「Lost in the Middle」で何を学びますか?
位置によるアテンションの影響を学びます。 ブラウザで直接実行するハンズオンコードでAI Prompt Engineeringを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Prompt Engineeringを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Prompt Engineeringは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Lost in the Middle」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Prompt Engineeringレッスンでコードを書いて実行できますか?
はい。すべてのAI Prompt Engineeringレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 100万トークンのコンテキストウィンドウ
- Lost in the Middle
- 巨大なプロンプトの構成
- 長いプレフィックスのキャッシュ