代替 D: BM25 + 埋め込み 並列
フロー
raw chunkText
-> BM25 top 50
-> embedding top 50
-> 候補 union
-> スコアを混ぜる
-> JSONL を返す
-> Qwen direct-evidence を検証役割分担
BM25が捉えるもの:
Input.is_action_pressed
AnimatedSprite2D
position.clamp
screen_size
Vector2.ZEROembeddingが捕まえるもの:
player movement
2D movement tutorial
moving inside screen
animation based on movementQwen direct-evidence validatorが行うこと:
取得した JSONL の中に現在のチャンクと直接一致する文字列/パターンの根拠があるか確認する
関連のない JSONL を破棄する利点
- 文字列検索と意味検索の弱点を相互に補完する。
- Qwen がなくても一次候補の品質が向上する。
- raw chunk 条件を維持する。
- ハードコーディングされた Godot API signal extractor がなくても開始できる。
欠点
- スコア結合のチューニングが必要である。
- BM25 スコアとベクトルスコアのスケールが異なる。
- reranker がないとランキングが不安定になる可能性がある。
- false positive を完全に防ぐことはできない。
基準 chunk で期待される結果
上位候補:
first_2d_game / coding_the_player
same page / clamp section低減または検証で破棄すべき候補:
first_3d_game / player_movement_code
unrelated api_mapping
unrelated label_prototypesPoC シミュレーション
基準チャンクを二つのパスで同時に検索する。
raw chunkText
-> BM25 top 50
-> embedding top 50
-> 候補 ユニオン
-> 重複マージ
-> Qwen direct-evidence 検証BM25 上位候補例:
| 候補 | BM25 が拾った理由 |
|---|---|
first_2d_game / coding_the_player |
Input.is_action_pressed, move_left, move_right, AnimatedSprite2D.play/stop が直接一致 |
first_2d_game / clamp section |
position.clamp, Vector2.ZERO, screen_size が直接一致 |
first_3d_game / player_movement_code |
入力処理と normalized 移動トークンが重複 |
embedding 上位候補例:
| 候補 | embedding が拾った理由 |
|---|---|
first_2d_game / coding_the_player |
2D プレイヤーの移動とアニメーションの意味が近い |
first_2d_game / clamp explanation |
プレイヤーを画面内に制限する意味が近い |
first_3d_game / player_movement_code |
プレイヤーの移動意味が近い |
animation docs |
moving 状態でのアニメーション play/stop の意味が近い |
候補 union の後には次のように見える。
candidate A:
source: BM25 + embedding
evidence: Input.is_action_pressed, AnimatedSprite2D.play/stop
expected: accept
candidate B:
source: BM25 + embedding
evidence: position.clamp, Vector2.ZERO, screen_size
expected: accept
candidate C:
source: BM25 + embedding
evidence: Input.is_action_pressed, move_left, move_right, normalized
missing: AnimatedSprite2D, Vector2, screen_size
expected: lower or reject
candidate D:
source: embedding only
evidence: semantic movement/animation similarity
direct string match: weak
expected: validator decision neededQwen direct-evidence validatorに渡すときは、次の基準で判断します。
SOURCE_CODE 内の実際の文字列/API 呼び出しと
JSONL の source_api、source_pattern、match_terms、required_when_seen_in_code、before_code、
または docs_chunks の content/code_blocks/api_symbols が直接合っているか?PoCで確認するログ
この代替案は union プロセスが重要なので、次のことを示す必要があります。
1. BM25 候補一覧
2. 埋め込み候補一覧
3. union 後の重複除去結果
4. 各候補が BM25 から来たか埋め込みから来たか
5. 直接文字列根拠一覧
6. Qwen バリデータのはい/いいえ目に見える結論:
BM25は直接APIの根拠を上げ、
embeddingは説明型候補を補完する。
しかしunionだけではfalse positiveが残るため、validatorが必要である。判定
現実的な中間段階
実戦最小推奨ラインrerankerまで直接接続するのが負担なら、この代替案から比較できる。