Agent Mentor Learn
プロンプトエンジニアリング基礎: 効果的な指示の書き方 · 第 2 回 / 全 6 回

レッスン2: プロンプトの基本構造

学習目標:

  • プロンプトの4つの核心要素を習得する
  • 曖昧なリクエストを構造化された指示に変換する方法を学ぶ
  • 各要素がAIの出力にどう影響するかを理解する

前提: << レッスン1: プロンプトとは何か、なぜ重要なのか | 次: レッスン3 >>

なぜAIは間違った質問に答え続けるのか

AIに「プロジェクトの要約を書いて」と頼んだら、プロジェクトの実際の詳細が一切含まれない汎用的なテンプレートを返してきた。どこで間違えたのでしょうか?AIに能力が欠けているわけではありません。あなたの指示に重要な要素が欠けていたのです。どのプロジェクトなのか、誰のためのものか、何を含めるべきか、どんな形式にすべきか、といった情報です。

効果的なプロンプトは、壁越しに投げる一行ではありません。4つの要素から構築された完全な指示です。このレッスンでは、その4つの要素が何か、それぞれが何をするのか、そしてどう組み合わせるのかを説明します。

プロンプトの4つの要素

明確なプロンプトは通常4つの部分を含んでいます1:

  1. ロール(役割) — AIにどのアイデンティティから答えるべきかを伝える
  2. タスク — 正確に何をしてほしいのかを述べる
  3. フォーマット — レスポンスの構造とスタイルを指定する
  4. 制約 — 境界を設定する: スコープ、長さ、トーン、など

毎回4つすべてが必要なわけではありませんが、タスクが複雑であればあるほど、より多くの要素が必要になります。それぞれを見ていきましょう。

1. ロール: AIはどのアイデンティティから答えるべきか

ロールは、AIにどの視点と専門知識のレベルで答えるべきかを伝えます2。同じ質問でも、技術専門家と小学校の教師では全く異なる答えになります。

次の2つのプロンプトを比較してください:

ロールなし:

Dockerとは何かを説明してください。

AIが返すかもしれない答え:

  • 辞書のような定義(「Dockerはオープンソースのコンテナ化プラットフォームです...」)
  • Linux、仮想化、イメージについて既に知っていることを前提とした答え

ロールあり:

あなたは日常的な例え話で技術概念を説明するのが得意な教師です。プログラミングのバックグラウンドがないプロダクトマネージャーに、Dockerとは何かを説明してください。

今度はAIは:

  • 日常的な例え話を使います(「Dockerは標準化された輸送コンテナのようなもので...」)
  • 専門用語を避けるか、使う場合は各用語を説明します
  • 「どう作られているか」よりも「なぜ必要なのか」に焦点を当てます

一般的なロールのパターン:

  • 職業的アイデンティティ: 「あなたはシニアPythonエンジニアです」
  • 教え方のスタイル: 「あなたは例を通して教えるメンターです」
  • 聴衆の視点: 「技術的でない経営陣に説明しています」
  • トーン: 「あなたはフレンドリーで忍耐強いアシスタントです」

2. タスク: 正確に何をしてほしいのかを述べる

タスクはプロンプトの核心です。「何をしてほしいのか」という質問に答えます1。曖昧なタスク記述は、最も一般的な問題です。

比較してみましょう:

曖昧なタスク:

このコードを分析してください。

AIはどの角度から取り組むべきかわかりません: パフォーマンス?セキュリティ?可読性?バグ?

明確なタスク:

このPythonコードをパフォーマンスのボトルネックがないか分析してください。大規模なデータセットで遅くなる可能性のある操作を指摘し、それらを修正する方法を提案してください。

今度はAIは以下を理解します:

  • 焦点はパフォーマンスであり、他の懸念事項ではない
  • 大規模データセットのケースについて推論すべき
  • 問題を指摘するだけでなく、修正案を提案すべき

