プロンプトエンジニアのためのコンテキストエンジニアリング
「プロンプトエンジニアリングは死んだ」と言う人がいます。コンテキストエンジニアリングに取って代わられたのだと。しかし、それは間違いです。
プロンプトエンジニアリングは、コンテキストエンジニアリングの一部に過ぎません。プロンプティングとは「何を言うか」です。コンテキストエンジニアリングとは「モデルが見るものすべて」を指します。これには、システムプロンプト、ツールの定義、検索されたドキュメント、そしてメモリが含まれます。
あなたのプロンプトは、より大きなパズルの断片の一つに過ぎません。扱うべき領域が広がっただけなのです。
すべてを解決するために、巨大なコンテキストウィンドウを使おうとしないでください。100万トークンのウィンドウがあるからといって、100万トークンすべてに有用な注意(アテンション)が向けられるわけではありません。入力が増えすぎると、モデルのパフォーマンスが逆に低下することもあります。
次の2つの主要な問題に注意する必要があります。
• Lost in the middle(中だるみ): モデルはプロンプトの最初と最後に最も集中します。重要なデータが中間に配置されていると、うまく処理できません。 • Context rot(コンテキストの腐敗): 入力長が長くなるにつれて、推論能力や想起能力が低下します。ウィンドウがいっぱいになると、単純なタスクでさえモデルにとって困難になります。
目標は、タスクを遂行するために必要な、最も少数の「高シグナルなトークン」のセットを見つけ出すことです。コンテキストウィンドウを「予算」のように扱ってください。
予算を管理するために、以下の6つのパターンを活用しましょう。
• Attention budgeting(アテンションの予算管理): 定型文や冗長なテキストはすべて削ぎ落とし、高シグナルなコンテンツのみを使用します。 • Retrieval placement(検索結果の配置): 関連データを最初か最後に配置します。重要な情報を中間に置くのは避けましょう。 • Tool-result formatting(ツール結果のフォーマット): データを凝縮して返します。巨大なAPIオブジェクトをそのままウィンドウに流し込まないでください。 • Schema design(スキーマ設計): 構造化された出力を使用します。エラーを防ぐため、ネスト(階層)の深さは低く保ちます。 • System vs. turn separation(システムとターンの分離): 基本的なルールはシステムプロンプトに、具体的なデータはユーザーのターンに保持します。 • Memory and compaction(メモリと圧縮): 状態(ステート)はウィンドウの外に保存します。スレッドを維持するために、古いデータは要約します。
コンテキストエンジニアリングは単なるRAGではありません。それは「配置」と「抑制」の技術です。もしあなたがすでに優れたプロンプトを書けているなら、ゼロからのスタートではありません。プロンプトが消費する「予算」を管理する方法を学んでいるだけなのです。
Source: https://dev.to/anoopk/context-engineering-for-people-who-already-know-how-to-prompt-2pj1
Optional learning community: https://t.me/GyaanSetuAi