Menu

プロンプトエンジニアリングとは?意味と学び方

プロンプトエンジニアリングとは、AI モデルに渡す指示を書いて試し、必要な出力が得られるように磨いていく作業です。なぜ効くのかを説明し、主要なテクニックを一覧にまとめます。

このページのプロンプトはすべて編集でき、そのまま ChatGPT や Claude などの AI アプリで開けます。

プロンプトエンジニアリングとは、AI モデルに渡す指示を書き、試し、磨いていくことで、必要な出力を安定して得られるようにする作業です。プロンプトに何を入れるか(タスク、コンテキスト、例、入力)と、それをどう並べるか(順序、形式、区切り)の両方を扱います。技術的に聞こえる言葉ですが、中身の大部分は丁寧に書くことと結果を確かめることです。

このページは Coddy のプロンプトエンジニアリング ガイドの目次です。なぜこの作業が効くのかを説明し、主要なテクニックとそれを教えるページを対応づけ、何気ないプロンプトと設計されたプロンプトの違いを示します。

プロンプトエンジニアリングが効く理由

言語モデルは、目の前にあるすべてのテキストをもとに、次に来るものを小さな断片ずつ予測してテキストを生成します。あなたの意図やプロジェクト、過去のチャットには、そのテキストが入力に含まれていない限りアクセスできません。つまりプロンプトは、すでにあなたを理解している相手への依頼ではなく、モデルが応答している状況そのものです。

ここから直接導かれることがあります。プロンプトが決めずに残した点を、モデルはいちばんありがちな選択で埋めがちです。いちばんよく使われる言語、いちばんよくある長さ、いちばんよくある読み手です。ありがちな選択が望みどおりのこともあります。そうでないときは、プロンプトの中でその点を決めてしまえば直ります。良いプロンプトは、ありえる返答の幅を狭めて、残ったものの大半が役に立つ状態にします。

この技術を形づくる事実がさらに2つあります。返答はサンプリングで生成されるため、同じプロンプトでも実行するたびに違う答えが出ることがあります。1回うまくいったプロンプトではなく、ほとんどの場合にうまくいくプロンプトだけが良いプロンプトです。また、モデルはプロンプト内のすべてのテキストを意味のあるものとして扱う可能性があるので、貼り付けたメールや紛れ込んだ一文が、素材だとはっきり示していない限り指示として読まれることがあります。

何気ないプロンプトと設計されたプロンプト

どちらのタブも同じことを頼んでいます。顧客のレビューを肯定的か否定的かに分けることです。それぞれ何が返ってくるかを比べてみてください。

このレビューは肯定的ですか、否定的ですか? 1. アプリは速いけど、今日2回もログアウトされた。 2. ランニングの記録にまさに欲しかったもの。 3. サポートにメールしたのに返事が来ない。
Try it
Example replyReplies vary between models and runs.

内訳は次のとおりです。

  1. 賛否両論。速さは評価していますが、ログアウトされることに不満を感じています。
  2. 肯定的。ランニングの記録という目的に合っています。
  3. 否定的。サポートから返事がないことに不満を持っています。

全体としては、肯定的が1件、否定的が1件、賛否両論が1件で、評価は分かれています。

何気ないプロンプトへの返答は、人が読むには妥当な答えですが、プログラムでは使えません。ラベルが説明に混ざり、質問になかった3つ目の分類が現れ、最後に要約まで付いています。設計されたプロンプトは、すべてのラベルを定義し、出力の形を例で固定し、レビューをタグで囲んで指示と取り違えられにくくしています。1000件のレビューで実行しても、プログラムが解析できる出力がはるかに安定して得られます。確実さが必要なら、API の構造化出力機能とコード側の検証ステップで残りの差を埋めます。

主要なテクニック

下の各テクニックは、あなたの意図とモデルが受け取った内容のあいだの、それぞれ違う種類のずれを埋めます。実際のプロンプトの多くは複数を組み合わせています。

