DifyはLLMツールチェーンプラットフォームとして、JSON形式での出力機能をサポートしています。この機能により、LLMから返されるデータの形式が利用しやすく、安定し、予測可能になります。エラー処理やフォーマット変換の手間を削減できます。

利点

  • データ形式の整合性確保: LLMがコンテンツを生成する場合でも、事前に設定された形式に準拠し、データの不整合を防ぎます。

  • 後続処理の簡素化: データベース、APIまたはフロントエンドは、追加のデータクレンジングなしでJSONスキーマを直接解析できます。

  • ローコード開発の効率化: 開発者は複雑なデータ検証ロジックを手書きする必要がなく、JSONスキーマを使用して出力を制限できます。

JSON形式での出力の実装方法

Difyの操作画面では、次の2つの方法でJSON形式での出力を実装できます。

  • 方法1: ツール設定を直接行う

  • 方法2: LLMノードのJSONスキーマエディタを使用する

方法1: ツール設定を直接行う

Tool(ツール) > データ構造 > 出力変数の定義を参照してください。

方法2: LLMノードのJSONスキーマエディタを使用する

LLM > 高級機能 > 構造化出力LLM > 活用事例 > 構造化出力を参照してください。

例外処理

例外状況

JSONスキーマエディタを使用して構造化出力を行う際に、以下の制限や例外状況が発生する可能性があります。

  • モデルの能力制限: 一部のLLM(特に70B以下のモデル、またはGPT-3.5Turbo相当のモデル)は、指示への追従性が低いため、JSONスキーマの解析に失敗する可能性があります。

  • 形式の互換性: 一部のLLMはJSONモードのみをサポートし、JSONスキーマをサポートしていないため、厳密なスキーマ解析に失敗する可能性があります。

  • エラーメッセージ: Failed to parse structured output: output is not a valid json strというエラーが発生します。この種のエラーは、主にモデルがJSONの生成に失敗したことが原因です。

推奨される対処方法

  1. JSONスキーマをサポートするモデルを優先的に使用する: 推奨リストは以下のとおりです。

    • Gemini2.0Flash/Flash-Lite
    • Gemini1.5Flash8B(0827/0924)
    • Gemini-1.5pro
    • GPT-4o
    • GPT-4o-mini
    • o1-mini/o3-miniシリーズ
  2. システムプロンプトを適切に調整する: 指示への追従性を高め、LLMの出力がスキーマ規範に準拠するように、システムプロンプトを調整してください。例えば、JSONスキーマが数式の構造化を目的としているのに、法律条文の解析を指示すると、モデルがタスクを正しく理解できず、出力の精度が低下する可能性があります。

  3. 例外処理ポリシーを設定する: 解析に失敗した場合、以下の対策を検討できます。

    1. 再試行設定: ノード内で再試行設定を有効にし、最大再試行回数と再試行間隔を設定して、解析エラーの影響を軽減します。

    2. エラー時の処理を設定する: ノード内の例外処理エラー時の処理を設定します。ノードで例外が発生すると、エラー時の処理が自動的に実行されます。

エラー処理を参照してください。