Skip to content

シグナルベースのトリアージキュー

アイテムごとの品質シグナルでアノテーションキューを優先順位付けし、レビュアーが到着順ではなく、最も問題のある、または最も疑わしいトレースを最初に確認できるようにします。エージェントのエラー、本番環境の低評価、低スコア、任意のカスタムフィールドでルーティングできます。

トリアージキューはアイテムごとの品質シグナルでアノテーションを優先順位付けし、レビュアーが最も問題のある、または最も疑わしいアイテムを最初に確認できるようにします。到着順(FIFO)に処理するのではありません。シグナルには、エージェントのエラー、本番環境の低評価、自動採点による低スコア、任意のカスタムフィールドを使えます。静的に読み込まれたデータと実行時に取り込まれたトレースの両方で読み取られ、アノテーション中のバナーと /admin/triage-queue のランキングページの2か所に表示されます。

人間によるレビュー時間が限られている場合、アイテムがアノテーターに届く順序が重要になります。最も有益なアイテムを先にルーティングすることは、能動的な評価ループにおけるトリアージの役割であり、ジャッジ整合性と自然に組み合わさって、意見の相違やエラーを優先的に人間へ送ります。

アノテーション中のトリアージバッジそのアイテムがレビュー対象としてフラグ付けされた理由を説明する優先度バッジ

設定

yaml
triage:
  enabled: true
  order: desc            # high priority first (default); 'asc' = low first
  default_priority: 0    # items matching no rule
  show_badge: true       # banner during annotation explaining the priority
  rules:                 # evaluated in order; highest matching priority wins
    - name: "Agent errored"
      badge: "Agent errored"     # banner text (defaults to name)
      priority: 100
      when:
        field: status            # dotted paths allowed, e.g. metadata.tags
        equals: error
    - name: "Negative feedback"
      priority: 80
      when:
        field: feedback
        in: [thumbs_down, negative]
    - name: "Low quality score"
      priority: 60
      when:
        field: score
        lt: 0.5
 
# Serve the highest-priority items first. If you enable triage without setting
# assignment_strategy, Potato defaults to `priority` automatically.
assignment_strategy: priority

rules(および signal_field)を省略すると、Potato はそのまま使えるデフォルトセットを使用します。エラーステータス(100)、否定的なフィードバック(80)、0.5 未満のスコア(60)です。

条件演算子

演算子意味
equals完全一致(文字列は大文字小文字を区別しない)
in値がリストのいずれかである
containsリストフィールドが含む、または部分文字列の一致
lt / lte / gt / gte数値比較
existsフィールドが存在するか、しないか(true/false

数値シグナルを直接読み取る

ルールの代わりに、またはルールに加えて、フィールドから数値を直接読み取ることができます。

yaml
triage:
  enabled: true
  signal_field: quality_score   # used as the priority when no rule matches
  invert_signal: true           # lower score => higher priority

優先度が割り当てを駆動する仕組み

assignment_strategy: priority を設定します。ユーザーがアイテムを必要とすると、キューは各アイテムに保存された triage_priority でソートされ(デフォルトは降順、order: asc で反転)、同値の場合は決定論的になるよう元の読み込み順で決着され、上位のアイテムが割り当てられます。シグナルは読み込み時または取り込み時に一度だけ計算されてアイテムに保存されるため、割り当ては低コストのままです。

バッジ(show_badge: true)は戦略とは独立しています。別の割り当て戦略を維持していても、そのアイテムがフラグ付けされた理由を説明します。

管理者用キューページ

text
GET /admin/triage-queue              # JSON
GET /admin/triage-queue?format=html  # rendered page

X-API-Key ヘッダーを送信してください。このページは、残っている(未完了の)すべてのアイテムを優先度順にランク付けして表示し、それをフラグ付けしたルール、現在のアノテーション数、そしてすでに割り当て済みかどうかを示します。

実行時の取り込み

スコアラーはアイテムが追加されるときに実行されるため、トレース取り込み(webhook エンドポイントまたは Langfuse ポーラー)を通じて実行時に取り込まれたトレースは、到着時にスコア付けされ、自動的に優先度キューに収まります。セッション中に投入された低スコアまたはエラーのトレースは、まだ待機しているクリーンなトレースを追い越します。

注意事項と制限

  • 優先度は挿入時に計算されます。triage.rules を編集して再起動すると、次回の読み込み時にすべてが再スコアリングされます。
  • 不正な形式のルールは警告をログに記録してスキップされます。データの読み込みを妨げることはありません。
  • トリアージはどのアイテムを提供するかの順序を決めます。アイテムごとのアノテーション上限は変更しません。

関連項目

実装の詳細については、ソースドキュメントを参照してください。