テクニック何をするか使いどき
Zero-shot プロンプティング例なしで指示だけを与えるよくあるタスクを明確に説明できるとき
Few-shot プロンプティング入力と出力の例をいくつか見せる形式や判断基準を説明するより見せるほうが早いとき
Chain-of-Thought プロンプティング答えの前に推論を書かせる数学や論理のように手順が複数ある問題
ロールプロンプティング誰の視点と基準で答えるかを決める読み手やレベルが重要なとき
構造化出力答えを JSON、表、テンプレートに固定する結果をプログラムや表計算ソフトが読むとき
区切り文字と XML タグ指示と貼り付けた素材を分けるプロンプトに文書、コード、ユーザーの文章が入るとき
プロンプトテンプレート良いプロンプトを穴埋め式にする同じ種類の依頼を繰り返すとき
プロンプトチェーン仕事を、結果を受け渡すステップに分ける1つのプロンプトに詰め込みすぎているとき
Self-Consistency答えを複数サンプリングして多数決をとる1本の推論では信頼できないとき
Tree of Thought複数の推論の筋を探索して評価する計画や探索が必要な問題
ReAct推論とツール呼び出しを交互に行うモデルが調べものや操作をする必要があるとき
メタプロンプトモデルにプロンプトを書かせる、改善させるプロンプトの書き方で行き詰まったとき
コンテキストエンジニアリング指示だけでなく、モデルが目にするものすべてを設計するモデルを使ったアプリやエージェントを作るとき

初めてなら、まずプロンプトの書き方で1つのプロンプトの構成要素を学び、次に Few-shot プロンプティングと構造化出力に進んでください。この3つで日常の問題の大半に対応できます。

プログラム向けに作られたプロンプト

ソフトウェアに組み込まれたプロンプトは、まだ誰も見ていない入力に対して何千回も実行されるので、チャットのメッセージよりも多くのことを明記します。下のプロンプトは、コードの差分からコミットメッセージを書きます。各パートをオフにして、それぞれが何を防いでいるかを確かめてください。例がないと書き方がぶれ、制約がないと perf や style のように、チームが使っていない種類をモデルが使うことがあります。

