心当たりがあるはずです。明確に思えた質問をAIに投げかけると、返ってくる答えは…微妙にずれている。技術的には関連しているのに、肝心な点を外している。そこで言い換える。再試行する。またずれた答えが来る。五回のやりとりを経てようやく使えるものが得られるが、最初から自分でやった方が早かった。
実際に何が起きているかというと、モデルは目の前に置かれた情報だけで動くのです。あなたのコードベースがどんな構造か、どんな制約があるか、何を試したか、なぜ聞いているのか——モデルには一切わかりません。AIの回答が的外れになる根本原因は、ほぼ例外なく情報不足です。言葉の選び方でも、呪文のようなプロンプト術でもありません。これが、AIコミュニティがコンテキストエンジニアリングと呼ぶスキルの核心です。
コンテキストエンジニアリングとは、AIに与える情報——役割、背景状態、タスク、制約、出力形式——を意図的に設計する技術です。やりとりを重ねることなく、一発で genuinely 有用な結果を引き出すことを目的とします。
コンテキストエンジニアリングとは何か
2025年にAndrej Karpathyが広めたこの用語は、「プロンプトエンジニアリング」との違いが重要です。プロンプトエンジニアリングは言葉の選び方の話。コンテキストエンジニアリングは一段深く、どんな情報を提供するかの話です。モデルが生成を始める前に、必要な情報をすべて整えておくスキルです。
ミザンプラス(料理前の仕込み)で考えてみてください。優れたシェフは料理を始める前に、すべての食材を準備しておきます。コンテキストエンジニアリングは、AIというパートナーのためにその仕込みをする行為です。
コンテキストウィンドウの解剖
AIとのすべてのやりとりは「コンテキストウィンドウ」という作業メモリの中で行われます。四つの層に分かれています。
システムプロンプトは最も強力でありながら最も見過ごされる層です。モデルのペルソナ、専門知識レベル、およびすべての応答を支配するルールを設定します。
注入コンテキストはコードファイル、ドキュメント、エラーログなどの原材料を提供する層です。モデルがこの情報を元に推論します。
会話履歴はセッションが進むにつれて蓄積されます。有用ですが、トークンコストが高い層です。
ユーザーメッセージは実際の質問やタスクです。最も注目されますが、うまく設計されたセットアップではトークン全体の5%未満です。
優れたコンテキストの5つの柱
第1柱:役割(Role)
モデルが誰として振る舞うべきかを定義します——専門知識、視点、コミュニケーションスタイル。
| 役割なし | 役割あり |
|---|---|
認証を説明して。 | あなたはセキュリティ専門のシニアバックエンドエンジニアです。JavaScriptは知っているがauth実装は初めてのジュニア開発者向けに、JWTのセキュリティトレードオフと注意点を説明してください。 |
第2柱:状態(State)
現在の状況を伝えます——コードベースの構造、試したこと、うまくいかなかったこと、決定済みの事項。
| 状態なし | 状態あり |
|---|---|
このバグを直して。(コードのみ貼り付け) | [コード] このdebounce関数は通常の入力では動くが、高速スクロールでは待機せずに即時発火する。clearTimeoutを試したが改善しない。React 18、TypeScript。コンソールエラー:[メッセージ]。 |
第3柱:タスク(Task)
何が欲しいかを正確に指定します。「APIを助けて」はカテゴリ。「JWTトークンを検証し、無効または欠落の場合は401を返し、デコードされたユーザーをreq.userに添付するExpressミドルウェアを書いて」がタスクです。
第4柱:制約(Constraints)
何をしてはいけないか、スコープの制限、絶対ルールを伝えます。制約は制限のように聞こえますが、実際には応答を解放します——「技術的には正しいが私の状況では使えない」という回答クラスを丸ごと排除するからです。
「〜しないでください」「〜を避けてください」という否定の明示文で書きましょう。モデルはスコープを広げる方向に学習されています。明示的な否定が最も信頼できるガードレールです。
第5柱:形式(Format)
出力の形を指定します——長さ、構造、詳細レベル。形式の指定がなければ、モデルが「適切」と判断するものが返ってきます——あなたが望む形ではないかもしれません。
再利用可能なコンテキストテンプレート
## 役割
あなたは [役割]、[ドメイン] の専門家です。
対象読者は [読者] です。
## 背景状態
技術スタック: [言語 / フレームワーク]
現状: [簡単な説明]
試したこと: [試みと結果]
関連エラー: [あれば]
## タスク
[1文で正確に: 動詞 + 対象 + 範囲]
## 制約
- [ライブラリ/アプローチ] は使わないでください
- [側面] を [上限] 以内に保ってください
## 出力形式
[長さ] — [構造] — [詳細レベル]
重要なポイント
- コンテキストエンジニアリング > プロンプトエンジニアリング: 言葉の選び方より、提供する情報の方が重要です。
- 4層、1つのバジェット: システムプロンプト、注入コンテキスト、会話履歴、ユーザーメッセージ——それぞれ役割が異なり、同じトークンを競っています。
- 5つの柱、5つのギャップ: Role、State、Task、Constraints、Format。すべてをカバーすれば、やりとりの回数が劇的に減ります。
- 量より質: 関連性が高く焦点を絞ったコンテキストは、大量の無焦点なコンテキストを常に上回ります。