<p><meta/>
{
“focus”: “Context Engineering for LLMs”,
“techniques”: [“CoT”, “Structured Output”, “Few-shot”, “Context Grounding”],
“target_models”: [“Gemini 1.5 Pro”, “GPT-4o”],
“version”: “1.0.0”
}
本記事は<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>: 非構造化テキスト(会議録、技術文書等)</p></li>
<li><p><strong>出力型</strong>: 厳密なスキーマに基づく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["評価: 事実整合性と書式"]
C -->|改善: 制約の追加| A
</pre></div>
<ol class="wp-block-list">
<li><p><strong>設計</strong>: 単なる命令ではなく、LLMが情報を処理しやすいようタグ(<code><context></code>等)で情報を分節化。</p></li>
<li><p><strong>実行</strong>: Chain-of-Thoughtを用い、回答前にコンテキストから証拠(Evidence)を引用させる。</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
- コンテキストに記載のない情報は絶対に含めない(Know-nothing制約)。
- 回答は必ず有効なJSONオブジェクトのみを出力する。
- 抽出する際は、まず「思考プロセス」として、どの文言を根拠にしたかをリストアップすること。
# Context
<document>
{{INPUT_TEXT}}
</document>
# Output Format
{
"thought_process": "抽出の根拠となった箇所の抜粋",
"summary": {
"conclusion": "結論",
"evidence": ["根拠1", "根拠2"],
"next_steps": ["アクション1", "アクション2"]
}
}
# Example
Input: "プロジェクトAは予算不足により来月から3ヶ月中断する。再開には追加承認が必要。"
Output: {
"thought_process": "予算不足、来月から3ヶ月中断、再開には追加承認が必要、という記述を確認。",
"summary": {
"conclusion": "プロジェクトAの一時中断",
"evidence": ["予算不足", "来月から3ヶ月間"],
"next_steps": ["再開のための追加承認取得"]
}
}
</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;">評価基準 (LLM-as-a-Judge)</th>
<th style="text-align:left;">失敗パターン</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;"><strong>事実整合性</strong></td>
<td style="text-align:left;">抽出された全項目がソース内に存在するか(1-5)</td>
<td style="text-align:left;">文書外の一般知識による補完</td>
</tr>
<tr>
<td style="text-align:left;"><strong>書式適合性</strong></td>
<td style="text-align:left;">JSONとして正しくパース可能か(0 or 1)</td>
<td style="text-align:left;">Markdownのコードブロック記号の混入</td>
</tr>
<tr>
<td style="text-align:left;"><strong>網羅性</strong></td>
<td style="text-align:left;">重要なネクストアクションが漏れていないか(1-5)</td>
<td style="text-align:left;">些末な事実のみにフォーカスする</td>
</tr>
</tbody>
</table></figure>
<p><strong>誤り分析</strong>:
特に「事実誤認(ハルシネーション)」は、LLMが親切心から「推測」を混ぜることで発生します。これを防ぐには「思考プロセスの分離(CoT)」と「抽出元テキストの明示」が不可欠です。</p>
<h3 class="wp-block-heading">【改良後の最適プロンプト】</h3>
<p>Gemini 1.5 Pro等の長文コンテキストモデルを想定し、システム命令を強化したバージョンです。</p>
<div class="codehilite">
<pre data-enlighter-language="generic"># System Instructions
- あなたは情報の真実性を最優先する抽出エンジンです。
- Userが提供する <source_material> タグ内のテキストのみを情報源としてください。
- もし情報源から回答を生成できない場合は、{"error": "Insufficient information"} と出力してください。
# Processing Protocol
1. **Analyze**: <source_material> を精読し、キーポイントを特定する。
2. **Verify**: 特定したポイントが明示的に記載されているか再確認する。
3. **Format**: 指定されたJSONスキーマに流し込む。
# Input Data
<source_material>
{{CONTEXT_DATA}}
</source_material>
# Response Schema (Strict JSON)
{
"metadata": {
"source_verified": boolean,
"confidence_score": 0.0-1.0
},
"extracted_data": {
"key_decision": "string",
"supporting_facts": ["string"],
"risk_factors": ["string"]
}
}
# Output
(思考プロセスを隠し、JSONのみを出力)
</pre>
</div>
<h3 class="wp-block-heading">【まとめ】</h3>
<p>実務でコンテキストエンジニアリングを運用するための3つの鉄則:</p>
<ol class="wp-block-list">
<li><p><strong>境界の明示</strong>: コンテキストを<code><tag></code>で囲み、LLMが「どこまでが事実か」を物理的に理解できるようにする。</p></li>
<li><p><strong>思考の外部化</strong>: <code>thought_process</code> フィールドを設け、LLMに「証拠のセルフチェック」を行わせる。</p></li>
<li><p><strong>スキーマの固定</strong>: 自由記述を避け、JSONスキーマを明示することで、後続のシステム(BIツールやDB)との連携を担保する。</p></li>
</ol>
{
“focus”: “Context Engineering for LLMs”,
“techniques”: [“CoT”, “Structured Output”, “Few-shot”, “Context Grounding”],
“target_models”: [“Gemini 1.5 Pro”, “GPT-4o”],
“version”: “1.0.0”
}
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
プロンプトから「コンテキスト設計」へ:外部知識を統合する高精度情報抽出エンジンの構築
【ユースケース定義と課題】
膨大な社内資料をコンテキストとして入力し、事実誤認を排除した上で「結論・根拠・課題」を構造化したJSON形式で抽出する。
入力型: 非構造化テキスト(会議録、技術文書等)
出力型: 厳密なスキーマに基づくJSON
【プロンプト設計のループ】
graph TD
A["設計: コンテキストの構造化"] --> B["実行: 推論と抽出"]
B --> C["評価: 事実整合性と書式"]
C -->|改善: 制約の追加| A
設計: 単なる命令ではなく、LLMが情報を処理しやすいようタグ(<context>等)で情報を分節化。
実行: Chain-of-Thoughtを用い、回答前にコンテキストから証拠(Evidence)を引用させる。
評価: 出力されたJSONのパース可否と、ソース文書に存在しない情報の混入(ハルシネーション)をチェック。
【プロンプトの実装案】
# Role
あなたは高度な情報分析官です。提供されたコンテキストのみに基づき、以下のタスクを遂行してください。
# Task
入力された資料から重要な事実を抽出し、指定のJSONフォーマットで要約してください。
# Constraints
- コンテキストに記載のない情報は絶対に含めない(Know-nothing制約)。
- 回答は必ず有効なJSONオブジェクトのみを出力する。
- 抽出する際は、まず「思考プロセス」として、どの文言を根拠にしたかをリストアップすること。
# Context
<document>
{{INPUT_TEXT}}
</document>
# Output Format
{
"thought_process": "抽出の根拠となった箇所の抜粋",
"summary": {
"conclusion": "結論",
"evidence": ["根拠1", "根拠2"],
"next_steps": ["アクション1", "アクション2"]
}
}
# Example
Input: "プロジェクトAは予算不足により来月から3ヶ月中断する。再開には追加承認が必要。"
Output: {
"thought_process": "予算不足、来月から3ヶ月中断、再開には追加承認が必要、という記述を確認。",
"summary": {
"conclusion": "プロジェクトAの一時中断",
"evidence": ["予算不足", "来月から3ヶ月間"],
"next_steps": ["再開のための追加承認取得"]
}
}
【評価指標と誤り分析】
| 評価項目 |
評価基準 (LLM-as-a-Judge) |
失敗パターン |
| 事実整合性 |
抽出された全項目がソース内に存在するか(1-5) |
文書外の一般知識による補完 |
| 書式適合性 |
JSONとして正しくパース可能か(0 or 1) |
Markdownのコードブロック記号の混入 |
| 網羅性 |
重要なネクストアクションが漏れていないか(1-5) |
些末な事実のみにフォーカスする |
誤り分析:
特に「事実誤認(ハルシネーション)」は、LLMが親切心から「推測」を混ぜることで発生します。これを防ぐには「思考プロセスの分離(CoT)」と「抽出元テキストの明示」が不可欠です。
【改良後の最適プロンプト】
Gemini 1.5 Pro等の長文コンテキストモデルを想定し、システム命令を強化したバージョンです。
# System Instructions
- あなたは情報の真実性を最優先する抽出エンジンです。
- Userが提供する <source_material> タグ内のテキストのみを情報源としてください。
- もし情報源から回答を生成できない場合は、{"error": "Insufficient information"} と出力してください。
# Processing Protocol
1. **Analyze**: <source_material> を精読し、キーポイントを特定する。
2. **Verify**: 特定したポイントが明示的に記載されているか再確認する。
3. **Format**: 指定されたJSONスキーマに流し込む。
# Input Data
<source_material>
{{CONTEXT_DATA}}
</source_material>
# Response Schema (Strict JSON)
{
"metadata": {
"source_verified": boolean,
"confidence_score": 0.0-1.0
},
"extracted_data": {
"key_decision": "string",
"supporting_facts": ["string"],
"risk_factors": ["string"]
}
}
# Output
(思考プロセスを隠し、JSONのみを出力)
【まとめ】
実務でコンテキストエンジニアリングを運用するための3つの鉄則:
境界の明示: コンテキストを<tag>で囲み、LLMが「どこまでが事実か」を物理的に理解できるようにする。
思考の外部化: thought_process フィールドを設け、LLMに「証拠のセルフチェック」を行わせる。
スキーマの固定: 自由記述を避け、JSONスキーマを明示することで、後続のシステム(BIツールやDB)との連携を担保する。
ライセンス:本記事のテキスト/コードは特記なき限り
CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。
コメント