開発者と読み解くAIの世界

コンテキストエンジニアリングの第一歩 ~AIに情報を渡しすぎると精度が落ちるのはなぜ?

AIの回答精度を左右する技術

 本コーナー「開発者と読み解くAIの世界」では、AIアプリ開発に携わるエンジニアより寄稿いただき、開発者目線でみる生成AIの面白さや活用法、開発現場のリアルをお伝えします。

 AIコーディングやAIの利活用の際、プロンプトの書き方だけでは解決しない壁にぶつかったことはないでしょうか。

 本記事では、プロンプトエンジニアリングを含めた大規模言語モデル(LLM)に入力する情報の整理のために必要な「コンテキストエンジニアリング」という技術領域を解説します。

コンテキストエンジニアリングとは

 「コンテキストエンジニアリング」とは、AIモデルに渡す情報の選別・配置・管理を体系的に設計する技術領域です。プロンプトの書き方だけでなく、外部データの取得、情報の圧縮、状態の永続化まで含めたAIモデルの情報全体を扱います。

 コンテキストエンジニアリングは、よくプロンプトエンジニアリングと対比されます。

 プロンプトエンジニアリングは、あくまで特定のタスクに特化した指示文を改良するエンジニアリング手法です。一方、コンテキストエンジニアリングは、上記のプロンプトエンジニアリングに加えて「情報をどう取捨選択するか」、「どのように加工するか」といった、より広い領域のエンジニアリング手法となります。

 例えば、適切な情報を取得してプロンプトに注入するといったRAG(Retrieval-Augmented Generation)の機構も、広くコンテキストエンジニアリングに属していると言えます。

コンテキストエンジニアリングの全体像(The New Skill in AI is Not Prompting, It's Context Engineeringより引用)

コンテキストのトレードオフ

 コンテキストエンジニアリングは、必要な情報を不足なく準備する「情報を追加する」操作と、不要な情報を取り除く「情報を削除する」操作の二つが重要になってきます。

 前者については、一例として、AIエージェントに何かしらのタスクを実施させたいとき、以下のような情報を準備します。

  • 目的
  • 背景
  • 利用可能なツール群
  • 制約条件
  • 出力形式
  • 過去の履歴

 これらの情報は、すべてタスク固有の情報であり、AIエージェントが自動的に情報を取得することはできません。また、何かしらの情報が欠けてしまうとタスクの正しい遂行が困難になります。例えば、いくら目的に沿ってタスクを遂行しても、制約条件を無視していては意味がありません。

 このように 「情報を追加する」ことは、タスクを実施する上では必須であると言えます

 そして「情報を追加する」ことと同じくらい「情報を削除する」ことも重要です。

 ChatGPTに長い議事録を貼り付けて要約を頼んだら、肝心な決定事項が抜け落ちていた。コーディングAIに複雑なタスクを任せたら、途中で急に出力されるコードの品質が落ちた。長い資料を読ませて質問したら、序盤の内容ばかり拾って、後半にあった情報をまるごと無視された。情報をたくさん渡せば賢くなるはずなのに、逆に精度が落ちる。心当たりのある方も多いのではないでしょうか。

 上記が生じる理由は、LLMが効果的に活用できる情報量(≒コンテキスト量)が限られているからです。一般的に、コンテキスト量を増やすほどコンテキストの中から回答に有効な情報を抽出・活用できなくなる傾向が強くなります。

 このようにコンテキストエンジニアリングでは、 回答に必須な情報をすべて入力すると同時に、それ以外の不要な情報を入力しないことが必要と言えます

コンテキストエンジニアリングのバランス

実践のための第一歩

 ここまでコンテキストエンジニアリングの概要と、情報の追加・削除というトレードオフについて説明しました。では、実際に何から始めればよいのでしょうか。

 最初にすべきことは、現在LLMに渡しているコンテキストの棚卸しです。

 多くの場合、プロンプトは開発の過程で継ぎ足しながら膨らんでいきます。結果として、重複した指示や古くなった情報、そのタスクには不要な背景説明がそのまま残っていることが少なくありません。まずは、LLMに渡している入力全体を一つのドキュメントとして書き出すとよいでしょう。

 次は、コンテキストの精査です。

 人間がタスクを実施する際に使っている情報を整理します。その上で現在設定しているコンテキストが、次のいずれに属しているかを分類してみるとよいでしょう。

  • 必須情報:これがないとタスクを正しく遂行できない(目的、制約条件、出力形式など)
  • 補足情報:あると精度が上がるが、なくても最低限の出力は得られる(参考例、背景知識など)
  • 不要情報:タスクの遂行に寄与しない、または他の情報と重複している

 この整理をすると、何が必要な情報であるのか、何を足せばよいか・引けばよいかの判断ができます。

おわりに ~本当に必要な情報は何かを見直してみよう

 本記事では、コンテキストエンジニアリングの基本的な考え方として「情報の追加」と「情報の削除」というトレードオフを紹介し、実践のための第一歩をご紹介しました。

 LLMの性能がいかに向上しても、渡される情報が適切でなければ、その能力を十分に引き出すことはできません。本当に必要な情報は何かを見直すだけでも、LLMの出力品質は大きく変わるはずです。

 本記事が、皆さんのAI活用をよりよくするきっかけになれば幸いです。

著者プロフィール:渋谷 優介

 大学院在学中より深層学習の研究に従事し、2023年4月にARISE analyticsへ入社。生成AIおよび機械学習の導入支援、ITコンサルティング、システムインテグレーション領域において、生成AIアプリケーションのフルスタック開発から、商用アプリケーションやPoCシステムのバックエンド/インフラ開発まで幅広く経験を重ねる。2024年12月、Algomaticに入社。生成AI・RAG・AIエージェントを活用したソリューションの受託開発などを通して、大企業向けの業務変革を推進するとともに、テックリードとして自社LLMプロダクトの開発を牽引している。

・株式会社Algomatic:https://algomatic.jp/

開発者と読み解くAIの世界 記事一覧