マルチモデルフュージョン

同じ enrichment を複数の AI model で実行すると、Entity Enricher はその結果を単一の高信頼度な出力へ fusion できます。fusion は model 出力間の競合を検出し、決定論的なルールまたは LLM による arbitration で解決します。

フュージョンパイプライン

モデル出力
Claude の結果
GPT-4 の結果
Gemini の結果
コンフリクト検出
すべてのモデルにわたって
すべてのフィールドを比較
解決
ルールベースのマージ
または
LLM調停
マージ結果
単一出力と
競合監査証跡

ステップ1: 競合の検出

競合検出器は、すべてのモデル出力にわたってすべてのフィールドを比較します。すべてのモデルが一致するフィールドはそのまま通過します。モデルが一致しないフィールドは、解決が必要な競合としてフラグ付けされます。

フィールドタイプ別の比較ルール
型比較方法一致の意味
スカラー正規化された完全一致(トリム済み・小文字化・丸め済み)正規化後、すべての値が等しい
多言語対応実行の主要言語が決定します。翻訳の違いは言語ごとのマージを引き起こすだけです主要言語で同じテキスト — 翻訳の言い回しの違いは不一致とはみなされません
配列項目の主要言語ビューに対する集合比較(順序非依存)順序や翻訳の言い回しに関係なく、同じ項目
オブジェクトアイデンティティフィールドによって両モデルが同じ対象を記述していると確認できる限りはプロパティ単位で、確認できない場合はオブジェクト全体が 1 つの競合になりますすべてのネストされたプロパティが一致
null / 空null・空文字列・空配列の値は、主張ではなく棄権として扱われます競合としてカウントされることなく、値が入っている方が採用されます
例: 2つのモデルで「Sanofi」をエンリッチする
Claude の出力
revenue: 42.2
gmp_status: true
description: “Sanofi is a global...”
GPT-4 の出力
revenue: 44.1
gmp_status: true
description: “Sanofi SA is a...”
結果: gmp_status = agreed | revenue = conflict (42.2 vs 44.1) | description = conflict(テキストが異なる)

ステップ2: 競合の解決

決定論的なルールはすべてのフュージョンで実行され、各モデルの値自体から裏付けられる項目をすべて確定します。ルールが答えを優先することしかできないもの、つまり矛盾する値、モデルごとに記述が異なるネストされたオブジェクト、1つのモデルしか生成しなかった項目は、リゾルバーに委ねられます。サイドバーで調停モデルを選択すると、そのリゾルバーがルール自身になるか、LLMになるかが決まります。

  1. 1未選択の場合、決定論的ルールがそのまま解決役を担います
  2. 2アービトレーションは独立した呼び出しとして、以下の価格で課金されます
ここではフィールドが空であり、これが無料の経路です。ルールは証明できるものをすべて解決し、残りについては優先する回答を選びます。モデルを指定すると、その残りの部分にだけ判断が加わります。エンティティ全体を再処理するわけではありません。
オプションA

ルールベースのマージ

各フィールドのデータ型に基づいて決定論的なルールが適用されます。ほとんどの場合、LLM 呼び出しは一切不要で、解決は即座かつ無料です。唯一の例外は、モデル間で大きく食い違う数値です。これはどのルールでも正当に決着させられません。詳しくは以下をご覧ください。

フィールドタイプルール根拠
文字列多数決。同数の場合は最長の値を採用します通常は詳細が多いほど良い結果になります
数値中央値に最も近いモデルの値外れ値に強く、平均値を捏造することはありません
ブール値多数決。同数の場合は true を優先します安全側のデフォルト
多言語対応言語ごとの多数決、言語の和集合各言語を個別に解決
配列キーを考慮した和集合:項目はキーフィールドでグループ化され、表記ゆれは統合され、一致した項目はフィールドごとにマージされます論理エンティティごとに1行、情報の欠落はありません
オブジェクトアイデンティティが一致する場合はフィールド単位で、一致しない場合は一方のモデルのオブジェクトを丸ごと採用します異なるエンティティを記述する 2 つのオブジェクトを混ぜ合わせると、どちらのモデルも返していない第 3 のエンティティを作り出してしまいます
Null と 値値が入っている方を優先しますデータの欠落は、いかなる値よりも望ましくありません

タイブレーク: 投票が同数の場合は、(能力の代理指標として)価格の高いモデルの値が優先され、次にモデル名のアルファベット順で決まります。オブジェクト全体をアトミックに扱う場合は、その 2 つの間に完全性(値が入っている葉ノードの数)が入ります。どちらのエンティティが正しいかを証明する材料がない場合は、より強力なモデルを優先し、次により多くの情報を含む回答を選びます。

ネストされたオブジェクトは混ぜ合わされず、まとめてマージされます

ネストされたオブジェクトをフィールド単位でマージできるのは、両方のモデルが同じ対象を記述している場合に限られます。識別フィールドがそれを裏付けない場合 — キーが異なる、あるいはキーがまったくなく実際に内容が食い違っている場合 — オブジェクト全体が 1 つのコンフリクトとして扱われ、一方のモデルの値がそのまま採用されます。そうしなければ、フュージョンはキメラを組み立ててしまいます。つまり、あるモデルの住所を別のモデルの会社に付けてしまうのです。意図的な挙動ですが、知っておく価値のある帰結が 1 つあります。採用された側は空欄も含めてそのまま取り込まれるため、採用側が空のままにしたフィールドは空のままとなり、データベースへの登録判定でエンティティが通らない原因になり得ます。その理由は実行の検証警告に記録されます。

