複雑な要件を制する「段階的コンテキスト構築」:コンテキストエンジニアリング実践ガイド

Tech

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形式で出力するタスクの精度向上。

  • 入力: 1万字超の非構造化ドキュメント(PDF等から抽出されたテキスト)

  • 出力: スキーマに準拠したJSONデータ(Markdownフェンス内)

【プロンプト設計のループ】

graph TD
A["要件の分解と構造化"] --> B["段階的思考プロンプトの実行"]
B --> C["出力形式の検証と誤り分析"]
C -->|指示の曖昧さを解消| A
  1. 設計: 一度に「要約」「抽出」「JSON化」を求めず、思考の順序を定義する。

  2. 実行: LLMに「まず何を確認すべきか」を宣言させてから処理を開始させる。

  3. 評価: 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つの鉄則:

  1. 情報のカプセル化: <document><instructions>などのXMLタグを使い、指示とデータを明確に分離する。

  2. 処理の同期化: Stage 1 -> Stage 2 と明示的にステップを分けることで、LLMがタスクの全体像を把握しやすくする。

  3. 「思考の外部化」の強制: <thinking>タグを設け、LLMに「自分の考え」を書かせることで、最終回答の論理性と精度が飛躍的に向上する。

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました