idea_world_labDEV JOURNAL
2026年6月28日日曜日

代替 E: Qwen クエリプロファイル作成

フロー

raw chunkText
  -> Qwenに検索用JSON生成をリクエスト
  -> 生成されたJSONでBM25/vector検索
  -> JSONL候補を返す

例示出力

Qwenがうまく選択されれば、次のように検索プロファイルを作成できます。

{
  "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": []
}

長所

  • ハードコーディングを減らすことができる。
  • 複雑なチャンクで意図を要約できる。
  • 検索語を人が読みやすく作ることができる。
  • Godot の文脈推論を Qwen に任せることができる。

短所

  • 遅い。
  • コストがかかる。
  • 検索前段階からハルシネーションが入り得る。
  • Qwen がない手がかりを作り出すことがある。
  • 誤った migration intent を作成し、api_mapping を誤って引き込む可能性がある。

失敗例

基準チャンクには AnimatedSprite2D があるが、Qwen が次のように誤って要約すると危険である。

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

この場合は正常な Godot 4 のコードですが、migration mapping を誤って持ち込む可能性があります。

PoC シミュレーション

基準チャンクをまず Qwen に渡して検索プロファイルを作成させます。

入力:

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

成功プロファイル:

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

このプロファイルで検索すると、期待される候補は次のとおりです。

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

api_mapping:
  ほとんどなしまたは低い

label_prototypes:
  ほとんどなしまたは低い

失敗プロファイル:

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

失敗プロファイルが危険な理由:

SOURCE_CODEには AnimatedSprite がありません。  
SOURCE_CODEには KinematicBody2D がありません。  
SOURCE_CODEは Godot 4 の正常なコードである可能性があります。  
しかし、Qwen が migration intent を作成すると、api_mapping/label_prototypes を誤って検索する可能性があります。

PoCで確認するログ

Qwen query profile方式は検索の前にLLMが介入するため、次のログが必ず必要です。

1. raw chunkText  
2. Qwenが作成した query profile JSON  
3. profile 内の important_literals が SOURCE_CODE に実際に存在するか  
4. profile 内の migration_signals が SOURCE_CODE に実際に存在するか  
5. profile で検索した候補  
6. raw chunkText で検索した候補との違い

目に見える結論:

Qwen プロファイルがうまく出ると、検索語が見やすくなる。  
しかし、存在しない手がかりを作り出すと、検索前の段階で結果が汚染される。  
だから Qwen は検索前よりも検索後にバリデータとして使う方が安全だ。

判定

検索品質の実験用としては良い  
本番第一検索エンジンとしては慎重

元のメモの判断は、Qwenを検索前のクエリ生成器よりも検索後の直接証拠バリデータとして使用する方が安全だという側です。