プロンプトエンジニアリング 2025年4月22日

高度なプロンプトテクニック:AI開発の生産性を上げる

第1章で学んだ基礎を踏まえ、本章ではより高度なプロンプト技法を解説します。 これらの技法を使いこなすことで、複雑なタスクでもAIから質の高い出力を得られるようになります。 複雑な問題を段階的に解決させる技法です。

川西智也

合同会社ロイヤルピース 代表

高度なプロンプト技法

基礎を超えて

第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**: 例示でパターンを教える
- **制約ベース**: してはいけないことを明示
- **ロールプレイ**: 専門家として振る舞わせる
- **反復的改善**: フィードバックループで精度向上
- **教訓:高度な技法を組み合わせて精度を最大化**

実践的なスキルを習得しませんか?

ブログで学んだ知識を、研修で実践に変えましょう。