docs: record final search benchmark findings
This commit is contained in:
1 parent
1c7ddf2fcb
commit
849c19e2ab
2 files changed
+118
-52
No files matched your search
@@ -2,6 +2,16 @@
|
||||
|
||||
## Не выпущено
|
||||
|
||||
- Backend `0.13.4` / Frontend `0.3.4`, алгоритм поиска `search-8`: для явно
|
||||
заданного multi-index поиска включена глобальная статистика DFS; signed review
|
||||
snapshots сохраняют полный index scope, а пустую выдачу можно сохранить с
|
||||
обязательным общим комментарием и точной проверкой рангов. Узкое расширение
|
||||
термина аренды сохранено без глобальных весов. На executable SHA
|
||||
`1c7ddf2` выполнен полный isolated прогон 7 500 запросов: изменились 537
|
||||
порядков относительно исходного baseline, 6 выдач остались пустыми; это
|
||||
наблюдения ранжирования, не экспертная оценка права. Три актуальных акта
|
||||
проверялись только в отдельном локальном supplement; production и исходный
|
||||
индекс не менялись.
|
||||
- Успешный CI на `push` в `main` запускает release workflow: при настроенных
|
||||
registry secrets он собирает образы rootless Kaniko, публикует digest
|
||||
references и сохраняет schema-v4 descriptor с SHA-256 в Gitea artifact;
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
`0.3.3` → `0.3.4`, версия алгоритма `search-6` → `search-8`. `search-7`
|
||||
относится к предшествующему составу ranking semantics; новые подписанные
|
||||
снимки этого PR помечаются `search-8`. Сохранённые отзывы не переписываются.
|
||||
Финальный runtime/batch прогон кода выполнен на `1c7ddf2`; последующий коммит
|
||||
этого отчёта и changelog меняет только документацию.
|
||||
|
||||
## Исходный benchmark
|
||||
|
||||
@@ -89,10 +91,10 @@ Backend теперь сохраняет исходную строку и доб
|
||||
фразы, исходный phrase boost 3; он не описывает multi-index DFS. После
|
||||
подключения трёх актов в отдельном supplement на `e653f3b` изменились 184
|
||||
выдачи против code-only варианта и 38 top-1; все шесть пустых выдач
|
||||
сохранились. Разные наборы индексов нельзя считать одним benchmark. Для
|
||||
итогового conditional-DFS SHA нужен отдельный прогон; контроль запросов об
|
||||
аренде жилья/земли, поднайме, трудовых отношениях, международном праве и KY
|
||||
формулировках остаётся обязательным. Rank-метрики не являются юридической
|
||||
сохранились. Разные наборы индексов нельзя считать одним benchmark. Итоговый
|
||||
conditional-DFS прогон на `1c7ddf2` приведён ниже. Контроль запросов об аренде
|
||||
жилья/земли, поднайме, трудовых отношениях, международном праве и KY
|
||||
формулировках выполнялся отдельно; rank-метрики не являются юридической
|
||||
оценкой.
|
||||
|
||||
## Условный scoring для явного multi-index scope
|
||||
@@ -117,11 +119,14 @@ multi-index конфигурации и не меняет behavior одиноч
|
||||
одном неизменном наборе данных: 300 заранее выбранных запросов, максимум 300.
|
||||
Порядок менялся в 93 случаях, top-1 — в 29; из 9 именованных риск-кейсов
|
||||
изменились 3, все 5 выбранных positive controls сохранили top-1. Контроль с
|
||||
индивидуальным актом 135066 сохранил этот акт первым. Результат по пяти
|
||||
педагогическим/научным запросам с медицинским актом на первом месте и по
|
||||
запросу о болезнях животных не исправлен; это межтематические lexical overlaps,
|
||||
а не основание вводить глобальные веса или специальные document ID.
|
||||
Сравнение ограничено выборкой и не является разметкой юридической правильности.
|
||||
индивидуальным актом 135066 сохранил этот акт первым. В пяти запросах о
|
||||
педагогических/научных работниках и одном запросе о болезнях животных top-1 не
|
||||
изменился. Эти шесть случаев требуют предметной оценки и не объявляются
|
||||
автоматически нерелевантными: статья 150(8) закона об охране здоровья связывает
|
||||
аттестацию педагогических/научных работников с медицинской деятельностью, а
|
||||
случай с болезнями животных остаётся без экспертной оценки. Новые оценки пар не
|
||||
выставлялись; специальные веса или document IDs не добавлялись. Сравнение
|
||||
ограничено выборкой и не является разметкой юридической правильности.
|
||||
Медианы 22,955 мс для default и 16,115 мс для DFS не используются как оценка
|
||||
скорости: default всегда исполнялся первым, возможен cache/order bias.
|
||||
|
||||
@@ -145,12 +150,11 @@ PYTHONPATH=backend python3 -m unittest \
|
||||
backend.test_search_api_opensearch.SearchMultiIndexDfsOpenSearchTest.test_global_statistics_mode_accepts_read_only_multi_index_search -v
|
||||
```
|
||||
|
||||
Тест выполняет только поиск и проверяет подписанный scope; он не создаёт и не
|
||||
удаляет индексы. Root запускает его только при подтверждении, что указанный
|
||||
supplement ещё существует и доступен на read-only runtime. Полный benchmark на
|
||||
7 500 запросах нужен для итогового pinned SHA с тем же frozen baseline.
|
||||
300-query эксперимент и предыдущие benchmarks не следует выдавать за
|
||||
результат нового SHA.
|
||||
Root выполнил этот read-only gate на 8081 для `1c7ddf2`: фактический multi-index
|
||||
URI использовал DFS и подписанный token сохранял полный scope. Gate выполняет
|
||||
только поиск и не создаёт/удаляет индексы. Полный benchmark на том же code SHA
|
||||
и frozen baseline приведён ниже; 300-query experiment и более ранние прогоны
|
||||
остаются отдельными сравнительными срезами.
|
||||
|
||||
Откат к предшествующему приложению возвращает `query_then_fetch` для multi-index
|
||||
поиска. Индекс, документы, saved reviews и старые подписанные токены при этом
|
||||
@@ -159,6 +163,61 @@ supplement ещё существует и доступен на read-only runtim
|
||||
контракт ниже: отключение его подключения скрывает только добавленные редакции,
|
||||
не удаляя подготовленные файлы и базовый индекс.
|
||||
|
||||
## Итоговый pinned прогон search-8
|
||||
|
||||
Полный isolated прогон для executable SHA `1c7ddf2fcbd7c55920470e7ac52339fdab0366db`
|
||||
собрал 7 500 уникальных запросов с версией `search-8`. SHA-256 выдачи:
|
||||
`fc02e22e5b3d612813ffc0bdaf9892bb16ee4c29af3e1b77f79e58a0a45c8ec1`. Итог
|
||||
сопоставлен с frozen baseline и двумя явно указанными промежуточными режимами:
|
||||
|
||||
| Сравнение | Изменён порядок | Изменён top-1 |
|
||||
|---|---:|---:|
|
||||
| Исходный baseline `search-6` | 537 | 103 |
|
||||
| Code-only `726b1ee`, `search-7` | 521 | 93 |
|
||||
| Code + три акта, `e653f3b`, без DFS | 425 | 63 |
|
||||
|
||||
Это число изменений порядка, а не улучшений. Все шесть пустых выдач сохранились
|
||||
во всех четырёх прогонах. Среди ранее проверенных Codex (ИИ) пар с нулевой
|
||||
оценкой top-1 стало 26 вместо 28 в baseline; остальные 26 не объявлены
|
||||
исправленными, и новые выдачи автоматически не оценивались.
|
||||
|
||||
| Добавленный акт | Наблюдался в top-1 / top-3 / top-10 |
|
||||
|---|---:|
|
||||
| Трудовой кодекс КР `230021083` | 24 / 58 / 105 |
|
||||
| Земельный кодекс КР `230029465` | 4 / 11 / 26 |
|
||||
| Закон об охране здоровья `230000918` | 34 / 51 / 92 |
|
||||
|
||||
Все шесть точных названий новых актов на RU/KY дали ожидаемый текущий акт первым.
|
||||
Все 284 запроса, общие с целевым DFS экспериментом, совпали с ним по полному
|
||||
порядку кодов и редакций. Проверки dataset guard подтвердили неизменность
|
||||
исходного индекса, manifest, mappings и UUID/count, а также 115 подключённых
|
||||
файлов. 7 503 записи локальной лаборатории совпали с backup; обе SQLite
|
||||
integrity checks прошли. Записи оценок, комментарии и пользователи не менялись.
|
||||
|
||||
Шесть межтематических контекстов нельзя автоматически считать нерелевантными:
|
||||
медицинский закон остался первым в пяти запросах о педагогических/научных
|
||||
работниках и в одном запросе о болезнях животных. Для педагогических случаев
|
||||
проверенная статья 150(8) связывает аттестацию этих работников с медицинской
|
||||
деятельностью; новые оценки пар не выставлялись. Вопрос о животных также
|
||||
остался без экспертной оценки. ИИ-аннотации не доказывают полноту правового
|
||||
ответа или юридическую правильность ранжирования.
|
||||
|
||||
Режим и scope дополнительно проверены на runtime `8081`: для multi-index `/search`
|
||||
уходит DFS, для одиночного индекса и filters — прежний default; тело DSL
|
||||
одинаково. Alias проверен transport mock без создания alias. Runtime mode/API
|
||||
smoke включал HMAC/TTL, signed scope, сохранение пустого результата и
|
||||
отрицательные rank/code сценарии. Browser UI fixture прошёл на `726b1ee`; UI
|
||||
побайтно не менялся в следующих SHA, но отдельный browser прогон на `1c7ddf2`
|
||||
не выполнялся. Медиана backend `23.685 мс` описательна и не является SLO или
|
||||
доказательством ускорения.
|
||||
|
||||
Эксперимент подключал только три акта в отдельном supplement и не доказывает
|
||||
полноту всего корпуса, актуальность всех редакций, наличие вложений или
|
||||
production-готовность. Отключение overlay/supplement скроет эти новые редакции
|
||||
из локального поиска/API, но сохранит подготовленные файлы, review-записи и
|
||||
исходный индекс. Production не менялся. Подробный технический отчёт и raw
|
||||
benchmark остаются во внешнем рабочем наборе и в PR не включены.
|
||||
|
||||
## Пустые выдачи в лаборатории
|
||||
|
||||
Исходный контракт блокировал сохранение шести подписанных пустых снимков:
|
||||
@@ -185,12 +244,14 @@ SQLite-схема, исторические записи и формат под
|
||||
сессии, 79 AI-оценок и 55 516 диагностических комментариев; 74 715
|
||||
оценок результатов остались пустыми намеренно. Integrity check прошёл,
|
||||
порядок кодов и редакций baseline не менялся. Эти сохранённые оценки не
|
||||
переписывались; шесть пустых сессий должны быть размечены отдельно после
|
||||
выпуска интерфейса.
|
||||
переписывались. В последующем изолированном trial шесть реальных подписанных
|
||||
пустых отзывов с общими комментариями были сохранены как записи 7498–7503;
|
||||
итоговые 7 503 строки лаборатории совпали с backup, integrity check прошёл.
|
||||
Пустые query-level отзывы не являются оценками отдельных документов.
|
||||
|
||||
## Пробел актуального корпуса и безопасный контракт закрытия
|
||||
|
||||
Отдельно от ранжирования, в проверенном тестовом индексе не было трёх
|
||||
Отдельно от ранжирования, в исходном base index не было трёх
|
||||
подтверждённых действующих актов (все три canonical ID имели `_count = 0`):
|
||||
|
||||
| Акт | Canonical ID | Последняя проверенная редакция |
|
||||
@@ -205,13 +266,16 @@ canonical-каталоги всех трёх документов, manifest со
|
||||
обработанных документов. Однако трудовой акт там отстаёт от официальной
|
||||
редакции 57548 от 28.07.2026 (последняя подготовленная — № 60 от 23.06.2026);
|
||||
земельный акт нормализован до редакции № 10 от 18.07.2025; для акта о здоровье
|
||||
последняя подготовленная — № 60 от 23.01.2026. В индекс эти три canonical ID не
|
||||
попали. Прежние отменённые трудовой и земельный кодексы нельзя переименовать
|
||||
последняя подготовленная — № 60 от 23.01.2026. В base index эти три canonical
|
||||
ID не попали. Прежние отменённые трудовой и земельный кодексы нельзя переименовать
|
||||
или поднять как замену актуальным нормам.
|
||||
|
||||
Для отдельной проверки подготовлены точные официальные RU/KY редакции: 3
|
||||
документа и 8 934 фрагмента. Это добавление пока не подключено к индексу или
|
||||
API. Вложения и полная история новых canonical ID отдельно не подтверждены.
|
||||
Для локальной изолированной проверки подготовлены точные официальные RU/KY
|
||||
редакции: 3 документа и 8 934 фрагмента. На runtime 8081 они были временно
|
||||
подключены отдельным supplement-index и доступны API через read-only overlay
|
||||
catalogues. Это не изменение base index или production и не доказательство
|
||||
полноты корпуса. Вложения и полная история новых canonical ID отдельно не
|
||||
подтверждены.
|
||||
|
||||
Закрытие пробела требует отдельного контролируемого обновления данных:
|
||||
|
||||
@@ -222,39 +286,31 @@ API. Вложения и полная история новых canonical ID о
|
||||
3. Нормализовать документы отдельно и проверить exact-count/hash. Для
|
||||
ограниченного дополнения собрать отдельный версионный индекс только из этих
|
||||
актов; не пересобирать и не перезаписывать индекс из 42,6 млн фрагментов.
|
||||
4. На изолированном стенде подключить read-only представление трёх новых
|
||||
каталогов к API `data_root` и искать через выражение
|
||||
`текущий-индекс,supplement-index`. URL-кодирование запятой для такого
|
||||
выражения проверено read-only на API. Проверить наличие canonical ID,
|
||||
открытие новой редакции RU/KY, статус и даты, collapse по документу, а также
|
||||
контрольную выдачу по старым индексам. Не создавать записи в основном
|
||||
индексе и не менять alias до принятия результата.
|
||||
4. Изолированный read-only trial уже проверил отдельный supplement-index,
|
||||
подключённые каталоги `data_root`, RU/KY выдачу, current-edition routes,
|
||||
collapse и контрольные запросы. Перед новым подключением нужно повторно
|
||||
сверить official source и dataset guards; trial не записывал новые документы
|
||||
в base index и не менял alias.
|
||||
5. Публикация требует отдельного владельческого разрешения и проверенного
|
||||
rollback. Если отдельный supplement-index будет включён, rollback отключит
|
||||
поиск и просмотр новых редакций из него; подготовленные файлы и уже
|
||||
сохранённые отзывы при этом сохраняются, базовый индекс не удаляется. Эта PR
|
||||
не загружает документы, не подключает offline editions к API и не меняет
|
||||
индекс или production.
|
||||
rollback. При отключении локального supplement-index поиск и просмотр новых
|
||||
редакций из него прекращаются; подготовленные файлы и уже сохранённые отзывы
|
||||
сохраняются, базовый индекс не удаляется. PR
|
||||
фиксирует код и результаты локального испытания; production, base index и
|
||||
исходные данные не менялись.
|
||||
|
||||
## Что остаётся проверить
|
||||
|
||||
- Root-owned изолированный прогон на 8081 должен проверить реальный top-k новой
|
||||
терминологической ветки и baseline-сравнение контрольных примеров.
|
||||
- Целевой read-only integration gate, который не создаёт и не удаляет индекс;
|
||||
прогон выполняет root на выделенном стенде:
|
||||
|
||||
```bash
|
||||
AKYLDASH_OPENSEARCH_URL=http://127.0.0.1:8081 \
|
||||
AKYLDASH_OPENSEARCH_INDEX=akyldash-fragments-v2 \
|
||||
PYTHONPATH=backend python3 -m unittest \
|
||||
backend.test_search_api_opensearch.SearchRankingOpenSearchTest.test_generic_lease_query_ranks_general_civil_code_first -v
|
||||
```
|
||||
- Полный benchmark после изменения нужен для нового snapshot и сравнения; он
|
||||
выполняется отдельно от исходной сбора 7 500 выдач.
|
||||
- Актуальные три акта требуют отдельной проверки полноты/лицензии/истории и
|
||||
контролируемой полной пересборки корпуса. Их отсутствие не решается
|
||||
ранжированием.
|
||||
- Независимое ревью и CI этой PR не заменяют экспертную оценку правового ответа.
|
||||
- Финальный code/data эксперимент и full 7 500 run относятся к executable SHA
|
||||
`1c7ddf2`; текущий follow-up commit меняет только этот report и changelog.
|
||||
CI и полное независимое ревью должны повторно пройти на новом PR head.
|
||||
- Browser fixture пустой выдачи прошёл на `726b1ee`; UI побайтно неизменён в
|
||||
следующих commit. Для `1c7ddf2` выполнены реальные API/runtime smokes, но новый
|
||||
полный browser run не заявляется.
|
||||
- Три supplement-акта не подтверждают полноту всего корпуса, полную историю,
|
||||
вложения, лицензирование или production readiness. Для новой публикации нужен
|
||||
свежий source/edition check и отдельное разрешение владельца.
|
||||
- Измерения top-k, AI-разметка и технические smoke checks не заменяют независимую
|
||||
экспертную оценку юридической релевантности.
|
||||
|
||||
Исходные измерения и хеши хранятся вне репозитория в рабочем наборе
|
||||
`search-benchmark-2026-11-02`. В этот репозиторий не включаются сырые ответы
|
||||
|
||||
Reference in new issue
Block a user