AI活用の効果を高めるために、コンテキストの理解を整理する
はじめに
こんにちは☀️プロダクト開発部 生成AIチームの伊藝です。
️沖縄からリモートワークで勤務しています。
昨年10月から、SREチームに所属しながらAI関連の業務に関わり、2025年6月から生成AIチーム専任で稼働しています。
世の中にAI🧠という言葉が溢れていますが、jinjerでもAIを積極的に活用するためのルールや基盤が整ってきており、業務でAIを使いやすい環境が整ってきています。✨
昨年の10月ごろからAIに関連する開発や活用推進に関わっている中で、"コンテキスト"の理解が一番大事なのかなと感じています。すでにコンテキストについて書かれた良記事がたくさんあります。
この記事は、AIを活用する際のちょっとした気づきになればと、自身の知識整理も兼ねて「これからAIを活用していく」「AI使ってみたけどうまくいかない」といった方へ向けて書いています。
AIにおけるコンテキストとは?
コンテキスト(context:文脈)という言葉がありますが、
AIにとっての「コンテキスト」とは、出力(=回答)を生成するために使われる前提情報や背景を指します。
ChatGPTのような💬チャット型AIを例にすると、以下のような情報が"コンテキスト"として扱われます。
- 現在の入力(ユーザーが送った質問や命令文)
- 過去の対話履歴(会話セッションでやりとりされた内容)
- システムプロンプト(AIに対して「あなたは親切なアシスタントです」といった事前設定)
これらの情報は、AI(LLM:大規模言語モデル)の"コンテキストウィンドウ"という入力枠に入力されます。AIはその入力をもとに、「次に来るべき言葉は何か?」を予測して回答を生成する、という仕組みです。
この「コンテキスト」が、AIの予測アルゴリズムにとって重要な役割を果たすという仕組みです。
以下のドキュメントは、そのあたりの仕組みが図解されていてわかりやすいです。
Anthropic - documentation/コンテキストウィンドウ
なぜコンテキストが大事なのか?
AIは、人間のように「考えて」いるわけではなく、あくまで「次に来そうな言葉を予測する」仕組みで動いています。
例えば、以下のプロンプトを見てみます。
User > 料理のレシピを教えて。
ChatGPT > もちろん!どんな料理を作りたいですか?和食、洋食、デザートなど、ジャンルを教えてもらえると嬉しいです。
このケースでは、明らかにユーザーの意図があいまいなため、AIは詳細を確認するしかありません。
ここでは、ChatGPTが親切にヒアリングを開始しています。この"コンテキスト"では本当に食べたいものに関するレシピが手に入らなさそうです。
では、コンテキストを与えるということはどういうことか。
User >
あなたは中華料理のマイスターです。ユーザーのリクエストに答えてレシピを案内してください。
プロの味を簡単に、時短で、再現できるように案内を工夫してください。
料理が不得意な人にもやさしく簡単なレシピを案内する様にしてください。
レシピを案内する際には、プロ意識を持って簡潔でわかりやすく説明してください。
レシピの出来上がりが想像できるようにイメージ画像などをつけると良いでしょう。
まず初めに、ユーザーに食べたいものをヒアリングしてください。
ChatGPT > 了解しました!
私は中華料理のマイスターとして、プロの味を簡単・時短で再現できるレシピをご案内します。
料理が苦手な方でも大丈夫。手順はやさしく・シンプルに、しっかりサポートしますよ。
まずは教えてください!
今日はどんな中華料理が食べたいですか?
User > 今日は暑いので、食欲をそそる辛いものが食べたいです。10分以内で作れるものがいい。
ChatGPT > いいですね!
10分以内で作れて、ピリ辛で食欲アップする中華なら、こちらが断然おすすめです:
よだれ鶏(冷やしピリ辛蒸し鶏)
火を使わず電子レンジでOK!冷たくてピリ辛、夏にぴったりの一品。
~~ snip ~~
LLMは、このような情報をトークンという単位に分解して、「この流れで来るなら、次はこの単語だろう」と予測しながら、回答を生成しています。「どう予測するか?」の材料となるのが"コンテキスト"であり、コンテキストが入力される入り口が"コンテキストウィンドウ"と呼ばれるものになります。
- モデルにどういう役割を与えているか(中華料理のマイスター)
- どんな情報を先に渡したか(レシピを案内する際のルール)
- ユーザーがどんな質問をしたか(食べたいものや10分以内といった条件)
ここまでで、どんなコンテキスト情報を与えるかで、AIの出力は大きく変わるという部分のイメージが理解できたかなと思います。💡
コンテキストの入力方法について、さらに理解を深めたい場合は、以下のドキュメントを見てみると良いかもしれません。
Anthropic - document/プロンプトエンジニアリングのベストプラクティス
色々なコンテキスト
先ほどのChatGPTの例では、チャットの指示の中に含まれる情報がコンテキストになります。
では、以下の様なよくあるRAGアプリケーションの構成だとどうでしょうか。
👆の様なRAGアプリケーションでは、以下の様な情報がコンテキストになります。
- BedrockAgentに設定するシステムプロンプト
- ユーザーから受け取る質問
- 質問に応じて取得されるデータソースの情報
※データソースの情報は、LLMが能動的にアクションとして取得するので、厳密にはコンテキストとは区別すべきですが、広義の意味でコンテキストとしています。
この場合、AIは、システムプロンプトに設定された役割やルールに基づいて、ユーザーから受け取る質問を読み取り、利用できるデータソースの情報をコンテキストとして取り込み、回答を生成することになります。
システムプロンプトで指示する内容が曖昧だったり、ユーザーから受け取る質問が不明瞭であった場合に、良い回答が生成できません。また、質問に対して十分な情報がデータソースに存在しない場合も、的確な回答は生成できません。
このようにさまざまなAIサービス/ツールでは、何かを生成する際に形は違っても、どのようにコンテキストを与えるかということが重要になります。
コンテキストをうまく使うとは?
「コンテキストをうまく使う」ということは、人に何かお願いする際に意識することに似ています。
なぜしてほしいのか、どういう条件でしてほしいのか、どういったデータを使うのか、などの情報を付け加えることで伝えられた人は、状況を理解しやすくなります。
私たちは日常的に、相手の表情や声などから暗黙的に"コンテキスト"を読み取っていますが、AIにはその暗黙が通じません。そのため、言葉や設定を"コンテキスト"として伝える必要があります。
コーディングエージェント「Cline」 で、コンテキストをうまく使う方法について見てみます。
サンプルアプリケーションとして、github で公開されている aws-sam-examples から "s3_processor" というアプリケーションを使用します。
github - aws-sam-examples
Cline の場合は、以下の様な情報がコンテキストになります。
- ソースコードファイルやエラーが表示されたターミナルなど
- 「.clinerules」 のようなルールファイル
- ユーザーから受け取るタスク
どのファイルを開いているか、どんなタスクを指示しているか、また、どんなルールを与えているかによって、生成されるコードの精度が変わってきます。
サンプルアプリケーションの中身は、確認していないため、全くわかりません。
そこで、以下の手順を取ってみました。💡
- このアプリケーションの説明をさせる。
- ".clinerules" ファイルを作成させる。
- unittest を追加する。
1つ目の手順で、アプリケーションの説明をさせることで、プロジェクトの全体像を掴んでもらいました。その上で、2つ目の指示として、".clinerules" ファイルを作成させています。
こうすることで、プロジェクトの実装内容から、より適切なルールを推測して生成してくれます。
さらに、ルールを生成したことで、それが追加のコンテキストとなり、最後の unittest の追加もそれなりの精度のものができあがります。
ここではあくまでサンプルとして、具体的な内容の深掘りは避けますが、コンテキストをうまく使う方法について、イメージしていただけたかと思います。
例えば、エラー内容や再現方法を添えずに「バグがあるので直して」というタスクの指示はコンテキストが不足しています。
「〜〜機能の〜〜の部分でエラーが出ているのでバグがあるか確認して」と指定することで、より正確なアシストが得られます。
さらにルールファイル内で、エラーの修正を行う際の手順に関する指示が書かれていると、意図した動作をして、良い生成結果が得られるようになると思います。
まとめ
ここまで読んでくださった方には、「AI活用においてコンテキストがいかに重要か」が少しでも伝わったのではないかと思います。
もし、記事内容が参考になったなと思ったら、次に業務でAIを使うときに少しだけ"コンテキスト"の伝え方を工夫してみてください。
意識するポイントは、
- AI に役割を与える
- ルール、やり方についての指示を添える
- タスクの目的や背景を伝える
ツールが変わっても、コンテキストを意識してAIに渡すことで、生成してくれる答えが少し良くなったように感じられるはずです。
ここ最近の生成AIツールのアップデートをチェックしていると、いずれも"いかにコンテキストを正しく与えるか"を重視して進化している様に思えます。
CopilotやCursor、Clineなどが提供する「rules」はその代表例です。
特にMCP(Model Context Protocol)のような新しい技術は、AIがコンテキストを柔軟に取得できる世界観があり、業務効率を一気に高めてくれる可能性があるものです。
少し長々と書きましたが、(自分も含めて)コンテキストについて少し理解が整理できたかなと考えています。
今後さらに高度なAIツールが登場していく中で、「どうやって質の高いコンテキストを与えるか?」という視点は、引き続き重要になってくるはずです。
おわりに
jinjerでは、「日本一の開発組織」を目指して日々メンバーが奮闘しています。そして一緒にお仕事してくれる仲間を募集しています。
このブログの記事で少しでもjinjerに興味を持ってくださいましたら、下のリンクから、お気軽に採用担当までお問い合わせいただければと思います。
Discussion