Initial project import

This commit is contained in:
2026-08-14 09:40:51 +03:00
parent 00040e5ce4
commit d7099bf80d
146 changed files with 30509 additions and 1055 deletions
@@ -0,0 +1,54 @@
# Проверка векторного поиска по коду 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-кандидатов.