【Dify】Lesson4-4:JSON体験|続き文章案作成アプリを作ろう

ながみえ

1つ前の記事で、JSONの基本と「構造化出力(決まった形で出力させる)」の考え方を学びました。

今回は実際にJSONを使って、文章の続きを複数パターンで提案してくれる「続き作文トレーナーアプリ」を作りましょう。

ユーザーが入力した文章に対して、文体を崩さず自然な “続き” を3案生成し、さらにその中身をJSONとして受け取って後工程で扱うところまでを体験します。

単にLLMを使うだけでなく、JSONを “部品として使う” 感覚を、この記事で身につけましょう。

Lesson1:Dify入門|環境構築と最初の生成AIアプリ開発
Lesson2:まずは体験|基本的なアプリを作ろう
Lesson3:文章業務を自動化するアプリを開発しよう
Lesson4:ファイル処理で広がるDifyアプリ開発
 ・Lesson4-1:PDF資料要約アプリ|ワークフローツール入門
 ・Lesson4-2:資料のミスチェックアプリを作ろう|会話変数と変数代入ノード
 ・Lesson4-3:JSON入門|構造化出力の仕組みを理解しよう
 ・Lesson4-4:JSON体験|続き文章案作成アプリを作ろう ◁今回はここ
Lesson5:RAG実践|ナレッジ検索アプリを作ろう
Lesson6:機能拡張と外部システム連携|ツールを使いこなそう
Lesson7:総仕上げ|実践投入への準備

<<前のページ

Difyの記事一覧

次のページ>>

完成イメージ:入力・出力と「JSONを確認する」ポイント

このアプリは「今ある文章を入力すると、自然な続き文を3パターン提案してくれる」シンプルな文章支援ツールになります。

さらに今回は学習用として、生成された内容をそのまま文章として見せるだけでなく、裏側で使われているJSONも一緒に確認できるようにします。

アプリの入力画面:続きの文章を生成する準備

画面上では、次の3つを入力して実行します。

  • 現在の文章(必須):ここまで書いた文章を貼り付けます
  • 続きの文章で伝えたいこと(任意):「この先で触れたい要点」があるときだけ書きます
  • 文章の長さ(必須):長さの目安を数値で指定します(アプリ内ではこの値を元にLLMへ指示します)

出力内容:続き文3案+生成JSON(学習用)

実行すると、元の文章の文体や語調をなるべく保ったまま、続きの文章案が3つ出てきます。

加えて、3案がどのようなJSONで返ってきたのかも表示されるので、「JSONが分解されて画面に整形される流れ」を目で追えるのがポイントです。

実装手順|続き文章案作成アプリを作ろう

今回作成する続き文章案作成アプリの全体構成は次の通りです。

手順1:各ノード配置

Difyの開発画面から「最初から作成」を選択。アプリタイプは「ワークフロー」、アプリ名は「続き作文トレーナー」としましょう。

開始ノードは「ユーザー入力」を選択します。

開発画面が表示されたら、まずは全てのノードの先に配置してしまいましょう。

[ユーザー入力] → [LLM] → [コード実行] → [テンプレート] → [出力]

手順2:ユーザー入力ノード設定(3変数の作成)

ユーザー入力ノードでは3つの変数を設定しましょう。

  • original_text:現在の文章(既に書いた文章)を格納
  • key_message:続きの文章を書くポイントを格納
  • length_preference:続きの文章の文字数を格納
  • フィールドタイプ:段落
  • 変数名:original_text
  • ラベル名:現在の文章
  • 必須チェック:チェックあり
  • フィールドタイプ:段落
  • 変数名:key_message
  • ラベル名:続きの文章で伝えたいこと
  • 必須チェック:チェックなし
  • フィールドタイプ:数値
  • 変数名:length_preference
  • ラベル名:文章の長さ
  • 必須チェック:チェックあり

