【Dify】Lesson2-6:良いプロンプトの書き方

ここまでのLessonで、あなたはDifyでアプリを作って動かすところまでは体験できているはずです。
次にぶつかりやすい壁が、「動くけど、出力がイマイチ安定しない」「狙った形で返ってこない」「人によって結果がバラつく」といった“品質”の部分です。
Difyで生成AIアプリを実務で使える形に近づけるうえで、いちばんコスパ良く効くのがプロンプト改善です。
コードが書けなくても、プロンプトを設計できるだけで、アプリの完成度は一段上がります。
この記事では、Difyでそのまま使える「良いプロンプトの考え方」と「書き方の型」を、実践寄りにまとめます。
特に、あとから直しやすく、チーム共有もしやすい“マークダウン方式に近い書き方”を軸に進めていきます。
Lesson1:Dify入門|環境構築と最初の生成AIアプリ開発
Lesson2:まずは体験|基本的なアプリを作ろう
・Lesson2-1:テキストジェネレーターアプリの基本
・Lesson2-2:エージェントアプリの基本
・Lesson2-3:チャットフローアプリの基本
・Lesson2-4:ワークフローアプリの基本
・Lesson2-5:5つのアプリタイプの特徴と違いまとめ
・Lesson2-6:良いプロンプトの書き方 ◁今回はここ
Lesson3:文章業務を自動化するアプリを開発しよう
Lesson4:ファイル処理で広がるDifyアプリ開発
Lesson5:RAG実践|ナレッジ検索アプリを作ろう
Lesson6:機能拡張と外部システム連携|ツールを使いこなそう
Lesson7:総仕上げ|実践投入への準備
Difyで出力がブレる理由:プロンプトが品質を決める
Difyでは、プロンプトが単なる「お願い文」ではなく、アプリの挙動そのものを決める“仕様”になります。
ここで大事なのは、生成AIが“空気を読む”のが得意に見えて、実は「書かれていないこと」はかなり自由に補完してしまう点です。
プロンプトが曖昧だと、モデルは親切に頑張った結果として、こちらの意図からズレることがあります。逆に言うと、プロンプトを少し整えるだけで、出力のブレや手戻りが大きく減ります。
特にDifyではアプリとして運用されるので、「一度うまくいったプロンプト」ではなく、「誰が使ってもそこそこ同じ品質になるプロンプト」が価値になります。
言い換えると、プロンプトは “あなたが気持ちよく使える文章” ではなく、“他人が雑に入力しても破綻しにくい設計” に寄せるほど強くなります。
このあとからは、そのための具体的な型(原則)を整理して、Difyでそのまま貼れる形に落とし込んでいきます。
Dify向けプロンプト設計:出力を安定させる5原則
ここからは、Difyでアプリを作るときに効きやすい「プロンプトの型」を5つに分けて紹介します。
全部を完璧に盛り込む必要はありませんが、迷ったらこの順番で見直すと、出力が一気に安定しやすくなります。
- ゴールを1文で固定する(何をしてほしいか)
- 役割(ロール)で判断基準を与える(誰として答えるか)
- 出力形式(項目名・順番まで)を固定する(箇条書き/表/JSONなど)
- 制約・禁止事項で“盛り”を防ぐ
- 例(Few-shot)で粒度と語調を揃える
原則1:ゴールを1文で固定する(何をしてほしいか)
まず最初に決めたいのは、「このアプリは何をしてくれるものか」を1文で言える状態にすることです。
ゴールが揺れると、モデルはそれっぽく頑張ってくれる分、出力が散らかりやすくなります。
ここでのコツは、ゴールを「目的+対象+成功条件」くらいまで絞ることです。
たとえば要約なら「要点だけを残す」のか「意思決定に必要な情報だけ残す」のかで、結果は変わります。
例としては、次のような書き方が扱いやすいです。
あなたのゴール:ユーザーの文章を、上司への報告に使える“要点3つ”に要約する。
「要点3つ」まで書いておくと、出力が長くなったり短くなったりするブレが減ります。
原則2:役割(ロール)で判断基準を与える(誰として答えるか)
次に効くのがロール指定です。これは“キャラ付け”というより、判断基準を与えるイメージです。
たとえば「広報担当」と「法務担当」では、同じ文章でも気にするポイントが違いますよね。ロールは、その違いをモデルに持たせるために使います。
Difyアプリでよく使うロールは、次の2タイプに分けると設計しやすいです。
- 業務ロール(例:カスタマーサポート、採用担当、営業、PM)
- 専門性ロール(例:文章校正者、要約の専門家、議事録の整理係)
ロールは長々と書く必要はありません。「誰として」「何を優先して」くらいまで指定できれば十分です。
# 役割 あなたはカスタマーサポート担当です。ユーザーの不安を減らし、次に取るべき行動が分かる回答を作ってください。
原則3:出力形式(項目名・順番まで)を固定する(箇条書き/表/JSONなど)
出力形式の指定は、実務での“使いやすさ”に直結します。
Difyでアプリ化するなら、なおさら形式が安定しているほど後工程(コピペ、共有、チェック)が楽になります。
形式指定は「何で返すか」だけでなく、「順番」「見出し」「項目名」まで固定すると強いです。
たとえば、文章要約でも次のように枠を作ってしまうと、読む側のストレスが減ります。
# 出力形式 出力は次の形式で返してください。 - 要点:3つ(各1文) - 次のアクション:最大2つ - 不明点:最大2つ(不足情報があれば)
このように“枠”を先に提示すると、モデルはその枠に沿って埋めようとするため、結果が整いやすくなります。
原則4:制約・禁止事項で“盛り”を防ぐ
形式を決めても、余計な説明が増えたり断定しすぎたり、逆に慎重すぎたりすることがあります。
そこで効くのが制約と禁止事項です。
Difyで運用すると、入力の揺れが必ず起きるので、事故を防ぐガードレールとして入れておくと安心です。
制約は「短く・具体的に」が基本です。よく使うのは次のようなものです。
- 文字数や行数の上限(例:各項目は最大80文字)
- トーン(例:丁寧語、結論から、やわらかめ)
- 禁止(例:推測で断定しない/社外秘っぽい情報は書かない)
- 前提(例:与えられた情報のみで回答し、不足は質問として返す)
# 制約 - 不明な点は推測で補完せず、「不明点」として列挙する - 専門用語はできるだけ避け、必要なら一言で補足する
制約を入れると“賢く盛る”挙動が減り、業務に耐える出力になりやすいです。
原則5:例(Few-shot)で粒度と語調を揃える
最後に、出力がどうしても安定しないときの切り札が「例」です。
これは、モデルにとっての“正解の見本”を置く方法で、特に「形式を守らない」「語調がブレる」「要点の粒度が合わない」ときに効きます。
例はたくさん入れる必要はなく、まずは1つでOKです。
ポイントは「入力例」と「理想の出力例」をセットにして、距離感(どのくらい短くまとめるか、どんな言葉を使うか)を見せることです。
# 入力の例 先週の打ち合わせでA案とB案を比較し、コストはA案が有利だが納期はB案が早いという話になった。最終的に顧客は納期優先の傾向… # 出力の例 要点: - 顧客は納期優先の傾向がある - コストはA案が有利、納期はB案が有利 - 次回は納期条件を前提に提案を詰める必要がある 次のアクション: - 納期条件でB案の見積もりを再作成 不明点: - 顧客の許容コスト上限
この「例」があるだけで、同じアプリを別の人が使っても、出力の雰囲気が揃いやすくなります。
マークダウン方式が強い理由:読み取りと改善が速くなる
ここまでの5原則は、要するに「指示を整理するための観点」です。
これをプロンプトに落とし込むときにおすすめなのが、文章を“区切って書く”方法です。
具体的には、世の中で広く使われている Markdown(マークダウン)という書き方を、そのままプロンプトの整理に使います。
Markdownは、Web記事や技術メモなどでよく使われる定番の記法で、「見出し」「箇条書き」「コード表示」などを、記号だけでシンプルに書けるのが特徴です。
たとえば、「#」はその行が見出しであることを意味し、「-」は箇条書きを表現するときに使われます。
ここで大事なのは、Markdownのルールを暗記することではありません。
プロンプトを「役割」「ゴール」「制約」「出力形式」みたいに見出しで区切っておくと、モデルが読み取りやすくなり、出力が安定しやすくなる――それが目的です。
さらに、どこを直せば改善するかが分かりやすくなるので、Difyで運用しながら育てるときにも相性がいいです。

