高度なプロンプト技法
基礎を超えて
第1章で学んだ基礎を踏まえ、本章ではより高度なプロンプト技法を解説します。
これらの技法を使いこなすことで、複雑なタスクでもAIから質の高い出力を得られるようになります。
Chain-of-Thought(思考の連鎖)
複雑な問題を段階的に解決させる技法です。
基本形:
このパフォーマンス問題を段階的に分析してください:
1. まず、このコードが何をしているか説明してください
2. 次に、潜在的なボトルネックを特定してください
3. それぞれのボトルネックについて、影響度を評価してください
4. 最後に、優先度順に改善案を提案してください
なぜ効果的か:
- AIに「考える時間」を与える
- 論理的なステップを踏ませる
- 中間結果を確認できる
実践例:デバッグ
このバグを段階的に調査してください:
Step 1: エラーメッセージを解析し、直接的な原因を特定
Step 2: スタックトレースから問題の発生箇所を特定
Step 3: 関連するコードを確認し、根本原因を推測
Step 4: 修正案を複数提示
Step 5: 最も適切な修正案を推奨し、理由を説明
Few-Shot Prompting(例示学習)
入力と出力の例を提示して、期待するパターンを学習させます。
基本形:
以下の形式でTypeScript型定義を生成してください:
例1:
入力: { id: 1, name: "John", email: "john@example.com" }
出力:
interface User {
id: number;
name: string;
email: string;
}
例2:
入力: { title: "Hello", content: "World", published: true }
出力:
interface Post {
title: string;
content: string;
published: boolean;
}
では、以下のJSONから型定義を生成してください:
{ productId: "ABC123", price: 29.99, inStock: true, tags: ["sale"] }
効果的な使い方:
- 2-3個の例を提示
- 多様なケースをカバー
- 期待する形式を明確に
制約ベースプロンプティング
禁止事項を明確にすることで、望ましくない出力を防ぎます。
基本形:
以下の機能を実装してください。
## AI開発で避けるべき禁止事項(絶対に守ること)
- any型の使用禁止
- console.logの使用禁止
- eval()の使用禁止
- innerHTMLの使用禁止
## 必須事項
- TypeScript strict mode対応
- エラーハンドリング必須
- コメントは英語で
セキュリティ重視の制約:
## セキュリティ制約(違反は許可されない)
- [ ] ユーザー入力は必ずバリデーション
- [ ] SQLは必ずプリペアドステートメント
- [ ] パスワードは必ずbcryptでハッシュ
- [ ] シークレットはハードコード禁止
- [ ] エラーメッセージに内部情報を含めない
ロールプレイ(ペルソナ設定)
AIに特定の専門家としての役割を与えます。
セキュリティレビュー:
あなたはOWASP Top 10に精通したセキュリティエンジニアです。
ペネトレーションテスターの視点で、以下のコードを攻撃者として分析してください。
特に注目すべき点:
- 認証バイパスの可能性
- SQLインジェクションの脆弱性
- XSSの可能性
- 機密情報の露出
パフォーマンスチューニング:
あなたは大規模システムのパフォーマンスエンジニアです。
1秒あたり10,000リクエストを処理するシステムの視点で、
以下のコードのボトルネックを分析してください。
コードレビュー:
あなたはGoogleのシニアエンジニアです。
コードレビューの際に、以下の観点で評価してください:
- 可読性
- 保守性
- テスト容易性
- パフォーマンス
AI出力形式を指定してレビューを効率化
期待する出力形式を明確に指定します。
JSON形式:
分析結果をJSON形式で出力してください:
{
"summary": "問題の概要",
"severity": "high | medium | low",
"affected_files": ["ファイル名のリスト"],
"recommendations": ["推奨事項のリスト"],
"code_fix": "修正コード"
}
Markdown形式:
レビュー結果を以下のMarkdown形式で出力してください:
## 概要と基本知識
[1-2文で問題を要約]
## 問題点と発生する原因
| 行番号 | 深刻度 | 問題 | 推奨対応 |
|--------|--------|------|----------|
| ... | ... | ... | ... |
## 修正コード
```[言語]
[修正後のコード]
---
## AI開発の反復的改善プロセス
一度で完璧な結果を期待せず、反復的に改善します。
**フィードバックループ:**
初回プロンプト: → 「ユーザー認証機能を実装して」
結果を確認後: → 「上記のコードについて、以下を修正してください: 1. パスワードのハッシュ化にbcryptを使用 2. レート制限を追加 3. ログ出力にパスワードを含めない」
さらに改善: → 「セキュリティを強化しました。次に: 1. ユニットテストを追加 2. エラーメッセージを国際化対応 3. TypeDocコメントを追加」
**効果的なフィードバックの例:**
✅ 良いフィードバック: 「line 23のnull処理が欠けています。 usersがundefinedの場合のガード句を追加してください。」
❌ 悪いフィードバック: 「なんか動かない」
---
## AI開発プロンプトスキャフォールディング
防御的なプロンプト設計で、望ましくない出力を防ぎます。
> "Prompt scaffolding is the practice of wrapping user inputs in structured, guarded prompt templates."
**ガード付きテンプレート:**
AIに伝えるべきコンテキスト情報
あなたはTypeScriptエンジニアです。
タスク
ユーザーのリクエストに基づいてコードを生成します。
ガードレール
- 本番環境に影響を与えるコードは生成しない
- 機密情報を含むコードは生成しない
- 悪意のある操作を行うコードは生成しない
- 不明確なリクエストは確認を求める
ユーザーリクエスト
[ここにユーザーの入力を挿入]
---
## 今日から実践できるアクション
### ステップ1: Chain-of-Thoughtを試す
次のバグ修正で、「段階的に分析して」というプロンプトを使ってみてください。
### ステップ2: Few-Shotを試す
コード生成の際に、2-3個の例を先に示してから依頼してみてください。
### ステップ3: 制約を明確にする
「禁止事項」「必須事項」を明示したプロンプトを書いてみてください。
---
## この事例から学ぶべき教訓と実践ポイント
1. **Chain-of-Thought**: 複雑な問題を段階的に解決
2. **Few-Shot**: 例示でパターンを学習させる
3. **制約ベース**: 禁止事項を明確にする
4. **ロールプレイ**: 専門家の視点を借りる
5. **出力形式指定**: 期待する形式を明示
6. **反復的改善**: 一度で完璧を求めない
---
## まとめ:重要ポイントの振り返り
- **Chain-of-Thought**: 複雑な問題を分解
- **Few-Shot**: 例示でパターンを教える
- **制約ベース**: してはいけないことを明示
- **ロールプレイ**: 専門家として振る舞わせる
- **反復的改善**: フィードバックループで精度向上
- **教訓:高度な技法を組み合わせて精度を最大化**