数値の差が大きすぎてマージできない場合

「中央値に最も近い値」は、モデルごとに丸め方が異なる場合には適切ですが、モデル同士が矛盾している場合には不適切です。0 と 1854 の違いは丸めの差ではありません。値の相対的なばらつきが 20% に達すると、そのフィールドは組織の通常のモデル選択によって自動的に選ばれた LLM アービターにエスカレーションされ、その呼び出しは他と同様に課金されます。該当するフィールドはフュージョンの監査証跡で自動エスカレーション済みとしてフラグが付くため、トークンを消費したマージでは必ずどのフィールドが原因だったかが分かります。

オプションB

LLM調停

サイドバーで調停モデルを選択すると、ルールでは確定できなかった質問がそのLLMに委ねられます。LLMにはエンティティの識別情報、各フィールドの説明、そして主要なエンリッチメント言語で表示された各モデルの値が渡され、自ら値を書き起こすことはなく、指し示すことで回答します。

arbitratorが返す内容
選択されたモデル矛盾する値や見解の分かれるオブジェクトの場合: どのモデルが正しかったかを判定します。そのモデルの値は、入力されたすべての言語で、返されたとおりに正確にコピーされます。
項目の判定1つのモデルのみが生成した配列項目の場合: 保持する、破棄する、または重複する項目に統合する、のいずれかです。2つのモデルが同じ幕や同じ役を異なる表現で記述する場合などが該当します。
推論他の選択肢ではなく、そのモデルや判定を選んだ理由
信頼度判断にどれだけ自信があるか(高、中、低)
ネストされたデータはその階層で判定されます

質問は階層ごとに行われます。まずエンティティ自体、次に一致した各配列項目を個別の呼び出しで、それぞれの識別情報(「このオペラの第1幕」)をコンテキストとして与えます。調停モデルが破棄した項目について再度質問されることはありません。プロンプトの共通部分は最初の呼び出しでキャッシュされるため、より深い階層の呼び出しはわずかなコストで並列に実行されます。

フォールバック: 調停モデルが失敗した場合(タイムアウト、エラー)でも、ルールベースの判定がそのまま適用されるため、常に結果が得られます。どの方式が適用されたかはレコードに記録されます。

ステップ3: 統合結果

競合解決後、システムは単一の統合結果を構築し、データベースに「アービトレーション」レコードとして保存します。すべての統合結果には監査証跡が含まれるため、各競合がどのように解決されたかを追跡できます。

監査証跡(アービトレーションのメタデータ)

マージされたすべての結果には、フュージョンのプロセスを記録するメタデータが含まれます:

“method”: “rule_based” | “llm”
“source_record_ids”: [“uuid-1”, “uuid-2”]
“total_fields”: 23
“agreed_fields”: 18
“conflicted_fields”: 5
“decisions”: [{ path, chosen_value, chosen_from_model, rule_used | reasoning, verdict, ... }]

同じ監査証跡は、履歴ページの「概要」タブで、マージされたすべてのレコードについて表示されます。配列内で行われた判定(一致した項目のフィールド、保持または破棄された項目)も一覧表示されるため、除外された内容も保持された内容と同じように確認できます。LLMが調停したレコードでは、そのレコードのモデルとして調停モデルが表示されます。ルールベースのマージではLLM呼び出しを一切行わず、プロンプトもトークンもコストも発生しないため、代わりにマージ対象となったモデルが一覧表示されます。

UIに表示される内容

フュージョンが完了すると、結果パネルの「統合」タブに以下が表示されます:

1
サマリーヘッダー
解決方法(ルールベースまたはLLM)と、「18件一致 / 5件解決 / 全23フィールド」のような件数を表示します。
2
マージ済み JSON
合意された値と解決された競合を単一のJSONドキュメントに統合した、完全な構造化出力です。
3
コンフリクトレポート
各競合の展開可能なカードで、フィールドパス、解決方法バッジ (多数決、中央値、和集合など)、選択された値がハイライトされたすべてのモデル値、LLM 調停が使用された場合は推論テキストを表示します。

バッチ処理での自動フュージョン

バッチエンリッチメントでは、2 つ以上のモデルを選択するとフュージョンが自動的に実行されます。「Merge Results」を手動でクリックする必要はありません。あるエンティティについてすべてのモデルが成功した時点でフュージョンが実行され、統合結果が各モデルの個別出力と並んで表示されます。1 つでもモデルが失敗した実行は、意図的にフュージョンされません。残りだけを統合すると、部分的な回答を合意された答えであるかのように黙って公開してしまうためです。まず不足しているモデルを回復してください。失敗した専門ドメインを再試行して実行が揃えば、自動的にフュージョンされます。

ストリーミングfusion: 単一entityおよびbatchのenrichmentの両方において、fusionの進捗はServer-Sent Events経由でストリーミングされます。fusion_started、conflicts_detected、fusion_completedのイベントをリアルタイムで確認できます。

ルールベース vs LLMアービトレーション:それぞれの使いどころ

ルールベース(即時、ほぼ常に無料)
  • 投票ロジックが有効に機能する、主に事実データや数値データ向け
  • コストが重要となる大量処理またはバッチ処理
  • 競合がほとんど想定されないシンプルなスキーマ
  • 決定論的で再現可能な結果が欲しい場合
LLM調停(追加コスト)
  • 解決にコンテキストが重要となる複雑なスキーマ
  • 投票では不十分なテキストデータ(説明、要約)
  • 理由付きで説明可能な判断が必要な場合
  • 精度が追加コストに見合う、重要度の高いエンリッチメント