ホームへ戻る

GitHub Repo

Difyコミュニティが構造化出力の修正を提案、フィールド名とSchemaキーワードの衝突に対応

10月29日のDifyコミュニティ報告によると、特定のフィールド名とローカルSchema参照の組み合わせにより、エージェントの作成に失敗する可能性がある。報告者は翌日に修正を提案し、テスト結果を公表したが、確認時点ではまだマージされていない。

The original uploader was Ggia at Greek Wikipedia. · CC BY-SA 2.5 · Image source
zh-Hant

Difyの構造化出力レイヤーで、フィールド名の互換性に関する問題が見つかった。コミュニティは10月29日、mainブランチのdify-agentについて、出力フィールド名がdefaultで、ローカルの$defs定義を$refで参照している場合、エージェントの作成時にKeyErrorが発生する可能性があると報告した。同じ構造でもフィールド名をwidgetに変えると正常に処理されるため、問題はモデルの生成内容ではなくSchemaの走査にあると考えられる。問題報告

JSON Schemaでは、再利用可能なサブ構造を$defsに格納し、$refで参照できるため、複数のフィールドで同じオブジェクト定義を共有するのに適している。こうした参照には明確な構造上の意味があるため、走査処理ではSchemaキーワードと、properties内にあるユーザー定義のフィールド名を区別する必要がある。JSON Schema公式ガイド

Difyの公開コードによると、出力レイヤーはまずローカル参照を展開し、その後SchemaをPydanticに渡す。現在の走査処理はdefault、enum、constなどのキー名に遭遇すると、その値を保持して中身の処理をスキップする。このルールがフィールド名のマッピングにも適用されるため、参照が展開されないままルートレベルの$defsが削除され、後続のSchema生成に失敗する可能性がある。出力レイヤーのコード

10月30日に提案された修正では、配置場所に応じて走査方法を切り替える。Schemaオブジェクト内ではリテラルデータを保持し、フィールドマッピング内では各サブSchemaを個別に処理する。報告者によると、追加したテストは元のバージョンで13件失敗し、修正適用後は出力レイヤーのテスト33件がすべて成功した。これらの結果は独立して再実行されておらず、PRは引き続きレビュー待ちとなっている。修正提案とテスト

エンジニアリングチームにとって、既存のデータ契約で使われているフィールド名が、エージェントの初期化に影響する可能性がある。報告では、同じ処理経路で非ローカル参照の検証も漏れると指摘されているが、外部アクセスを引き起こし得ると結論づけるには、現時点で証拠が不十分だ。ネストされた構造化出力を使うチームは、実際のSchemaでエージェント作成フローを検証し、修正のマージと正式リリースへの反映状況を追跡するとよい。

出典

  1. Dify issue #45092:Schema 關鍵字欄位名稱造成結構化輸出失敗
  2. Dify PR #45093:修正關鍵字欄位名稱下的引用解析
  3. Dify 結構化輸出層原始碼
  4. JSON Schema:模組化結構與引用