Альтернатива F: BM25 + embedding + reranker + validator
Поток
raw chunkText
-> BM25 top 80
-> embedding top 80
-> объединение кандидатов
-> reranker напрямую сравнивает raw chunk и каждый JSONL кандидат
-> возвращает top JSONL
-> Qwen direct-evidence validator проверяет прямые доказательстваРаспределение ролей
BM25:
Находим точную строку/кандидата на API‑токен.code embedding:
Дополняет варианты, у которых выражения различаются, но смысл близок.reranker:
Сравниваем кандидаты, полученные с помощью BM25 и embedding, с raw chunk и сортируем их заново.Qwen direct-evidence validator:
Проверьте, есть ли в 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 симуляция
Предположим, что базовый chunk помещается в окончательный поток рекомендаций.
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 similarityЭтап 3: кандидатный 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 и кандидат вместе.
No markdown fragment was provided for translation.
| 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
В валидаторе Qwen спрашивается следующее.
Посмотрите на SOURCE_CODE и полученный JSONL,
Есть ли в JSONL строки/вызовы API/основания паттерна, непосредственно соответствующие SOURCE_CODE?
Сначала дайте оценку «да» или «нет».No Markdown fragment provided for translation.
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 = ввод движения похож, но это 3D документация, и нет прямых доказательств AnimatedSprite2D/screen_sizeЛоги, проверяемые в PoC
Поскольку у этого решения много шагов, необходимо просматривать следующее на одном экране.
1. raw chunkText
2. BM25 кандидаты и совпадающие термины
3. Кандидаты embedding и сходство
4. Результат объединения
5. Оценка reranker и изменение ранга
6. Qwen validator да/нет
7. Итоговый accept/reject JSONLВидимый вывод:
BM25 и embedding собирают широкий набор кандидатов.
reranker исправляет порядок похожих кандидатов.
Qwen validator полностью отбрасывает JSONL без прямых доказательств.Преимущества
- Вероятность того, что качество будет наилучшим, высока.
- Можно уменьшить количество ложноположительных результатов BM25.
- Можно также уменьшить количество ложноположительных результатов embedding.
- Сохраняются условия необработанных фрагментов.
- Низкая зависимость от жёсткого кодирования.
- С помощью валидатора Qwen можно удалить JSONL без прямых доказательств в конце.
Недостатки
- Требуются затраты.
- Возникает задержка.
- Если добавить слишком много кандидатов, процесс замедляется.
- Переранжировщик также не является проверяющим доказательства, поэтому нужен финальный валидатор.
Оценка
Качество превыше всего – окончательная рекомендацияОкончательная рекомендация оригинальной заметки близка к этой структуре.