Dify
日本語
日本語
  • 入門
    • Difyへようこそ
      • 特性と技術仕様
      • モデルプロバイダーリスト
    • クラウドサービス
    • コミュニティ版
      • Docker Compose デプロイ
      • ローカルソースコードで起動
      • aaPanelでのデプロイ方法
      • フロントエンドDockerコンテナを単独起動
      • 環境変数の説明
      • よくある質問
    • Dify Premium
    • Dify 教育版
  • マニュアル
    • モデル
      • 新しいプロバイダーの追加
      • 事前定義されたモデルの追加
      • カスタムモデルの追加
      • インタフェース
      • 配置ルール
      • 負荷分散
    • アプリ・オーケストレーション
      • アプリの作成
      • チャットボット
        • 複数モデルのデバッグ
      • エージェント
      • ツールキット
        • コンテンツモデレーション
    • ワークフロー
      • キーコンセプト
      • 変数
      • ノードの説明
        • 開始
        • 終了
        • 回答
        • LLM
        • 知識検索
        • 質問分類
        • 条件分岐
        • コード実行
        • テンプレート
        • テキスト抽出ツール
        • リスト処理
        • 変数集約
        • 変数代入
        • 反復処理(イテレーション)
        • パラメータ抽出
        • HTTPリクエスト
        • エージェント
        • ツール
        • 繰り返し処理(ループ)
      • ショートカットキー
      • オーケストレートノード
      • ファイルアップロード
      • エラー処理
        • 事前定義されたエラー処理ロジック
        • エラータイプの概要
      • 追加機能
      • プレビューとデバッグ
        • プレビューと実行
        • ステップ実行
        • 対話/実行ログ
        • チェックリスト
        • 実行履歴
      • アプリケーション公開
      • JSON形式での出力
      • 変更通知:画像アップロード機能がファイルアップロード機能に統合されました
    • ナレッジベース
      • ナレッジベース作成
        • 1. オンラインデータソースの活用
          • 1.1 Notion からデータをインポート
          • 1.2 Webサイトからデータをインポート
        • 2. チャンクモードの指定
        • 3. インデックス方式と検索オプションの設定
      • ナレッジベースの管理
        • ナレッジベース内ドキュメントの管理
        • APIを活用したナレッジベースのメンテナンス
      • メタデータ
      • アプリ内でのナレッジベース統合
      • リコールテスト/引用帰属
      • ナレッジベースの要求頻度制限
      • 外部ナレッジベースとの接続
      • 外部ナレッジベースAPI
    • ツール
      • クイック統合ツール
      • 高度統合ツール
      • ツールの設定
        • Google
        • Bing
        • SearchApi
        • StableDiffusion
        • Perplexity Search
        • AlphaVantage 株式分析
        • Dall-e
        • Youtube
        • Serper
        • SearXNG
        • SiliconFlow(Flux AI サポート)
        • ComfyUI
    • アプリ公開
      • シングルページWebアプリとして公開
        • Web アプリの設定
        • テキスト生成アプリ
        • 対話型アプリ
      • Webサイトへの埋め込み
      • API基づく開発
      • フロントエンドテンプレートに基づいた再開発
    • アノテーション
      • ログとアノテーション
      • アノテーション返信
    • モニタリング
      • データ分析
      • 外部Opsツール統合
        • LangSmithを統合
        • LangFuseを統合
        • Opikを統合
    • 拡張
      • API 拡張
        • Cloudflare Workers を使用した API ツールのデプロイ
        • コンテンツモデレーション
      • コード拡張
        • 外部データツール
        • コンテンツモデレーション
    • コラボレーション
      • 発見
      • メンバーの招待と管理
    • 管理
      • アプリの管理
      • チームメンバーの管理
      • 個人アカウントの管理
      • サブスクリプション管理
      • バージョン管理
  • ハンドオン工房
    • 初級編
      • ゼロからAI画像生成アプリの構築方法
      • AIエージェントの実践:個人のオンライン旅行アシスタントの構築方法
    • 中級編
      • チャットストリームエージェントを使用した Twitter アカウントの分析方法
      • ファイルアップロードを使用した記事理解アシスタントの構築方法
  • コミュニティ
    • サポートの求め
    • 貢献者ガイド
    • ドキュメントへの貢献
  • プラグイン
    • 機能紹介
    • クイックスタート
      • プラグインのインストールと活用
      • プラグイン開発の入門
        • 開発環境のセットアップ
        • ツール型プラグイン
        • モデル型プラグイン
          • モデルプロバイダーの構築
          • 定義済みモデルの組み込み
          • カスタムモデルの組み込み
        • エージェント戦略プラグイン
        • 拡張機能型プラグイン
        • バンドル
      • プラグインのデバッグ方法
    • プラグイン管理方法
    • スキーマ仕様
      • Manifest(マニフェスト)
      • Endpoint(エンドポイント)
      • Tool(ツール)
      • Agent(エージェント)
      • Model(モデル)
        • モデル設計規則
        • モデルスキーマ
      • 一般的な標準仕様
      • 永続化されたストレージ
      • Difyサービスの逆呼び出し
        • アプリ
        • モデル
        • ツール
        • ノード
    • ベストプラクティス
      • Slack Bot プラグインの開発
      • Dify MCP プラグインガイド:ワンクリックで Zapier に接続してメールを自動送信
    • プラグインの公開
      • プラグインの自動公開
      • Difyマーケットプレイスへの公開
        • プラグイン開発者ガイドライン
        • プラグインのプライバシー保護に関するガイドライン
      • 個人GitHubリポジトリへの公開
      • ローカルでの公開と共有
      • 第三者署名検証のためにプラグインに署名する
    • よくある質問
  • 開発
    • バックエンド
      • DifySandbox
        • 貢献ガイド
    • モデルの統合
      • Hugging Faceのオープンソースモデルを統合
      • Replicateのオープンソースモデルを統合
      • Xinferenceでデプロイしたローカルモデルを統合
      • OpenLLMでデプロイしたローカルモデルを統合
      • LocalAIでデプロイしたローカルモデルを統合
      • Ollamaでデプロイしたローカルモデルを統合
      • LiteLLM Proxyを使用してモデルを統合する
      • GPUStackとの統合によるローカルモデルのデプロイ
      • AWS Bedrock上のモデル(DeepSeek)の接続
    • 移行
      • コミュニティ版を v1.0.0 に移行する
  • もっと読む
    • 活用事例
      • DeepSeek & Dify連携ガイド:多段階推論を活用したAIアプリケーション構築
      • Ollama + DeepSeek + Dify のプライベートデプロイ:あなた自身のAIアシスタントの構築方法
      • あなた専用のQAチャットボットのトレーニング方法
      • コードなしでMidjourney プロンプトボットを作成する方法
      • Notion AI アシスタントを構築する
      • 数分で業務データを持つ公式サイトのAIチャットボットを作成する方法
      • DifyチャットボットをWixサイトに統合する方法
      • AWS Bedrockのナレッジベースに統合する方法
      • Difyで大規模言語モデルの「競技場」を体験する方法:DeepSeek R1 VS o1 を例に
      • Difyスケジューラーの構築
      • DifyクラウドでAI Thesis Slack Botを構築
    • さらに読む
      • LLMOpsとは何ですか?
      • 配列変数とは何ですか?
      • 検索拡張生成(RAG)
        • ハイブリッド検索
        • Rerank
        • リトリーバルモード
      • プロンプトエンジニアリング
      • DifyでJSONスキーマ出力を使用する方法
    • FAQ
      • ローカルデプロイに関するFAQ
      • LLM設定と使用に関するFAQ
      • プラグイン
  • ポリシー
    • オープンソースライセンス
    • ユーザ規約
      • 利用規約
      • プライバシーポリシー
      • 合規性レポートの入手方法
