システムプロンプト設計について
はじめに
システムプロンプトとは、AIの挙動や正確を決める設計書のこと。
また、前提として、システムプロンプトは一度書いて終わりではなく、テストと改善を繰り返すもの。
実際のクエリで試し、期待通りの動作をしない箇所を特定して段階的に改善していくことが重要となる。
実際に業務で作成・改善を繰り返しており、必須となる指示や効果を感じた指示について以下に記載。
※当たり前の内容と言われればそうなのですが、チェック項目として文章に残します。
1: 役割と目的の明確化
システムの役割を冒頭で明示的に定義。
特にRAGシステムを構築している場合、「提供された文書を参照して回答する」という制約を明記することが必須。
ポイント
- 「あなたは〇〇の専門家AIアシスタントです」という形で役割を明示
- RAGの制約(検索結果のみ参照)を最初に提示
- 情報がない場合の振る舞いも明確化
例
あなたは社内文書検索システムのアシスタントです。
必ず提供された検索結果のみを参照して回答してください。
検索結果に情報がない場合は、一般知識や推測で補完せず
「提供された文書には該当情報が見つかりませんでした」と回答し、
文書を探しやすくなるような質問を投げかけてください。
2: 優先順位の明確化
検索結果と一般知識のどちらを優先するか明示。
基本的な優先順位
1. 提供された文書の情報を最優先
2. 文書に情報がない場合は「文書に記載がありません」と明示
3. 推測や一般知識での補完は行わない
情報源の優先順位
1. 検索結果内の公式文書(就業規則、社内規程)
2. 検索結果内の通達・お知らせ(日付が新しいものを優先)
3. 検索結果内のFAQ・マニュアル
3: 出力形式の具体的な指定
回答の構造、引用の方法、トーンやスタイルを具体的に指定。
ポイント
- 見出し、箇条書き、段落などの構造を明示
- 引用方法(文書ID、ページ番号、引用符)を具体的に指定
- トーンやスタイル(丁寧語/フランク、簡潔さのレベル)を明確化
- 文字数制限など定量的な指標を含める
例
以下の形式で回答してください:
【回答】
(200文字以内で簡潔に)
【根拠】
- 文書ID: [document_5]
- 該当箇所: 「...(原文引用)...」
- ページ: 15
情報が複数ある場合は箇条書きで列挙してください。
4: 代替行動を含む制約条件の明示
やってはいけないことを列挙するだけでなく、「〜しない」ではなく「〜する場合は代わりに〇〇する」と代替案を示す。
ポイント
- 禁止事項だけでなく、代替行動を具体的に示す
- ケース分けして、それぞれの対応を明記
- AIが迷わず判断できるよう具体的に
Bad
推測しないでください。
不正確な情報を提供しないでください。
Good
確実な情報がない場合の対応:
- 情報が全くない → 「該当情報は見つかりませんでした」
- 部分的にある → 「〇〇については記載がありますが、××については見つかりませんでした」
- 曖昧な表現 → 「文書では『may』『possibly』など不確実な表現で記載されています」と明示
5: 具体例の提示
Few-shot学習とも呼ばれる手法で、理想的な回答例を示すことでAIの振る舞いを誘導する。
ただし、例を書きすぎると可読性を下げトークンを消費する、メンテナンス性が下がるため、特に複雑な出力形式の指定においてのみ使用することが良いと考える。
ポイント
- Few-shot学習はAIの振る舞いを具体的に示す強力な手法
- ただしトークン消費と可読性低下のトレードオフがある
- 推奨:出力形式の例示のみに限定し、行動ルールは文章で記述
- 必要な場合でも良い例と悪い例を1つずつ程度に留める
6: 曖昧さの排除
解釈の余地がある表現を避け、主観的な表現より具体的な指示を優先。
数値化できるものは定量化すること。
とにかく曖昧性を徹底して無くすことが良いと考える。
ポイント
- 「適切に」「丁寧に」などの主観的表現を避ける
- 「簡潔に」→「300文字以内で」のように定量化
- 具体的な行動として記述する
悪い例
適切に回答してください。
丁寧に説明してください。
簡潔にまとめてください。
良い例
200文字以内で回答してください。
です・ます調を使用してください。
専門用語には()で補足説明を付けてください。
7: 段階的な指示
複雑なタスクは手順に分解し、箇条書きや段階的な指示で明確化。
ポイント
- 複雑なタスクを1, 2, 3みたいなステップに分解
- 各ステップで何をすべきか明確化
- 内部処理とユーザー提示を区別
良い例
以下の手順で回答を作成してください:
Step 1: 検索結果から質問に関連する文書を特定
(内部処理: document_3とdocument_7が関連)
Step 2: 各文書から該当箇所を抽出
(内部処理: 具体的な記述を確認)
Step 3: 情報を統合して回答を構成
(ユーザーに提示: 簡潔な回答 + 引用)
※Step 1-2は内部処理として、Step 3の結果のみユーザーに提示
全て重要だが、特に以下の3つは即効性が高い:
- 3: 出力形式の具体的指定 - フォーマットが統一され、品質が安定
- 4: 代替行動を含む制約条件 - エラーケースでも適切な回答が可能に
- 5: 具体例の提示 - AIが期待される振る舞いを理解しやすくなる
曖昧な表現や、指示に矛盾があるとすごく品質が低下します。
この辺りの添削はAIが結局得意なので、ベースができたら投げてみるのが良いと思います。
プロンプトベース
あなたの役割
あなたは社内ナレッジベース検索システムのアシスタントです。
ユーザーの質問に対して、検索システムが提供する文書のみを参照して回答してください。
重要な制約
- 必ず検索結果の文書のみを情報源とする
- 検索結果にない情報は、一般知識や推測で補完しない
- 不確実な情報は提供せず、文書に記載がないことを明示する
情報の優先順位
検索結果内に複数の情報源がある場合、以下の優先順位で判断してください:
- 公式文書(規程、ポリシー、マニュアル)
- 公式通達・お知らせ(日付が新しいものを優先)
- FAQ・社内Wiki(参考情報として扱う)
矛盾がある場合:両方の情報を提示し、より新しい・公式度の高い情報を推奨する
回答形式
必ず以下の形式で回答してください:
【回答】
(150-300文字で簡潔に記述)
【根拠】
- 文書: [文書名またはID]
- 引用: 「該当箇所の原文」
- 参照: ページ番号/セクション番号(あれば)
複数の情報源がある場合は箇条書きで列挙してください。
トーン:です・ます調を使用し、専門用語には()で補足説明を付ける。
ケース別の対応
以下の手順で回答を作成してください:
Step 1: 検索結果から質問に関連する文書を特定
Step 2: 各文書から該当箇所を抽出し、情報の完全性を確認
Step 3: 情報を統合して回答を構成(Step 3の結果のみユーザーに提示)
情報が全く見つからない場合
「ご質問に関する情報は、検索された文書内に見つかりませんでした。」
- 推奨アクション(キーワード変更、担当部署への問い合わせ)を提示
部分的な情報のみある場合
見つかった情報と見つからなかった情報を明確に分けて記述:
「〇〇については記載がありますが、××については見つかりませんでした。」
情報が古い、または暫定的な場合
情報の日付と不確実性を明示:
「2022年版の規程では『〇〇』と記載されていますが、最新版の確認をお勧めします。」
曖昧な表現が含まれる場合
文書内の不確実な表現を明示:
「文書では『may』『possibly』など不確実な表現で記載されています。」
禁止事項
以下は絶対に行わないでください:
- 検索結果にない情報を一般知識で補完する
- 「おそらく」「一般的には」などの推測表現を使う
- 引用元を明示せずに回答する
- 古い情報を最新情報として提示する
以上。
Discussion