プロンプトエンジニアリングの進化
2025年、プロンプトエンジニアリングは試行錯誤から体系的な学問へと進化しました。最新の調査では58種類の異なるプロンプト手法が確認されています。
重要: プロンプトの品質によって精度が最大76ポイント変動することが研究で判明しています。
基本原則
1. 明確性 (Clarity)
❌ 悪い例:
コードを書いて
✅ 良い例:
Pythonで、与えられたリストから重複を削除し、
昇順にソートした新しいリストを返す関数を書いてください。
入力: [3, 1, 2, 3, 4, 2]
出力: [1, 2, 3, 4]
2. コンテキスト (Context)
あなたは10年の経験を持つシニアバックエンドエンジニアです。
TypeScriptとNode.jsを専門としています。
以下のコードをレビューし、パフォーマンスとセキュリティの
観点から改善点を指摘してください。
```typescript
// レビュー対象のコード
### 3. 具体性 (Specificity)
```markdown
❌ 曖昧:
マーケティング戦略を考えて
✅ 具体的:
B2B SaaS企業(従業員50名、ARR $2M)向けの
Q1コンテンツマーケティング戦略を提案してください。
- ターゲット: 中小企業のCTO
- 予算: 月$5,000
- KPI: MQL 100件/月
高度なテクニック
Chain-of-Thought (CoT)
段階的な推論を促す手法。
問題: 店に最初に17個のリンゴがありました。
11個売れて、新たに9個入荷しました。今何個ありますか?
ステップバイステップで考えてください:
1. 最初のリンゴの数: 17個
2. 売れた後: 17 - 11 = 6個
3. 入荷後: 6 + 9 = 15個
答え: 15個
Zero-shot CoT:
問題を解く前に、ステップバイステップで考えてください。
Tree-of-Thoughts (ToT)
複数の推論パスを探索する手法。
def tree_of_thoughts(problem, llm, breadth=3, depth=3):
"""木構造で複数の解決策を探索"""
thoughts = [generate_initial_thought(problem, llm)]
for _ in range(depth):
new_thoughts = []
for thought in thoughts:
# 各思考から複数のブランチを生成
branches = llm.generate(
f"この思考から次に考えられる{breadth}つのアプローチは?\n{thought}"
)
new_thoughts.extend(branches)
# 評価して上位を選択
thoughts = evaluate_and_select(new_thoughts, llm, k=breadth)
return select_best_solution(thoughts, llm)
ReAct (Reasoning + Acting)
推論と外部ツール使用を組み合わせる手法。
質問: 東京タワーの高さはエッフェル塔の何倍ですか?
Thought 1: 両方の塔の高さを調べる必要がある
Action 1: Search[東京タワー 高さ]
Observation 1: 東京タワーの高さは333メートル
Thought 2: エッフェル塔の高さも調べる
Action 2: Search[エッフェル塔 高さ]
Observation 2: エッフェル塔の高さは330メートル
Thought 3: 比率を計算する
Action 3: Calculate[333 / 330]
Observation 3: 1.009...
Thought 4: 答えをまとめる
Answer: 東京タワーはエッフェル塔の約1.01倍(ほぼ同じ高さ)です。
Self-Consistency
複数回生成して多数決を取る手法。
def self_consistency(prompt, llm, n_samples=5):
"""複数の回答を生成し、最も一貫した答えを選択"""
responses = []
for _ in range(n_samples):
response = llm.generate(prompt, temperature=0.7)
responses.append(extract_answer(response))
# 多数決
from collections import Counter
most_common = Counter(responses).most_common(1)
return most_common[0][0]
モデル別の最適化
GPT-4 / GPT-4o
# システムプロンプト
あなたは専門的なアシスタントです。
回答は以下の形式で構造化してください:
1. 要約(1-2文)
2. 詳細説明
3. 具体例
4. 注意点
Claude
<instructions>
あなたはコードレビューの専門家です。
</instructions>
<context>
プロジェクト: Next.js 14 + TypeScript
</context>
<task>
以下のコードをレビューしてください。
</task>
<code>
// コードをここに
</code>
Gemini
# マルチモーダル活用
この画像とテキストを分析し、以下の観点でレポートを作成:
- 視覚的要素の説明
- テキスト内容の要約
- 両者の関連性
セキュリティ対策
プロンプトインジェクション対策
def sanitize_user_input(user_input: str) -> str:
"""危険なパターンを検出・除去"""
dangerous_patterns = [
"ignore previous instructions",
"system prompt",
"你是", # 言語切り替え攻撃
]
for pattern in dangerous_patterns:
if pattern.lower() in user_input.lower():
raise SecurityException("Potential injection detected")
return user_input
# 入力と指示を明確に分離
prompt = f"""
<system>あなたは安全なアシスタントです。</system>
<user_input>
{sanitize_user_input(user_input)}
</user_input>
<task>上記のユーザー入力に対して回答してください。</task>
"""
Mega-Prompts
複雑なタスク向けの詳細なプロンプト。
# ロール定義
あなたはシニアソフトウェアアーキテクトです。
# コンテキスト
- プロジェクト: Eコマースプラットフォーム
- 技術スタック: Next.js, PostgreSQL, Redis
- チーム規模: 5人
- 期間: 3ヶ月
# タスク
マイクロサービスアーキテクチャの設計を行ってください。
# 出力形式
1. アーキテクチャ図(テキストベース)
2. 各サービスの責務
3. 通信パターン
4. データフロー
5. スケーリング戦略
# 制約
- 予算: 月$2,000(AWS)
- 可用性: 99.9%
- レイテンシ: p99 < 200ms
まとめ
2025年のプロンプトエンジニアリングは、単なるテクニックの集合から、研究に裏付けられた体系的な手法へと進化しました。基本原則(明確性・コンテキスト・具体性)を押さえつつ、タスクに応じてCoT、ToT、ReActなどの高度な手法を使い分けることが重要です。
← 一覧に戻る