【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で出力がブレる理由:プロンプトが品質を決める

Difyでは、プロンプトが単なる「お願い文」ではなく、アプリの挙動そのものを決める“仕様”になります。

ここで大事なのは、生成AIが“空気を読む”のが得意に見えて、実は「書かれていないこと」はかなり自由に補完してしまう点です。

プロンプトが曖昧だと、モデルは親切に頑張った結果として、こちらの意図からズレることがあります。逆に言うと、プロンプトを少し整えるだけで、出力のブレや手戻りが大きく減ります。

特にDifyではアプリとして運用されるので、「一度うまくいったプロンプト」ではなく、「誰が使ってもそこそこ同じ品質になるプロンプト」が価値になります。

言い換えると、プロンプトは “あなたが気持ちよく使える文章” ではなく、“他人が雑に入力しても破綻しにくい設計” に寄せるほど強くなります。

このあとからは、そのための具体的な型(原則)を整理して、Difyでそのまま貼れる形に落とし込んでいきます。

Dify向けプロンプト設計:出力を安定させる5原則

ここからは、Difyでアプリを作るときに効きやすい「プロンプトの型」を5つに分けて紹介します。

全部を完璧に盛り込む必要はありませんが、迷ったらこの順番で見直すと、出力が一気に安定しやすくなります。

  1. ゴールを1文で固定する(何をしてほしいか)
  2. 役割(ロール)で判断基準を与える(誰として答えるか)
  3. 出力形式(項目名・順番まで)を固定する(箇条書き/表/JSONなど)
  4. 制約・禁止事項で“盛り”を防ぐ
  5. 例(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など、扱う情報が増えていきます。

だからこそ今の段階で、プロンプトを「区切って整理して書く」クセを付けておくと、後半で効いてきます。

<<前のページ

Difyの記事一覧

次のページ>>

記事URLをコピーしました