タスクには3つの層があります:

  1. 動詞 — 要約する、分析する、生成する、編集する、レビューする...
  2. 対象 — それが作用するコンテンツ(コード、ドキュメント、データ...)
  3. ゴール — 達成すべき結果、解決すべき問題

3. フォーマット: レスポンスの構造を指定する

フォーマットは、AIに答えをどう整理すべきかを伝えます1。フォーマット制約がない場合、AIは自分が適切だと思うものを選びます: テキストの壁かもしれないし、リストかもしれないし、テーブルかもしれません。

比較してみましょう:

フォーマット要件なし:

この記事の重要なポイントを要約してください。

AIが返すかもしれない答え:

  • 3段落の説明
  • 10個の箇条書きのリスト
  • 1文のまとめ

フォーマット指定あり:

この記事を次のフォーマットで要約してください:
核心的な主張: [一文]
裏付けとなる証拠(3ポイント):1. [ポイント1、一文]2. [ポイント2、一文]3. [ポイント3、一文]
結論: [一文]

AIはこの構造に正確に従い、結果をそのまま自分のドキュメントに貼り付けることができます。

一般的なフォーマット制約:

  • リスト: 「3つの重要なポイントを箇条書きで列挙」
  • テーブル: 「両方のオプションの長所と短所をテーブルで比較」
  • コード: 「実行可能なコードのみを出力、説明なし」
  • セクション: 「背景、分析、推奨事項に分ける」
  • 長さ: 「各ポイントを50語以内に収める」

4. 制約: 境界を設定する

制約は、AIが軌道を外れないようにする「〜しないで...」と「〜のみ...」のルールです1

比較してみましょう:

制約なし:

Pythonを学ぶためのリソースをいくつか推薦してください。

AIが返すかもしれない答え:

  • 十数冊の本、コース、ウェブサイト
  • 初心者から上級者まですべて
  • 有料と無料、英語と他の言語の混在

制約あり:

Pythonを学ぶためのリソースを3つ推薦してください。要件:- 完全に無料- 英語- 完全な初心者に適している- 実践的なプロジェクトが含まれている
各リソースを2文で説明してください: 最初の文は何であるかを述べ、2文目はなぜ初心者に適しているかを述べます。

今度はAIは:

  • 正確に条件に合うリソースだけをフィルタリング
  • 有料コースや外国語の教材をスキップ
  • 各選択を求められたフォーマットで説明

一般的な制約タイプ:

  • 長さ: 「200語以内」
  • スコープ: 「2023年以降の手法のみをカバー」
  • トーン: 「フォーマルな学術的言語を使用」
  • 除外: 「有料オプションは含めない」
  • 優先順位: 「オープンソースツールを優先」

4つの要素を組み合わせる

完全なプロンプトは、4つの要素すべてを組み合わせます。実際のシナリオを見てみましょう。

シナリオ: AIにミーティングノートを作成させる

タスクのみ、他の要素が欠けている:

このミーティングの議事録から議事録を書いてください。

4つの要素すべて:

[ロール] あなたは経験豊富なプロジェクトアシスタントです。
[タスク] 以下の議事録からミーティングノートを書いてください。
[フォーマット] 次のように整理してください:- ミーティングの基本情報(時刻、参加者)- 議論された問題(優先度順)- 各問題について到達した決定- アクションアイテム(担当者 + 期限)
[制約]- 明確な結論に達した議論のみを記録; 雑談はスキップ- すべてのアクションアイテムは実行可能でなければならない(動詞 + チェック可能な成果物)- 全体を500語以内に収める
議事録:[ここに議事録を貼り付ける]

このプロンプトは明確で、完全で、再利用可能です。議事録部分をプレースホルダーに変えれば、何度でも実行できるテンプレートになります。次のミーティングでは、新しい議事録を入れ替えるだけです。

演習: 曖昧なプロンプトを書き直す

それでは、曖昧なプロンプトを構造化されたものに変換する練習をしましょう。

元のプロンプト(曖昧)

このコードを最適化してください。

書き直しのステップ

