はじめに
多くのチームが失敗するのは、モデルが弱いからではなく、プロンプトに明確なコントラクトがないからです。プロンプトが変更されると、出力がドリフトし、アプリがサイレントに壊れます。
1. プロンプトコントラクトとは
プロンプトコントラクトは4つの部分で構成されます:
- 役割とタスクの範囲
- 入力フォーマット
- 出力フォーマット
- データ不足時のフェイルビヘイビア
フェイルビヘイビアの例:でっち上げずに、「データ不足」のような正確なフレーズを返す。
2. 出力用JSONスキーマ
アクションアイテム抽出のスキーマ例:
{
"type": "object",
"required": ["summary", "items"],
"properties": {
"summary": {"type": "string"},
"items": {
"type": "array",
"items": {
"type": "object",
"required": ["task", "owner"],
"properties": {
"task": {"type": "string"},
"owner": {"type": "string"},
"deadline": {"type": "string"}
}
}
}
}
}
モデル出力を受信した直後にスキーマを検証します。
3. ゴールデンテストの設計
以下を含むテストファイルを作成:
- 入力プロンプト
- 含まれるべき内容
- 含まれてはいけない内容
- スキーマのパス/フェイル
プロンプトやモデルを変更するたびに、テストスイート全体を再実行します。
4. エラー分類
- フォーマットエラー:スキーマに一致しない
- グラウンディングエラー:コンテキストに準拠しない
- セーフティエラー:機密データを返す
- インストラクションエラー:システムの制約を無視する
明確なエラーコードは時間の経過とともにトレンドを追跡するのに役立ちます。
5. プロンプトバージョニング
以下のルールを適用:
- すべてのプロンプトにバージョンコードを付与
- 各変更の簡潔な変更履歴
- 品質が低下した場合のクイックロールバック
バージョンを保存せずにプロダクションのプロンプトを直接編集しないでください。
デモコード
プロンプトコントラクトテスト結果 — 6/6パス:

ソースコード:03-prompt-contracts