Alternative D : BM25 + embedding parallèle
Flux
raw chunkText
-> BM25 top 50
-> embedding top 50
-> union des candidats
-> mélanger les scores
-> retourner JSONL
-> validation Qwen direct-evidenceRépartition des rôles
Ce que BM25 capture :
Input.is_action_pressed
AnimatedSprite2D
position.clamp
screen_size
Vector2.ZEROCe que l'embedding capture :
player movement
2D movement tutorial
moving inside screen
animation based on movementCe que fait le validateur d'évidence directe Qwen :
Vérifier s'il existe une preuve de chaîne/pattern correspondant directement au chunk actuel dans le JSONL récupéré
Supprimer le JSONL non pertinentAvantages
- Compense les faiblesses de la recherche de chaînes et de la recherche sémantique.
- La qualité du premier lot de candidats s'améliore même sans Qwen.
- Maintient la condition du « raw chunk ».
- Peut démarrer sans l'extracteur de signaux API Godot codé en dur.
Inconvénients
- Un réglage de la combinaison des scores est nécessaire.
- L'échelle du score BM25 et du score vectoriel diffère.
- Sans reranker, le classement peut devenir instable.
- Il n'est pas possible d'éliminer complètement les faux positifs.
Résultats attendus sur le chunk de référence
Candidats supérieurs :
first_2d_game / coding_the_player
same page / clamp sectionCandidats à abaisser ou à éliminer lors de la validation :
first_3d_game / player_movement_code
unrelated api_mapping
unrelated label_prototypesSimulation PoC
Recherche simultanément le chunk de référence sur deux chemins.
-> BM25 top 50
-> embedding top 50
-> union des candidats
-> fusion des doublons
-> validation de Qwen direct-evidenceBM25 top candidat exemple :
| Candidat | Raison capturée par BM25 |
|---|---|
first_2d_game / coding_the_player |
Correspondance directe de Input.is_action_pressed, move_left, move_right, AnimatedSprite2D.play/stop |
first_2d_game / clamp section |
Correspondance directe de position.clamp, Vector2.ZERO, screen_size |
first_3d_game / player_movement_code |
Chevauchement du traitement d’entrée et du jeton de déplacement normalisé |
embedding top candidat exemple :
| Candidat | Raison capturée par l'embedding |
|---|---|
first_2d_game / coding_the_player |
La signification du mouvement du joueur 2D et de l’animation est proche |
first_2d_game / clamp explanation |
La signification de la limitation du joueur à l’intérieur de l’écran est proche |
first_3d_game / player_movement_code |
La signification du mouvement du joueur est proche |
animation docs |
La signification de jouer/arrêter l’animation en état de déplacement est proche |
Après l’union des candidats, cela ressemble à ce qui suit.
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 neededLors du passage au validateur de preuves directes Qwen, il est évalué selon les critères suivants.
Les chaînes réelles/API appelées dans le **SOURCE_CODE** et
les `source_api`, `source_pattern`, `match_terms`, `required_when_seen_in_code`, `before_code` du **JSONL**,
ou le `content/code_blocks/api_symbols` de **docs_chunks** correspondent‑ils directement ?Vérifier les journaux dans le PoC
Cette alternative est importante car le processus d'union est crucial, il faut donc le montrer.
1. Liste des candidats BM25
2. Liste des candidats d'embedding
3. Résultat après suppression des doublons post‑union
4. Indication si chaque candidat provient de BM25 ou d'embedding
5. Liste des preuves sous forme de chaînes de caractères
6. Exemple/Oui‑Non du validateur QwenConclusion visible :
BM25 téléverse directement la preuve API,
l'embedding complète les candidats descriptifs.
Cependant, l'union seule laisse des faux positifs, donc un validateur est nécessaire.Jugement
Étape intermédiaire réaliste
Ligne de recommandation minimale en pratiqueSi vous trouvez difficile d'attacher directement le reranker, vous pouvez d'abord comparer cette alternative.