Difyで全てのモデルで"確実"に任意のJSON形式で出力する方法 (Structured Output) ※v1.3.0以降のみ

に公開

はじめに

前回、下記記事でdifyでOpenAIの一部モデルで、Structured Outputを利用して、
事前に定義されたJson形式を保証する機能があることを解説しました。

https://zenn.dev/articles/6722b5d55e4fa6/edit

もちろん、「OpenAIの一部モデル」に限定された機能になるので、geminiやclaudeなどの他モデルを使用する場合は、プロンプト上でJson形式を指定する必要があり、指定したとしても前後に「```」という不要な文字列が入っている場合や、キー情報が欠落する可能性があり、後続のPythonコードなどの処理でJsonデータであることを100%補償したり、整形する必要がありました。

2025年4月23日のv1.3.0へのアップデートにより、他のモデルでもStructured Outputと同等の機能を扱えるようになりました。

v1.3.0で様々なリリース情報がありますが、本記事ではリリースされたStructured Outputについて紹介された下記動画の内容を実際に触ってみて、日本語で簡単に解説した記事になります。
https://www.youtube.com/watch?v=u8NQFxrsaW0

動画やドキュメントを見ずに、さらっと本機能について確認したい方は、本記事内容を引き続きご覧ください。
詳細を知りたい方は、上記の動画や公式のドキュメントをご確認ください。

機能紹介

ここから実際の設定方法についてざっくり解説します
公式のドキュメントは下記の「JSON Schema Editor」です。
https://docs.dify.ai/en/guides/workflow/node/llm#json-schema-editor

設定箇所

LLMノードに移動すると、出力変数の中に「Structured_Output」スイッチが追加されているのがわかります。この出力変数で切り替えをオンにすると、「設定」が表示され、こちらから出力するデータの形式を設定することができます。

項目の説明

公式のドキュメントにも記載がありますが、一応記載します。

フィールド名:出力したいjsonのキー
タイプ:文字列、数値、オブジェクト、配列などから選択できます
説明を入力:LLMがフィールドの意味を理解するのに役立つようです
必須:ONにすると必ず出力されます
(オブジェクト型および配列型のフィールドには子フィールドを含めることができます)
Enum:可能な値を制限します。例えば、赤、緑、青のみを許可する場合は次のように指定します

ビジュアルエディタの場合

例えば、messageを文字列で必須、urlを文字列で任意項目で出力したい場合は下記になります。
また、messageの出力文字のパターンを「red,green,blue」に制限しています。

Jsonエディタの場合

ビジュアルエディタで編集した内容をそのままタブ切り替えするとこんな状態

JSONインポート

上記スクショの左上の「JSONインポート」からは、既存のJSONデータから設定を反映させることもできるようです。
公式ドキュメントのままですが、下記のように貼り付けて「送信」を押下すると

下記のように反映されます。普通に便利ですね。

AIで生成

あとは、AIで生成もできるようです。
これも公式ドキュメントのままですが、下記のように貼り付けて「生成」を押下すると

自動で生成されました。

「適用」ボタンを押下すれば内容が反映されます。

最後に

既にv1.3.1のリリースもされており、これからもどんどん便利になりそうですね。

もし、誤った記述があればご指摘いただけますと幸いです。

Accenture Japan (有志)

Discussion