JSONArrayの基本概念
JSON配列
は、複数のJSONオブジェクトを格納するための配列構造です。各要素は、JSONオブジェクト、配列、または基本データ型(文字列、数値など)になります。配列内の ダイファイ の中で JSON配列
主にJSONデータの解析と生成を行う。
Dify がサポートするすべての配列構造: 文字列、数値、ブール値、整数、対象配列、列挙型、anyOf
グァンシー
- JSONスキーマ JSONスキーマは、JSONデータ形式を記述し、検証するための仕様である。JSONスキーマ自体もJSONオブジェクトであり、特定のキーワードを使用してデータの構成と制約を記述します。
- JSON配列 JSONArrayは、値の順序付きリストを表すJSONデータの構造体です。このリストには、複数のJSONオブジェクト、配列、または基本的なデータ型を含めることができます。
[]
包み込まれる。
検証と説明JSON スキーマは、JSONArray を含む JSON データの検証に使用できます。たとえば、JSONスキーマのフィールドを配列型として定義し、その配列の各要素が特定の形式のJSONオブジェクトでなければならないことを指定できます。この方法によって、JSONArray内の各要素が、データ処理時に期待される構造と型に適合することが保証されます。
典型例次のようなJSONデータがあるとする:
{ "users": [ {"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}, {"users": [ name": "Bob", "age": 25}, { "users": [ "name": "Bob", "age": 25}, { "users": [ "name": "Bob", "age": 25 ] }
Difyで構造化されたJSONデータを定義する必要がある場合、JSONスキーマを使って記述することができます。 JSON配列
構造を持つ。対応するJSONスキーマは以下の通り:
{ 「タイプ": "オブジェクト", "プロパティ": {。 "プロパティ": { "users": { "タイプ": "配列", "アイテム": { "items": { 「プロパティ": { "名前": { "タイプ": "文字列" }, "年齢": { "タイプ": "整数" }, "プロパティ": { 「年齢": { "タイプ": "整数" }。 }, "required": ["name": ["name": "string" }, "age": { "type": "integer" } ]。 "必須": ["名前", "年齢"]。 } } }, "required": ["名前", "年齢"] } "required": ["名前", "年齢 "必須": ["ユーザー"] }
この例では、JSONスキーマは明示的に ユーザー
フィールドはJSONArrayであり、その中の各オブジェクトには 名称
歌で応える 年齢
属性。
そこで疑問が戻る:で何が起きているのか、どうやって調べるんだ? ダイファイ LLMでJSONスキーマを使い、LLMの出力を構造化されたフォーマットに従わせる。
DifyでJSONスキーマ機能をサポートするモデル
o1-2024-12-17
その後gpt-4o-mini-2024-07-18
その後GTP-4O-2024-08-06
その後
OpenAIモデルファミリーの構造化出力機能の詳細については、以下を参照してください。 構造化出力.
注: json_schemaも関数呼び出しも、構造化データを生成することができる。json_schemaは、コンテンツのデータを構造化するためだけに使われる。関数呼び出しは、データ、ツール、関数を呼び出したり、答えを生成したりする場合に便利である。
全文: Dify ToolsでJSONスキーマ構造化出力を設定する
以下の使用パスは、LLMの構造化出力を指定します:
- LLMをシステム内のツール、関数、データなどに接続する。
strict: true
Structured-outputs機能をオンにすると、LLMが関数呼び出しに対して生成するパラメータが、関数定義で指定したJSONスキーマに正確に一致するようになります。 - LLMは、JSONスキーマで定義された構造化コンテンツ・フォーマットで出力してユーザーに返信する。
次のセクションでは、DifyのJSONスキーマ機能をオンにして使用する方法を説明します。
1.JSONスキーマを開く
アプリケーションのLLMを、上記のようにJSONスキーマ出力をサポートするモデルに切り替えてから、セットアップ・フォームをオンにして、次のようにしてください。 JSONスキーマ
そして、JSONスキーマ・テンプレートに記入してください。 レスポンス・フォーマット
列で json_schema
フォーマット
LLMが生成するコンテンツは、以下の出力形式をサポートしています:
- テキスト テキスト形式での出力
2.JSONスキーマ・テンプレートを定義する。
以下のJSON Schemaフォーマットを参照し、テンプレートの内容を定義することができます:
{
"name": "template_schema", "description".
"description": "JSONスキーマの汎用テンプレート"、
"schema": {
"type": "object", "properties": { "name": "template_schema", "strict":true, "schema": {
"properties": {
"field1": {
type": "string", "description": { "description": "フィールドの説明。
"description": "フィールド1の説明"
}, "field1": { "type": "string", "description": "フィールド1の説明
「field2": {
"description": "フィールド2の説明"
}, "field2": { "type": "number", "description": "フィールド2の説明" }, "description": "フィールド2の説明" }.
「field3": {
「項目": {
"type": "string"
}
}, "items": { "type": "string" }.
「field4": {
「type": "object", "description": "フィールド4の説明", {
"description": "field4の説明"、
"properties": {
"subfield1": {
「type": "string", "description": { "subfield1": { サブフィールド1(subfield1)の説明。
"description": "サブフィールド1の説明"
}
}, "required": ["subfield1"], "description": "サブフィールド1の説明" }.
「required": ["subfield1"], "additionalProperties".
「additionalProperties":false
}
}, "required": ["field1", "field1"], "additionalProperties":false }.
"required":["field1", "field2", "field3", "field4"], "additionalProperties": "false" } }, "additionalProperties": "false"}。
「additionalProperties":false
}
}
ステップバイステップの指示:
- 基本情報の定義
- セットアップ
名称
スキーマにわかりやすい名前をつける。 - 増加
記述
スキーマの使い方についての簡単な説明。 - セットアップ
厳しい
true:厳格モードを確保する。
- 確立
スキーマ
オブジェクト:
- セットアップ
type:"オブジェクト"
オブジェクト・タイプとしてルート・レベルを指定します。 - 増加
プロパティ
オブジェクト:すべてのフィールドを定義するために使用される。
- フィールドを定義する:
- を含む各フィールドのオブジェクトを作成する。
タイプ
歌で応える記述
. - 一般的なタイプ:
ストリング
,番号
,ブーリアン
,配列
,オブジェクト
. - 配列の場合は
項目
要素のタイプを定義します。 - オブジェクトの場合、再帰的定義
プロパティ
.
- 制約を設定する:
- 各レベルで追加
必須
すべての必須フィールドをリストした配列。 - セッティング
additionalProperties: false
.
- 特別なフィールドでの扱い:
- 利用する
列挙
オプションの値を制限する。 - 利用する
$ref
再帰構造の実装
典型例
1.推理の連鎖(従来型)
JSONスキーマファイルの例
{
"name": "math_reasoning", "description".
"description": "数学的推論のステップと最終的な答えを記録する", "strict":true, { "name".
"strict":true, "schema": { "name": "math_reasoning
"schema": {
"タイプ": "オブジェクト", "プロパティ": {。
「プロパティ": {
"steps": {
「タイプ": "配列", "説明": {
「説明": "推論ステップの配列", "項目": {。
「項目": {
"タイプ": "オブジェクト", "プロパティ": { "プロパティ": {
「プロパティ": {
「説明": {
「タイプ": "文字列", "説明": {
"description": "推論ステップの説明"
}, "output": { "explanation": { "type": "string", "description": "推論ステップの説明
「出力": {
「type": "string", "description": "推論ステップの説明" }, "output": {
"説明": "推論ステップの出力"
}
}, "required": ["explanation", "description": "推論ステップの出力" } { "type": "string", "description": { "description": "推論ステップの出力" } "required": ["explanation", "description": "推論ステップの出力
"required": ["explanation", "output"], "additionalProperties":falseProperties":falseProperties
「追加プロパティ":false
}
}, "final_answer".
"final_answer": {
「タイプ": "文字列", "説明".
"description": "数学的問題の最終的な答え"
}
}, "additionalProperties":false, "description": "数学的問題の最終的な答え" }.
"必須": ["ステップ", "final_answer"]。
}
}
キューの単語参照
あなたは数学の家庭教師です。 あなたは数学の問題を与えられ、最終的な答えとともにステップバイステップの解答を出力することを目標とします。
あなたは数学の問題を与えられ、あなたの目標は最終的な答えとともに、ステップごとの解答を出力することです。
各ステップでは、単に方程式として出力を提供してください。
UIジェネレーター(ルート再帰モード)
{
"name": "ui", "description": "ダイナミックに生成されたUI", {
"description": "動的に生成されるUI", "strict":true, { "name": "ui"、
"strict":true, { "schema": { "スキーマ": { "スキーマ": { "スキーマ": { "スキーマ
"schema": {
"タイプ": "オブジェクト", "プロパティ": { "タイプ": "オブジェクト", "プロパティ": {
「プロパティ": {
"type": {
「タイプ": "文字列", "説明".
"enum": ["div", "button", "header", "section", "field", "form"].
},
「label": {
type": "string", "description": { "説明": "description": "説明のラベル。
"description": "UIコンポーネントのラベル。ボタンやフォームフィールドに使用される"
「children": {
"type": "array", "description": "ボタンまたはフォームフィールドに使用されるUIコンポーネントのラベル" }, "children": {
"description": "入れ子のUIコンポーネント", "items": {
"items": {
"$ref": "#"
}
}, "attributes": { "$ref": "#" }.
"attributes": {
"type": "array", "description": "任意の要素に適したUIコンポーネント", "attributes": {
"description": "UIコンポーネントの任意の属性。
"items": {
"タイプ": "オブジェクト", "プロパティ": {
"properties": {
「name": {
type": "string", "description": "説明".
"description": "属性の名前、例えばonClickやclassName"
}, "value": { "name": { "type": "string", "description": "属性の名前、例えばonClickやclassName
"value": {
"タイプ": "文字列", "説明": "属性の名前、例えばonClickやclassName" }, "値": {。
"説明": "属性の値"
}
}, "additionalProperties":false, "description": "属性の値" }.
"必須": ["名前", "値"]。
}
}
}, "required": ["label", "attributes"] } "additionalProperties":false, "required": ["type", "label", "children", "attributes"] } "additionalProperties":false
"required": ["type", "label", "children", "attributes"], "additionalProperties":false, "required": ["name", "value"] } }, "additionalProperties":false
「additionalProperties":false
}
}
言葉の引用:
あなたはUIジェネレーターAIです。 ユーザー入力をUIに変換します。
効果の例:
注意を引く
- アプリケーションのプロンプトには、ユーザー入力が有効な応答を生成しない場合の対処方法に関する指示が含まれていることを確認してください。
- モデルは常に指定されたパターンに従おうとするので、入力が指定されたパターンとまったく無関係な場合、LLMは幻覚を見るかもしれない。
- LLMが入力がタスクと互換性がないことを検出した場合、プロンプトに言語を含めることで、空のパラメータや特定の文章を返すように指定することができる。
- すべてのフィールドは
必須
詳細は以下を参照。こちら. - additionalProperties: false は常にオブジェクト
- スキーマのルート・レベル・オブジェクトはオブジェクトでなければならない。
- 大規模モデルの構造化データ出力方法:LLM JSONリソースの厳選リスト