本記事は**Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)**です。 # 複雑な要件を制するコンテキストエンジニアリング:段階的分割によるLLM出力の最適化 ## 【ユースケース定義と課題】 膨大な非構造化ドキュメント(社内規定等)から、構造化された要件定義書を生成する。長文ゆえの制約無視や情報の欠落が最大の課題。 – **入力型**: プレーンテキスト(非構造化データ) – **出力型**: Markdown / JSON(構造化データ) ## 【プロンプト設計のループ】
graph TD A["設計: 要件のモジュール化"] --> B["実行: ステップ別の逐次生成"] B --> C["評価: 整合性チェック"] C -->|改善: コンテキストの再注入| A
1. **設計**: 全体のタスクを「抽出」「分類」「構造化」の3フェーズに分割。 2. **実行**: 前のステップの出力を次の入力に連結(Chaining)して精度を維持。 3. **評価**: 出力された各項目がソースコード(元データ)に存在するかを検証。 ## 【プロンプトの実装案】 コンテキストを分割し、思考プロセス(CoT)を強制するプロンプト例です。
# Role あなたは複雑なドキュメントを解析し、エンジニアが即座に実装可能な要件定義書を作成する専門家です。 # Task 提供された資料から「業務フロー」と「例外処理」を抽出してください。 いきなり結果を出力せず、以下のステップに従ってください。 # Steps 1. 資料の中から「条件分岐(もし〜なら)」に関連する記述をすべて箇条書きでリストアップせよ。 2. リストアップした内容を、正常系と異常系に分類せよ。 3. 最終的な要件を、以下のMarkdown形式で出力せよ。 # Constraint - 専門用語はそのまま保持すること。 - 元データにない推測は「要検討」として明記すること。 # Few-shot Example Input: 「申請者が承認者の場合、自動承認とする。ただし役員の場合は例外。」 Step 1: - 申請者が承認者の場合は自動承認 - 役員の場合は例外 Step 2: - 正常系: 申請者=承認者での自動承認 - 異常系: 役員による申請 Output: | 分類 | 条件 | 処理 | | :--- | :--- | :--- | | 正常系 | 申請者=承認者 | 自動承認 | | 異常系 | 申請者が役員 | 別途個別承認 | # Input Data [ここに解析対象のテキストを貼り付け]
## 【評価指標と誤り分析】 コンテキストが複雑化すると、LLMは「中だるみ」を起こし、中盤の制約を無視する傾向があります。 | 評価項目 | 採点基準 (1-5) | 失敗パターン | | :— | :— | :— | | **情報の網羅性** | 元データの重要キーワードが全て含まれているか | 特定の章が丸ごとスキップされる | | **構造化精度** | 指定したMarkdown/JSON形式が崩れていないか | 表の列がズレる、閉じタグの欠落 | | **事実忠実性** | 存在しない要件を「ハルシネーション」していないか | 欠落を補うために一般的な仕様を捏造する | ## 【改良後の最適プロンプト】 Gemini 1.5 Proの広いコンテキスト窓を活かしつつ、各ステップの出力をXMLタグで囲ませて構造を固定する手法です。
# System
あなたは、高密度な情報を1bitも漏らさずに整理する情報設計者です。
# Instructions
以下のプロセスで思考し、タグごとに回答を出力してください。
<analysis_phase>
入力データから「必須要件」「任意要件」「制約事項」をそれぞれ200文字程度で要約しなさい。
</analysis_phase>
<conflict_check>
要約した内容に矛盾がないか検証し、矛盾がある場合はその箇所を指摘しなさい。
</conflict_check>
<final_output>
検証済みの情報を基に、以下のJSONフォーマットで出力しなさい。
{
"requirements": [{"id": "", "content": ""}],
"constraints": []
}
</final_output>
# Input
[ターゲットテキスト]
【まとめ】
実務でプロンプトを運用するための3つの鉄則:
「一気に出力させない」: 思考フェーズ(CoT)と出力フェーズを明示的に分ける。
「XMLタグで境界を作る」: LLMに対して、どのセクションが「検討」で、どこが「最終回答」かを物理的に理解させる。
「コンテキストの鮮度を保つ」: 複雑なタスクでは、数回に分けてプロンプトを投げる「プロンプト・チェイニング」を採用し、1回あたりの負荷を減らす。

