idea_world_labDEV JOURNAL
dimanche 28 juin 2026

Alternative E : création d’un profil de requête Qwen

Flux

raw chunkText
  -> Demander à Qwen de créer un JSON pour la recherche
  -> Recherche BM25/vector avec le JSON généré
  -> Retourner les candidats JSONL

Exemple de sortie

Si Qwen est bien sélectionné, vous pouvez créer un profil de recherche comme suit.

{
  "search_intent": "Godot 4 2D player movement tutorial",
  "important_literals": [
    "Input.is_action_pressed",
    "Vector2.ZERO",
    "AnimatedSprite2D",
    "position.clamp",
    "screen_size"
  ],
  "likely_doc_topics": [
    "first 2D game",
    "coding the player",
    "player movement",
    "clamp position to screen",
    "play and stop AnimatedSprite2D"
  ],
  "migration_signals": []
}

Avantages

  • Il est possible de réduire le codage en dur.
  • On peut résumer l’intention dans un chunk complexe.
  • Les termes de recherche peuvent être rendus plus lisibles pour les humains.
  • On peut confier le raisonnement contextuel de Godot à Qwen.

Inconvénients

  • C’est lent.
  • Cela coûte cher.
  • Des hallucinations peuvent apparaître dès l’étape de recherche.
  • Qwen peut générer des indices inexistants.
  • Une intention de migration incorrecte peut être créée, entraînant une mauvaise importation de api_mapping.

Exemple d’échec

Le chunk de référence contient AnimatedSprite2D, mais si Qwen le résume incorrectement comme suit, c’est dangereux.

{
  "migration_intent": "Godot 3 to Godot 4 migration",
  "important_terms": ["AnimatedSprite", "AnimatedSprite2D"]
}

Cette situation correspond à un code Godot 4 correct, mais il est possible d’importer une mauvaise cartographie de migration.

Simulation PoC

Faire passer le chunk de référence à Qwen d’abord afin de créer un profil de recherche.

Entrée:

SOURCE_CODE:
func _process(delta):
  ...
  $AnimatedSprite2D.play()
  position = position.clamp(Vector2.ZERO, screen_size)

Profil de réussite :

{
  "search_intent": "Godot 4 2D player movement tutorial",
  "important_literals": [
    "Input.is_action_pressed",
    "Vector2.ZERO",
    "AnimatedSprite2D",
    "position.clamp",
    "screen_size"
  ],
  "migration_signals": []
}

Les candidats attendus lors de la recherche avec ce profil sont les suivants.

docs_chunks:
  first_2d_game / coding_the_player
  first_2d_game / clamp and screen bounds section

api_mapping:
  Presque aucun ou faible

label_prototypes:
  Presque aucun ou faible

Profil d'échec:

{
  "search_intent": "Godot 3 to Godot 4 migration",
  "important_literals": [
    "AnimatedSprite",
    "AnimatedSprite2D",
    "KinematicBody2D"
  ],
  "migration_signals": ["AnimatedSprite to AnimatedSprite2D"]
}

Pourquoi le profil d'échec est dangereux :

Il n'y a pas d'AnimatedSprite dans SOURCE_CODE.  
Il n'y a pas de KinematicBody2D dans SOURCE_CODE.  
SOURCE_CODE peut être un code valide pour Godot 4.  
Cependant, si Qwen crée une intention de migration, il peut mal rechercher api_mapping/label_prototypes.

Vérifier les journaux dans le PoC

Le mode de profilage de requête Qwen implique l'intervention du LLM avant la recherche, il est donc indispensable d'avoir les journaux suivants.

1. raw chunkText  
2. JSON du profil de requête créé par Qwen  
3. Vérifier si les important_literals dans le profil existent réellement dans le SOURCE_CODE  
4. Vérifier si les migration_signals dans le profil existent réellement dans le SOURCE_CODE  
5. Candidats recherchés avec le profil  
6. Différence avec les candidats recherchés avec raw chunkText

Conclusion visible :

Si le profil Qwen apparaît bien, les termes de recherche sont plus agréables à voir.  
Cependant, si vous créez des indices inexistants, les résultats sont contaminés avant la recherche.  
Ainsi, il est plus sûr d’utiliser Qwen comme validateur après la recherche plutôt qu’avant.

Jugement

Bon pour les expériences de qualité de recherche  
À utiliser avec prudence comme moteur de recherche principal en production

La décision concernant la note originale est qu'il est généralement plus sûr d'utiliser Qwen comme validateur de preuves directes après la recherche plutôt que comme générateur de requêtes avant la recherche.