ステップ1: タスクを明確にする

  • 何のための最適化?パフォーマンス、可読性、それともセキュリティ?
  • ゴールはパフォーマンスとしましょう

ステップ2: ロールを追加する

  • コードレビュアーの視点が最も適しています

ステップ3: フォーマットを指定する

  • 出力を構造化: 最初に問題をリストし、次に修正案

ステップ4: 制約を追加する

  • 動作を変更しない
  • 明白なパフォーマンス向上を優先する

書き直したプロンプト

あなたはシニアパフォーマンスエンジニアです。
以下のPythonコードをパフォーマンス問題について分析し、修正案を提案してください。
次のフォーマットで出力してください:1. 現在のボトルネック(影響順、最大のものから)   - ボトルネックの説明   - どのデータ量で問題になるか2. 最適化計画   - 行うべき具体的な変更   - 最適化されたコードスニペット   - 期待されるパフォーマンス向上
制約:- 関数の入出力インターフェースを変更しない- 新しい外部依存関係を導入しない- 少なくとも2倍の高速化をもたらす変更を優先する
コード:[ここにコードを貼り付ける]

元のプロンプトと比較すると、書き直し版はAIに明確に伝えています: どのロールを取るべきか、何をすべきか、どう出力すべきか、そしてどんな制限の下で。

4つの要素を柔軟に使う

4つの要素は教条ではなく、チェックリストです:

  • シンプルなタスクは2〜3の要素だけで済みます: 「この記事の核心的な主張を3文で要約してください」(タスク + フォーマット)
  • 複雑なタスクは4つすべてが必要です: 「あなたは技術ライターです。このAPIドキュメントを初心者向けチュートリアルとして書き直してください。コード例とよくある間違いについての注意を含め、1000語以内で」
  • 探索的タスクは制約が少なくて済みます: 「この問題にアプローチするためにどんな角度が使えるでしょうか?」
  • 実行タスクはより多くの制約が必要です: 「次のJSON形式で厳密に出力してください。説明なしで」

テストはシンプルです: あなたのプロンプトを読んだ後、AIは正確に何をすべきか、どんな結果を生み出すべきかを知ることができますか? あなた自身がそれに明確に答えられないなら、AIにはさらにチャンスがありません。

まとめ

効果的なプロンプトは4つの要素を含んでいます: ロール(どのアイデンティティ)、タスク(何をするか)、フォーマット(どう整理するか)、そして制約(境界は何か)。毎回4つすべてを使うわけではありませんが、タスクが複雑であればあるほど、より完全な要素のセットが必要になります。

書き直しプロセス: 最初に核心的なタスクを明確にし、次にどんなロール、どんな出力フォーマット、どんな制約が必要かを決めます。曖昧な一行を構造化された指示に拡張すれば、AIの出力品質は急激に向上します。

次のレッスンでは、few-shot学習について説明します: 言葉で説明する代わりに、2〜5個の例を使ってAIに望むパターンを理解させる方法です。

次のレッスン Few-Shot学習: 例でAIを導く >>

Footnotes

  1. OpenAI Prompt Engineering Best Practices — https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-the-openai-api 2 3 4

  2. Anthropic Prompt Engineering Overview — https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/overview

練習

01

以下は雑然としたプロンプトです:

レベル1: プロンプトを分解して再構築する
関数を書いてください、入力は文字列のリスト、出力は重複除去された結果、高速にしてください、Pythonを使用、コメントを追加してください。

4要素フレームワーク(ロール、タスク、フォーマット、制約)を使ってこれを整理し直し、より明確にしてください。

完了基準 · ローカルでチェック
02

シナリオ: 技術ドキュメント(API使用ガイド)をAIにレビューさせ、初心者が混乱しそうな箇所を見つけて、改善案を提案させる必要があります。

レベル2: 複雑なタスクのための完全なプロンプトを設計する

4つの要素すべてを含む完全なプロンプトを設計してください。

完了基準 · ローカルでチェック