目的
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_issues は top_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 提供開始時にモデル差し替えを検討
関連
目的
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 経路でも実装可能。前提
@cf/baai/bge-reranker-base(cross-encoder reranker) が提供済bge-reranker-v2-m3は未提供、進捗ウォッチ対象)env.AI)search_issuesはtop_kで最終件数を返しているが、reranker 導入後は overfetch → rerank → top_k trim のパターンになる制約
search_issuesの既存インタフェースは変更しないrerank: falseで無効化可能 (snake_case = 既存 MCP tool 命名規約に整合、業界 boolean フラット指定の典型)(query, candidate content)pair なので互換性問題なしtop_k × 5, max 50 (Workers AI Free tier neuron 予算と業界中央値 50-75 件の整合点)(query + candidate content)pair が 512 tokens を超えないよう trimming 実装search_issuesのみ。get_issue_context/list_recent_activityは対象外result.usageで取得し、理論試算と照合して default 値を再評価する対象ファイル
src/rerank.ts(新規)@cf/baai/bge-reranker-base呼び出し util、入力 truncate、スコア統合src/fts.ts/src/index.tssearch_issues内の retrieval path 拡張 (dense+sparse → RRF → overfetch → rerank → top_k)wrangler.tomlenv.AIで流用、追加 binding なしdocs/0-requirements.{ja,md}README.md/README.ja.md既知の制約 (将来課題)
bge-reranker-v2-m3(多言語版) の Workers AI 提供開始時にモデル差し替えを検討関連