55 lines
3.4 KiB
Markdown
55 lines
3.4 KiB
Markdown
# Проверка векторного поиска по коду 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,03–0,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-кандидатов.
|