Powered by GitBook
On this page
  • JSON Schema機能をサポートするモデル
  • DifyでのJSON Schemaの有効化
  • JSON Schemaテンプレートの定義
  • 例
  • 1. 思考の連鎖(Chain-of-Thought)
  • UI生成(ルート再帰モード)
  • ヒント
  • 参考資料
  1. もっと読む
  2. さらに読む

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

PreviousプロンプトエンジニアリングNextFAQ

Last updated 8 months ago

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

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

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

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

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

DifyでのJSON Schemaの有効化

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

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

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

JSON Schemaテンプレートの定義

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

{
    "name": "template_schema",
    "description": "JSON Schemaの汎用テンプレート",
    "strict": true,
    "schema": {
        "type": "object",
        "properties": {
            "field1": {
                "type": "string",
                "description": "field1の説明"
            },
            "field2": {
                "type": "number",
                "description": "field2の説明"
            },
            "field3": {
                "type": "array",
                "description": "field3の説明",
                "items": {
                    "type": "string"
                }
            },
            "field4": {
                "type": "object",
                "description": "field4の説明",
                "properties": {
                    "subfield1": {
                        "type": "string",
                        "description": "subfield1の説明"
                    }
                },
                "required": ["subfield1"],
                "additionalProperties": false
            }
        },
        "required": ["field1", "field2", "field3", "field4"],
        "additionalProperties": false
    }
}

