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

55 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Проверка векторного поиска по коду 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-кандидатов.