はじめに
第1章ではプロンプトエンジニアリングの基礎を学びました。この章では、すべての高度なプロンプティング戦略の基盤となる基本技術を扱います。これらの技術は、LLMとの実質的にすべてのやり取りで使用する必須の構成要素です。
この章を終えると、以下のことができるようになります:
- ロールプロンプティングでLLMの振る舞いと専門性を設定する
- 複雑なタスクに対して効果的なコンテキストを提供する
- Markdown、JSON、構造化データを含む出力形式を指定する
- 信頼性の高いパースのためにJSONモードと構造化出力を使用する
- 品質管理のための適切な制約を設定する
- 複雑なタスクを管理可能なサブタスクに分解する
ロールプロンプティング
ロールプロンプティング(ペルソナプロンプティングとも呼ばれる)は、LLMに特定の役割やペルソナを割り当てる技術です。これにより、モデルが問題にアプローチし、応答を生成する方法が根本的に変わります。
なぜロールプロンプティングが効果的なのか
役割を割り当てると、実質的に以下のことを行っています:
- 関連する知識の活性化:モデルはその専門分野に関連するパターンを引き出す
- 行動期待の設定:コミュニケーションスタイル、詳細レベル、アプローチ
- 権威の確立:モデルは適切な自信と深さで応答する
基本的なロールプロンプティング
シンプルな役割割り当て
あなたは10年の経験を持つシニアPython開発者です。
以下のコードをレビューし、可読性とパフォーマンスの改善点を提案してください:
```python
def process_data(data):
result = []
for item in data:
if item > 0:
result.append(item * 2)
return result
```
高度なロールプロンプティング
より細かい出力を得るには、詳細な役割仕様を提供します:
詳細な役割仕様
あなたは佐藤博士、以下の経歴を持つデータサイエンティストです:
- 東京大学で機械学習の博士号取得
- 大手テック企業での8年の実務経験
- NLPとTransformerアーキテクチャの専門家
- 理論と実践を橋渡しする明確な説明で知られる
コミュニケーションスタイル:
- 複雑な概念を説明するときは比喩を使用
- 実践的なコード例を提供
- 制限とエッジケースを認識
- 技術的正確性とアクセシビリティのバランスを取る
Transformerにおけるアテンションメカニズムの仕組みを説明してください。
複数専門家ロール
複雑な問題には、複数の視点を呼び出すことができます:
複数専門家パネル
スタートアップのアイデアをレビューする3人の専門家パネルとして振る舞ってください:
1. **ベンチャーキャピタリスト**:市場規模、スケーラビリティ、投資可能性に焦点
2. **技術CTO**:実現可能性、技術的課題、アーキテクチャを評価
3. **マーケティングディレクター**:ブランドポジショニング、顧客獲得、メッセージングを評価
スタートアップアイデア:継続的血糖モニタリングデータに基づいて食事プランを作成するAI搭載パーソナル栄養コーチ
各専門家が分析を提供し、その後集団的な推奨をまとめてください。
コンテキスト設定
コンテキスト設定は、タスクを正確に理解し完了するために必要な背景情報をLLMに提供します。適切なコンテキストがないと、よく構造化されたプロンプトでも無関係な結果を生成する可能性があります。
コンテキストの種類
1. ドメインコンテキスト
ドメインコンテキストの例
**ドメイン**:エンタープライズSaaS B2Bセールス
**業界**:ヘルスケアテクノロジー
**規制環境**:HIPAA準拠が必要
**一般的な販売サイクル**:6-12ヶ月
**主要なステークホルダー**:CTO、CISO、調達部門
製品デモ後のフォローアップメールを書いてください。
2. 状況コンテキスト
状況コンテキストの例
**現在の状況**:
- 50人のスタートアップが200人に拡大中
- モノリシックなPythonアプリケーションが保守困難に
- シニアエンジニア2名、ジュニア開発者4名
- 予算に制限あり、クラウドコストが懸念
- 既存顧客のために99.9%のアップタイムを維持する必要がある
マイクロサービスへの移行戦略を推奨してください。
CRISPコンテキストフレームワーク
包括的なコンテキストを確保するためにこのフレームワークを使用します:
CRISPフレームワーク
- Constraints(制約):制限、要件、交渉不可能な項目
- Resources(リソース):利用可能なツール、予算、チーム、時間
- Intent(意図):最終目標、なぜこれが重要か
- Situation(状況):現在の状態、最近の出来事
- Preferences(好み):望ましいアプローチ、スタイル、価値観
出力形式の指定
出力形式を指定することで、応答が必要な通りに構造化されることを保証します。これは下流処理、一貫性、使いやすさにとって重要です。
構造化出力 / JSONモード(2025年)
最新のLLM(GPT-4、Claude、Gemini)は、有効なJSON応答を保証するJSONモードまたは構造化出力をサポートしています。これは本番アプリケーションに不可欠です。
OpenAI JSONモードの例
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o",
response_format={"type": "json_object"},
messages=[
{
"role": "system",
"content": "エンティティを抽出し、JSONとして返してください。キー:persons, organizations, locations"
},
{
"role": "user",
"content": "AppleのCEOティム・クックはクパチーノ本社で新製品を発表しました。"
}
]
)
# 有効なJSONが保証される
import json
data = json.loads(response.choices[0].message.content)
print(data)
# {"persons": ["ティム・クック"], "organizations": ["Apple"], "locations": ["クパチーノ"]}
スキーマ付き構造化出力(2025年)
スキーマ付き構造化出力
from openai import OpenAI
from pydantic import BaseModel
from typing import Literal
class ProductAnalysis(BaseModel):
product_name: str
sentiment: Literal["positive", "negative", "neutral"]
confidence: float
key_features: list[str]
recommendation: str
client = OpenAI()
response = client.beta.chat.completions.parse(
model="gpt-4o-2024-08-06",
messages=[
{"role": "system", "content": "製品レビューを分析"},
{"role": "user", "content": "このノートパソコンは素晴らしい!高速プロセッサ、素晴らしい画面、でもバッテリーはもう少し改善が必要。"}
],
response_format=ProductAnalysis
)
# 完全に型付けされた検証済み応答
analysis = response.choices[0].message.parsed
print(f"感情: {analysis.sentiment}")
print(f"信頼度: {analysis.confidence}")
制約設定
制約はLLM出力の境界と要件を定義します。適切に定義された制約により、冗長さ、無関係なコンテンツ、不適切な応答などの一般的な問題を防ぐことができます。
制約の種類
長さの制約
長さ制御
この記事を正確に3文で要約してください。
各文は15-20語にしてください。
合計要約:45-60語。
[記事テキスト...]
内容の制約
内容要件
以下の要件で製品説明を書いてください:
**必須要素:**
- 製品名を少なくとも2回言及
- 3つの具体的な機能とその利点
- 最後に行動喚起
**避けるべき要素:**
- 最上級表現(最高、最大、素晴らしい)
- 競合他社との比較
- 検証不可能な主張
- 技術用語
**トーン:** プロフェッショナル、自信があり、アクセスしやすい
否定的制約(やってはいけないこと)
否定的制約
高校生に機械学習を説明してください。
やってはいけないこと:
- 数式を使用する
- 学術論文を参照する
- 「勾配降下」「損失関数」「バックプロパゲーション」などの用語を使用する
- プログラミングの事前知識を仮定する
- 200語を超える
代わりに、日常的な比喩と簡単な例を使用してください。
タスク分解
タスク分解は、複雑なタスクをより小さく管理可能なステップに分割します。これにより精度が向上し、各段階での検証が可能になります。
順次分解
ステップバイステップタスク
以下のタスクを3つの別々のステップで完了してください。
次に移る前に各ステップを完全に完了させてください。
**タスク**:新製品ローンチのマーケティングメールを作成
**ステップ1:調査と計画**
- ターゲットオーディエンスの特性を特定
- 製品が解決する3つの主要なペインポイントをリスト
- 主要な行動喚起を定義
**ステップ2:ドラフト作成**
- 件名を書く(A/Bテストオプション)
- AIDAフレームワークに従ってメール本文を書く
- ソーシャルプルーフ要素を含める
**ステップ3:レビューと最適化**
- スパムトリガーワードをチェック
- モバイル可読性を確認
- パーソナライゼーショントークンを提案
今すぐステップ1を完了してください。
演習問題
演習1:ロールプロンプティング(難易度:易)
課題:以下の対象者に暗号通貨を説明するロールプロンプトを作成してください:
- 10歳の子供
- 投資を検討している退職者
- ブロックチェーンに興味のあるソフトウェア開発者
演習2:コンテキスト設定(難易度:中)
課題:CRISPフレームワークを使用して、スタートアップ向けのクラウドプロバイダー選択に関する推奨を求めるプロンプトを書いてください。
演習3:JSON出力(難易度:中)
課題:レストランレビューから構造化データを抽出するプロンプトを設計してください。
JSONスキーマを定義:レストラン名、料理タイプ、評価(料理、サービス、雰囲気)、価格帯、おすすめ料理。
演習4:制約設定(難易度:中)
課題:ECサイト向けの製品説明を生成するプロンプトを書いてください。
長さ、トーン、必須要素、禁止内容をカバーする少なくとも5つの制約を含めてください。
演習5:タスク分解(難易度:上級)
課題:会社のハッカソンを計画するための階層的タスク分解プロンプトを作成してください。
少なくとも3レベルの詳細を含め、タスク間の依存関係を特定してください。
章のまとめ
重要ポイント
- ロールプロンプティング:特定の役割を割り当て、関連知識を活性化し行動期待を設定
- コンテキスト設定:CRISPフレームワーク(制約、リソース、意図、状況、好み)で包括的なコンテキストを提供
- 出力形式:期待される形式を明示的に指定;プログラム的消費にはJSONモードを使用
- 構造化出力:最新のLLMは保証された有効な応答のためのスキーマベースの検証をサポート
- 制約:正の制約(含める必要あり)と負の制約(避ける必要あり)の両方を定義
- タスク分解:複雑なタスクを順次、並列、または階層的なサブタスクに分割
次のステップ
第3章では、以下を含む高度な技術を探求します:
- 複雑な推論のためのTree of Thoughtプロンプティング
- 精度向上のためのSelf-Consistency
- アクションを伴う推論のためのReActパターン
- o1/o3推論モデル向けプロンプティング
- マルチターン会話設計
参考文献
- OpenAI. (2024). Structured Outputs Documentation
- Anthropic. (2025). Claude Prompt Engineering Guide
- Wei, J., et al. (2022). Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
更新履歴
- 2026-01-12:v2.0 構造化出力とJSONモードを含む初版リリース