手順3:LLMノード設定(JSON出力の指示

今回のプロンプトのポイントは出力をJSON形式にすることです。

DifyにはJSONを出力する専用の方法もありますが、少し難しくなるので今回はLLMに「JSON形式で出力して」と命令する方式をとります。

以下のようにプロンプトを書き込んでください。

Q
プロンプト
# 役割
あなたは文章生成の専門家です。入力された文章に続く文を、3つのパターンで作成してください。
出力は指定のJSON形式に統一してください。

#  制約条件
- 元文の文体・語調を維持し、違和感のない自然な続きにすること
- 文章の長さは ☆☆☆ 変数length_preference ☆☆☆ とする
- 必ず下記のJSON形式で出力すること

# 続く文の中で特に伝えたいこと
☆☆☆ 変数key_message ☆☆☆

# 元の文章
☆☆☆ 変数original_text ☆☆☆

# 出力ルール(最重要)
- 出力は「JSON1行のみ」。前置き/解説/Markdown/コードフェンス(```)は禁止。
- 形式は必ず次のオブジェクト:{"text1":"...","text2":"...","text3":"..."}
- キーは text1,text2,text3 の3つだけ。順番も固定。
- 値はすべて文字列。
- 値の中でダブルクォート " は使わない(必要なら「」に置き換える)。
- 出力前に、{} と "" と , の数が崩れていないか自己チェックしてから出力する。
勉強猫
勉強猫

いつも通り、プロンプト内の変数だけはコピペじゃなく自分で指定してね。

このLLMにより続きの文章案が3つ、以下のJSON形式で出力されます。

{
  "text1": "続きの文章案1",
  "text2": "続きの文章案2",
  "text3": "続きの文章案3"
}

例えば、text1というキーには続きの文章案1が格納されます。

この意味が分からない場合は、一つ前の記事に戻って復習しましょう↓↓

あわせて読みたい
【Dify】Lesson4-3:JSON入門|構造化出力の仕組みを理解しよう
【Dify】Lesson4-3:JSON入門|構造化出力の仕組みを理解しよう

手順4:コード実行ノードでJSONをパース

設定したLLMからJSONオブジェクトが出力される…と言いたいところですが、残念ながらそうではありません。

このLLMから出力されるのは、JSON形式で書かれたテキスト(ただの文章)です。これをJSONオブジェクトに変換する必要があります。

JSON Schema等の高度な設定をすればLLMから直接JSONを出力することも可能ですが、それはLesson8で学習するとして、今回は コード実行ノード でテキストをJSONオブジェクトに変換します。

コード実行ノードは、文字通りPythonやJavaScriptなどのプログラミングコードを書き込むためのノードです。

これを使いこなせばかなり高度なアプリも作れますが、本カリキュラムはプログラミングを理解しなくても進めるように構成しています。

よく使うコードをパターン化し、「この作業をするときはこのコードをコピペする」と暗記してしまいましょう。

今回は、「LLMから1行のJSONコード(テキスト)を出力し、それをJSONオブジェクトに変換するときに使うコード」を紹介します。

  • 入力変数にLLMの出力変数(今回はJSONで出力される)を指定
  • コードを書く欄に以下のコードをコピペ
def main(arg1: str) -> dict:
    import json
    return {"result": json.loads(arg1)}
勉強猫
勉強猫

コード全体は覚えなくていいけど、覚えるべきことも1つある。

この例では入力変数がarg1となっていて、コード内にも「arg1」という単語が2ヵ所出てくるね。

これは同じものを指しているから、もし変数名を変えるならそれに合わせてコードの変数部分も変える必要があるよ。

手順5:テンプレートで見やすく整形

受け取ったJSONをどのように出力するかを設定しましょう。

出力は、最初に元の文章、続いて3つの案(ここがJSON部分)、最後に学習用として、LLMが生成したJSONテキストをそのまま出力するようにします。

  • 3つの入力変数を設定
  • original_text:ユーザー入力ノードの変数orginal_text
  • appended:コード実行ノードの出力変数result
  • json_raw:LLMの出力変数text

コードは以下のように記入してください。

# 元の文章
{{ original_text }}

# 続きの文章案
### パターン1
{{ appended["text1"] }}

### パターン2
{{ appended["text2"] }}

### パターン3
{{ appended["text3"] }}

### 生成されたJSON(学習用)
{{ json_raw }}
勉強猫
勉強猫

変数名appended["text1"]という書き方も覚えよう!
オブジェクトから特定のキーの値を取り出すときの書き方だよ

手順6:出力ノード設定

最後に、出力ノードを設定しましょう。

  • 出力変数:テンプレートノードの出力変数output

これで続き作文トレーナーアプリは完成です。

アプリを公開し、実際に動かしてみましょう。以下の例文を使用できます。

Q
現在の文章

生成AIが当たり前になった今、「使う」だけでなく「自分の仕事に合わせて組み立てる」力が差になります。その入口としてDifyを学ぶ価値は大きいです。Difyはノーコード/ローコードで、入力の受け取り、前処理、LLMへの指示、出力整形、ログ確認までをワークフローとして可視化できます。APIやPythonに不慣れでも、会話変数や変数代入、テンプレート、コード実行などのノードをつなぐだけで、実務に近いプロトタイプを短時間で作れます。さらにナレッジベースを追加すれば、社内FAQやマニュアル検索のようなRAGも同じ考え方で拡張できます。モデルを切り替えたり、出力をJSONで固定して後段で検証したりと、品質と再現性を高める工夫も入れやすいのが特徴です。小さく作って試し、改善点をログで確認して直す——この反復を回せるようになると、生成AIを「便利な道具」から「安定して使える仕組み」へ進化させられます。チームで共有しやすい形に落とし込める点も、学習投資として魅力です。学習を通じて「プロンプトだけでは足りない部分」を、構造化や処理の分岐で補う感覚が身につくのが、現代における一番の収穫です。

Q
続きの文章で伝えたいこと A

要点を1つに絞って分かりやすく説明し、読み手が「なるほど」と思える具体例を1つ入れてください。

Q
続きの文章で伝えたいこと B

「Difyを学ぶと何ができるようになるのか」を、初心者向けに具体例(社内FAQ、資料チェック、文章支援など)で説明してください。

Q
続きの文章で伝えたいこと C

空欄。

「key_messageの入力は必須ではない」と設定したため、空欄でも問題ありません。どのように出力されるか試してみましょう。

まとめ

今回は、続き文章を複数案で提案するアプリを題材に、DifyでJSONを「出力して終わり」にせず、後工程で使える形に整える流れを体験しました。

ポイントは、LLMの出力をJSONとして受け取り、コード実行ノードでパースしてからテンプレートで見やすく整形することです。

これができるようになると、文章生成だけでなく「AIの返答をデータとして扱う」アプリが一気に作りやすくなります。

次のLessonでは、この考え方をさらに発展させて、外部データの参照や処理(RAGや連携)につなげていきます。

今回作ったアプリも、たとえば「社内文書の続き提案」「返信文の案出し」などに応用できるので、ぜひ自分の業務に合わせて改造してみてください。

Q
記事改善アンケート|ご意見をお聞かせください(1分で終わります)

本サイトでは、みなさまの学習をよりサポートできるサービスを目指しております。
そのため、みなさまの意見をアンケート形式でお伺いしています。

1分だけ、ご協力いただけますと幸いです。

(※)APIキーや個人情報等は入力しないようお願いします。

【Dify】記事改善アンケート
4.改善してほしい点(任意・複数選択)

<<前のページ

Difyの記事一覧

次のページ>>

記事URLをコピーしました