<p><style_prompt>
ロール:LLMプロンプトエンジニアリング・スペシャリスト
トーン:プロフェッショナル、技術的、構造的
出力形式:Markdown(Mermaid、テーブル、コードブロックを多用)
目的:コンテキストエンジニアリングによる複雑な要件分割の最適化
</style_prompt></p>
<p>本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<h1 class="wp-block-heading">複雑な要件定義を精度高く完遂する:段階的コンテキストエンジニアリングの実装ガイド</h1>
<h3 class="wp-block-heading">【ユースケース定義と課題】</h3>
<p>大規模システムの複雑な業務ロジックを、整合性を保ちつつ各モジュールごとに段階的に分割して定義する。</p>
<ul class="wp-block-list">
<li><p><strong>入力:</strong> 粗い要件メモ、全体構造定義</p></li>
<li><p><strong>出力:</strong> 整合性の取れた詳細なモジュール別仕様書(Markdown形式)</p></li>
<li><p><strong>課題:</strong> 一度に全情報を入力すると、情報の希釈(Lost in the Middle)により細部の論理矛盾や出力の質の低下が発生する。</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
C -->|合格| D["最終統合"]
</pre></div>
<ul class="wp-block-list">
<li><p><strong>設計:</strong> 全体像(Global Context)と個別詳細(Local Context)に情報を分離する。</p></li>
<li><p><strong>実行:</strong> Gemini 1.5 Pro等の長文脈窓を活かしつつ、CoT(思考の連鎖)で推論ステップを明示する。</p></li>
<li><p><strong>評価:</strong> 前のステップの出力内容を「制約条件」として次のステップに引き継いでいるかを検証する。</p></li>
</ul>
<h3 class="wp-block-heading">【プロンプトの実装案】</h3>
<p>コンテキストを「構造定義(Step 1)」と「詳細設計(Step 2)」に分離し、Few-shotで出力形式を固定する手法です。</p>
<div class="codehilite">
<pre data-enlighter-language="generic"># Step 1: Global Context Structure
あなたはシステムアーキテクトです。以下の要件メモから、全体のデータ構造とモジュール間の依存関係を定義してください。
## 要件メモ
[要件内容をここにペースト]
## 出力形式 (JSON)
{
"system_name": "",
"modules": [
{"id": "M1", "name": "認証系", "dependency": []},
{"id": "M2", "name": "決済系", "dependency": ["M1"]}
]
}
---
# Step 2: Local Context Deep Dive (Sequential)
Step 1の結果に基づき、モジュール [Module_ID] の詳細設計を行います。
## 参照コンテキスト
- 全体構造: [Step 1の出力結果]
- 関連モジュール仕様: [以前のステップで生成した仕様]
## 指示
1. まず、このモジュールが他モジュールとどう連携するか思考(CoT)してください。
2. その後、以下のフォーマットでMarkdown出力してください。
## 出力例
### モジュール名: [名称]
- 機能概要: ...
- 入出力インターフェース: ...
</pre>
</div>
<h3 class="wp-block-heading">【評価指標と誤り分析】</h3>
<p>コンテキストを分割した際に発生しやすいリスクを、LLM-as-a-Judgeの手法で評価します。</p>
<figure class="wp-block-table"><table>
<thead>
<tr>
<th style="text-align:left;">評価項目</th>
<th style="text-align:left;">失敗パターン</th>
<th style="text-align:left;">判定基準(1-5点)</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;"><strong>論理性(Logic)</strong></td>
<td style="text-align:left;">前後のステップで定義した変数名やIDが食い違う</td>
<td style="text-align:left;">ステップ間でID・用語の不一致がないか</td>
</tr>
<tr>
<td style="text-align:left;"><strong>網羅性(Coverage)</strong></td>
<td style="text-align:left;">分割した結果、境界値の処理がどちらのモジュールからも漏れる</td>
<td style="text-align:left;">入出力の境界条件が明文化されているか</td>
</tr>
<tr>
<td style="text-align:left;"><strong>形式遵守(Format)</strong></td>
<td style="text-align:left;">Markdownの階層が崩れる、JSONがパース不能になる</td>
<td style="text-align:left;">指定したスキーマに100%合致しているか</td>
</tr>
</tbody>
</table></figure>
<h3 class="wp-block-heading">【改良後の最適プロンプト】</h3>
<p>最新LLMの特性(Gemini 1.5 Proの「情報の関連付け能力」)を最大化するため、<strong>「コンテキストのハブ(目次)」</strong>を常に維持させるプロンプトです。</p>
<div class="codehilite">
<pre data-enlighter-language="generic"># Role
あなたは「整合性管理エージェント」です。複雑なプロジェクトを以下の3つのレイヤーで管理・記述してください。
# Layer 1: Global State (常に参照)
プロジェクトの全体像、共通定義、用語集。
# Layer 2: Thinking Process (思考プロセス)
各ステップの実行前に、以下の2点を自己分析してください。
- 前のステップで決定した事項との矛盾はないか?
- 今回の出力が次工程に与える影響は何か?
# Layer 3: Task Execution (実行)
現在、あなたは [モジュール名] の詳細化を行っています。
以下の情報を統合し、仕様書を出力してください。
## 入力データ
- 全体定義: {{global_state}}
- 既決事項: {{previous_outputs}}
- 今回の要件: {{current_task}}
## 出力形式
Markdown形式。技術的詳細を極力具体化し、未定事項は「TODO」として明記すること。
</pre>
</div>
<h3 class="wp-block-heading">【まとめ】</h3>
<p>実務でコンテキストエンジニアリングを運用するための3つの鉄則:</p>
<ol class="wp-block-list">
<li><p><strong>State Management(状態管理):</strong> LLMに「今、全体のどこを処理しているか」の現在地を常に提示する。</p></li>
<li><p><strong>Incremental Feedback(逐次フィードバック):</strong> 1つの巨大なプロンプトを避け、出力Aを人間が確認(またはLLMが自己検閲)してからBに進むフローを組む。</p></li>
<li><p><strong>Cross-Reference Instruction(相互参照指示):</strong> 「前のステップのJSONキーを必ず使用せよ」といった、強固なキーワード制約を設けることで、長文脈下でのハルシネーションを抑制する。</p></li>
</ol>
ロール:LLMプロンプトエンジニアリング・スペシャリスト
トーン:プロフェッショナル、技術的、構造的
出力形式:Markdown(Mermaid、テーブル、コードブロックを多用)
目的:コンテキストエンジニアリングによる複雑な要件分割の最適化
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
複雑な要件定義を精度高く完遂する:段階的コンテキストエンジニアリングの実装ガイド
【ユースケース定義と課題】
大規模システムの複雑な業務ロジックを、整合性を保ちつつ各モジュールごとに段階的に分割して定義する。
【プロンプト設計のループ】
graph TD
A["設計:コンテキスト分割"] --> B["実行:段階的プロンプト注入"]
B --> C["評価:整合性チェック"]
C -->|矛盾発見| A
C -->|合格| D["最終統合"]
設計: 全体像(Global Context)と個別詳細(Local Context)に情報を分離する。
実行: Gemini 1.5 Pro等の長文脈窓を活かしつつ、CoT(思考の連鎖)で推論ステップを明示する。
評価: 前のステップの出力内容を「制約条件」として次のステップに引き継いでいるかを検証する。
【プロンプトの実装案】
コンテキストを「構造定義(Step 1)」と「詳細設計(Step 2)」に分離し、Few-shotで出力形式を固定する手法です。
# Step 1: Global Context Structure
あなたはシステムアーキテクトです。以下の要件メモから、全体のデータ構造とモジュール間の依存関係を定義してください。
## 要件メモ
[要件内容をここにペースト]
## 出力形式 (JSON)
{
"system_name": "",
"modules": [
{"id": "M1", "name": "認証系", "dependency": []},
{"id": "M2", "name": "決済系", "dependency": ["M1"]}
]
}
---
# Step 2: Local Context Deep Dive (Sequential)
Step 1の結果に基づき、モジュール [Module_ID] の詳細設計を行います。
## 参照コンテキスト
- 全体構造: [Step 1の出力結果]
- 関連モジュール仕様: [以前のステップで生成した仕様]
## 指示
1. まず、このモジュールが他モジュールとどう連携するか思考(CoT)してください。
2. その後、以下のフォーマットでMarkdown出力してください。
## 出力例
### モジュール名: [名称]
- 機能概要: ...
- 入出力インターフェース: ...
【評価指標と誤り分析】
コンテキストを分割した際に発生しやすいリスクを、LLM-as-a-Judgeの手法で評価します。
| 評価項目 |
失敗パターン |
判定基準(1-5点) |
| 論理性(Logic) |
前後のステップで定義した変数名やIDが食い違う |
ステップ間でID・用語の不一致がないか |
| 網羅性(Coverage) |
分割した結果、境界値の処理がどちらのモジュールからも漏れる |
入出力の境界条件が明文化されているか |
| 形式遵守(Format) |
Markdownの階層が崩れる、JSONがパース不能になる |
指定したスキーマに100%合致しているか |
【改良後の最適プロンプト】
最新LLMの特性(Gemini 1.5 Proの「情報の関連付け能力」)を最大化するため、「コンテキストのハブ(目次)」を常に維持させるプロンプトです。
# Role
あなたは「整合性管理エージェント」です。複雑なプロジェクトを以下の3つのレイヤーで管理・記述してください。
# Layer 1: Global State (常に参照)
プロジェクトの全体像、共通定義、用語集。
# Layer 2: Thinking Process (思考プロセス)
各ステップの実行前に、以下の2点を自己分析してください。
- 前のステップで決定した事項との矛盾はないか?
- 今回の出力が次工程に与える影響は何か?
# Layer 3: Task Execution (実行)
現在、あなたは [モジュール名] の詳細化を行っています。
以下の情報を統合し、仕様書を出力してください。
## 入力データ
- 全体定義: {{global_state}}
- 既決事項: {{previous_outputs}}
- 今回の要件: {{current_task}}
## 出力形式
Markdown形式。技術的詳細を極力具体化し、未定事項は「TODO」として明記すること。
【まとめ】
実務でコンテキストエンジニアリングを運用するための3つの鉄則:
State Management(状態管理): LLMに「今、全体のどこを処理しているか」の現在地を常に提示する。
Incremental Feedback(逐次フィードバック): 1つの巨大なプロンプトを避け、出力Aを人間が確認(またはLLMが自己検閲)してからBに進むフローを組む。
Cross-Reference Instruction(相互参照指示): 「前のステップのJSONキーを必ず使用せよ」といった、強固なキーワード制約を設けることで、長文脈下でのハルシネーションを抑制する。
ライセンス:本記事のテキスト/コードは特記なき限り
CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。
コメント