<p><style_prompt>
RESEARCH-FIRST: 最新のLLM(Gemini 1.5 Pro/Flash)は、コンテキストウィンドウが拡大した一方で、中盤の情報を見落とす「Lost in the Middle」現象や、一度に多くの制約を与えると指示に従わなくなる「Instruction Fatigue」が課題となる。本プロンプトは、ReAct(Reasoning and Acting)とChain-of-Thoughtを組み合わせ、情報をフェーズ分けして処理させることでこれを解決する。
PLAN: 1. 長大・複雑なタスクの分解、2. 思考ステップの明文化、3. 段階的な制約の適用、というステップで構成。
</style_prompt></p>
<p>本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<h1 class="wp-block-heading">複雑な要件を制する「段階的コンテキスト構築」:コンテキストエンジニアリング実践ガイド</h1>
<h3 class="wp-block-heading">【ユースケース定義と課題】</h3>
<p>長大な技術文書から特定条件に基づく重要項目を抽出し、構造化されたJSON形式で出力するタスクの精度向上。</p>
<ul class="wp-block-list">
<li><p><strong>入力:</strong> 1万字超の非構造化ドキュメント(PDF等から抽出されたテキスト)</p></li>
<li><p><strong>出力:</strong> スキーマに準拠したJSONデータ(Markdownフェンス内)</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["出力形式の検証と誤り分析"]
C -->|指示の曖昧さを解消| A
</pre></div>
<ol class="wp-block-list">
<li><p><strong>設計:</strong> 一度に「要約」「抽出」「JSON化」を求めず、思考の順序を定義する。</p></li>
<li><p><strong>実行:</strong> LLMに「まず何を確認すべきか」を宣言させてから処理を開始させる。</p></li>
<li><p><strong>評価:</strong> JSONのパース可否、および抽出漏れの有無を自動・手動で確認する。</p></li>
</ol>
<h3 class="wp-block-heading">【プロンプトの実装案】</h3>
<div class="codehilite">
<pre data-enlighter-language="generic"># Role
あなたは情報抽出とデータ構造化のエキスパートです。
# Task
提供された「セキュリティ規定ドキュメント」を解析し、後述するJSONスキーマに従って特定項目を抽出してください。
# Constraints
- ステップバイステップで思考し、最終回答の前に「思考プロセス」を出力してください。
- 規定に記載がない項目は "N/A" と記述してください。
- JSONは有効な形式で出力し、エスケープ文字に注意してください。
# Steps
1. 文書全体をスキャンし、セキュリティ要件に該当する箇所を特定する。
2. 各要件について「重要度」「対象部署」「具体的な実施事項」を整理する。
3. 整理した内容をJSON形式に変換する。
# Context (Input Document)
[ここに複雑なドキュメントを貼り付け]
# Response Format
<thinking>
(ここにステップ1〜2の思考過程を記述)
</thinking>
```json
{
"requirements": [
{
"id": "string",
"priority": "High/Medium/Low",
"target": "string",
"action": "string"
}
]
}
</pre>
</div>
<pre data-enlighter-language="generic">
### 【評価指標と誤り分析】
| 評価項目 | 評価基準 (Score 1-5) | 失敗時の典型パターン |
| :--- | :--- | :--- |
| **スキーマ準拠** | JSONとしてパース可能か | 閉じカッコの不足、末尾カンマの残存 |
| **抽出精度** | 重要な制約事項の漏れがないか | 「その他」に分類され重要情報が削られる |
| **幻覚(Hallucination)** | 本文にない要件を捏造していないか | 一般論を規定のように出力する |
| **段階的思考** | <thinking>タグ内で論理的な飛躍がないか | 思考をスキップして直接回答を生成する |
### 【改良後の最適プロンプト】
Gemini 1.5 Proの「長い文脈を理解する力」を活かし、XMLタグで情報の役割を明確化した「最強プロンプト」です。
```text
# Role
Data Extraction Specialist
# Process: Execute the following 3-stage pipeline
<stage1_understanding>
- 入力文書から「システム導入」「運用保守」「廃棄」の3フェーズに関するセキュリティ制約を、箇条書きで漏れなく抽出してください。
</stage1_understanding>
<stage2_refinement>
- stage1で抽出した情報を、以下のJSONキーに適合するよう再構成してください。
- キー:'phase', 'item', 'risk_level', 'countermeasure'
</stage2_refinement>
<stage3_output>
- stage2の結果を、純粋なJSON形式で出力してください。
- Markdownのコードブロックを使用すること。
</stage3_output>
# Input Document
<document>
{{INPUT_TEXT}}
</document>
# Mandatory Output Format
<thinking>
(Your step-by-step reasoning here)
</thinking>
```json
[JSON Content]
</pre>
<p>“`</p>
<h3 class="wp-block-heading">【まとめ】</h3>
<p>実務でコンテキストエンジニアリングを運用するための3つの鉄則:</p>
<ol class="wp-block-list">
<li><p><strong>情報のカプセル化:</strong> <code><document></code>や<code><instructions></code>などのXMLタグを使い、指示とデータを明確に分離する。</p></li>
<li><p><strong>処理の同期化:</strong> <code>Stage 1 -> Stage 2</code> と明示的にステップを分けることで、LLMがタスクの全体像を把握しやすくする。</p></li>
<li><p><strong>「思考の外部化」の強制:</strong> <code><thinking></code>タグを設け、LLMに「自分の考え」を書かせることで、最終回答の論理性と精度が飛躍的に向上する。</p></li>
</ol>
RESEARCH-FIRST: 最新のLLM(Gemini 1.5 Pro/Flash)は、コンテキストウィンドウが拡大した一方で、中盤の情報を見落とす「Lost in the Middle」現象や、一度に多くの制約を与えると指示に従わなくなる「Instruction Fatigue」が課題となる。本プロンプトは、ReAct(Reasoning and Acting)とChain-of-Thoughtを組み合わせ、情報をフェーズ分けして処理させることでこれを解決する。
PLAN: 1. 長大・複雑なタスクの分解、2. 思考ステップの明文化、3. 段階的な制約の適用、というステップで構成。
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
複雑な要件を制する「段階的コンテキスト構築」:コンテキストエンジニアリング実践ガイド
【ユースケース定義と課題】
長大な技術文書から特定条件に基づく重要項目を抽出し、構造化されたJSON形式で出力するタスクの精度向上。
【プロンプト設計のループ】
graph TD
A["要件の分解と構造化"] --> B["段階的思考プロンプトの実行"]
B --> C["出力形式の検証と誤り分析"]
C -->|指示の曖昧さを解消| A
設計: 一度に「要約」「抽出」「JSON化」を求めず、思考の順序を定義する。
実行: LLMに「まず何を確認すべきか」を宣言させてから処理を開始させる。
評価: JSONのパース可否、および抽出漏れの有無を自動・手動で確認する。
【プロンプトの実装案】
# Role
あなたは情報抽出とデータ構造化のエキスパートです。
# Task
提供された「セキュリティ規定ドキュメント」を解析し、後述するJSONスキーマに従って特定項目を抽出してください。
# Constraints
- ステップバイステップで思考し、最終回答の前に「思考プロセス」を出力してください。
- 規定に記載がない項目は "N/A" と記述してください。
- JSONは有効な形式で出力し、エスケープ文字に注意してください。
# Steps
1. 文書全体をスキャンし、セキュリティ要件に該当する箇所を特定する。
2. 各要件について「重要度」「対象部署」「具体的な実施事項」を整理する。
3. 整理した内容をJSON形式に変換する。
# Context (Input Document)
[ここに複雑なドキュメントを貼り付け]
# Response Format
<thinking>
(ここにステップ1〜2の思考過程を記述)
</thinking>
```json
{
"requirements": [
{
"id": "string",
"priority": "High/Medium/Low",
"target": "string",
"action": "string"
}
]
}
### 【評価指標と誤り分析】
| 評価項目 | 評価基準 (Score 1-5) | 失敗時の典型パターン |
| :--- | :--- | :--- |
| **スキーマ準拠** | JSONとしてパース可能か | 閉じカッコの不足、末尾カンマの残存 |
| **抽出精度** | 重要な制約事項の漏れがないか | 「その他」に分類され重要情報が削られる |
| **幻覚(Hallucination)** | 本文にない要件を捏造していないか | 一般論を規定のように出力する |
| **段階的思考** | <thinking>タグ内で論理的な飛躍がないか | 思考をスキップして直接回答を生成する |
### 【改良後の最適プロンプト】
Gemini 1.5 Proの「長い文脈を理解する力」を活かし、XMLタグで情報の役割を明確化した「最強プロンプト」です。
```text
# Role
Data Extraction Specialist
# Process: Execute the following 3-stage pipeline
<stage1_understanding>
- 入力文書から「システム導入」「運用保守」「廃棄」の3フェーズに関するセキュリティ制約を、箇条書きで漏れなく抽出してください。
</stage1_understanding>
<stage2_refinement>
- stage1で抽出した情報を、以下のJSONキーに適合するよう再構成してください。
- キー:'phase', 'item', 'risk_level', 'countermeasure'
</stage2_refinement>
<stage3_output>
- stage2の結果を、純粋なJSON形式で出力してください。
- Markdownのコードブロックを使用すること。
</stage3_output>
# Input Document
<document>
{{INPUT_TEXT}}
</document>
# Mandatory Output Format
<thinking>
(Your step-by-step reasoning here)
</thinking>
```json
[JSON Content]
“`
【まとめ】
実務でコンテキストエンジニアリングを運用するための3つの鉄則:
情報のカプセル化: <document>や<instructions>などのXMLタグを使い、指示とデータを明確に分離する。
処理の同期化: Stage 1 -> Stage 2 と明示的にステップを分けることで、LLMがタスクの全体像を把握しやすくする。
「思考の外部化」の強制: <thinking>タグを設け、LLMに「自分の考え」を書かせることで、最終回答の論理性と精度が飛躍的に向上する。
ライセンス:本記事のテキスト/コードは特記なき限り
CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。
コメント