Skip to content

enhancement: add cross-encoder reranker (bge-reranker-base) as 3rd retrieval tier #91

Description

@liplus-lin-lay

目的

v0.6.x で導入した hybrid retrieval (Vectorize dense + D1 FTS5 sparse + RRF fusion) に 3 段目として cross-encoder reranker を追加し、2026 production baseline (hybrid + reranker) に到達する。

2026 業界標準で reranker は「optional の一段上」ではなく production baseline の必須層として位置付けられている。Cloudflare AI Search 公式 blog (2026-04-16) でも @cf/baai/bge-reranker-base を rerank 機能として組み込んでいる。Workers AI モデルとして呼び出せるため、DIY 経路でも実装可能。

前提

  • Cloudflare Workers AI に @cf/baai/bge-reranker-base (cross-encoder reranker) が提供済
  • 2026-04 時点で Workers AI 上の cross-encoder reranker は bge-reranker-base が唯一の選択肢 (bge-reranker-v2-m3 は未提供、進捗ウォッチ対象)
  • bge-reranker-base は多言語非対応 (英語ベース)。日本語 issue/PR を扱う本プロジェクトでは精度低下リスクあり (要 runtime 観察)
  • 呼び出し経路は既存 BGE-M3 embedding と同じ Workers AI primitive (env.AI)
  • Workers AI 公式単価: bge-reranker-base = 283 neurons/M tokens、bge-m3 = 1,075 neurons/M tokens
  • 1 検索あたり試算: 約 7.5 neurons (query 30 tokens + 候補 50 件 × 平均 500 tokens, embedding 含む) → Free tier 10,000 neurons/day で 約 1,300 検索/day 上限
  • bge-reranker-base の Cloudflare 側 context window は公式未記載。元モデル仕様 (BAAI) で 512 tokens
  • 現状の search_issuestop_k で最終件数を返しているが、reranker 導入後は overfetch → rerank → top_k trim のパターンになる
  • 参考: Cloudflare AI Search agent primitive blog / hybrid search changelog / Workers AI pricing

制約

  • 後方互換 non-breaking: search_issues の既存インタフェースは変更しない
  • reranker は default ON、opt-out param rerank: false で無効化可能 (snake_case = 既存 MCP tool 命名規約に整合、業界 boolean フラット指定の典型)
  • Diff RAG の独自 schema 維持: reranker input は既存の (query, candidate content) pair なので互換性問題なし
  • overfetch default = top_k × 5, max 50 (Workers AI Free tier neuron 予算と業界中央値 50-75 件の整合点)
  • 入力 truncate は必須: (query + candidate content) pair が 512 tokens を超えないよう trimming 実装
  • 実装スコープは search_issues のみ。get_issue_context / list_recent_activity は対象外
  • neuron 実測値は実装後に Workers AI レスポンスの result.usage で取得し、理論試算と照合して default 値を再評価する

対象ファイル

ファイル 変更内容
src/rerank.ts (新規) Workers AI @cf/baai/bge-reranker-base 呼び出し util、入力 truncate、スコア統合
src/fts.ts / src/index.ts search_issues 内の retrieval path 拡張 (dense+sparse → RRF → overfetch → rerank → top_k)
wrangler.toml binding は既存 env.AI で流用、追加 binding なし
docs/0-requirements.{ja,md} Retrieval Model 節に reranker 追加、3 段構成図に更新
README.md / README.ja.md Architecture 図に reranker を含む、最小差分

既知の制約 (将来課題)

  • 多言語非対応の精度問題が日本語 issue/PR で顕在化した場合、外部 reranker (Voyage / Cohere) への fallback option を別 issue で検討
  • bge-reranker-v2-m3 (多言語版) の Workers AI 提供開始時にモデル差し替えを検討

関連

Metadata

Metadata

Labels

enhancement新機能・改善要望ready本文が実装開始できる形まで収束している状態。ただし更新は継続可能

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions