コンテキストエンジニアリングとは、コンテキストというボールの大きさを調整し、それに合う知識をガットとして与えるプロセスとも言えます。今回は、LLMの性能を最大限に引き出すための主要技術である「コンテキストエンジニアリング」と「ファインチューニング」の役割分担とその戦略的な使い分けを、「テニス」のメタファーを用いて直感的に解説します。
1. LLMを使いこなすための道具たち 🎾
テニスの試合に勝つには、道具の特性を深く理解し、戦略的に選択する必要があります。LLMのチューニングも同様です。
1-1. ラケットのフレーム = モデルアーキテクチャ
全ての基本となるのがラケットのフレームです。これはGPT-4やLlama 3といった、変更不可能なモデルアーキテクチャそのものを指します。プレーヤーは、まずどのメーカーの、どのフレームを基本として使うかを選択します。
1-2. ラケットの初期状態 = 汎用モデル vs 特注モデル
店に並んでいるラケットには、大きく分けて2つの種類があります。
-
ガット未張りの市販品(汎用モデル)
これは、特定の知識に特化していない、学習済みの汎用モデルに相当します。フレーム性能は高いですが、試合で使うためには、プレーヤー自身が後からガットを張る必要があります。 -
メーカー特注品(ファインチューニング済モデル)
ファインチューニングとは、汎用モデルのフレームに、特定の専門知識(医療、法律など)を工場出荷時点で「焼き付ける」ように、知識のガットを恒久的に張ってしまう作業です。このラケットは、箱から出した瞬間から特定の分野のボールをある程度は捉えます。
しかも、一度焼き付けたガットは簡単には張り替えられず、特定の分野に特化しすぎると他の試合では使いづらくなる(過学習)という側面も持ちます。
1-3. ボール = 入力コンテキスト
LLMに与える情報や質問がボール(入力コンテキスト) です。ラケットはテニスボールを打ち返すために作られています。バスケットボールのような大きすぎるボール(コンテキストウィンドウを超える入力)では、そもそもラリーになりません。
1-4. 試合前のガット張り = コンテキストエンジニアリング
ラケット(市販品 or 特注品)を選んだら、試合直前に最終的な調整を行います。これがコンテキストエンジニアリングです。ファインチューニングが「恒久的な下地ガット」なら、コンテキストエンジニアリングは 「試合ごとに調整可能な仕上げガット」 と言えます。
-
固定ガット(Fixed Guts / 静的コンテキスト)
JSONスキーマによる出力形式の指定など、プロジェクトのルールに合わせてあらかじめ定義しておく静的なルールです。試合のルールや自分のプレースタイルに合わせて、ガットの張り方を決めておく作業です。 -
補助ガット(Auxiliary Guts / RAG)
相手のショット(質問)に合わせて、動的に最適なサポートを提供する技術です。飛んできたボールに応じて、最適な知識を外部から瞬時に取り込み、ガットのテンションを一時的に調整するようなイメージです。
たとえ最高の特注品(FTモデル)でも、相手のその日の調子(最新情報)までは知らないため、RAGによるリアルタイムなガット調整は、あらゆるラケットにとって強力な武器となります。
2. 勝利へのラリーを設計する! 戦略的チューニングプロセス 🏆
最高のパフォーマンスを発揮するための戦略的な思考プロセスを、以下のフローチャートに示します。「どのラケットで挑むか」という初期選択から始まるのがポイントです。
3. まとめ
LLMという天才プレーヤーの能力を最大限に引き出すには、渡す道具を戦略的に設計し、チューニングし続ける必要があります。
まず、ファインチューニングによって専門知識のガットが焼き付けられた特注ラケットを手に入れるか、ガット未張りの市販ラケットで戦うかを決める。そして、手にしたラケットに、コンテキストエンジニアリングという思考プロセスで、試合ごとに最適な「仕上げのガット」を張り、調整し続けるのです。
たとえファインチューニングで張られた下地のガットが優秀でも、コンテキストというボールに関連する情報がなければ、その知識は孤立し、ガットが切れているのと変わりません。モデルの素体性能に頼ることも大切ですが、自分たちが使う道具を最終的に使いこなすための努力を続けるべきなのは、AI活用でもテニスでも同じと言えるでしょう。