「#」は大見出し
「##」は中見出し
「###」は小見出し
これをうまく使えばLLMに指示の階層構造を伝えやすくなるね。
コピペ用:Markdown式プロンプトテンプレ
テンプレの狙いは、「プロンプトを仕様書のように扱える形にする」ことです。
最初はこのくらいシンプルで十分ですし、これだけでも出力の揺れが減りやすいです。
以下は、Difyのプロンプト欄にそのまま貼って使える“ひな形”です(見出しは本当に雰囲気でOKです)。
# 役割
あなたは(役割)です。
# ゴール
あなたのゴール:(このアプリがやることを1文で)
# 入力(コンテキスト)
ユーザーの入力:
{{user_input}}
# 制約
- (制約1)
- (制約2)
- (禁止事項など)
# 出力形式
(この形で出力する。項目名や順番も固定する)
# 例(必要なら)
## 入力の例
(入力例)
## 出力の例
(理想の出力例)この形にしておくと、「出力が長いな」と思ったら 制約 を触ればいいし、「形式が崩れるな」と思ったら 出力形式 を見直せばいい、というように改善の当たりが付けやすくなります。
Difyでの実装ポイント(どこに何を書くか)
Difyでは、プロンプトが “毎回同じ条件で実行される設計” になっているかが重要です。
そこで、マークダウン方式のテンプレを使うときは、「固定で書く部分」と「ユーザーが変化させる部分」をきっちり分けるのがコツになります。
まず、固定で書く部分(役割 / ゴール / 制約 / 出力形式)は、基本的に毎回変えません。ここがブレると、同じアプリでも結果が安定しません。
逆に、変化させる部分は コンテキスト に寄せます。Difyなら、ユーザー入力を変数として受け取れるので、プロンプト内に安全に差し込めます。
たとえば、ユーザー入力を入れる位置は「コンテキスト」などにまとめるのが扱いやすいです。
理由はシンプルで、入力がどれだけ長くても、モデルが“これは素材だ”と理解しやすいからです。ゴール や 制約 の途中に混ぜると、入力の影響で指示の優先順位が揺れやすくなります。
また、出力形式を守らせたいときは、出力形式 をできるだけ具体的にします。
「箇条書きで」とだけ書くより、「項目名」「順番」「行数」まで指定した方が崩れにくいです。
Difyでアプリとして使うなら、この“型の固定”がそのまま使い勝手になります。
まとめ:5原則+Markdownテンプレで出力を安定化
Difyで生成AIアプリを「動く」だけで終わらせず、実務で使える品質に近づけるには、プロンプトの設計がいちばん効きます。
特に意識したいのは、次の2点です。
- 良いプロンプトはセンスではなく「設計」。ゴールを固定し、役割を与え、出力形式と制約でブレを抑える。これだけで同じアプリでも安定感が大きく変わる。
- マークダウンのように見出しで区切って書く。役割・ゴール・入力・制約・出力形式を分けておくと、モデルが読み取りやすくなるだけでなく、あとから改善するときに“どこを直すか”がすぐ分かる。
この先のLessonでは、文章業務の自動化やRAGなど、扱う情報が増えていきます。
だからこそ今の段階で、プロンプトを「区切って整理して書く」クセを付けておくと、後半で効いてきます。


