ホームへ戻る

GitHub Repo

vLLMコミュニティが構造化出力の不具合を報告、特定の設定でJSONの固定値が書き換わる可能性

特定の設定ではGuidanceバックエンドが固定オブジェクトを書き換え、正しい出力が拒否され、誤った出力が通ることがある。コミュニティは修正案とテストを提出したが、まだマージされておらず、影響するバージョンの範囲も未確認だ。

Cepice · CC BY-SA 4.0 · Image source
zh-Hant

vLLMコミュニティは9月25日、構造化出力に関する不具合を報告した。Guidanceバックエンドを使用し、追加プロパティを禁止するオプションを有効にすると、前処理によってスキーマ内の固定オブジェクト値が書き換えられる場合がある。報告者はモデルの重みやGPUを必要としない再現コードを提示した。同日に提出された修正案は、現在もレビュー待ちだ。[不具合報告](https://github.com/vllm-project/vllm/issues/58695)、[修正案](https://github.com/vllm-project/vllm/pull/58709)。

発生条件は`disable_additional_properties`を`true`に設定することだ。公式ドキュメントによると、このオプションはデフォルトで無効で、Guidanceでのみ利用できる。JSON Schema仕様では、`const`はデータが指定値と等しいことを要求し、`enum`は列挙された値のいずれかに一致することを要求する。これらの値には完全なオブジェクトを指定でき、その内部フィールドを別の検証ルールとして扱ってはならない。固定オブジェクト内のフィールドは、検証キーワードと同じ名前であっても、そのまま保持する必要がある。このルールから考えると、前処理でデータが変更されれば、制約付きデコードがコンパイル結果に従っても、呼び出し元が最初に指定したスキーマへの適合は保証できない。[設定ドキュメント](https://docs.vllm.ai/en/latest/api/vllm/config/structured_outputs/)、[検証仕様](https://json-schema.org/draft/2020-12/json-schema-validation)。

報告によると、調査対象のメインブランチにある処理関数はすべての辞書と配列を走査し、`properties`または`patternProperties`に遭遇すると、追加プロパティを禁止するフィールドを挿入する場合がある。再現ケースでは、プロパティデータを含むGeoJSONオブジェクトを使用した。その結果、本来は有効な固定値がマッチャーに拒否され、余計なフィールドを持つ誤った値が許可された。この問題はllguidanceのコンパイルに渡す前に発生する。上記のフィールドを含まない対照ケースでは、書き換えは起きなかった。[再現結果](https://github.com/vllm-project/vllm/issues/58695)。

修正案では、子スキーマを含むキーワードだけをたどって再帰処理するよう変更し、固定値、列挙値、デフォルト値、サンプルデータを保持する。また、フィールド名のマッピングが汚染されるのも防ぐ。作者が報告したローカルテストの結果は、7件が成功、2件が未選択だった。ただし、9月26日時点の確認ではまだマージされておらず、正式版で修正済みとは見なせない。[修正案とテスト記録](https://github.com/vllm-project/vllm/pull/58709)。

エンジニアリング上は、制約付きデコードを利用するデータ抽出やエージェントのツール引数で、生成側とアプリケーション側の検証結果に食い違いが生じる可能性がある。チームは元のスキーマを使って出力を別途検証し、予約語と同じ名前のフィールドを含む固定オブジェクトを回帰テストに追加できる。このオプションを一時的に無効にする場合も、既存のフィールド制約が要件を満たすことを確認する必要がある。今後は、上流でのレビュー、正式な修正版、影響するバージョンの一覧を追跡すべきだ。現時点の根拠は、特定のメインブランチ上のコミットとコミュニティによる再現に限られる。公開されているケースはサービス全体の処理フローを網羅しておらず、すべてのバージョンにおける影響範囲も確定していない。

出典

  1. Guidance disable_additional_properties rewrites const and enum literal values — Issue #58695
  2. Preserve literal values in Guidance disable_additional_properties — PR #58709
  3. StructuredOutputsConfig API 文件
  4. JSON Schema Validation: A Vocabulary for Structural Validation of JSON