DifyでJSONスキーマ出力を使用する方法

JSON Schemaは、JSONデータ構造を記述するための仕様です。開発者は、LLMの出力が定義されたデータやコンテンツに厳密に適合するように、JSON Schema構造を定義することができます。これにより、明確で分かりやすいドキュメントやコード構造を生成することが可能となります。

JSON Schema機能をサポートするモデル

  • gpt-4o-mini-2024-07-18 及びそれ以降

  • gpt-4o-2024-08-06 及びそれ以降

OpenAIシリーズモデルの構造化された出力機能について詳しくは、Structured Outputsをご覧ください。

DifyでのJSON Schemaの有効化

アプリケーション内のLLMを、上記で言及したJSON Schema出力をサポートするモデルのいずれかに切り替えます。次に、設定フォームでJSON Schemaを有効にし、JSON Schemaテンプレートを入力します。同時に、response_format列を有効にし、json_schema形式に切り替えます。

LLMによって生成されたコンテンツは、次の形式で出力をサポートします:

  • テキスト: テキスト形式で出力

JSON Schemaテンプレートの定義

以下のJSON Schema形式を参考にして、テンプレートコンテンツを定義できます:

段階的な指導:

  1. 基本情報の説明:

    • nameを設定:スキーマの記述に適した名前を選びます。

    • descriptionを追加:スキーマの目的を簡潔に説明します。

    • strictをtrueに設定して厳密モードを確保します。

  2. schemaオブジェクトを作成:

    • type: "object"を設定して、ルートレベルをオブジェクト型として指定します。

    • すべてのフィールドを定義するためにpropertiesオブジェクトを追加します。

  3. フィールドを定義:

    • 各フィールドに対してtypedescriptionを含むオブジェクトを作成します。

    • 一般的なタイプ:stringnumberbooleanarrayobject

    • 配列の場合はitemsを使用して要素のタイプを定義します。

    • オブジェクトの場合は、propertiesを再帰的に定義します。

  4. 制約を設定:

    • 各レベルでrequired配列を追加し、すべての必須フィールドをリストアップします。

    • 各オブジェクトレベルでadditionalProperties: falseを設定します。

  5. 特殊なフィールドの取り扱い:

    • オプションの値を制限するためにenumを使用します。

    • 再帰構造を実装するために$refを使用します。

1. 思考の連鎖(Chain-of-Thought)

JSON Schemaの例

Prompt

UI生成(ルート再帰モード)

JSON Schemaの例

Prompt

例の出力:

ヒント

  • アプリのプロンプトに、ユーザー入力が有効な応答を生成しない状況の処理方法に関する指示が含まれていることを確認してください。

  • モデルは常に指定されたパターンに従おうとするため、入力が指定されたパターンとまったく無関係である場合、LLM が幻覚を引き起こす可能性があります。

  • LLM が入力がタスクと互換性がないことを検出した場合、プロンプトに言語を含めて、空のパラメーターまたは特定の文が返されるように指定できます。

  • すべてのフィールドはrequiredである必要があります。詳細については、こちら を参照してください。

  • AdditionalProperties: false は常にオブジェクトに設定する必要があります

  • スキーマのルートレベルのオブジェクトはオブジェクトである必要があります

参考資料

Last updated