段階的な指導:

  1. 基本情報の説明:

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

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

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

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

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

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

  3. フィールドを定義:

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

    • 一般的なタイプ:string、number、boolean、array、object。

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

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

  4. 制約を設定:

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

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

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

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

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

例

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

JSON Schemaの例

{
    "name": "math_reasoning",
    "description": "数学的推論の手順と最終回答を記録します",
    "strict": true,
    "schema": {
        "type": "object",
        "properties": {
            "steps": {
                "type": "array",
                "description": "推論ステップの配列",
                "items": {
                    "type": "object",
                    "properties": {
                        "explanation": {
                            "type": "string",
                            "description": "推論ステップの説明"
                        },
                        "output": {
                            "type": "string",
                            "description": "推論ステップの出力"
                        }
                    },
                    "required": ["explanation", "output"],
                    "additionalProperties": false
                }
            },
            "final_answer": {
                "type": "string",
                "description": "数学問題の最終回答"
            }
        },
        "additionalProperties": false,
        "required": ["steps", "final_answer"]
    }
}

Prompt

あなたは数学の助教です。数学問題が提示された際に、ステップバイステップの解法と最終回答を出力することが目標です。各ステップでは、出力欄に方程式を記入し、説明欄には推論の詳細を記述してください。

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

JSON Schemaの例

{
    "name": "ui",
    "description": "動的に生成されたUI",
    "strict": true,
    "schema": {
        "type": "object",
        "properties": {
            "type": {
                "type": "string",
                "description": "UIコンポーネントのタイプ",
                "enum": ["div", "button", "header", "section", "field", "form"]
            },
            "label": {
                "type": "string",
                "description": "UIコンポーネントのラベル、ボタンやフォームフィールドに使用"
            },
            "children": {
                "type": "array",
                "description": "入れ子のUIコンポーネント",
                "items": {
                    "$ref": "#"
                }
            },
            "attributes": {
                "type": "array",
                "description": "UIコンポーネントのための任意の属性、任意の要素に適しています",
                "items": {
                    "type": "object",
                    "properties": {
                        "name": {
                            "type": "string",
                            "description": "属性の名前、例えばonClickやclassName"
                        },
                        "value": {
                            "type": "string",
                            "description": "属性の値"
                        }
                    },
                    "additionalProperties": false,
                    "required": ["name", "value"]
                }
            }
        },
        "required": ["type", "label", "children", "attributes"],
        "additionalProperties": false
    }
}

Prompt

あなたはUIジェネレータAIです。ユーザー入力をUIに変換してください。

例の出力:

ヒント

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

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

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

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

参考資料

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

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

こちら
AdditionalProperties: false
Introduction to Structured Outputs
Structured Output
Structured Outputs