2026-07-28 Source Flow Debugger Отчет о поиске реального кода
Цель
В предыдущих записях было указано, что реальный проект Godot был разбит на 134 чанка и произведён поиск, при этом связанные документы оказались в верхних результатах. Одного лишь этого описания недостаточно, чтобы понять, что именно возвращалось в каждом чанке, присутствует ли возвращённый JSONL в SQLite, и есть ли более прямые документы в SQLite, которые могли быть вытеснены в ранжировании.
В этом отчёте будут разложены на отдельные пункты три вопроса.
- Source Flow Debugger возвращал какой JSONL‑кандидат для каждого чанка?
- Совпадает ли возвращённый кандидат точно с проверенным оригинальным JSONL в SQLite, который был зафиксирован?
- Является ли прямое подтверждение, найденное во всей базе SQLite, более приоритетным, или требуется улучшение ранжирования?
Поскольку конечная точка Qwen находится в состоянии приостановки, в этот раз я выполнил только поиск и сравнение с SQLite.
Я не записал классификацию версии Godot от Qwen и результаты одобрения/отклонения кандидатов,
и не считаю факт появления кандидата успешной окончательной проверкой.
Фиксированный ввод
- Репозиторий:
godotengine/godot-demo-projects - Лицензия: MIT
- Коммит:
cae8dc567a56d3e7936f171bcb85f0ccb9634ad0 - Проект:
2d/hexagonal_map - Входные файлы:
project.godot,map.tscn,tileset.tres,tileset_edit.tscn,troll.gd,troll.tscn - Количество входных файлов: 6
- Количество созданных чанков: 134
- AST‑чанков: 3
- Прямых чанков: 131
SQLite, использованный при выполнении, находится по пути
outputs/godot-rag-sqlite/godot-rag.sqlite3 и во время выполнения включал
docs_chunks 2 265 записей, api_mapping 1 133 записей,
label_prototypes 2 записи и embedding 3 399 записей.
Состояние выполнения
| Этап | Состояние | Смысл текущего выполнения |
|---|---|---|
| SQLite FTS5 + Okapi BM25 | Выполняется | Все 134 чанка найдены |
| embedding | Не выполнено | Не установлен ключ API для embedding запроса |
| reranker | Не выполнено | Не установлен ключ API провайдера |
| Qwen validator | Не выполнено | Конечная точка Qwen недоступна |
Поэтому нижеприведённый рейтинг является результатом этапа lexical/BM25, а не окончательным рейтингом всей стратегии F.
Общий результат сравнения
| Пункт | Результат |
|---|---|
| Чанк | 134 |
| BM25‑кандидаты, возвращённые для каждого чанка | 80 |
| Кандидаты, возвращённые при сравнении с SQLite | 10 720 |
| Кандидаты после удаления дубликатов | 844 |
| Кандидаты, которые не найдены в SQLite | 0 |
Кандидаты, у которых provenance не verified |
0 |
Кандидаты, у которых возвращённый raw_json отличается от оригинала в SQLite |
0 |
Возврат docs_chunks |
10 713 |
Возврат api_mapping |
7 |
Возврат label_prototypes |
0 |
Согласованность возвращаемых данных была корректной. Таблица и ID, отображённые в Source Flow Debugger, при повторном запросе в SQLite оказались полностью присутствующими — все 10 720 записей, provenance был verified, а возвращённые записи совпадали с сохранённым raw_json.
Однако это не означает, что качество поиска также было идеальным. Все 134 чанка заполнили верхний лимит в 80 кандидатов, поэтому лексические кандидаты не были достаточно сузены. Кроме того, из‑за защиты имени файла anchor в 9 чанках документ с более низким BM25‑баллом был повышен до первой позиции.
Результаты представительных чанков
Хорошо найденные примеры
| Чанк | Сводка ввода | Результат возврата | Сравнение с SQLite |
|---|---|---|---|
| 1 | project.godot описание формата → Описание формата файла project.godot |
Manually editing project.godot 1‑е место |
Проверка одинакового ID и оригинального текста |
| 13 | TileMapLayer, tile_map_data, TileSet |
TileMapLayer свойство 1‑е место, метод 2‑е место, TileData 3‑е место |
Все проверенные docs_chunks |
| 42 | TileSetAtlasSource, texture region |
TileSetAtlasSource 1‑е место, TileSetSource 2‑е место |
Проверка прямых оснований класса |
| 125 | _physics_process, Input.get_axis, move_and_slide |
Physics process 1‑е место, документы по 2D movement 5‑7‑е места, CharacterBody2D 8‑е место |
Документы, связанные с перемещением и физикой, присутствуют вместе |
| 130 | CharacterBody2D узел → Узел CharacterBody2D |
CharacterBody2D класс 1‑е место |
Проверка прямых оснований класса |
Документ, занявший 1‑е место в чанке 1, оказался в топе не только благодаря BM25‑оценке, а был сохранён благодаря защите лексического якоря project.godot. В этом случае описание формата файла совпадает напрямую, поэтому защита была действительной.
Необходимые случаи улучшения ранжирования
Чанк 123: extends CharacterBody2D
- Фактическое 1‑е место:
Collision exceptions - Документация класса
CharacterBody2D: 17‑е место - Сопоставление
KinematicBody2D -> CharacterBody2D: 6‑е место
В SQLite была точная документация класса CharacterBody2D, но она была размещена после более широких документов о столкновениях и перемещении. Это не отсутствие данных, а проблема ранжирования. В коротких чанках объявлений необходимо более сильно учитывать полностью совпадающие имена классов и полей структуры, чем обычные контекстные токены.
Чанк 124: tan(deg_to_rad(30))
- Фактическое 1‑е место:
Setting up the spring arm and camera Evaluating expressions: 2‑е и 3‑е места
В документе, занимающем первое место, тоже есть пример использования deg_to_rad, так что он не полностью нерелевантен, но документ, объясняющий сам вызов, отстал от 3D‑урока. Требуется переупорядочивание, чтобы отделить прямое описание API от простых примеров использования.
Структурные кандидаты, требующие повторной проверки Qwen
Чанк 13: PackedByteArray в map.tscn
Сопоставление PackedByteArray -> byte[] попало на 48‑е место. Сохраняемый JSONL описывает миграцию коллекций C#, но вход — ресурс сцены GDScript. Токены совпадают, однако язык и контекст применения различаются, поэтому на этапе поиска нельзя автоматически одобрять окончательный результат.
Чанк 130: Узел, уже использующий CharacterBody2D
Сопоставление KinematicBody2D -> CharacterBody2D заняло 3‑е место. Это сопоставление имеет отношение к определению версии, но в текущем чанке отсутствует прежний API KinematicBody2D. Это не кандидат для предупреждения о миграции; Qwen должен рассматривать JSONL и исходный чанк совместно и классифицировать их как «основано на Godot 4» или «не требуется применение».
Оригинальные SQLite JSONL для обоих случаев сохранены в поле reviewCases машинного отчёта без изменений.
Почему label_prototypes равно 0
Прототипы SQLite представлены только двумя записями:
enum PlaneSemanticLabelclass OpenXRSpatialComponentPlaneSemanticLabelList
В чанке hexagonal_map эти два шаблона не встречались. Поэтому отсутствие записей label_prototypes в этом запуске объясняется не пропуском, а срабатыванием фильтра прямых структурных оснований.
Текущий вывод
- Согласованность данных между кандидатами и оригиналом SQLite проверена.
- Типичные настройки проекта, TileSet, TileMapLayer и поиск функций перемещения включены в верхние позиции релевантных документов.
- Не все чанки заполняют верхний лимит в 80 кандидатов, поэтому сокращение количества кандидатов недостаточно.
- В коротких объявлениях классов и одиночных вызовах функций более прямые документы иногда оттесняются вниз.
- Поскольку сопоставление структуры может попасть в кандидаты только по токенам, Qwen не может принять окончательное решение, пока не будет активен.
Критерии следующего повторного запуска
Когда эндпоинт Qwen будет готов, использовать тот же коммит и те же 134 чанка для добавления следующих пунктов:
- Классификация каждого структурного кандидата как
Godot 3,Godot 4,не относится,недостаточно оснований - Решение о отклонении кандидатов с несоответствием языкового контекста, например
PackedByteArray -> byte[] - Отклонять ли кандидаты миграции в чанках, где уже используется целевой API
- Отклонять ли негативные контрольные JSONL, не связанные с темой
- Изменения ранжирования прямых документов до и после применения embedding и reranker