Files
llm/docs/research/1c-code-vector-search-evaluation.md
2026-08-14 09:40:51 +03:00

3.4 KiB
Raw Permalink Blame History

Проверка векторного поиска по коду 1С

Дата проверки: 2026-07-26. База: upo_test.

Контур

  • актуальный SQL-derived индекс адаптера: 1 080 модулей, 22 538 chunks;
  • очередь изменений: 0, snapshot чистый;
  • модель: Qwen3-Embedding-0.6B-GGUF, Q8_0;
  • runtime: llama.cpp, CPU-only на Ryzen 9 5900X;
  • endpoint: http://docker-gpu.cin.su:8082/v1/embeddings;
  • вектор модели: 1024, сохраняемый Matryoshka-срез: 384;
  • RTX 4090 сервисом эмбеддингов не используется.

Измерения

Прогретый короткий запрос к endpoint: 0,030,08 с. Индексация 100 процедур и функций длиной до 1 000 символов заняла 54,52 с, ошибок и конфликтов нет.

Контрольные запросы к строгому поиску:

Запрос Top-1 Время
проверить является ли объект документом ЭтоДокумент 0,70 с
преобразовать число из строки ЧислоИзСтроки 0,44 с
добавить реквизит в HTML представление ДобавитьРеквизитКHTML 0,50 с

Каждый результат был повторно проверен по live SQL. Чтение read_selector вернуло точное тело ЭтоДокумент, а не сохранённый текст из векторного кеша.

Решение по отдельной векторной БД

Пока не добавлять. SQLite остаётся достаточным для текущего инкрементального контура и проще связывает chunk_id, text_sha1, outbox и проверку актуальности. Векторный кеш не является источником истины.

Повторно оценить ANN-хранилище после заполнения не менее 5 000 актуальных 384-мерных vectors. Практические триггеры:

  • p95 строгого поиска выше 1 секунды;
  • более 50 000 актуальных chunks;
  • SQLite-файл адаптера больше 1 ГиБ из-за embeddings.

Если триггер сработает, Qdrant/pgvector должен быть только производной копией: ключ chunk_id, обязательный text_sha1, namespace базы/модели/размерности, удаление через outbox. Перед ответом адаптер всё равно проверяет live SQL.

Выявленный следующий приоритет

Глобально найденные активные модули пока часто имеют object_ref=null. Безопасный read_selector и имя процедуры присутствуют, но публичное имя владельца 1С не восстановлено. Это не проблема вектора; это неполный metadata.module_owner_cache. Следующая доработка — фоновое построение name-first карты владельцев и lazy backfill только для top-кандидатов.