差分からコミットメッセージを作る
Fill in
Parts
あなたは Conventional Commits 形式に従うチームのために git のコミットメッセージを書く担当者です。
下の差分に対するコミットメッセージを書いてください。
feat(cart): カート商品に数量セレクターを追加 fix(api): 存在しないユーザー ID に対して 500 ではなく 404 を返す
1行目:type(scope): 要約。要約は60文字以内で、「〜を追加」「〜を修正」のような簡潔な形にする。そのあと空行を1行入れ、変更した理由を最大3つの箇条書きで説明する。
使ってよい type は次のものだけです:feat, fix, refactor, docs, test, chore。差分に無関係な変更が混ざっている場合は、メッセージを書かずにそのことを伝えてください。
function validatePassword(password) { - if (password.length > 8) { + if (password.length >= 8) { return null; } return 'Password must be at least 8 characters'; }
Try it
Example replyReplies vary between models and runs.
fix(auth): ちょうど8文字のパスワードを受け付けるよう修正

- 判定が > 8 だったため、8文字のパスワードが拒否されていた
- エラーメッセージの「at least 8」と判定条件が一致するようにした

プロンプトエンジニアリングの学び方

プロンプトを実行し、返ってきたものをよく見ることで身につきます。実践的な進め方は次のとおりです。

  1. プロンプトの構成要素を覚える。タスク、コンテキスト、入力、形式、制約です。失敗の多くは、このどれかが欠けていることに行き着きます。
  2. 繰り返している実際のタスクを1つ選ぶ。チケットの要約、エラーの説明、メールの下書きなどです。そのためのプロンプトを書きます。
  3. テスト用の入力を5〜10個集める。扱いにくいものも含めます。空の入力、とても長い入力、別の言語の入力などです。
  4. 一度に1か所だけ変える。そしてすべての入力で実行し直します。3か所変えて出力が良くなっても、どの変更が効いたのかはわかりません。このループはプロンプトの反復改善で詳しく扱っています。
  5. 特定の失敗が起きたときにテクニックを足す。形式がぶれるなら例を、複数ステップの答えが間違うなら段階的な推論を、貼り付けた文章が指示に混ざるなら区切り文字を使います。

主要なモデル提供元も自社モデル向けのプロンプトガイドを公開しており、読む価値があります。それぞれのモデルファミリーが何に最もよく反応するかが書かれているからです。

プロンプトエンジニアは職業か

「プロンプトエンジニア」という肩書きで採用した企業もあり、チャットモデルが広く使われはじめた時期には特に目立ちました。ただ、多くの場合このスキルは別の仕事の一部です。開発者は自分が作る AI 機能のためにプロンプトを書き、サポートチームは顧客対応アシスタントのために書き、アナリストやライターは毎日使っています。

AI プロダクトを作るチームでは、仕事の範囲が広がりました。モデルの入力に何を入れるか(検索で取ってきた文書、ツールの結果、会話履歴、メモリ)を選ぶことは、指示の言い回しと同じくらい重要で、この広い仕事はコンテキストエンジニアリングと呼ばれることが多くなっています。もう半分は、プロンプトが多くの入力で機能するかを測る作業で、一般に評価(エバリュエーション)と呼ばれます。

新しいモデルで変わること

初期のプロンプトエンジニアリングは小手先の技に頼っていました。魔法のフレーズ、凝ったペルソナ、同じ指示を何度も繰り返すことなどです。現在のモデルは素直な指示にずっとよく従い、推論モデルは答える前に内部で問題を解いているので、「ステップごとに考えて」と頼んでも以前ほど効果はありません。

変わっていないのは、もともと小手先の技ではなかった部分です。あなたが伝えない限り、モデルは読み手も、データも、制約も、良い結果とはどういうものかも知りえません。明確に仕様を伝えることは長く使えるスキルで、このガイドが大半のページを割いているのもその部分です。

よくある質問

プロンプトエンジニアリングとは、簡単に言うと何ですか?

プロンプトエンジニアリングとは、AI モデルが必要な答えを返すように指示を丁寧に書き、安定してその答えが出るまで試して調整することです。モデルに何を伝えるか(タスク、コンテキスト、例)と、それをどう並べるか(順序、形式、区切り)の両方を扱います。

プログラミングができなくてもプロンプトエンジニアリングは学べますか?

学べます。中心となるスキル、つまりタスクを明確に伝える、コンテキストを与える、例を示す、出力形式を指定するといったことは、すべてチャットアプリの中で使えます。プログラミングが役立つのは、同じプロンプトを何度も実行したいとき、たくさんの入力で試したいとき、出力をプログラムに渡したいときです。

プロンプトエンジニアリングを身につけるにはどれくらいかかりますか?

基本なら半日で身につきます。良いプロンプトの構成要素と、Few-shot の例示や構造化出力といったいくつかのテクニックです。実際のタスクで安定した結果を出すにはもっと時間がかかります。多くの入力でプロンプトを試し、失敗するケースを直していく中で身につくものだからです。

プロンプトエンジニアは本当に職業として存在しますか?

「プロンプトエンジニア」のような肩書きで採用した企業もありますが、多くの場合このスキルは別の職種の一部です。AI 機能を作る開発者、ライター、アナリスト、サポートチームなどです。AI プロダクトを作るチームでは、評価の仕事や、モデルが目にするものすべてを設計する仕事と重なっていて、後者は今ではコンテキストエンジニアリングと呼ばれることが多くなっています。

新しい AI モデルでもプロンプトエンジニアリングは役に立ちますか?

新しいモデルほど小手先の技は必要なくなります。素直な指示によく従い、推論モデルは「ステップごとに考えて」と言われなくても問題を順に解いていきます。役に立ち続けるのは、もともと小手先の技ではなかった部分です。タスクを伝えること、モデルが知りえない事実を渡すこと、良い答えとはどういうものかを定義することです。

Coddy programming languages illustration

Coddyでコードを学ぼう

始める