LLMのパフォーマンスを大幅に向上させるコンテキストエンジニアリングの手法
LLMの性能を大幅に向上させるためのコンテキストエンジニアリング コンテキストエンジニアリングとは、言語モデル(LLM)に適切なコンテキストを提供することで、パフォーマンスを最大化する手法である。これは、システムプロンプトを調整するだけでなく、モデルに対して与える全ての情報を考えることを指す。 定義 コンテキストエンジニアリングは、LLMにどのようなデータを供給すべきかを決定する科学であり、プロンプトの調整を超えた幅広い要素を考慮している。これにより、モデルのパフォーマンスが大幅に向上する。 モチベーション 本記事のモチベーションはアンドレイ・カルパシー氏のツイートから始まった。彼はプロンプトエンジニアリングの重要性を指摘したが、これはシステムプロンプトの変更だけで行われるのではなく、他の様々な入力データも考慮すべきだと考えている。 API対コンソール使用 コンテキストエンジニアリングはAPIを使用する際特に重要である。APIを使用すると、動的なコンテキストの変更が可能になり、性能向上につながる。具体的には、RAG(リトリーバル・オーグメンテッド・ジェネレーション)や動的フェワショットプロンプティングのような技術を利用できる。 コンテキストエンジニアリング手法 ゼロショットプロンプティング ゼロショットプロンプティングは最も基本的な手法であり、モデルにそれまで見たことのないタスクを提示する。たとえば、テキストをポジティブかネガティブに分類させたい場合、以下のようなプロンプトを提供する。 ``` あなたはテキスト分類の専門家で、テキストをクラスAまたはクラスBに分類するタスクがあります。 - クラスA: テキストに肯定的意味合いが含まれる - クラスB: テキストに否定的意味合いが含まれる テキストを分類してください: {text} ``` この手法は、シンプルなテキストベースのタスクではしばしば有効である。 フェワショットプロンプティング ゼロショットプロンプティングの次に続くのがフェワショットプロンプティングである。こちらでは、モデルに例をいくつか提供することで、より良い性能を得られる。 ``` あなたはテキスト分類の専門家で、テキストをクラスAまたはクラスBに分類するタスクがあります。 - クラスA: テキストに肯定的意味合いが含まれる - クラスB: テキストに否定的意味合いが含まれる <例> {text 1} -> クラスA </例> <例> {text 2} -> クラスB </例> テキストを分類してください: {text} ``` この方法は、人間に対して新しいタスクを与え、例を示すことによって性能が向上するのと同じ原理に基づいている。 動的フェワショットプロンプティング 動的フェワ Shoットプロンプティングでは、プロンプトの作成時にタスクに最も関連性のある例を選択する。既存のテキストと新しいテキストとの類似度を測定し、最も類似する例だけを使用することで、モデルがより適切なコンテキストを得られる。 RAG(リトリーバル・オーグメンテッド・ジェネレーション) RAGは、大きなデータベースから関連性のある情報を取り出してLLMに提供する手法である。例えば、ユーザーからの質問に答える際、数千の文書から最も類似するものを抽出し、LLMに提供することで、より正確な回答が得られる。 1. ベクトル検索を行う 2. ユーザー質問と最も近い文書を見つける(類似度が高い文書を関連性が高いと想定) 3. 最も近い文書を与えてLLMに質問に答えてもらう ツール提供(MCP) 工具供給もまたコンテキストエンジニアリングの重要な部分であり、特にAIエージェントの活用に注目が集まっている。模型呼出は通常、Model Context Protocol (MCP)を用いて行われ、Anthropicがこれを率先して導入した。 例えば、天気を教えてほしい場合、以下のような工具を提供することで、LLMはリアルタイムの情報を取得し、正確な回答を返すことができる。 python @tool def get_weather(city): # 市の現在の天気情報を取得するコード return weather 検討すべきトピック コンテキスト長の利用 7月2025年時点では、多くの最先端モデル LLMSは10万以上のトークンを処理できる。しかし、情報を詰め込みすぎると性能が低下する可能性がある。因此、テストを行い、最適なバランスを見つけることが重要である。また、情報を分割して複数のプロンプトで処理するといった手法も有用である。 コンテキストロット 最近、コンテキストロットについて興味深い記事を読んだ。この現象は、コンテキストの長さが増加するだけで関連性の低い情報が増え、モデルの性能が下がることを示している。コンテキストロットを防ぐためにも、必要な情報だけを提供することが大切である。 結論 本記事では、コンテキストエンジニアリングという概念を詳細に説明し、ゼロショットプロンプティング、フェワShotショットプロンプティング、RAG、工具提供などの手法を解説した。コンテキストエンジニアリングは、LLMのパフォーマンスを大幅に向上させる有効な手段である。また、過剰なコンテキストがパフォーマンスに悪影響を与えることにも触れ、関連性の高い情報のみを提供することが重要であると結論付けている。 業界関係者のコメント 「コンテキストエンジニアリングは、LLMの可能性を最大限に引き出すための重要な要素だ」とAIコンサルタント会社の代表取締役、山口健太郎氏は述べる。「特にRAGのような動的な手法を使うことで、特定のタスクにおけるLLMの性能は飛躍的に向上する」。 会社概要 本記事の筆者は、AI分野での豊富な経験を持つ技術者であり、自身の経験を基にLLMの効果的な利用法をまとめている。また、彼のSNSでは同 temaに関する最新情報や追加のリソースを探すことができる。