プロンプトエンジニアリングについて改めて勉強してみた
導入
最近はさまざまな生成AIツール・サービスを利用する機会が多い。
入力するプロンプト次第で、アウトプットの質が大きく変わる。
「プロンプトベストプラクティス」みたいな記事は多く、なんとなく意識しながら使っていたが、改めて自分なりに整理してみた。
前提として覚えておいた方がよさそうな単語
LLM(Large Language Model)
大量のテキストを学習し、「次に来る単語を予測して文章を生成するAIモデル」。
ChatGPT、Claude、Geminiなどの“生成AIの本体”のこと。
文の理解・生成・要約・推論などを幅広くこなす。
Transformer
現在のLLMの基盤になっているニューラルネットワークの構造(アーキテクチャ)。
長い文章でも文脈を広く見ることができる設計が特徴。
GPTシリーズはすべてTransformerベース。
Attention(Self-Attention)
文章内の「どの単語が重要か」に重みをつけて処理する仕組み。
Transformerの中心技術で、文脈理解の精度を飛躍的に高めた。
「役割指定」「例示」「文体指定」などが効く理由も、このAttentionにある。
プロンプトが回答になるまでの流れ
| ステップ | 使われる技術 | 説明 |
|---|---|---|
| 1. プロンプトを受け取る | LLM(AIの本体) | あなたの指示文を読み取り、「何について答えるか」を理解し始める。 |
| 2. 全体を読み解く | Transformer(AIの頭の構造) | 文全体を一度に俯瞰して読み取り、話の流れや意味をつかむ。 |
| 3. 重要箇所に注目する | Attention(どこに注目すべきかを決める仕組み) | 指示・役割・制約など、特に大事な部分に注意を集中させる。 |
| 4. 回答を組み立てる | LLM(生成能力) | 学習してきた知識と文パターンを使って、自然で的確な回答を生成する。 |
[まとめ]
LLM がプロンプトを受け取り、Transformer という頭脳構造で文全体を理解し、
Attention が“どこが重要か”に集中して、その結果をもとに回答を作る。
プロンプトの基本的な構成要素
| 構成要素 | 役割(何のために存在する?) | 内容(含めるべき情報) | 例 |
|---|---|---|---|
| 指示(Instruction) | モデルに「何をしてほしいか」を具体的に伝える中心部分。 | ・タスク内容 ・目的とゴール ・曖昧さを排除した行動指示 |
「この記事を300文字以内で要約してください。」 |
| コンテキスト(Context) | モデルが誤解しないよう、背景や前提情報を与える。 | ・対象の説明 ・背景知識 ・前提条件 ・役割付与(Role) |
「あなたはITコンサルタントです。以下は社内向けの説明資料です。」 |
| 出力指示(Format / Output Constraints) | 出力の形を制御して、期待通りのフォーマットを得る。 | ・形式(箇条書き、表、JSON など) ・文字数制限 ・禁止事項 ・文体 |
「箇条書きで3点にまとめてください。」 |
ポイント
以下の3つを押さえると、プロンプトの成功率が劇的に上がる。
- 指示 = 何をしてほしいか(タスク定義)
- コンテキスト = なぜ/どういう背景で実行するのか(誤解防止)
- 出力指示 = どう出してほしいか(形式の指定)
プロンプトの一般的なコツ × 技術的根拠(論文・理論)
| コツ | 指示例 | 技術的な根拠(論文・理論) | 補足(なぜ効くか) |
|---|---|---|---|
| 指示を具体的にする | 数値リストを折れ線グラフ化し、解説を2行以内にまとめてください。 | ・GPT-3論文(Few-Shot Learners, 2020)「明確なタスク定義で性能が向上」・In-Context Learning(多くのNLP論文) | Transformer は曖昧な指示があると “もっともらしい出力” を生成するため、具体的にするほど誤差が減る。 |
| 役割を与える(Role Prompting) | あなたは言語学者として回答してください。 | ・**RLHF論文(Ouyang et al., 2022)**人間フィードバックで「指示追従性」が強化・GPT-3論文:文体模倣能力 | Role を与えると Attention が「専門家文体のパターン」に強く寄る。 |
| 例を提示する(Few-shot) | 以下のサンプルのように書いてください。 | ・GPT-3論文(Few-Shot Learners, 2020)・In-context learning の正体(2022〜) | LLMは 例示パターンを模倣する能力 が強いため、例を与えると形式の安定性が向上する。 |
| 制約や禁止表現を設ける | ・200文字以内で・ポジティブ表現のみ | ・RLHF(指示遵守モデル)・Transformer の確率最適化理論 | 曖昧指示は“暴走”の原因。制約を指定すると探索空間が狭まり精度向上。 |
| ステップを段階的に指示する(Step-by-step) | まずAを要約、次にBを整理… | ・Chain-of-Thought(CoT)論文(Google, 2022)・Zero-shot CoT(2022) | 推論を段階的に行わせると、Attention が流れを追いやすくなるため論理精度が向上。 |
| 自己チェックを促す(Self-evaluation) | 誤りがある場合は訂正し、理由を加えてください。 | ・**Self-Consistency(Google, 2022)**複数推論から整合性を選ぶ・Reflexion(2023):自己修正型LLM | 「自己評価 → 自己修正」は研究でも精度向上が確認されている。 |
| 文体・トーンを指定する | ・ビジネス文書で・カジュアル調で | ・GPT-3論文:文体模倣能力・スタイル変換研究(Style Transfer) | LLMは大量の文体データを学習しており、文体指定は Attention の重みを変える効果がある。 |
9つのテクニック
| テクニック名 | 概要(短く要点) | こういうシーンにおすすめ |
|---|---|---|
| Zero-shot | 例示なしでタスクを実行させるプロンプト。指示だけで目的を伝える。 | ・明確な出力形式がある ・一般的な知識タスク ・回答に創造性を求めない時 |
| Few-shot | 入力例(Input→Outputのサンプル)を提示してフォーマットや意図を学習させる。 | ・形式が複雑な出力 ・文体やトーンを模倣させたい ・誤解が起きやすいタスク |
| Chain-of-Thought (CoT) | 推論を「ステップに分解」して考えさせる。論理的タスクを強化。 | ・数学、論理、推論系タスク ・計算ミスが多いとき ・推論を丁寧にさせたい時 |
| Zero-shot CoT | 例を与えずに「Let's think step by step」などの短い指示だけでCoT推論モードへ誘導する。 | ・CoTを使いたいが例示を作るのが面倒 ・短いプロンプトで推論精度を上げたい |
| Self-Consistency | CoTで複数回答を生成し、その中から最も一貫した答えを選ぶことで精度向上。 | ・推論にばらつきが出るタスク ・複雑な計算 ・論理問題 ・不安定な答えを安定化したい |
| Generate Knowledge(GK) | 回答前に「関連知識を生成させる」ことで推論を強化する。知識強化型CoT。 | ・専門知識を伴う推論 ・未知領域に関する判断タスク ・曖昧な質問の精度向上 |
| ReAct | Reasoning(推論)+ Acting(行動)を統合。推論しながらツール(検索等)を使う。 | ・RAG、外部検索が必要なタスク ・回答プロセスを透明化したい時 ・外部情報依存タスク |
| Directional Stimulus Prompting | 曖昧なタスクに対し「方向性(Direction)」を与えることで回答を安定化する。 | ・抽象的なタスク(アイデア生成など) ・回答の"方向"をコントロールしたい ・創造性を保ちつつ軸を与えたい |
| Multimodal CoT | 画像+テキストの「マルチモーダル」入力にCoTを適用。画像理解+推論を可能にする。 | ・画像説明+推論 ・OCRの文脈理解 ・画像に基づく判断タスク(例:医療、地図、図表) |
1. Zero-shot Prompting
概要(Zero-shot Prompting)
例示なしでタスクを実行させるプロンプト。指示だけで目的を伝える。
こういうシーンにおすすめ(Zero-shot Prompting)
- 明確な出力形式がある
- 一般的な知識タスク
- 回答に創造性を求めない時
推奨用途(Zero-shot Prompting)
- 要約
- コードレビュー
- 文書変換(敬語→砕けた文など)
テンプレート(Zero-shot Prompting)
あなたは {役割} です。
以下のタスクを実行してください。
# タスク
{やってほしい内容}
# 制約条件
・曖昧な推測をしない
・前提を補わない
・論理的に一貫した出力を生成する
# 出力形式
{出力形式(箇条書き・表・Markdown・JSONなど)}
2. Few-shot Prompting
概要(Few-shot Prompting)
入力例(Input→Outputのサンプル)を提示してフォーマットや意図を学習させる。
こういうシーンにおすすめ(Few-shot Prompting)
- 形式が複雑な出力
- 文体やトーンを模倣させたい
- 誤解が起きやすいタスク
推奨用途(Few-shot Prompting)
- Markdown資料生成
- YouTube台本
- サムネイル文言生成
- コーディングスタイルの統一
テンプレート(Few-shot Prompting)
あなたは {役割} です。
以下に、入力とそれに対応する出力例を示します。
【例1】
入力:
{input_sample1}
出力:
{output_sample1}
【例2】
入力:
{input_sample2}
出力:
{output_sample2}
--- ここから本番 ---
入力:
{input}
上記の例と同じスタイル・形式で出力してください。
3. Chain-of-Thought(CoT)
概要(Chain-of-Thought(CoT))
推論を段階的に説明させて、正確性を上げる。
こういうシーンにおすすめ(Chain-of-Thought(CoT))
- 数学、論理、推論系タスク
- 計算ミスが多いとき
- 推論を丁寧にさせたい時
推奨用途(Chain-of-Thought(CoT))
- ロジックの整理
- 仕様分析
- 設計レビュー
- バグ原因解析
テンプレート(Chain-of-Thought(CoT))
以下の問題について、解くためのステップを順番に説明しながら回答してください。
# 問題
{question}
# 出力形式
1. 問題の整理
2. 解法の検討
3. ステップごとの推論
4. 結論
4. Zero-shot Chain-of-Thought
概要(Zero-shot Chain-of-Thought)
例を与えずに「Let's think step by step」などの短い指示だけでCoT推論モードへ誘導する。
ステップバイステップとは
複雑な問題を、順番に段階を追って考えさせるためのプロンプト指示のこと。
以下のような構造で回答される傾向がある。
| # | 段階 | 内容 |
|---|---|---|
| 1 | 問題の整理 | 現状分析を行いながら、現在抱えている課題の整理を行う |
| 2 | 提案、選択肢の列挙 | 問題に合わせて、取りうる方法やアプローチを提示する |
| 3 | 比較・評価 | メリット・デメリットを整理して、最適解を導く |
| 4 | 結論 | 最終的な推奨案を提示する |
| 5 | 実行ステップ(内容に応じて) | 実際にどう進めるか、具体的な手順を提示 |
こういうシーンにおすすめ(Zero-shot Chain-of-Thought)
- CoTを使いたいが例示を作るのが面倒
- 短いプロンプトで推論精度を上げたい
- 「うまく言語化できていない課題」「どう考えていいかわからない課題」をAIに考えさせたい
- 「ステップバイステップで考えて」と指定すると、AIが論理的に推論してくれる
推奨用途(Zero-shot Chain-of-Thought)
- 要件整理
- 解法検討
- 曖昧な質問への正確な回答
テンプレート(Zero-shot Chain-of-Thought)
以下の問題について、ステップバイステップで考えてください。
# 問題
{question}
5. Self-Consistency
概要(Self-Consistency)
CoTで複数回答を生成し、その中から最も一貫した答えを選ぶことで精度向上。
こういうシーンにおすすめ(Self-Consistency)
- 推論にばらつきが出るタスク・複雑な計算・論理問題・不安定な答えを安定化したい
推奨用途(Self-Consistency)
- 設計方針の比較
- デバッグ原因の切り分け
- 難しい数学・パズル問題
テンプレート(Self-Consistency)
以下の問題について、3通りの異なる推論プロセスで回答してください。
その後、もっとも一貫性が高いと判断される答えを1つ選んでください。
# 問題
{question}
# 出力形式
【回答A】
ステップ:
結論:
【回答B】
ステップ:
結論:
【回答C】
ステップ:
結論:
【最終結論】
最も一貫している回答:
理由:
6. Generate Knowledge(GK)
概要(Generate Knowledge(GK))
回答前に「関連知識を生成させる」ことで推論を強化する。知識強化型CoT。
こういうシーンにおすすめ(Generate Knowledge(GK))
- 専門知識を伴う推論・未知領域に関する判断タスク
- 曖昧な質問の精度向上
推奨用途(Generate Knowledge(GK))
- 初見の技術領域の理解
- API仕様の分析
- 新規領域のリサーチ
テンプレート(Generate Knowledge(GK))
以下の問題について回答する前に、関連知識を生成してください。
その知識を使って最終回答を行ってください。
# 問題
{question}
# 出力形式
1. 関連知識の生成
2. その知識を使った推論
3. 結論
7. ReAct
概要(ReAct)
Reasoning(推論)+ Acting(行動)を統合。推論しながら必要なアクション(検索・コード生成など)を実行する。
こういうシーンにおすすめ(ReAct)
- RAG、外部検索が必要なタスク・回答プロセスを透明化したい時
- 外部情報依存タスク
推奨用途(ReAct)
- RAG連携(検索付きChat)
- 外部ツールを使ったタスク
- コード生成と実行の組み合わせ
テンプレート(ReAct)
以下の問題に対して、Reasoning(推論)とAction(行動)を交互に行ってください。
# タスク
{task}
# 出力形式
Reasoning: {考えたこと}
Action: {必要な行動(例:検索・計算・コード生成)}
Observation: {アクションの結果}
これを繰り返し、最終結論に到達してください。
8. Directional Stimulus Prompting
概要(Directional Stimulus Prompting)
曖昧なタスクに対し「方向性(Direction)」を与えることで回答を安定化する。
こういうシーンにおすすめ(Directional Stimulus Prompting)
- 抽象的なタスク(アイデア生成など)
- 回答の“方向”をコントロールしたい
- 創造性を保ちつつ軸を与えたい
推奨用途(Directional Stimulus Prompting)
- YouTubeのタイトル案
- コピーライティング
- デザイン案生成
テンプレート(Directional Stimulus Prompting)
以下のタスクに対し、方向性(Direction)を与えます。
Direction を踏まえて回答してください。
# Direction(方向性)
{方向性の指示:例「ミニマル・落ち着いた・暖色トーン」}
# タスク
{task}
# 出力形式
・方向性の要約
・方向性に沿ったアイデア
・代替案
9. Multimodal CoT
概要(Multimodal CoT)
画像+テキストの「マルチモーダル」入力にCoTを適用。画像理解+推論を可能にする。
こういうシーンにおすすめ(Multimodal CoT)
- 画像説明+推論・OCRの文脈理解
- 画像に基づく判断タスク(例:医療、地図、図表)
推奨用途(Multimodal CoT)
- 画像に基づく判断(UI、デザイン、図表など)
- OCRした文章の文脈理解
- 写真+文章の分析タスク
テンプレート(Multimodal CoT)
以下の画像を解析し、内容を理解したうえで、Chain-of-Thought に基づいて回答してください。
# 画像
{画像をアップロード}
# タスク
{task}
# 出力形式
1. 画像の観察内容
2. 推論ステップ
3. 結論
使ってみた感想(ピックアップ)
- Zero-shot
- まずは基本として使いやすい
- 自分が書くものは、基本この手法を使っていることが多い
- Zero-shot CoT
- 「どう進めていいかわからないときに、AIに考えさせたい」というとき、雑に使いやすい
- 自分の頭の中では曖昧でも、「ステップバイステップ」で考えて」と指示すると、かなり論理的に整理してくれる
- 色々な作業(仕様検討、実装方法検討など)の取っ掛かりとして有用
- GK
- 専門知識が必要なタスクで威力を発揮
- 使ったことのないサービス/ライブラリなどに関する調査タスクで、事前に関連知識を生成させてから推論させると、かなり有益な回答を得られた
- これらの理解にも役立つ
- 設計を行うときにも、「一般的な設計思想」というのを事前に関連知識として生成する思考になるみたい
- 設計の壁打ちをしたいときに有用かも
今回勉強してみて、改めて「重要」だと感じたポイント
- 役割付与(Role)の重要性
- モデルの振る舞いに大きな影響を与える
- 出力形式の指定
- 形式を指定することで、学習済みパターンに沿った安定した生成が可能
- 色々なパターンのテクニックを知っておき、試してみることで、様々な観点の回答を得ることができて便利(そして面白い)
今後意識したい/実践したいこと
- カスタムエージェント(
.github/agents/<name>.agent.md)を使用して、作業に合わせた役割付与- 役割を明確にすることで、思考のブレを防止
- アウトプットしたい形式ごとにテンプレを用意しておくことで、出力内容を安定化させる
Discussion