<p><!-- META_DATA: {"template": "technical_report_v1", "topic": "context_engineering", "focus": "optimization_strategy"} -->
本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<h1 class="wp-block-heading">RAG精度を最大化する「コンテキストエンジニアリング」:情報密度の最適化によるLLMの思考深度向上</h1>
<h3 class="wp-block-heading">【ユースケース定義と課題】</h3>
<p>膨大な社内規定や技術仕様書をLLMに読み込ませ、矛盾のない実行プランを策定させる。単なる要約ではなく、参照情報の優先順位付けと、文脈(コンテキスト)の動的な整理が困難。</p>
<ul class="wp-block-list">
<li><p><strong>入力型</strong>:非構造化テキスト(PDF抽出、Wiki等)</p></li>
<li><p><strong>出力型</strong>:構造化Markdown(Action Plan形式)および検証用JSON</p></li>
</ul>
<h3 class="wp-block-heading">【プロンプト設計のループ】</h3>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
graph TD
A["設計: コンテキストの構造化"] --> B["実行: 推論と整合性チェック"]
B --> C["評価: 根拠(Citation)の正確性"]
C -->|改善: ノイズ除去とメタデータ付与| A
</pre></div>
<ol class="wp-block-list">
<li><p><strong>設計</strong>:生データを流し込むのではなく、重要度や属性(日付、カテゴリ)をメタデータとして付与し、LLMが「どこを重視すべきか」を設計。</p></li>
<li><p><strong>実行</strong>:Chain-of-Thoughtを用い、情報を統合する前に各情報の信頼性を評価させる。</p></li>
<li><p><strong>評価</strong>:出力されたプランが、元のコンテキストのどの部分に基づいているかをリンク(引用元)で検証。</p></li>
</ol>
<h3 class="wp-block-heading">【プロンプトの実装案】</h3>
<div class="codehilite">
<pre data-enlighter-language="generic"># Role
あなたは高度なコンテキストエンジニアです。提供された複数の情報源から、矛盾を解消し、実行可能な「技術導入ロードマップ」を作成してください。
# Context
以下のドキュメント群を分析してください。
<documents>
[Doc1: 2024年セキュリティガイドライン] ...
[Doc2: 現行インフラ構成] ...
[Doc3: 開発チームのスキルセット] ...
</documents>
# Task Instructions
1. **Step-by-step Analysis**: 各ドキュメントから、今回のプロジェクトに関連する制約事項を箇条書きで抽出せよ。
2. **Conflict Resolution**: ドキュメント間で指示が矛盾する場合、[Doc1]を最優先し、その理由を述べよ。
3. **Action Plan Generation**: 以下のフォーマットで出力せよ。
# Output Format
## 1. 導入の前提条件
- (制約事項を記述)
## 2. 段階的実装プラン
- Step 1: ...
## 3. リスクと対策
- (矛盾点への対処を含む)
# Constraint
- 「AIの一般的な意見」は不要。必ず提供された<documents>の範囲内で回答すること。
- 不明な点は「不明」と明記し、憶測で補完しないこと。
</pre>
</div>
<h3 class="wp-block-heading">【評価指標と誤り分析】</h3>
<figure class="wp-block-table"><table>
<thead>
<tr>
<th style="text-align:left;">評価項目</th>
<th style="text-align:left;">採点基準 (1-5)</th>
<th style="text-align:left;">失敗パターン</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;"><strong>情報の忠実性</strong></td>
<td style="text-align:left;">提供データ外の知識(幻覚)が混入していないか</td>
<td style="text-align:left;">一般論を述べてしまい、固有の制約を無視する</td>
</tr>
<tr>
<td style="text-align:left;"><strong>コンテキスト優先度</strong></td>
<td style="text-align:left;">指示通り[Doc1]を最優先しているか</td>
<td style="text-align:left;">日付が古いドキュメントの指示に従ってしまう</td>
</tr>
<tr>
<td style="text-align:left;"><strong>形式遵守</strong></td>
<td style="text-align:left;">指定のMarkdownおよびJSON構造を維持しているか</td>
<td style="text-align:left;">説明文が長すぎてパースエラーが発生する</td>
</tr>
</tbody>
</table></figure>
<h3 class="wp-block-heading">【改良後の最適プロンプト】</h3>
<p>分析の結果、LLMが「どの情報が最新か」を迷う傾向があるため、システムプロンプトで「時間軸の重み付け」を明示的に定義。</p>
<div class="codehilite">
<pre data-enlighter-language="generic"># Role
System Strategist (Context-Aware Agent)
# Execution Logic (Chain-of-Thought)
1. 読み込んだ全情報に [ID][Date][Priority] のタグを内部的に付与せよ。
2. 矛盾を発見した場合、Priority > Date の順で優先順位を自動決定せよ。
3. 結論を出す前に、その根拠となる情報のIDを思考プロセス内で列挙せよ。
# Input Data
<input_context>
{{$DOCUMENT_INPUT}}
</input_context>
# Task
上記コンテキストに基づき、最適な意思決定案を提示せよ。
# Output Schema (Strict)
{
"summary": "決定事項の概要",
"plan": ["step1", "step2"],
"sources": ["DocID_1", "DocID_2"],
"unresolved_conflicts": ["未解決の矛盾点"]
}
# Constraint
- Output only valid JSON.
- No conversational filler.
</pre>
</div>
<h3 class="wp-block-heading">【まとめ】</h3>
<ol class="wp-block-list">
<li><p><strong>情報を「流す」のではなく「配置」する</strong>:タグ付けや構造化を行い、LLMが注目すべき情報の座標を明示すること。</p></li>
<li><p><strong>優先順位のアルゴリズムを指示する</strong>:矛盾が発生した際の「解決ルール(例:日付優先、部署優先)」をプロンプトに組み込むこと。</p></li>
<li><p><strong>思考と出力を分離する</strong>:JSON等の厳密な出力が必要な場合は、思考プロセス(Chain-of-Thought)を別のタグ内で行わせ、最終結果のみをパース可能にすること。</p></li>
</ol>
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
RAG精度を最大化する「コンテキストエンジニアリング」:情報密度の最適化によるLLMの思考深度向上
【ユースケース定義と課題】
膨大な社内規定や技術仕様書をLLMに読み込ませ、矛盾のない実行プランを策定させる。単なる要約ではなく、参照情報の優先順位付けと、文脈(コンテキスト)の動的な整理が困難。
【プロンプト設計のループ】
graph TD
A["設計: コンテキストの構造化"] --> B["実行: 推論と整合性チェック"]
B --> C["評価: 根拠(Citation)の正確性"]
C -->|改善: ノイズ除去とメタデータ付与| A
設計:生データを流し込むのではなく、重要度や属性(日付、カテゴリ)をメタデータとして付与し、LLMが「どこを重視すべきか」を設計。
実行:Chain-of-Thoughtを用い、情報を統合する前に各情報の信頼性を評価させる。
評価:出力されたプランが、元のコンテキストのどの部分に基づいているかをリンク(引用元)で検証。
【プロンプトの実装案】
# Role
あなたは高度なコンテキストエンジニアです。提供された複数の情報源から、矛盾を解消し、実行可能な「技術導入ロードマップ」を作成してください。
# Context
以下のドキュメント群を分析してください。
<documents>
[Doc1: 2024年セキュリティガイドライン] ...
[Doc2: 現行インフラ構成] ...
[Doc3: 開発チームのスキルセット] ...
</documents>
# Task Instructions
1. **Step-by-step Analysis**: 各ドキュメントから、今回のプロジェクトに関連する制約事項を箇条書きで抽出せよ。
2. **Conflict Resolution**: ドキュメント間で指示が矛盾する場合、[Doc1]を最優先し、その理由を述べよ。
3. **Action Plan Generation**: 以下のフォーマットで出力せよ。
# Output Format
## 1. 導入の前提条件
- (制約事項を記述)
## 2. 段階的実装プラン
- Step 1: ...
## 3. リスクと対策
- (矛盾点への対処を含む)
# Constraint
- 「AIの一般的な意見」は不要。必ず提供された<documents>の範囲内で回答すること。
- 不明な点は「不明」と明記し、憶測で補完しないこと。
【評価指標と誤り分析】
| 評価項目 |
採点基準 (1-5) |
失敗パターン |
| 情報の忠実性 |
提供データ外の知識(幻覚)が混入していないか |
一般論を述べてしまい、固有の制約を無視する |
| コンテキスト優先度 |
指示通り[Doc1]を最優先しているか |
日付が古いドキュメントの指示に従ってしまう |
| 形式遵守 |
指定のMarkdownおよびJSON構造を維持しているか |
説明文が長すぎてパースエラーが発生する |
【改良後の最適プロンプト】
分析の結果、LLMが「どの情報が最新か」を迷う傾向があるため、システムプロンプトで「時間軸の重み付け」を明示的に定義。
# Role
System Strategist (Context-Aware Agent)
# Execution Logic (Chain-of-Thought)
1. 読み込んだ全情報に [ID][Date][Priority] のタグを内部的に付与せよ。
2. 矛盾を発見した場合、Priority > Date の順で優先順位を自動決定せよ。
3. 結論を出す前に、その根拠となる情報のIDを思考プロセス内で列挙せよ。
# Input Data
<input_context>
{{$DOCUMENT_INPUT}}
</input_context>
# Task
上記コンテキストに基づき、最適な意思決定案を提示せよ。
# Output Schema (Strict)
{
"summary": "決定事項の概要",
"plan": ["step1", "step2"],
"sources": ["DocID_1", "DocID_2"],
"unresolved_conflicts": ["未解決の矛盾点"]
}
# Constraint
- Output only valid JSON.
- No conversational filler.
【まとめ】
情報を「流す」のではなく「配置」する:タグ付けや構造化を行い、LLMが注目すべき情報の座標を明示すること。
優先順位のアルゴリズムを指示する:矛盾が発生した際の「解決ルール(例:日付優先、部署優先)」をプロンプトに組み込むこと。
思考と出力を分離する:JSON等の厳密な出力が必要な場合は、思考プロセス(Chain-of-Thought)を別のタグ内で行わせ、最終結果のみをパース可能にすること。
ライセンス:本記事のテキスト/コードは特記なき限り
CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。
コメント