textmachine/docs/research/14-adaptive-memory.md

226 lines
52 KiB
Markdown
Raw 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.

# Адаптивный/обучающийся слой памяти: стоит ли гибрид, огибающая осуществимого, арбитраж
Дата: 2026-07-05. Сессия **«Адаптивный слой памяти»** (промт `docs/archive/prompts/ADAPTIVE_MEMORY_RESEARCH_PROMPT.md`). Предмет — вопрос владельца: не будет ли **максимально эффективным гибрид** «отлаженный детерминированный банк памяти (Р3) + слой, обучающийся ПО ХОДУ перевода книги» (in-context / локальный LoRA / kNN-MT / online-retrieval / само-коррекция), и **как именно смёржить под наш жёсткий локально-стоимостный контур**. Мандат — адверсариально проверить, стоит ли оно того, а не поверить в модность.
Метод (как в валидации банка, `research/13`): многоагентный ресёрч по 6 направлениям (kNN-MT / in-context-демонстрации / adaptive-online-MT / локальный LoRA / adaptive-RAG-петли / свежее 20252026) + **независимая адверсариальная верификация каждой несущей находки по первоисточнику** (24 верификатора: 19 CONFIRMED, 5 OVERCLAIM с точной поправкой) + **две исполняемые пробы на нашем стенде/ключах** (`eval/adaptive_probe.py` — доступ к логитам у флагманов; `eval/adaptive_incontext.py` — демонстрации vs глоссарий на реальном zh→ru) + чтение реального кода `backend/` на git HEAD. Все заблокированности проверены **пробой, а не по памяти** (мандат §Жёсткий контур). Прод-код не пишется — только `eval/` и этот документ.
> **Одна фраза.** Гибрид **в основном НЕ стоит того**: всё, что «учится» на уровне декодера/логитов/весов флагмана — **физически заблокировано** (подтверждено живой пробой), а то, что реально помогает (копирование точного рекуррентного термина; коррекция под надёжный внешний сигнал) — **уже принадлежит детерминированному ядру** и в обучающемся слое было бы строго хуже. Остаётся **ровно один** кандидат, влезающий в контур: **непараметрические in-context демонстрации** для СТИЛЯ серой зоны — но он **не проходит БАР-(в) по имеющимся данным** (мой zh→ru замер: демонстрации НЕ бьют детерминированный soft-глоссарий по консистентности, 0.833 vs 0.875) и его надо **гейтить тем же in-house eval'ом, что и сам банк**. Плюс: гипотеза владельца «эмбеддинги→CPU, 8 ГБ VRAM→обучающийся модуль» **верна в посылке, но пуста в следствии** — освобождать VRAM правильно, но **обучающегося модуля, который на эти 8 ГБ бьёт базис, нет**.
---
## TL;DR — вердикт по каждому кандидату (правило БАР)
БАР (из промта): любой мёрж обязан (а) оставить детерминированный горячий путь авторитетным; (б) влезть в VRAM/стоимость (локаль-first); (в) **эмпирически бить eval-валидированный детерминированный базис на zh/ja→ru** по консистентности/fidelity/цене; (г) оправдать сложность. Не проходит (в) → **не мёржить**.
| Механизм «учится по ходу книги» | Осуществим? | БАР | Вердикт |
|---|---|---|---|
| **kNN-MT на флагмане-переводчике** | ❌ blocked (нужны hidden states декодера) | — | **НЕ мёржить** (физически невозможно) |
| **Constrained/beam decoding, forced tokens на флагмане** | ❌ blocked (нет доступа к декодеру/beam) | — | **НЕ мёржить** (физически невозможно) |
| **Frontier-LoRA / online-SGD весов флагмана** | ❌ blocked (нет тренируемых адаптеров у провайдеров; fine-tuning сворачивается) | — | **НЕ мёржить** (физически невозможно) |
| **Локальный kNN-MT черновик (наш декодер)** | 🟡 технически да | (в) ✗ | **НЕ мёржить**: чистый выигрыш уже у банка; на слабой локали чинит не то |
| **Книга-LoRA на локальном reranker/ключ-энкодере** | 🟡 технически да (впритык) | (в) ✗ | **НЕ мёржить**: data-poor, «learns-less», нет разделяющего порога у bge-m3 |
| **Локальный само-корректирующийся LLM-цикл** | 🟡 да, но | (в) ✗ | **НЕ мёржить**: intrinsic self-correction деградирует без внешнего верификатора (а он у нас уже детерминированный) |
| **In-context ДЕМОНСТРАЦИИ (серая зона: стиль/auto/ambiguous)** | ✅ да (0 VRAM, memory+prompt) | (в) **?** | **ПИЛОТИРОВАТЬ под eval** — единственный кандидат; но индикатив: НЕ бьёт базис по консистентности |
| **Детерминированный консистентность-кэш + precision-gated adaptive-retrieval** | ✅ да (0 ML, 0 VRAM) | (в) н/п | **ВНЕДРЯТЬ** — это гигиена банка, а не «обучающийся слой» |
---
## §0. Жёсткий контур подтверждён живой пробой (не по памяти)
Мандат требовал перепроверить заблокированность методов **пробой**, а не по памяти. Проба `eval/adaptive_probe.py` (2026-07-05, живые ключи, наши боевые модели):
| Модель стека (роль) | token `logprobs` | `logit_bias` | hidden states |
|---|---|---|---|
| deepseek-v4-flash (черновик) | **есть** (top-5) | принят | нет (никогда) |
| grok-4.3 (редактор) | **нет** (200, поле пустое) | **отказ HTTP 400** | нет |
| gemini-3.1-pro (премиум) | **нет** — HTTP 400 «Unknown name logprobs» | отказ 400 | нет |
| gpt-5-mini | **нет****HTTP 403 «not allowed to request logprobs»** | отказ 400 | нет |
Читается так:
1. **kNN-MT на флагмане определённо заблокирован** — и это **двойная** дверь. kNN-MT ключует датастор **внутренним hidden state декодера** (Khandelwal 2010.00710, ICLR 2021, дословно: «the 1024-dimensional representation input to the final layer feedforward network»), **не** выходным логитом. Ни один закрытый API не отдаёт pre-softmax представление декодера. Даже единственный, кто отдаёт хоть что-то (DeepSeek — выходные logprobs), даёт **softmax-выход, а не hidden state** → датастор kNN-MT построить нельзя в принципе.
2. **Логит-стиринг на флагмане почти недоступен**: `logit_bias` принимают только DeepSeek и GLM (и, вероятно, молча игнорируют); grok/gemini/openai — отказ. А для русской морфологии (subword-токены) грубый logit_bias всё равно бесполезен.
3. **Verify-by-probe поймал ошибку литературы.** Свежая работа «Log Probability Tracking of LLM APIs» (arXiv 2512.03816) утверждает, что **«все модели xAI»** и семейство GPT-4.1 возвращают logprobs. **Живая проба это опровергает для наших моделей/даты**: grok-4.3 не возвращает, gpt-5-mini отдаёт **403**. Урок валидации подтверждён: имя/возможность модели проверять пробой, не по документу.
4. **Fine-tuning у провайдеров закрывается, а не открывается**: Gemini API не поддерживает тюнинг после депрекации 1.5-Flash-001 (май 2025), только Enterprise с непрозрачным `adapter_size` без экспорта логитов/hidden state; OpenAI сворачивает self-serve fine-tuning в чёрный ящик без логитов. → **frontier-LoRA как роль переводчика заблокирован и в 2026 не разблокировался.**
**Следствие для всего ответа:** ни kNN-MT, ни constrained decoding, ни дообучение флагмана-переводчика невозможны. Всё «обучение» может жить только (а) на **локальном** декодере (llama.cpp/vLLM отдают логиты/hidden states — это **можно**) или (б) как **непараметрическая** инъекция в промпт закрытого API (memory+prompt). Эти два коридора и разбираются ниже.
---
## §1. Огибающая осуществимого
**Коридор A — локальный декодер (логиты/hidden states доступны).** Физически открыт, но упирается в качество локали: exp03/exp06 — локаль **рендерит zh→ru реалии мусором** (render 0.26 на zh, Палладий-мусор), значит её роль — **support** (спот сущностей recall ~0.98, скрининг, эмбеддинги, дешёвый судья), **не финальный переводчик и не рендерер канона**. Всё, что можно обучить локально (kNN-MT-датастор, LoRA), наследует эту слабость.
**Коридор B — непараметрическая инъекция в промпт закрытого API.** Открыт полностью (0 VRAM, только память+промпт). Сюда попадают: soft-глоссарий (**уже есть** — средний слой Р3), running-summary (DelTA-паттерн, **уже спроектирован**), и **новое** — few-shot **демонстрации** (прошлые подтверждённые пары/пассажи книги). Только последнее — реально «новый» механизм.
**Что вычёркнуто явно (заблокировано, §0):** kNN-MT-на-флагмане, constrained/beam/forced decoding, frontier-LoRA/online-SGD переводчика, Self-RAG с reflection-токенами (требует дообучения генератора, 2310.11511).
**Что влезает в 8 ГБ рядом с bge-m3 и SQLite-банком:** см. §5 (VRAM-арбитраж) — короткий ответ: bge-m3 на GPU (~2.4 ГБ FP32) + резидентная support-локаль 89b (56.6 ГБ) уже насыщают 8 ГБ (замер: 30b-a3b полигона держит 6.4 ГБ, стенд идёт под потолок). Обучающийся модуль **вытесняет** либо эмбеддер, либо support-локаль — резидентно «банк + эмбеддер + reranker + адаптер» вчетвером не живут.
---
## §2. In-context демонстрации — «бесплатный выигрыш» (единственный проходящий отбор кандидат)
**Литература подтверждает тезис в АБСТРАКТЕ, но не в нашем направлении.**
- **Демонстрации > терминология** для стиля и консистентности рекуррентных терминов: Moslem et al. (EAMT 2023, arXiv 2301.13294) — EN→ZH COMET zero-shot 59.87 → fuzzy 2-shot **73.90** → 10-shot 75.30; **добавление 10 glossary-терминов ПОВЕРХ fuzzy-2-shot — плоско** (73.90→73.57). Li/Luo/Briakou/Cherry (Google, arXiv 2503.05010) — retrieved-демонстрации бьют terminology (COMET +2.7/+1.7/+0.1 против +0.3/+0.3/+0.3 у терминологии), причём **терминология почти ничего не даёт сильным моделям**.
- **Критическая рамка (Li et al., верифицировано):** **~65% выигрыша демонстраций — от совпадения СТИЛЯ корпуса, а не от перевода терминов.** Это ровно **серо-зонная/стилевая** роль, которую наш контур разрешает, и **НЕ** точностно-критичный матч approved-имён, который держит детерминированный горячий путь.
**Где ВРЕДИТ (тоже подтверждено):**
- **Power of Noise (Cuconasu, SIGIR 2024, 2401.14887):** семантически близкий, но неответный дистрактор роняет генерацию **сильнее всего** (near-miss хуже случайного шума). → «лучше ничего, чем мусор» — тот же принцип, что в банке.
- **Over-trust в MT (не только QA!):** «Exposing the Cracks» (2510.00829) — при шумном retrieval низкоресурсные направления «often produce nonsensical translations», а **бо́льшие reasoning-модели БОЛЕЕ подвержены** и рационализируют подставленное; Context-Adoption-Rate: Fr→En 2.5→0.7 (72%) под противосмысловым контекстом. Это прямая эмпирика страха владельца — но на **ru-как-источник**, не target.
- **Lost-in-the-middle (N. Liu, 2307.03172)** + раздувание кэшируемого префикса: демонстрации в промпте ломают стабильный кэш-префикс Р5 (их надо в волатильный хвост → рост input-токенов).
**Моя проба на реальном zh→ru** (`eval/adaptive_incontext.py`, 魯迅《阿Q正传》, чанк с 8 рекуррентными персонажами, канон В. Рогова, deepseek-v4-flash, N=3, метрика = детерминированный post-check банка «каноническая форма в выходе»):
| Плечо | канон-консистентность | толкование |
|---|---|---|
| A. без памяти | **0.458** | своя транслитерация дрейфует от канона |
| B. soft-глоссарий (**базис Р3**) | **0.875** | инъекция глоссария сильно тянет к канону (+0.42) |
| C. глоссарий + демонстрации (**слой**) | **0.833** | демонстрации **НЕ бьют** глоссарий (0.04, в шуме) |
| D. глоссарий + дистрактор-демонстрации | **0.875** | near-miss не укусил на этой метрике/масштабе |
| E. глоссарий с ОДНОЙ отравленной строкой (赵太爷→«Ли») | **0.833**, отравление принято **0/3** | сильная модель **сопротивлялась** отраве на известном имени |
**Поправка (диагностика `eval/adaptive_reask.py`):** строгий accept-регэксп **занизил** глоссарий. Персистентный промах 王胡 — **артефакт метрики, не провал adherence**: модель рендерила канон Рогова «Бородатого Вана» (склонённое), а `Ван\b` не ловит суффикс. Склонение-толерантный матч → **глоссарий = 8/8 = 1.000** (оба репа, ноль реальных провалов adherence). То есть **на этом чанке детерминированный глоссарий УЖЕ насыщает консистентность** — demos не бьют его **потому что бить нечего** (потолок). Это (а) усиливает вердикт §2, (б) — **живая инстанция несущего невалидированного риска research/13 §2**: post-check регэкспом в русской морфологии undercount'ит И даёт ложные флаги → **post-check обязан лемматизировать (pymorphy2/Natasha), а не регэкспить.**
Три индикативных вывода (малый N, hand-built accept-регэксп → риск само-подтверждения, одна книга/модель — **не** финальный eval):
1. **Детерминированный soft-глоссарий сильно работает на zh→ru** (без памяти 0.458 → глоссарий **~1.0** после поправки на склонение) — впервые индикативно подтверждено на нашем направлении (валидация банка это на zh→ru не мерила). Хорошая новость для ядра. Оговорка: чанк «лёгкий» (глоссарий насыщается) → реальную ценность demos и re-ask надо мерить на **трудных** чанках (длинные/плотные, где adherence падает на 1736%, 2310.05824).
2. **Демонстрации НЕ бьют глоссарий по консистентности** (0.833 vs 0.875) — ровно как предсказывает Li (выигрыш демо — 65% стиль, а не термин-матч, чего эта метрика не видит). Значит **выигрыш демонстраций, если он есть, — стилевой, а не консистентность/fidelity**, а БАР-(в) меряет именно консистентность/fidelity.
3. **Отравленную строку сильная модель отвергла** на ИЗВЕСТНОМ имени (阿Q-канон в претрейне) — мягкое свидетельство против слепого over-trust, но **НЕ** тест на НОВОМ термине без прайора (там over-trust реален — 2510.00829).
**Вердикт по §2:** демонстрации — единственный кандидат, влезающий в контур (0 VRAM, memory+prompt), но по имеющимся данным **не проходит БАР-(в)**: не бьёт базис по консистентности, а их стилевой выигрыш (а) не измерен на zh/ja→ru нигде, (б) не то, что меряет критерий, (в) приносит риски дистрактора/спойлера/раздувания. → **пилотировать под тем же WMT25-3-режимным eval'ом, что и банк, добавив стилевую ось; НЕ мёржить до прохождения.**
---
## §3. Локальная параметрическая адаптация (LoRA/continual) — для какой роли окупается
**Ни для какой, по имеющимся доказательствам.**
- **Данные:** одна книга даёт **сотни** approved-пар — data-poor. «LoRA Learns Less and Forgets Less» (Biderman, TMLR 2024, 2405.09673): LoRA **недоучивает** новый домен (нужно ~10× больше данных, чем full-FT), хотя и меньше забывает (регуляризатор). На сотнях пар выигрыш сомнителен.
- **Не чинит корневую слабость:** локаль ломает zh-реалии в **представлениях** (upstream), а не в выходной проекции. Даже kNN-MT — это (приблизительно, Gao 2305.13034, EMNLP 2023 — поправка верификатора: «a specific case of fine-tuning», не «математически эквивалентно») **implicit GD только на output-projection**, т.е. переставляет верхний слой в **уже сломанном** пространстве. LoRA низкого ранга — тот же потолок. → **рендерер-канона роль закрыта** (её держит облако/человек+таблица Палладия, G1/B6).
- **Reranker/ключ-энкодер:** bge-m3 эмпирически **не даёт разделяющего порога** (валидация банка, пересечение распределений) — нет доказательства, что книга-LoRA на ключ-энкодере это чинит; а reranker 2-го эшелона **не бьёт** precision-1.0 детерминированный горячий путь (там он и не нужен).
- **Test-time training** звучит близко, но единственная сильная работа (2411.07279) — **поправка верификатора: измерена на ARC-головоломках (symbolic grid), НЕ на MT**; перенос на перевод — ноль.
- **Железо (каветат владельца (a), верифицировано + замер стенда):** единственный первоисточник по консумерским 8 ГБ (2509.12229) — **поправка: тренирует ТОЛЬКО 1.5B**, batch≤2, и **на RTX 4060 (Ada sm_89), НЕ Pascal**. 7B-QLoRA ~810 ГБ пик (Dettmers 2305.14314) → **не сорезидентен ни с чем** (ни с bge-m3, ни с reranker). Все числа — Ampere/Ada; **перенос на Pascal GTX 1070 не гарантирован** (см. §5 — реальный замер bnb-4bit на sm_61).
**Вердикт по §3:** нет источника, где per-book локальный LoRA бьёт детерминированный базис на zh/ja→ru; корневая слабость (реалии) им не чинится; данных мало; железо — впритык и Pascal-неопределённо. **НЕ мёржить.**
---
## §4. Локальный kNN-MT / retrieval-augmented ДЕКОДИНГ
**На флагмане — blocked (§0). На локали — технически да, но не стоит.** Четыре независимых довода (все верифицированы):
1. **Чистый выигрыш kNN-MT уже у нас.** Единственная гарантированная победа kNN-MT — скопировать точный рекуррентный target-токен из датастора. Это **ровно** то, что делает детерминированный Aho-Corasick approved-глоссарий — но с **жёсткой** гарантией против **мягкой** интерполяции kNN (kNN подмешивает как вес, модель может перебить). Дублировать это обучающимся слоем — строго хуже (теряем гарантию, возвращаем тихую инъекцию).
2. **Не чинит реалии на слабой базе** (Gao 2305.13034 — output-projection only; §3).
3. **Шумный retrieval деградирует** (Jiang 2210.08808, EMNLP 2022: 45.92→42.22 BLEU от шума — но на **сильной** De-En базе; слабая локаль даёт хуже дискриминированные ключи → именно тот шумный режим).
4. **Tiny datastore = самый слабый режим** (Khandelwal: выигрыши от датасторов 159K18.3M токенов; одна книга ~10⁵ токенов — на нижней границе или ниже) + **~×100 латентность** vanilla (эффективные варианты — Wang 2204.06175, Martins chunk-based — снимают ценой качества).
**Вердикт по §4:** локальный kNN-MT-черновик, кормящий API-редактора — **не** новый выгодный мёрж: его консистентность-выигрыш принадлежит банку, а адаптационный выигрыш ограничен слабой локалью, на которой он сидит. **НЕ мёржить.**
---
## §5. VRAM-арбитраж («кто побеждает») — прямой ответ на гипотезу владельца
Гипотеза владельца: **эмбеддинги+векторный поиск целиком на CPU/RAM, все 8 ГБ VRAM — под обучающийся модуль (LoRA/reranker/адаптер).**
**Посылка — ВЕРНА (подтверждено).**
- **Нигде в пайплайне нет real-time эмбеддинга.** Горячий путь — детерминированный Aho-Corasick (микросекунды, CPU-дёшево), **без модели**. Эмбеддинги — Фаза-2 второй эшелон, генерация кандидатов на ревью, **пачечная**. Каветат (b) закрыт: эмбеддинг — фон, не интерактив.
- **CPU-числа (замерены валидацией банка, не переоткрываю):** bge-m3 CPU ~78 мс/текст → вся книга (~510k чанков+резюме) ≈ 713 мин **пачкой**; brute-force cosine <20 мс на 100k. Латентность неважна (фоновый инжест). bge-m3 в RAM ~2.4 ГБ из 32 незаметно.
- **CPU-контеншн с горячим путём и Go-раннером (каветат c) планируем:** горячий путь микросекундный и не конкурирует; сами переводческие вызовы **сетевые** (ждут API), CPU простаивает; эмбеддинг-инжест ставится **между главами/на границе джоб**, вне критического пути. Контеншн управляем расписанием, не архитектурой.
**Следствие — ПУСТО (это и есть развязка).** Освободить 8 ГБ можно, но **обучающегося модуля, который на них бьёт детерминированный базис, НЕТ** 2–§4): локаль не рендерит zh (роль рендерера закрыта), reranker не бьёт precision-1.0 горячий путь, книга-LoRA data-poor и не чинит реалии, kNN-MT-выигрыш уже у банка. **Освобождённый VRAM правильнее отдать УЖЕ существующим support-ролям локали** (спот сущностей recall 0.98 write-path банка G1; NSFW-скрининг/черновик; дешёвый судья-гейт), которые контур уже требует, чем гипотетическому обучающемуся слою.
**Реальный замер потолка на стенде (2026-07-05, `eval/adaptive_probe`-инфра + изолированный CUDA-env):**
- Резидентно сейчас: `qwen3-abliterated:30b-a3b` полигона **6.4 ГБ VRAM** (не выселял; координация PROGRESS-пинг).
- **WSL2-квирк (важно для «арбитра»):** CUDA видит `free=7.0 ГБ / total=8.59 ГБ` даже при резидентном 30b WSL2 **спилит в shared system RAM** сверх физических 8 ГБ. То есть «8 ГБ» на этом стенде **мягче**, но спил идёт по DDR-скорости (как эксперт-офлоад 30b-a3b) «влезло по CUDA» «влезло быстро». Арбитраж по `max_memory_allocated` процесса, не по nvidia-smi.
- **bnb-4bit на Pascal sm_61 реальный замер** (изолированный CUDA-env, Qwen2.5-0.5B, 3 train-step): bitsandbytes 0.49.2 официально таргетит sm75 (Turing), но **QLoRA-4bit NF4 фактически РАБОТАЕТ на Pascal sm_61** (loss считается, backprop идёт, peak 1.00 ГБ на 0.5B). **Но на Pascal 4-bit ~×9 МЕДЛЕННЕЕ fp16-LoRA** (5.6с vs 0.6с на 3 шага) оптимизированных NF4-ядер под Pascal нет, dequant-оверхед доминирует **на этой карте преимущество QLoRA по скорости ИНВЕРТИРУЕТСЯ**: влезает в fp16 бери fp16-LoRA; QLoRA нужен только для 7B+ (в fp16 ~14 ГБ весов не влезают), где он единственный вариант, но медленный. Потолок «удобно тренируется» **~1.53B** (QLoRA ~24 ГБ); **7B-QLoRA ~810 ГБ = на/за физическим пределом 8 ГБ** (в WSL2 спилит в RAM ещё медленнее), и **7B-тренировка + резидентный reranker одновременно не живут**. Каветат владельца (a) подтверждён замером: 4-bit нужен для 7B, но на Pascal он медленный; макс. удобная модель ~1.53B.
**Вердикт по §5:** CPU-эмбеддинг/GPU-free сплит **правильный дефолт** (посылка верна, каветаты b/c закрыты), но **не ради обучающегося слоя** (его нет под БАР), а ради существующих support-ролей и чтобы **не** держать эмбеддер резидентно зря. Гипотеза владельца подтверждена как **инженерная гигиена**, опровергнута как **путь к «обучающемуся модулю, бьющему базис»**.
---
## §6. Adaptive online-retrieval + само-корректирующая петля — что реально без тяжёлого ML
**Скептическая литература решает вопрос за нас.**
- **Intrinsic self-correction деградирует** без надёжного внешнего сигнала: «LLMs Cannot Self-Correct Reasoning Yet» (Huang, ICLR 2024, 2310.01798) точность плоско/падает после само-коррекции; Kamoi (TACL 2024, 2406.01297) **надёжный внешний верификатор — единственный различитель** успеха и провала. В MT: TEaR (2402.16379) +0.39 COMET и **один раунд лучший** (итерации портят); систематика WMT24-literary (2605.13368) рефайнмент улучшает **fluency/style/terminology, но не adequacy**; Chen (2306.03856) BLEU падает при рефайнменте.
- **У нас надёжный внешний верификатор УЖЕ есть** детерминированный Aho-Corasick post-check на approved-глоссарии. То есть «детект дрейфа коррекция approved-термина» **уже решено** детерминированно и **не должно** уезжать в обучающийся слой (нарушит контур-5).
- **Реально новая зона** auto/ambiguous сущности **без** approved-ответа. Здесь работает **детерминированный консистентность-кэш** (first-seen/majority-vote рендеринга, БЕЗ ML) + **precision-gated adaptive retrieval** КАКИЕ серо-зонные записи инъектить, с **hard-abstention** (паттерн risk-sensitive bandit 2604.27283 штраф за ложную инъекцию > пропуск, воздержание first-class — но **без онлайн-обучения**, просто как precision-gate). Опциональный локальный CRAG-подобный оценщик (2401.15884, дообученный T5) мог бы заменить отсутствующий разделяющий cosine-порог bge-m3 — но это Фаза-2, low-trust, и тоже гейтится.
**Вердикт по §6:** петля «детект→коррекция» ценна, но её **надёжная** часть уже детерминирована; «обучение» сверх — это **бухгалтерия глоссария** (кэш растёт), а не ML.
---
## §7. Предложенные архитектуры мерджа (творческий мандат, каждая — против БАР)
### M1 — «In-context демонстрации в серой зоне» (пилот под eval; единственный проходящий отбор)
- **Компоненты:** банк v2 как есть + retrieval прошлых подтверждённых пассажей книги как few-shot **демонстрации** ТОЛЬКО для стиля/консистентности **серо-зонных** терминов (auto/ambiguous/редкие реалии), в **волатильном хвосте** промпта после кэш-брейкпоинта.
- **Арбитраж:** approved+точный матч — банк, **неоспорим**; демонстрации — только **обогащают** серую зону; **каждая** инъекция гейтится детермининированным post-check; precision-first фильтр + hard-abstention (Power of Noise). Демонстрации **никогда** не имеют write-authority над approved-именами.
- **Где мог бы бить базис:** гипотетически стиль/регистр рекуррентных редких терминов (Li: 65% выигрыша — стиль).
- **БАР:** (а) ✓; (б) ✓ 0 VRAM, +input-токены; (в) **✗ по индикативу** (0.833 vs 0.875 на консистентности; стиль не измерен); (г) сложность средняя (retrieval + гейт + кэш-раскладка). → **пилотировать под WMT25-3-режимным eval'ом на zh/ja→ru + стилевая ось (win-rate человека/сильного судьи); не мёржить до прохождения.**
### M2 — «Детерминированный консистентность-кэш + precision-gated adaptive-retrieval» (внедрять; не ML)
- **Компоненты:** для auto/ambiguous БЕЗ approved — first-seen/majority-vote кэш рендеринга (детерминированное расширение банка); adaptive выбор КАКИЕ серо-зонные записи инъектить (risk-sensitive precision-gate, abstention first-class).
- **Это «обучение по ходу книги»** в тривиальном смысле (глоссарий растёт) — **без модели/VRAM/логитов.**
- **Арбитраж:** кэш **предлагает** → post-check **гейтит** → batch-судья/человек **промоутит** в approved (закрывает G1/F5/B1 first-wins-навсегда осью «редакционного времени»).
- **БАР:** (а) ✓; (б) ✓ 0 VRAM; (в) не претендует бить fidelity — **закрывает реальную дыру recall-0.571** (косвенные/перефразные серо-зонные) дёшево; (г) малая. → **внедрять как гигиену банка v2.**
### Отвергнуто (не проходит БАР)
- **Локальный kNN-MT-черновик** (§4): чистый выигрыш уже у банка; на слабой локали чинит не то. **НЕ мёржить.**
- **Книга-LoRA на reranker/ключ-энкодере** (§3): data-poor, learns-less, нет разделяющего порога, Pascal-неопределённость. **НЕ мёржить.**
- **Constrained decoding / frontier-LoRA / Self-RAG на флагмане** (§0): физически blocked.
---
## §8. Арбитраж «кто побеждает» (сводно)
1. **approved + точный/леммный матч** → детерминированный банк, **неоспорим** (контур-5). Обучающийся слой сюда не входит **никогда**.
2. **Серая зона** (auto/ambiguous/стиль/2-й эшелон) → обучающийся слой (демонстрации, кэш-подсказки) может **обогащать**, но: каждая инъекция гейтится **детерминированным post-check**; при конфликте побеждает **precision-first фильтр** (лучше воздержаться, чем инъектить неуверенное); промоушен в approved — только через batch-судью/человека.
3. **Резюме/факты** → отдельный гейт фактичности (D1), не «авторитет по умолчанию».
4. **VRAM** → эмбеддер на CPU (дефолт); 8 ГБ — существующим support-ролям локали, **не** обучающемуся слою (§5).
---
## §9. Максимизация коэффициента канон-консистентности — детерминированные рычаги (по запросу владельца)
Раз гибрид отклонён — правильный ход не «обучать ранкер», а **добивать детерминированную сторону**. Замер `eval/adaptive_levers.py` (трудный чанк 阿Q, 11 сущностей, 1600 знаков, deepseek+grok) даёт кривую рычагов и порядок внедрения бэкенду:
- **L1 — post-check ЛЕММАТИЗИРУЮЩИЙ (pymorphy3), не регэксп. Внедрять ПЕРВЫМ.** Наивный `\b`-регэксп на трудном чанке даёт **1836% ложных флагов** (deepseek 2/11, grok 4/11 — склонённые формы, отрендеренные верно). pymorphy3 их снимает и **сворачивает OOV-транслит** (Вана→ван, Дэна→дэн, Вэйчжуане→вэйчжуан). Это количественная валидация несущего невалидированного риска research/13 §2 (регэксп-шум → редакторы не верят флагам → safety рушится). Дешевле всего, чинит больше всего.
- **L2 — RECALL матчера: нормализация (полная, тестируемая) + alias-граф + sticky.** Точный матч на trad/alias формах: recall **0.00 → +норм 0.50 → +alias 0.75**. Живой баг: неполная trad-карта (爺→爷) молча промахнула 赵太爷 → **A4 подтверждён: нормализацию покрыть и тестировать бит-в-бит** (OpenCC, не мини-карта). Крупнейший рычаг рекола (retrieval_bench recall 0.571 — 43% упоминаний не инъектится).
- **L3 — post-check + точечный re-ask** (verifier-gated correction, M2). На трудном чанке добивает реальные промахи adherence (deepseek 0.82→0.91). Не чинит гомограф/односимвольный ключ (钱) — и не должен.
- **L4 — таблица Палладия/Поливанова (B6): потолок ПРАВИЛЬНОСТИ.** L1L3 поднимают «использует ли модель канон»; L4 — «правильный ли канон». Локаль zh 0.26, облако-топ 0.75 — только детерминированная таблица закрывает разрыв.
- **Побочно подтверждено:** 钱 (односимвольный ключ, гомограф Цянь/деньги) упорно промахивается даже после re-ask → **правило `min_key_len`/запрет одиночных ключей (A3) обязательно** — 钱 из глоссария выкинуть или заменить целой сущностью (钱府→«дом Цянь»).
**Где ваш инстинкт «тюнить ранкер» легитимен (честно):** ТОЛЬКО во втором эшелоне (fuzzy/семантика, кандидаты для человека) — у bge-m3 нет разделяющего порога (retrieval_bench), и research/13 §5 оставил лазейку: другое представление / sparse-голова / маленький cross-encoder reranker может разделять лучше. Это Фаза-2, low-trust, коэффициент горячего пути (§9) не двигает. Инстинкт верен, цель — второй эшелон, не костяк.
## Честные слабые места рекомендаций (по этим пунктам пишут решение)
1. **Ни одна цифра литературы не на zh/ja→ru — тотально.** Все 24 верификации: DelTA, Moslem, Li, Power-of-Noise, self-correction-скептики, kNN-MT, LoRA, ModernMT/Lilt — англо-центричны или ru только как источник. Ближайшее к нам — **WMT24 Discourse-Level Literary (2412.11732) с добавленным zh→ru document-level треком** и **DITING (2510.09116)** zh-en вебновелла — но это **бенчмарки-оценки**, не методы адаптации, и ja→ru литературной адаптации/бенчмарка **не существует вовсе** (2505.05423 держит ru только как источник). Любая рекомендация по ja→ru — по аналогии, не по данным.
2. **Мой in-context замер — индикативный, с широкими CI.** N=3, одна книга/чанк/модель, accept-регэкспы построил сам (риск само-подтверждения), метрика меряет **консистентность канона, а не стиль**а именно стиль демонстрации и должны улучшать. «Демо не бьют глоссарий» доказано **для консистентности**, НЕ опровергнуто для стиля. Стилевую ось (win-rate) я не мерил — это дыра, которую должен закрыть пилот.
3. **Over-trust я мерил на ИЗВЕСТНОМ имени** (阿Q-канон в претрейне) — модель отраву отвергла. На **новом** термине без прайора over-trust реален (2510.00829) — мой E-плечо это НЕ покрывает. Не читать «отраву отвергли» как «инъекция безопасна».
4. **bnb-4bit на Pascal — замерил на 0.5B, экстраполировал на 7B.** Факт: NF4 работает на sm_61, но ~×9 медленнее fp16-LoRA (нет Pascal-ядер); потолок удобной тренировки ~1.53B. Но **полный потолок QLoRA-7B + резидентный reranker одновременно на ЧИСТЫХ 8 ГБ** я прямым прогоном не мерил (не выселял 30b полигона; экстраполяция из 0.5B-footprint + Dettmers; WSL2-спил в shared RAM мутит «влезло/не влезло»). Точное число — за **скоординированным** стенд-окном (выселить 30b). На вердикт не влияет: кандидата, который на эти 8 ГБ бьёт базис, всё равно нет (§3).
5. **«Демонстрации не помогают» может перевернуться на СЛАБОЙ модели.** Moslem мерил GPT-3.5; наш черновик deepseek-v4-flash сильнее и, возможно, **не нуждается** в демонстрациях (потолок). На более слабой/дешёвой модели или на редких терминах вне претрейна демо могут дать больше — узкий сценарий, где M1 мог бы окупиться (проверять на пилоте).
6. **Distractor-плечо (D) — слабый тест Power-of-Noise.** Мои дистракторы off-topic, а имена заякорены глоссарием → шум не укусил. **Near-miss омограф на ИМЯ** (реальный режим A3) я не тестировал — там вред вероятнее.
7. **Я рекомендую в основном НЕ строить — а это тоже ставка.** Сильнейший контр-аргумент: DelTA/Moslem показывают выигрыш памяти-с-адаптацией, и наш детерминированный no-adaptation путь — ставка по экономике/контуру, не по доказательствам. Защитима (§0 блокировки + §2 индикатив), но это ставка «дешёвое-детерминированное поверх дорогого-обучающегося», как и в валидации банка.
---
## Что делать (сжато для оркестратора/бэкенда)
- **Внедрять (Фаза 12, дёшево, 0 ML):** M2 — консистентность-кэш auto/ambiguous + precision-gated adaptive-retrieval + hard-abstention. Это гигиена банка v2, закрывает recall-0.571-дыру и B1 first-wins.
- **Пилотировать под eval (Фаза 2.5), НЕ мёржить сейчас:** M1 — in-context демонстрации в серой зоне; добавить **стилевую ось** (win-rate человека/сильного судьи) к WMT25-3-режимному протоколу банка; критерий — бьёт ли базис по стилю БЕЗ потери консистентности/fidelity и без роста дистрактор-вреда.
- **Не строить:** локальный kNN-MT, книга-LoRA, constrained decoding, self-correction-как-обучающийся-слой.
- **VRAM:** дефолт «эмбеддер→CPU» принять; освобождённые 8 ГБ — существующим support-ролям локали, не обучающемуся слою; скоординированный стенд-замер QLoRA-Pascal-потолка — если когда-нибудь понадобится (сейчас не нужен, кандидата нет).
---
## Источники (проверены 2026-07-05; 19 CONFIRMED / 5 OVERCLAIM с поправкой верификаторов)
**Заблокированность (проба + первоисточник):** kNN-MT ключ = hidden state — Khandelwal «Nearest Neighbor MT» ([2010.00710](https://arxiv.org/abs/2010.00710), ICLR 2021); kNN ≈ GD только на output-projection — Gao ([2305.13034](https://arxiv.org/abs/2305.13034), EMNLP 2023, *поправка: «a specific case of fine-tuning», не «математически эквивалентно»*); logprob-выживание API — [2512.03816](https://arxiv.org/abs/2512.03816) (*опровергнуто живой пробой для grok/gpt-5*); Self-RAG требует дообучения — [2310.11511](https://arxiv.org/abs/2310.11511). Живая проба: `eval/adaptive_probe.py`, `eval/data/adaptive_probe.json`.
**In-context демонстрации:** Moslem «Adaptive MT with LLMs» (EAMT 2023, [2301.13294](https://arxiv.org/abs/2301.13294)); Li/Cherry «Retrieval vs Fine-Tuning at Inference» ([2503.05010](https://arxiv.org/abs/2503.05010)); Power of Noise (SIGIR 2024, [2401.14887](https://arxiv.org/abs/2401.14887)); over-trust в MT «Exposing the Cracks» ([2510.00829](https://arxiv.org/abs/2510.00829)); lost-in-the-middle ([2307.03172](https://arxiv.org/abs/2307.03172)). Проба: `eval/adaptive_incontext.py`, `eval/data/adaptive_incontext.json`.
**Локальный LoRA/kNN-MT:** QLoRA (Dettmers, [2305.14314](https://arxiv.org/abs/2305.14314)); профиль на консумере (*поправка: 1.5B, RTX 4060 Ada, не Pascal*, [2509.12229](https://arxiv.org/abs/2509.12229)); LoRA Learns Less/Forgets Less (Biderman, TMLR 2024, [2405.09673](https://arxiv.org/abs/2405.09673)); test-time training (*поправка: ARC, не MT*, [2411.07279](https://arxiv.org/abs/2411.07279)); adaptive kNN-MT (Zheng, ACL 2021, [2105.13022](https://arxiv.org/abs/2105.13022)); robust kNN-MT (Jiang, EMNLP 2022, [2210.08808](https://arxiv.org/abs/2210.08808)); efficient/chunk kNN-MT ([2204.06175](https://arxiv.org/abs/2204.06175), 2022.emnlp-main.284).
**Само-коррекция/adaptive-RAG:** Huang «Cannot Self-Correct Yet» (ICLR 2024, [2310.01798](https://arxiv.org/abs/2310.01798)); Kamoi (TACL 2024, [2406.01297](https://arxiv.org/abs/2406.01297)); TEaR ([2402.16379](https://arxiv.org/abs/2402.16379)); WMT24-literary рефайнмент ([2605.13368](https://arxiv.org/abs/2605.13368)); Adaptive-RAG (NAACL 2024, 2024.naacl-long.389); CRAG ([2401.15884](https://arxiv.org/abs/2401.15884)); FLARE ([2305.06983](https://arxiv.org/abs/2305.06983)); risk-sensitive abstention-bandit ([2604.27283](https://arxiv.org/abs/2604.27283)).
**Adaptive/online классический MT (механизм, не вендор-числа):** Farajian (2017, multi-domain per-sentence); Wuebker «Compact Personalized» (EMNLP 2018); Peris «Online Learning for NMT PE» ([1706.03196](https://arxiv.org/abs/1706.03196)); Simianer «Immediate Adaptation R0/R1» (NAACL 2019); Wang «Non-Parametric Online from Feedback» ([2109.11136](https://arxiv.org/abs/2109.11136)). ModernMT/Lilt — вендор-маркетинг, **не** цитируется как доказательство.
**Заземление на наше направление:** DelTA (ICLR 2025, [2410.08143](https://arxiv.org/abs/2410.08143), *LTCR-1 = самосогласованность-с-первым*); WMT24 Discourse-Level Literary с **zh→ru** ([2412.11732](https://arxiv.org/abs/2412.11732)); DITING zh-en вебновелла ([2510.09116](https://arxiv.org/abs/2510.09116)); LiTransProQA (ru только источник, [2505.05423](https://arxiv.org/abs/2505.05423)).
**Проба-инфра:** `eval/adaptive_probe.py` (логиты/logit_bias флагманов), `eval/adaptive_incontext.py` (демо vs глоссарий, zh→ru А-Q), реюз `eval/refusal_bench.call_provider`+`providers.json`, корпус `eval/data/samples` (魯迅 阿Q + канон Рогова). Изолированный CUDA-env (Pascal QLoRA-проба) — в scratchpad, не в репозитории.