2025-06-10
2025-11-19
概要 †
生成AIから望ましい結果を得るために、AIへの指示(プロンプト)を設計・最適化する技術。
各社からプロンプトエンジニアリングにかかるドキュメントも公開されている。
目次 †
ゼロショット(Zero-shot Prompting) †
概要 †
例を示さず、タスクのみを指示して実行させる最も基本的な方法。
実例 †
次の文章を100文字以内で要約してください:
……文章……
ベストプラクティス †
- 明確な制約(文字数、形式)を書く
- 曖昧語を避ける(「良い感じに」ではなく「箇条書き3つ」など)
- 難しいタスクには向かない → Few-shotと組み合わせると◎
ワンショット(One-shot Prompting) †
概要 †
例を1つだけ示してタスクに対する出力形式を理解させる。
実例 †
以下の例に従って対象の出力を行って下さい
[例]
入力: りんご
出力: Apple
[対象]
入力: オレンジ
結果
ベストプラクティス †
- “例” と “対象” を明確に分ける
- フォーマットを固定したい場合に最も有効
フューショット(Few-shot Prompting) †
概要 †
複数例を与えてモデルにパターンを学習させる。
実例 †
以下は製品レビューを「ポジ/ネガ」に分類する例です。
【例1】
レビュー:最高の使い心地! → ポジ
【例2】
レビュー:電池がすぐ切れる → ネガ
【対象】
レビュー:……
ベストプラクティス †
- 例は 3つ前後が効果的(多すぎるとノイズが増える)
- 多様すぎない例を選ぶ(方向性がぶれる)
- 入力と出力の形式を完全一致させる
チェーン・オブ・ソート(Chain-of-Thought, CoT) †
概要 †
「考える過程」を書かせることで高精度な推論を引き出す。
実例 †
この数学問題を、理由を段階的に説明しながら解いてください。
5個のリンゴを3人で均等に分けるには?
ベストプラクティス †
- 「ステップごとに説明してください」と明示する
- ただし CoT は冗長になるので、最終的に「まとめて簡潔に」と続けると良い
- APIでの実運用は CoT生成 → 短文化- が定番
Zero-shot Chain-of-Thought(Zero-shot CoT) †
概要 †
例を一切与えず、「考える過程(推論ステップ)を書いてください」と指示するだけで CoT を誘導する方法。
Google の研究で明らかになった有名手法。
要するに:「ステップバイステップで考えてください」と書くだけでモデルが理由付けを始める
という、非常に簡単かつ強力なテクニック。
実例 †
Zero-shot の場合 †
「3つの箱に同じ数のリンゴを均等に入れるには、リンゴが5個あるときどうなりますか?」
→ モデルが曖昧な答えを返す可能性がある
Zero-shot CoT(考える過程を要求) †
この問題について、ステップバイステップで推論してください。
3つの箱に5個のリンゴを均等に入れるにはどうしますか?
→ モデルが
1. 全体数
2. 割り切れるか
3. 端数の扱い
などを丁寧に説明しながら結論を出す。
ベストプラクティス †
- 「step-by-step」より“理由を説明しながら”が強い
- 推論品質が特に改善するのは「数学・論理・意思決定タスク」
- 冗長になりやすい → 必要に応じて最後に簡潔化
最適テンプレ †
または
考える過程をステップごとに示してから、最終的な答えを述べてください。
セルフコンシステンシー(Self-consistency) †
概要 †
複数のCoTパターンを生成し、最も整合性の高い結論を選ぶ方法。
実例 †
この問題について、3種類の推論パターンを示したうえで、最も妥当な結論を選んでください。
ベストプラクティス †
- 計算が重くなるため「重要な意思決定」だけに使う
- モデルの暴走を防ぐ効果が大きい
- CoTと併用が前提
Set-of-Mark(Set-of-Marks, SoM) †
概要 †
複数の短いマーク(思考の断片・チェックポイント)を生成し、その中から最も妥当な推論を選ぶ手法。
Self-consistency(複数CoT)の軽量バージョンとも言える。
- CoT のように長文で推論させるのではなく、
- 複数の 短い推論片(marks) を生成し、
- 最も整合性があるものを選ばせる
という構造。
実例(簡易版) †
この問題について、複数の推論候補(マーク)を生成し、その中から最も妥当な結論を選んでください。
問題:
AさんはBさんより3歳年上。Bさんが10歳のとき、Aさんは何歳ですか?
リフレクション(Reflection Prompting) †
概要 †
回答 → 自己評価 → 改善 のループで品質を高める。
実例 †
上の回答の弱点を3つ述べ、改善した上で最終回答を示してください。
ベストプラクティス †
- 「弱点を指摘させる → 改良させる」をセットで指示
- 実務ではコード生成や文章校正で強力
ロールプロンプト(Role Prompting) †
概要 †
モデルに「役割」を与えて専門性や出力の方向性を固定する。
実例 †
あなたはプロのGoエンジニアです。
以下のコードレビューを行ってください。
ベストプラクティス †
- 「役割 + スキルレベル + 目的」をセットで書くと精度UP
- 例:「あなたは20年経験のあるセキュリティエンジニアです。」
明示的制約(Constraint Prompting) †
概要 †
出力の形式や制約を具体的に列挙して品質・一貫性を高める。
実例 †
以下の条件を守って出力してください:
- 箇条書き3つのみ
- 1項目は20文字以内
- 専門用語は使わない
ベストプラクティス †
- 制約は番号付きで書く(モデルが守りやすい)
- 「形式」「文字数」「禁止事項」まで指定すると安定する
ステップバイステップ(Step-by-step Prompting) †
概要 †
処理を段階に分けて誤りを防ぐ方法。
実例 †
次の順序で回答してください:
1. 問題を分解する
2. 各要素を説明する
3. 最後に統合した答えを作る
ベストプラクティス †
- API連携など複雑なタスクで特に効果的
- 「順序を番号で書く」と守られる確率が上がる
思考抑制(No-CoT / No-thinking Prompting) †
概要 †
説明不要で「答えだけ返す」ようにさせる。
実例 †
ベストプラクティス †
- 速度を優先したい場合に有利
- ChatGPTなど対話では冗長さを抑える効果大
スタイルガイドプロンプト(Style Guide Prompting) †
概要 †
文体・口調を統一するためのルールを先に提示する方法。
実例 †
以下のスタイルで回答してください:
- 語尾は「です・ます」
- 箇条書きを中心
- 技術用語は定義してから使う
ベストプラクティス †
- ドキュメント生成やブログ記事に特に有効
- 一度スタイルを定義したら後続も同じルールを継承できる
ツール誘導(Tool / Function Calling Prompting) †
概要 †
LLMに関数や外部APIを使わせるためのプロンプト設計。
実例 †
LangChain など
以下の形式で関数を呼び出してください:
`{"name": "add", "arguments": {"a": 1, "b": 2}}`
ベストプラクティス †
- 「呼び出し形式の例」を必ず書く
- フィールド名を厳密に指定する
- ChatGPT API の function calling では必須
モデルの想定出力例 †
Mark 1: B=10 → A=13
Mark 2: B=10 → A=12(誤り)
Mark 3: B=10 → A=13
→ 最も妥当な Mark を選択 → 結論:13歳
ベストプラクティス †
- CoT よりコンパクトで速い
- Self-consistency のような多数サンプル生成より軽量
- 曖昧さ・複数解候補のあるタスクで強い
まとめ †
| 手法 | 目的 | 出力の特徴 | 強み | 使用例 | ベストプラクティス |
| Zero-shot | 最小指示でタスクを実行 | 1回の回答のみ | 手軽・高速 | 「この文を要約して」 | 制約を明確に記述する |
| One-shot | 出力形式を例1つで誘導 | 例と似た形式で出力 | 軽量・形式固定に強い | 要約・分類の形式合わせ | 「例」と「対象」を分離 |
| Few-shot | パターン学習・形式学習 | 例に沿った一貫性ある出力 | 精度高い・ブレにくい | 3例の分類・要約 | 例は3つ前後が最適 |
| CoT(Chain-of-Thought) | 推論プロセスを明示し精度UP | 複数ステップの長い推論 → 結論 | 論理・数学・推論で強力 | 論理問題、数学問題、仕様検討 | 「推論過程を示して」など明示指示 |
| Zero-shot CoT | 例なしでCoTを誘導 | 長めの推論説明 + 結論 | CoTの手軽版・導入が簡単 | ロジック問題、計算 | 「理由を段階的に説明して」 |
| Self-consistency | 最適な推論経路を選ぶ | 複数CoT生成 → 最良の1つ選択 | 精度最大・誤り低減 | 重要な意思決定 | 高コストのため重要タスクのみに |
| Set-of-Mark (SoM) | いくつかの短い推論候補から選択 | 短い推論片×複数 → 最適解 | 軽量 self-consistency | 推論・分類・曖昧タスク | 「3つのMark → 最良を選択」 |
| Reflection Prompting | 自己評価で改善 | 初回回答 → 評価 → 改良版 | 品質向上・誤り修正 | コードレビュー・文章編集 | 「弱点→改善」の2段階を指示 |
| Role Prompting | 視点・専門性固定 | 役割に応じた専門的出力 | 一貫性のある回答 | 「あなたはGoエンジニア」 | 役割+能力+目的を書く |
| Constraint Prompting | 厳密な形式管理 | 制約に従った正確な形式 | 出力ブレが最小 | 箇条書き3つ、字数制限 | 制約は番号付きで書く |
| Step-by-step Prompting | 誤り防止 | 手順に沿って説明 | 複雑タスクで強い | 分解→説明→結論 | 番号付き手順を書く |
| No-CoT(思考抑制) | 簡潔化 | 結論のみ | 高速・シンプル | 「説明不要。答えだけ」 | 速度重視タスクに |
| Style Guide Prompting | 文体・トーン統一 | 指定スタイルの文章 | 長文生成で強い | マニュアル、記事 | 文体ルールを冒頭でまとめて提示 |
| Tool / Function Calling Prompting | 関数・APIを呼ばせる | JSON構造化出力 | アプリ統合に最適 | LangChain, OpenAI API | JSON例とフィールド名を厳密指定 |
マルチターンとシングルターン †
以下、チャット式AIにおけるマルチターンとシングルターンについて簡単に記載する。
マルチターン(Multi-turn) †
前後のやり取り(会話履歴)を踏まえて連続的に応答する使い方。
特徴 †
- AI が今回の発言だけでなく、過去の発言(コンテキスト)も理解して返答する。
- 会話を重ねながら指示を徐々に追加したり修正したりできる。
- チャット形式の最大の強み。
ユーザー: 「Webアプリを作りたい」
AI: 「どんな機能がほしいですか?」
ユーザー: 「ログイン機能」
AI: 「では、認証方式はどうしますか?」
→ 会話の流れを維持して進行
シングルターン(Single-turn) †
1 回の質問 → 1 回の回答で完結する使い方。
特徴 †
- 毎回、必要な情報を 1 回のメッセージ内に全部書く。
- 会話の文脈を引き継がない前提で使う。
以下の機能を持つWebアプリを作りたい
- ログイン機能
- 認証方式
- 事前に登録済みのユーザIDとパスワードを入力してユーザ認証する
- ユーザ情報はusersテーブルに保存されている事とする
:
所感 †
プログラム作成などは、シングルターンで最初に纏った情報を渡して指示するほうが最終的に出来上がるコードの品質は良いように感じるが、
日々のAIモデルの改善に伴って、マルチターンでもある程度の精度、質は保てるようになってきている気もする。