Core prompt engineering techniques — プロンプトエンジニアリングの主な手法
Jump to navigation
Jump to search
プロンプトエンジニアリングには、大規模言語モデル(LLM)との対話を最適化し、望ましい結果を得ることを目的とした、多様なテクニックや手法が含まれます。これらの手法は、クエリの構造化、コンテキストの提供、出力スタイルの管理、モデルの推論能力の向上に関わります。LLMは入力プロンプトに基づいて次のトークンを予測することで応答を生成するため、プロンプトの品質と構造が結果に直接影響します。プロンプトエンジニアリングの主要なテクニックにより、開発者やユーザーはモデルの内部パラメータを変更することなく、モデルの振る舞いを効果的に制御し、エラーを削減し、特定のタスクに適応させることが可能になります。
基本的な原則とプロンプトの構造
具体的な実装は様々ですが、効果的なプロンプトは多くの場合、共通の原則と構造に基づいて構築されます。
- 経験的な指針: 実用的な構造の一つとして(業界標準ではありませんが)、次の原則に従うことが提案されています:方向性の提示、フォーマットの指定、例の提供、品質の評価、タスクの分割。
- 効果的なプロンプトには、しばしば以下の要素が含まれます:
- 導入/役割: タスクのコンテキストやモデルの役割/ペルソナを設定します。
- 指示: 何をすべきかについての明確な指示。
- コンテキスト: 必要な情報(静的な情報、またはRAGを介して動的に取得された情報)。
- 例(Few-shot): 望ましいフォーマット/スタイルを示すデモンストレーション。
- 応答の要求: モデルが何を生成すべきかを明確に指示します。
- システムプロンプト (System Prompt): チャットインターフェースのAPI(例:OpenAI、Anthropicのモデル)では、セッション全体にわたるグローバルな指示や役割を設定することができます。
- フォーマット: Markdown、JSON、XML、YAMLを使用することで、プロンプトを構造化し、応答の解析を容易にします。区切り文字(```, `"""`, XMLタグ)は、指示とデータを分離するために重要です。
指示と例に関する主要なテクニック
- 明確で具体的な指示: タスク、望ましい結果、制約をできるだけ正確に記述します。曖昧さを避けてください。
- ロールプロンプティング (Role Prompting): モデルに役割(「あなたは~の専門家です」など)を割り当てることで、トーン、スタイル、知識ベースを制御します。
- Zero-shot Prompting: 例を提示しないプロンプト。単純なタスクやモデルがよく知っているタスクに効果的です。
- Few-Shot Prompting: タスクを実証するために、いくつかの(通常2~5個)「質問-回答」の例を提供します。特殊なケースとして、1つの例を用いるOne-shot Promptingがあります。複雑なフォーマットやスタイルに特に有効です。例によるバイアス(アンカリング)や誤ったパターンの学習を避けるために注意が必要です。
コンテキスト管理のテクニック
- Retrieval-Augmented Generation (RAG): LLMに送信する前に、外部のナレッジベースから関連情報を動的にプロンプトに追加する手法。2020年にMeta AIによって初めて提案され、この手法はハルシネーションに対処し、データの最新性を確保するための鍵となります。
- チャンキング (Chunking): モデルのコンテキストウィンドウに収まるように、大きなテキストを小さな部分(チャンク)に分割します。戦略には、文、段落、トークンごとの分割(オーバーラップあり)が含まれます。
- 要約: 長いテキストや対話履歴を圧縮し、限られたコンテキスト内で主要な意味を伝えます。
推論(Reasoning)を改善するためのテクニック
これらのテクニックは、モデルに「より慎重に、より構造的に考える」ことを促すことを目的としています。これらの多く、特にCoTの有効性は、大規模なモデル(通常1000億パラメータ以上)で顕著に現れます。
- Chain-of-Thought (CoT): 最終的な回答の前に、ステップバイステップの推論を生成するようモデルに指示する手法。数学、論理、多段階のタスクにおいて結果を大幅に改善します。
- Zero-shot CoT: 最も単純な形式で、例を必要としません。プロンプトに「ステップバイステップで考えましょう」(Let's think step by step)のようなフレーズを追加するだけで、推論の連鎖を開始させることができます。
- CoTのバリエーション:
- Auto-CoT: few-shotプロンプティングのための推論例を自動的に生成します。
- Self-Consistency: 複数の推論チェーンを生成し、「投票」によって最も頻繁に出現する回答を選択することで、信頼性を向上させます。
- Tree-of-Thoughts (ToT): 木構造の形で複数の推論パスを探求し、中間ステップの評価や後戻りを可能にします。このテクニックは複雑なタスクで高い効果を示し、例えば「Game of 24」の成功率を約4%から約74%に向上させました。
- Graph-of-Thought (GoT), LogiCoT など、より複雑または論理的に検証された推論を目指す手法もあります。
- ReAct (Reason and Act): CoTを発展させたテクニック。モデルが推論(Thought)のステップとツールを使用した行動(Act)を交互に繰り返し、観察(Observation)に基づいて理解を更新する反復的なサイクルです。
- Self-Refine: モデルがまず回答を生成し、次にそれを批判し、最後に自身の批判に基づいて改善するという反復的なプロセスです。この「生成-批判-改善」のサイクルは複数回繰り返すことができます。
- Take a Step Back Prompting: モデルはまず一般的な原則や抽象概念を定式化し、それを特定のタスクに適用します。
高度なテクニック:エージェントとツール
- ツールの使用 (Tool Usage) / 関数呼び出し (Function Calling): LLMに外部API(検索、計算機、データベースなど)を呼び出す能力を提供します。モデルはツール呼び出しのための構造化されたリクエストを生成し、それがアプリケーションによって実行され、結果がモデルに返されます。現代のLLM(GPT-4、Claude 3)には、この機能が組み込まれています。
- エージェント (Agents): 目標を達成するために自律的に計画し、ツールを使用し、行動することができるLLMベースのシステム。多くの場合、ReActのようなサイクルを使用します。フレームワーク(LangChain、AutoGen、CrewAI)がその作成を簡素化します。
- マルチエージェントシステム: 複数の専門エージェントが相互作用して複雑なタスクを解決します。
誤りとハルシネーションを削減するテクニック
- RAG: 応答を、取得した事実データに基づかせます。
- 応答を制限する指示: 提供されたコンテキストにのみ基づいて回答するよう要求したり、不確実性を示すよう指示したりします(「答えがわからない場合は、『わかりません』と答えてください」)。
- 引用の要求: モデルに情報源を明記するか、応答の根拠となったコンテキストの一部を引用するよう要求します。
- 検証と自己批判: Chain-of-Verification (CoVe)(回答を生成し、その後それを検証・修正する)、Self-Refineのようなテクニックを使用したり、モデルに自身の回答の誤りを確認するよう直接要求したりします。
- CoT: ステップバイステップの推論自体が、論理的な誤りを減らすことがあります。
評価と反復のテクニック
評価は独立したプロセスですが、その一部はプロンプトエンジニアリングの一部と見なされます。
- プロンプトのA/Bテスト: 同じタスクに対して異なるバージョンのプロンプトの効果を比較します。
- 評価へのLLMの利用: 強力なモデル(例:GPT-4)を使用して、別のプロンプトやモデルによって生成された応答の品質を評価します(LLM-as-a-Judge)。
プロンプトのパターン
再利用可能な一般的な構造:
- ペルソナパターン (Persona Pattern)
- 出力カスタマイゼーションパターン (Output Customization Pattern)
- 質問精緻化パターン (Question Refinement Pattern)
- 認知的検証/自己批判パターン (Cognitive Verifier / Self-Critique Pattern)
- ステップバイステップ推論パターン (Step-by-Step / Chain-of-Thought Pattern)
- テンプレートパターン (Template Pattern)
参考文献
- Radford, A. et al. (2019). Language Models are Unsupervised Multitask Learners. PDF.
- Brown, T. B. et al. (2020). Language Models are Few-Shot Learners. arXiv:2005.14165.
- Lewis, P. et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. arXiv:2005.11401.
- Li, X. L.; Liang, P. (2021). Prefix-Tuning: Optimizing Continuous Prompts for Generation. arXiv:2101.00190.
- Liu, Y. et al. (2021). Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity. arXiv:2104.08786.
- Bai, Y. et al. (2022). Constitutional AI: Harmlessness from AI Feedback. arXiv:2212.08073.
- 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.
- Zhang, Z. et al. (2022). Automatic Chain of Thought Prompting in Large Language Models. arXiv:2210.03493.
- Zhou, D. et al. (2022). Least-to-Most Prompting Enables Complex Reasoning in Large Language Models. arXiv:2205.10625.
- Yao, S. et al. (2022). ReAct: Synergizing Reasoning and Acting in Language Models. arXiv:2210.03629.
- Besta, M. et al. (2023). Graph of Thoughts: Solving Elaborate Problems with Large Language Models. arXiv:2308.09687.
- Madaan, A. et al. (2023). Self-Refine: Iterative Refinement with Self-Feedback. arXiv:2303.17651.
- Schick, T. et al. (2023). Toolformer: Language Models Can Teach Themselves to Use Tools. arXiv:2302.04761.
- Rafailov, R. et al. (2023). Direct Preference Optimization: Your Language Model is Secretly a Reward Model. arXiv:2305.18290.
- Wang, Y. et al. (2023). Self-Instruct: Aligning Language Models with Self-Generated Instructions. arXiv:2212.10560.
- Yao, S. et al. (2023). Tree of Thoughts: Deliberate Problem Solving with Large Language Models. arXiv:2305.10601.
- Chen, S. Y. et al. (2023). Extending Context Window of Large Language Models via Positional Interpolation. arXiv:2306.15595.
- Chang, K. et al. (2024). Efficient Prompting Methods for Large Language Models: A Survey. arXiv:2404.01077.
- Genkina, D. (2024). AI Prompt Engineering Is Dead. IEEE Spectrum. [1].
- Li, Z. et al. (2024). Prompt Compression for Large Language Models: A Survey. arXiv:2410.12388.
- Liang, X. et al. (2024). Internal Consistency and Self-Feedback in Large Language Models: A Survey. arXiv:2407.14507.
- Han, H. et al. (2025). Retrieval-Augmented Generation with Graphs (GraphRAG). arXiv:2501.00309.
- Li, W. et al. (2025). A Survey of Automatic Prompt Engineering: An Optimization Perspective. arXiv:2502.11560.
- Wu, Z. et al. (2025). The Dark Side of Function Calling: Pathways to Jailbreaking Large Language Models. EMNLP 2025. PDF.
- Yang, B. et al. (2025). Hallucination Detection in Large Language Models with Metamorphic Relations. arXiv:2502.15844.
関連項目
- 大規模言語モデル
- Chain-of-Thought Prompting
- LLMのハルシネーションと不正確な応答