代替 F: BM25 + embedding + reranker + validator
フロー
raw chunkText
-> BM25 top 80
-> embedding top 80
-> 候補 union
-> rerankerが raw chunk と 各 JSONL 候補を直接比較
-> top JSONL を返す
-> Qwen direct-evidence validatorが 直接根拠 を検証役割分担
BM25:
正確な文字列/APIトークンの候補を探す。code embedding:
表現は異なるが意味が近い候補を補完する。reranker:
BM25とembeddingがもたらした候補をraw chunkと比較して再度並べ替える。Qwen 直接証拠バリデータ:
JSONL の中で現在のチャンクと直接一致する文字列/パターンの根拠があるか確認する。
根拠のない JSONL は破棄する。基準チャンクで期待される整列
上位に来るべき候補:
first_2d_game / coding_the_player
same page / clamp and AnimatedSprite2D explanation下げるべき候補:
first_3d_game / player_movement_code
unrelated api_mapping
unrelated label_prototypesPoC シミュレーション
基準チャンクを最終推薦フローに入れると仮定する。
raw chunkText
-> BM25 top 80
-> voyage-code-3 embedding top 80
-> 候補 union
-> reranker
-> Qwen direct-evidence validator1段階: BM25候補
BM25が取得する候補:
A. first_2d_game / coding_the_player
reason: Input.is_action_pressed, move_left, move_right, AnimatedSprite2D.play/stop
B. first_2d_game / clamp section
reason: position.clamp, Vector2.ZERO, screen_size
C. first_3d_game / player_movement_code
reason: Input.is_action_pressed, move_left, move_right, normalized2段階: embedding 候補
embedding がもたらす候補:
D. first_2d_game / movement explanation
reason: 2D movement, keyboard input, animation
E. first_2d_game / screen bounds explanation
reason: keep player inside screen
F. first_3d_game / movement
reason: player movement semantic similarity3段階: 候補 union
union 後には重複を統合する。
A/D -> first_2d_game / coding_the_player
B/E -> first_2d_game / clamp/screen bounds
C/F -> first_3d_game / player_movement4段階: reranker 再配置
reranker が raw chunk と候補を一緒に見る。
予想 rerank:
| rerank | 候補 | 理由 |
|---|---|---|
| 1 | first_2d_game / coding_the_player |
入力処理、velocity、AnimatedSprite2D の play/stop が直接合っている |
| 2 | first_2d_game / clamp/screen bounds |
position.clamp、Vector2.ZERO、screen_size が直接合っている |
| 3 | first_3d_game / player_movement |
入力/移動は似ているが 3D 文脈であり AnimatedSprite2D / screen_size がない |
5段階: Qwen direct-evidence バリデータ
Qwen バリデータには次のように尋ねる。
SOURCE_CODEと取得したJSONLを見て、
JSONL内にSOURCE_CODEと直接一致する文字列/API呼び出し/パターンの根拠があるか?
はいまたはいいえでまず判定せよ。予測結果
(※このセクションは、元のMarkdownフラグメントが提供されていないため、例として「予測結果」の見出しのみを日本語に翻訳しました。実際のコンテンツがある場合は、すべての韓国語テキストを同様に日本語へ置き換えてください。)
first_2d_game / coding_the_player:
validator = はい
direct evidence = Input.is_action_pressed, AnimatedSprite2D.play, AnimatedSprite2D.stop
first_2d_game / clamp/screen bounds:
validator = はい
direct evidence = position.clamp, Vector2.ZERO, screen_size
first_3d_game / player_movement:
validator = いいえまたは低い関連性
reason = movement inputは似ていますが、3D のドキュメントであり、AnimatedSprite2D/screen_size の直接的な根拠はありませんPoCで確認するログ
この代替案は段階が多いため、次のことを一画面で見る必要があります。
1. raw chunkText
2. BM25 候補と一致した用語
3. embedding 候補と類似度
4. union 結果
5. reranker スコアと順位変化
6. Qwen バリデータ はい/いいえ
7. 最終 accept/reject JSONL目に見える結論:
BM25とembeddingは候補を広く集める。
rerankerは似た候補の順序を正す。
Qwen validatorは直接根拠のないJSONLを最終的に廃棄する。長所
- 品質が最も高い可能性が高い。
- BM25 の偽陽性を減らすことができる。
- 埋め込みの偽陽性も減らすことができる。
- 生のチャンク条件を維持する。
- ハードコーディングへの依存が低い。
- Qwen バリデータで根拠のない JSONL を最後に除去できる。
短所
- コストがかかる。
- レイテンシが発生する。
- 候補を入れすぎると遅くなる。
- reranker も根拠検証器ではないため、最後にバリデータが必要になる。
判定
品質最優先 最終提案原文メモの最終的な推奨はこの構造に近いです。