Prompt and context — プロンプトとコンテキスト
プロンプトとコンテキストは、プロンプトエンジニアリングにおける大規模言語モデル(LLM)の基本的な概念です。
コンテキストはプロンプトの極めて重要な構成要素であり、LLMが正確で、関連性が高く、有用な応答を生成する能力を決定します。効果的なプロンプトエンジニアリングは、現代のLLMの制約を克服しつつ、適切なコンテキストを適切なタイミングで収集、フィルタリング、構造化し、モデルに提示する技術に大きく依存しています。
Prompt - プロンプトの定義
プロンプト(英語: prompt)とは、応答を生成するためにLLMに提供される入力データの完全なセットです。これは単なる質問やコマンドではなく、以下を含む構造化されたテキストです:
- 指示: モデルに何をするべきか、どのようなフォーマット、スタイル、トーンで行うべきかを直接指示します。
- 主なクエリ(Query): ユーザーの直接的な質問や主要なタスクの説明です。
- コンテキスト: クエリを正しく実行するために必要な追加情報です。
- 例(Few-shot examples): 類似のタスクに対する望ましい応答のフォーマットやスタイルのデモンストレーションです。
プロンプトの品質と完全性が、LLMの応答の関連性、正確性、有用性を直接決定します。
Context - コンテキストの定義
プロンプトエンジニアリングにおけるコンテキストとは、プロンプト内に含まれるあらゆる情報であり、モデルがタスク、特定の状況、またはユーザーの期待をよりよく理解するのに役立ちますが、モデルの元の訓練データの一部ではありません。コンテキストは、適切な応答を生成するために必要な状況的詳細を提供します。
コンテキストには以下が含まれます:
- 以前の対話の履歴(チャットボットの場合)。
- 外部ソース(文書、データベース、ウェブページ)から抽出されたデータ — RAGの基盤。
- ユーザーに関する情報(プロフィール、好み)。
- 現在のタスクや状況に関する具体的な詳細。
- 類似タスクの実行例(few-shotプロンプティングの一部として)。
プロンプトで提供されるコンテキストと、モデルが事前学習中に得た一般的な知識とを区別することが重要です。プロンプトエンジニアリングは、まさに状況に応じたコンテキストを効果的に提供することに焦点を当てています。
相互関係と影響
プロンプトとコンテキストは、トランスフォーマーモデルの動作における基本的な概念であり、モデルが入力データをどのように認識し、何に基づいて結果を生成するかを決定します。アーキテクチャ上、トランスフォーマーは「プロンプト」と「コンテキスト」を特別に区別しません。両者は入力トークンシーケンスの一部であり、埋め込みベクトルに変換され、位置情報が付加され、自己アテンション層によってまとめて処理されます。
プロンプトとコンテキストは不可分に関連しています:コンテキストはプロンプトの構成要素です。
- コンテキストがプロンプトを形成する: エンジニアは、プロンプトに含めるための関連コンテキストを選択し、構造化します。
- コンテキストがモデルを導く: 提供された情報により、LLMは可能な応答の範囲を絞り込み、関連する側面に集中し、幻覚を避けることができます。
- コンテキストの品質が応答の品質を決定する: 不十分、無関係、または矛盾したコンテキストは、不正確、一般的、または誤った応答につながります。正確で完全なコンテキストは、生成される応答の具体性と有用性を向上させます。
- 指示の解釈への影響: コンテキストは、プロンプト内の一般的な指示の解釈を明確にしたり、変更したりすることがあります。
プロンプトの有効性は、エンジニアが関連性の高いコンテキストをどれだけうまく収集、フィルタリングし、モデルに提示できるかに大きく依存します。
コンテキストの種類
コンテキストは、さまざまな特徴に基づいて分類できます:
ソース別:
- ユーザー提供:ユーザーからの明示的な入力、質問、またはタスクの説明。
- 対話履歴から:ユーザーとアシスタントの以前のメッセージ(短期記憶)。
- 検索・抽出された(Retrieved):RAGを使用して外部ソース(文書、DB、ウェブ)から取得したデータ。
- プロフィール/ナレッジベースから:ユーザーやドメインに関する長期的な情報。
- 静的/指示的:エンジニアがプロンプトテンプレートに埋め込んだ情報(指示、例、役割定義)。
動的性別:
- 静的コンテキスト:プロンプトの不変部分(指示、定義、例)。全体的なタスクを定義します。
- 動的コンテキスト:リクエストごとに変化する情報(ユーザーデータ、RAGの結果、現在時刻)。特定の詳細を提供します。
保存期間別(メモリ):
- 短期コンテキスト:現在の対話セッションの履歴。
- 長期コンテキスト:ユーザーに関する保存されたデータや以前の対話情報。保存および検索メカニズムが必要です。
コンテキスト管理
効果的なコンテキスト管理は、特にLLMのコンテキストウィンドウの制限を考慮すると、プロンプトエンジニアリングにおける重要な課題です。主な手法は以下の通りです:
- RAG: 大量の情報を扱うための最も一般的な手法。広範なナレッジベースから最も関連性の高い断片のみを動的に見つけ出し、プロンプトに含めることができます。ベクトルデータベースと効果的な検索メカニズム(レキシカルまたはセマンティック)が必要です。
- チャンキング(Chunking): RAGによるインデックス作成および後続の検索のために、大きな文書を意味的に関連する、または固定サイズのチャンクに分割すること。
- 要約(Summarization): 長い対話履歴や大量の文書を圧縮し、限られたコンテキストウィンドウ内で主要な意味を伝えること。
- メモリ管理(Memory Management): チャットボットやエージェントにおいて、対話履歴を保存・検索するためのさまざまな戦略(例:LangChainのConversationBufferMemory, ConversationSummaryBufferMemory)を使用すること。
- スライディングウィンドウ(Sliding Window): 直近N個の対話メッセージのみをコンテキストに保持すること。
- フィルタリングと優先順位付け: 最終的なプロンプトを組み立てる前に、重要度(例:検索時に返された関連性スコア)に基づいて最も関連性の高いコンテキストの断片を選択すること。
プロンプトエンジニアリングにおけるコンテキストの役割
- 関連性の向上: コンテキストにより、モデルはユーザーのクエリや状況に正確に対応した応答を生成できます。
- 幻覚の低減: 事実情報(RAG経由)を提供することで、モデルは事実を捏造するのではなく、その情報に依拠するようになります。
- パーソナライゼーション: ユーザーに関するコンテキスト(好み、履歴)により、応答をカスタマイズできます。
- 状態管理: 対話やマルチステップのプロセスにおいて、コンテキスト(履歴)は一貫性を保ち、モデルが以前のステップを認識できるようにします。
- モデルの知識の限界を克服: RAGにより、モデルは訓練後のできごとや、特定/プライベートなデータに関する質問に答えることができます。
制約
- コンテキストウィンドウの制限:現代のモデルでは100万〜200万トークンに増加していますが、このような量の処理は高価で遅くなる可能性があります。効果的な圧縮および選択戦略(RAG、要約)が必要です。
- 関連コンテキストの検索:RAGの有効性は検索の質に依存します。誤って抽出されたコンテキストはモデルを混乱させる可能性があります(「入力がゴミなら出力もゴミ」)。
- 「無関心の谷」(Valley of Meh):非常に長いプロンプトの中央に配置された情報は、モデルに無視される可能性があります。プロンプトの構造化(例:「サンドイッチテクニック」)が必要です。
- コンテキストインジェクションのリスク:信頼性の低いソース(例:ウェブページ)からコンテキストが抽出される場合、悪意のある指示(プロンプトインジェクション)が含まれている可能性があります。
参考文献
- Lewis, P. et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. arXiv:2005.11401.
- Wei, J. et al. (2022). Chain of Thought Prompting Elicits Reasoning in Large Language Models. arXiv:2201.11903.
- Wang, X. et al. (2022). Self-Consistency Improves Chain of Thought Reasoning in Language Models. arXiv:2203.11171.
- Kojima, T. et al. (2022). Large Language Models are Zero-Shot Reasoners. arXiv:2205.11916.
- Chen, S. et al. (2023). Extending Context Window of Large Language Models via Positional Interpolation. arXiv:2306.15595.
- Schick, T. et al. (2023). Toolformer: Language Models Can Teach Themselves to Use Tools. arXiv:2302.04761.
- Besta, M. et al. (2023). Graph of Thoughts: Solving Elaborate Problems with Large Language Models. arXiv:2308.09687.
- Packer, C. et al. (2023). MemGPT: Towards LLMs as Operating Systems. arXiv:2310.08560.
- Wang, Y. et al. (2023). Self-Instruct: Aligning Language Models with Self-Generated Instructions. arXiv:2212.10560.
- Sahoo, P. et al. (2024). A Systematic Survey of Prompt Engineering in Large Language Models: Techniques and Applications. arXiv:2402.07927.
- Kim, S. H. et al. (2024). Theanine: Revisiting Memory Management in Long-term Conversations with Timeline-augmented Response Generation. arXiv:2406.10996.
- Chen, S. et al. (2024). StruQ: Defending Against Prompt Injection with Structured Queries. arXiv:2402.06363.
- Zhong, M. et al. (2024). Understanding the RoPE Extensions of Long-Context LLMs: An Attention Perspective. arXiv:2406.13282.
- Han, H. et al. (2025). Retrieval-Augmented Generation with Graphs (GraphRAG). arXiv:2501.00309.
- Self-Instruct (2025). Aligning Language Models with Self-Generated Instructions. arXiv:2212.10560.
関連項目
- 大規模言語モデル
- コンテキストウィンドウ
- ベクトルデータベース
- LangChain