26 KiB
34. Банк памяти и качество перевода — что он держит, чего не держит и что доработать
⚠ РЕВЮ-ШАПКА — прочти прежде содержимого
Статус: ФАКТУРА, НЕ РАТИФИЦИРОВАНА. При конфликте с журналом решений побеждает журнал.
Откуда взялось. Вопрос владельца 11.09: «что для качества перевода надо в банке памяти доработать». Разобрано веером из 21 агента (2.7 млн токенов, 958 обращений к инструментам) — пять читателей по осям, затем адверсариальная верификация КАЖДОЙ находки с мандатом «опровергни».
Дисциплина, с которой это читать. Верификация отвергла 14 находок из 15 — и почти все не за ложность, а за завышенный вес или нулевую новизну (предмет уже стоит строкой бэклога либо объявлен в том же доке, откуда взято число). Формально подтверждена ОДНА (
K3, вопрос пост-проверки). Синтез ниже написан ПОСЛЕ верификации и несёт её поправки — в частности, снято утверждение «канон ни разу не подан в прогон» (неверно: ключglossary_seedзадан в 18 конфигах дерева).Чего здесь нет: суждений о качестве перевода на целевом жанре. Всё ниже — про МЕХАНИЗМ и его наблюдаемость.
⚠ Числа сняты 11.09 на дереве
f9216cd. Адресаfile:lineпере-снимать командой: движок двигали пять паков за неделю.
ЧТО В БАНКЕ ПАМЯТИ НАДО ДОРАБОТАТЬ ДЛЯ КАЧЕСТВА ПЕРЕВОДА
1. Что банк гарантирует сегодня
Одну вещь, и делает её сильно: там, где термин ЕСТЬ в банке и его поверхность выстрелила в куске, модель видит одну и ту же строку. Это подтверждено четырьмя независимыми A/B: переводческий провод 43 % → 95 % (docs/research/24-bank-arbitration.md §C, 21 клетка, 6 окон), редакторский 8–15/21 → 21/21 (docs/experiments/18-editor-wire-probe.md §A.1), 0.53 → 0.92 на 163 упоминаниях и 0.566 → 0.820 на 228 (docs/experiments/21-role-topology.md §14, §16.1). Заголовочные «99,3–100 %» дала именно эта инъекция, а не проверка.
Чего он не держит — шесть границ, каждая названа кодом или замером:
- Второй передачи рядом с канонной не видит. Вопрос пост-проверки — «есть ли dst где-нибудь в куске», а не «какой формой отрендерён термин» (
backend/internal/membank/mempostcheck.go:139→if present { continue }). «Фан Юань» и «Фанъюань» в одном абзаце дают 0 промахов (исполнено на копии). Сплошной дрейф — ловит. - Неверного dst, которому модель послушалась, не видит по построению — код сам называет это BLIND SPOT (
mempostcheck.go:18-26). - Термина, которого в банке нет, не видит вовсе — молчание неотличимо от успеха. Порог добычи: реже 5 раз в книге термин не предлагается никогда (
backend/internal/miner/miner_emit.go:26), потолок предложений — 200 на книгу (:31). - Книжного вопроса не задаёт ни разу. Все 4 не-тестовых вызова проверки — по чанку или правочной единице (
waverun.go:618,:738,repair.go:630-631); книго-широкое — это суммы поколоночных счётчиков (quality.go:270-272). Никто не сравнивает главу 12 с главой 901. - Остановить отгрузку может ровно одно место —
export.go:463— и оно выключено везде:postcheck_gate— 0 вхождений вbackend/configs/при живом блокеgates:в 4 конфигах из 4 (пере-замерено мной); 0 из 281 сохранённого снапшота прогона нёс его включённым. 317 подтверждённых промахов глоссария отгружены. - Голоса до модели не доезжают вообще:
InjectVoice— константаfalseбез ручки (bankmaterialize.go:295), в промте переводчика 9 плейсхолдеров и 0 про персонажа,gates.voice— 0 в конфигах, а сам флаггер объявлен «PURE observability».
Одной фразой: банк — это замок на входе в запрос и счётчик на выходе. Замка на выходе нет, книжного вопроса нет, и половина того, что вы называете каноном («голоса»), до запроса не доезжает.
2. Что доработать в банке — пять предметов
(1) Книжный свод расхождений — $0, день. Без него приоритет непроверяем в принципе.
Мера «сколько РАЗНЫХ форм дал один термин» уже построена: Spread и Variants в backend/internal/pipeline/mining.go:383-384. Но считается она по ЧЕРНОВИКУ, на стопе майнинга, ДО редакторской волны, и читает её только человеческая таблица подписи. Перенести тот же счёт на отгружаемый текст и печатать отчётом сборки: «термин X отдан тремя формами в главах 12, 340, 901». Ни одного платного вызова, переиспользование готового. Предмет не пуст: полигонный прибор на стенде дал 13–16 % терминов с более чем одной передачей и 6–8 % сменивших доминирующую форму (docs/archive/PROGRESS-2026-09-07-16-backend-packs.md:2908). Это единственная работа, которая делает качество ПРЕДЪЯВИМЫМ.
(2) Спросить проверку о правильном — день (дешёвая половина).
Сегодня проверяется присутствие в куске; надо — форма на месте срабатывания и наличие конкурирующей рядом. Живой экземпляр измерен: 古月方源 заведён алиасом записи 方源 («Фан Юань»), выход «Гу Юэ Фан Юань» её содержит ⇒ промаха нет, а ваш подписанный канон 古月 → Гуюэ (books/gu-zhenren/guzhenren-seed-v2.yaml:38-39) нарушен внутри составного имени. Дешёвое лечение названо самим полигоном: проверять алиас-ключ на СОБСТВЕННУЮ канонную форму. Дорогая половина (детектор значения по исходнику) — за замером, не сейчас.
(3) Досеять ДАННЫЕ банка — день, и это прямо чинит точность. Не Go.
Три дыры в данных, из-за которых прибор врёт: (а) глагольные и многословные термины засеяны с пустыми формами — один 炼化 дал 7 ложных промахов и в одиночку пробил метрику прогона; (б) односимвольный ханьский ключ структурно вне автомата без allow_short (порог 2 знака, membank/memory.go:71), а это самый частый класс канона в китайском ранобэ — 蛊, 道, 气; (в) сид-линт об этом молчит. Цена бездействия измерена: у глоссарного класса чекера точность 0,067 — 1 верное срабатывание на 14 ложных (n=258), и из 14 ложных 6 приходятся на один односимвольный 转, ещё 4 на 蛊虫 (books/gu-zhenren/labels/metrics.json). Именно из-за этой цифры гейт и не включают.
(4) Редактор — источник разнобоя, а не страховка поверх банка. День + один заказ.
Замерено дважды: без закон-блока редактор ломает 5–12 из 20 уже ВЕРНЫХ клеток черновика (exp18 §A.1), а с подключённым банком боевой редактор держит ХУДШЕЕ покрытие канона в панели — 0.882 против 0.909 у черновика, который он правит (exp22 §6.2, чистый материал, 1124 упоминания). Два механических носителя: черновая волна выбирает по БАЗОВОМУ банку с исключением намайненного (bankmaterialize.go:329) — то есть на первом прогоне книги черновик идёт вообще без добытого банка; а редакторская волна, единственная с полным банком, теряет липкость между правочными единицами внутри главы (waverun.go:717, nil) при 86 % многоединичных глав (1962 из 2283). Закон-блок должен стать инвариантом конфига, а не следствием выбора модели редактора.
(5) Голоса — узел без провода. Это не «доработать», это сначала ваш ответ (см. §4).
Мёртв в четырёх местах сразу: нет данных (0 непустых секций voices: из 47 сид-файлов дерева), нет производителя (майнер профили не эмитит — 0 упоминаний в 10 его файлах), нет инъекции (константа), нет запущенной проверки. И ни одного числа за всю историю проекта: носитель журнала обращений живёт в 6 Go-файлах и не встречается ни разу в 66 полигонных и ресёрч-доках (контроль: слово «канон» в тех же 66 файлах — 333 раза).
Чего в списке НЕТ намеренно: бюджет инъекции. Ходящее число «кап течёт на 40–60 %» считает ЭМИССИОННЫЙ кап майнера, а не бюджет провода. Бюджет не выбросил ни одной строки ни в одном прогоне дерева: сумма вытеснений по 161 базе = 0 при живых соседних колонках (5885 точных попаданий, 2979 липких, 510 неоднозначных). Тратить на это не надо.
3. Что нельзя решить работой — ждёт замера на настоящей книге
Это определяет, что закладывать в прогон.
- Точность и полнота проверки на подписанном каноне. Сегодня 0,067 (выше), и ложные срабатывания сконцентрированы в одном классе: односимвольные и общеупотребительные ключи. ⚠ Здесь ратифицированная формулировка неточна и это надо поправить прежде, чем строить по ней порядок работ: «канон ни разу не подан в прогон, весь дрейф — дрейф с отключённым каноном» верно ТОЛЬКО про исследовательский стенд (там 0 из 30 конфигов несут ключ сида). В дереве 18 конфигов задают подписанный сид, пять прогонов держат 36–57 подписанных строк, а весь размеченный корпус — 91 единица — снят с прогонов С каноном. Дрейф ПРИ каноне тоже наблюдён (тот самый
古月方源). Значит переизмерение — это не «сперва подключить канон», а «разметить класс, которого в корпусе не было», и стоит оно $0 на уже оплаченных артефактах плюс новый прогон. - Впервые встретить настоящий объём. Максимальный банк за всю историю дерева — 102 строки на 25 главах; потолок предложений 200, бюджет провода 800 токенов (≈141–180 строк). На 2283 главах оба потолка встретятся с реальностью впервые. Снять с прогона, а не выводить.
- Дрейф от потери банка между правочными единицами. Экспозиция замерена (86 % глав; на срезе 25 глав теряется 49 банковых строк на 12 единицах), самих инцидентов — ноль наблюдений. Правка без замера была бы стрельбой вслепую.
- Кривая деградации по главам. Её нет ни у кого, включая внешние харнессы. Нужен ряд «глава → число терминов с более чем одной передачей». Снимается $0 ПОСЛЕ прогона — но только если свод из §2.1 построен ДО.
- Порог частоты. «Реже 5 раз — не предлагаем» ставился на 15 главах пилота. Какая доля канонических терминов настоящей книги живёт на частоте 3–4 — не спрошено ни разу.
- Активный ноль. Ни один замер банка не нёс контроля «та же книга без банка». Направление подтверждено четырежды, ВЕЛИЧИНА «99,3–100 %» — ни разу.
Что заложить в прогон конкретно: подписанный сид с досеянными формами и явным allow_short у односимвольных; флаг остановки на подпись (иначе банк едет неподписанным по умолчанию); сохранять расхождение форм по ФИНАЛЬНОМУ тексту, а не по черновику; хотя бы один непустой профиль голоса, иначе голосовая половина снова вернётся с нулём, неотличимым от чистоты; книга целиком, а не срез.
4. Что требует вашего слова
- Стоп или флаг. Сегодня разъехавшийся термин отгружается: механизм остановки построен и работоспособен, но выключен, и включается ОДНОЙ строкой данных без правки Go. Вы сами отложили это до замера ложных срабатываний («если он ложно положительно будет стрелять — это плохо, очень плохо»). Рекомендация: не включать до §3.1, но решить сейчас, что стоп делает — держит кусок целиком (сегодня это пустая отгрузка) или зовёт точечную перегенерацию; актуатора у промаха нет вовсе.
- Входит ли голос в приоритет №1. Ратифицированный список от 05.09 ставит в №1 ТОЛЬКО термины, голос — №3; канон проекта говорит «термины/голоса». Пока это не одно требование, сессия, собранная по такой формулировке, будет строить от неверной цели. И следом: подпись профилей вы сняли, а реестр физически заполняла только она — если не подпись, то кто?
- Один перевод у неподписанного термина. Ваше слово записано, но исполнено только для подписанных. Неподписанных — 92 % строк по всему корпусу баз, 15 % после дедупа по книге (оба числа верны, считают разное: первое — файлы, второе — книги). Три детектора противоречия только пишут в лог. Оба выхода стоят денег: уронить оплаченный прогон либо двинуть версию памяти и пере-купить редакторскую волну.
- Накапливать ли банк между прогонами. Авто-банк переписывается целиком из топ-200 текущего прогона; выпавшие поимённо названы в логе, подписанные защищены тремя стражами, но неподписанная строка едет на провод как закон и может смениться между главами. Слияние двигает версию памяти ⇒ пере-покупка. Код прямо адресует это вам.
- Остановка на подпись — опция или свойство продукта. Сегодня по умолчанию «никогда не останавливаться» (
backend/cmd/tmctl/invocation.go:141), на API это галочка пользователя. Без неё движок пишет свои строки в банк и отдаёт редактору неподписанный канон — то есть «человек утверждает термины» сегодня не является свойством продукта.
ЗАМЕРЕНО · ВЫВЕДЕНО · НЕ СПРОШЕНО
ЗАМЕРЕНО (приборы названы; звёздочкой — пере-проверено мной лично в этой сессии, остальное — пятью читателями):
- ★
postcheck_gateиvoiceвbackend/configs/— по 0 вхождений при контроле: 5 yaml на верхнем уровне, 8 рекурсивно, блокgates:найден в 4 из 4 боевых конфигов. - ★
injection.txtнесёт РОВНО один целевой ключruпри контроле — 5 ключей (en ja ko ru zh) в соседнемlang-script.txt. На любой другой цели оба банк-блока рендерятся в 0 байт (исполнено на копии: ru 366+542 байта, en 0+0, de 0+0). - ★ Не-тестовых вызовов пост-проверки — 4, все по чанку/юниту (
waverun.go:618,738,repair.go:630,631) плюс определение. - ★ По 162 базам дерева: 161 с таблицей состояния выборки, 4865 строк, сумма вытеснений 0 при контроле 5885 точных попаданий / 2979 липких / 510 неоднозначных; подтверждённых промахов глоссария 317.
- ★ Точность глоссарного чекера: n=258, верных 1, ложных 14, пропусков 0 — и все 14 ложных разложены:
转×6,蛊虫×4,元石×2,凡人,甲等; все пять прогонов-источников — С подключённым каноном. - Снапшотов прогонов с включённым гейтом — 0 из 281 (18 «без поля» вскрыты: ручные пробы, не конвейер).
- «99,3–100 %» воспроизведены байт-в-байт на копии (375/98.9/100.0 · 390/98.5/99.5 · 531/97.4/99.6 · 548/96.9/99.3) и разобраны: предикат — присутствие принятой формы в чанке, единица — пара «термин × чанк».
- Пробы на копиях: смесь двух форм в одном куске → 0 промахов; сплошной дрейф → 1 промах; термин вне банка → 0/0; односимвольный ключ без
allow_shortне выстреливает. - Данные: 47 сид-файлов с терминами, 22 с секцией голосов, 21 из них пустая, непустых живых — 0. Субстрат майнера: zh 48 кандидатов из 120 рун против en 0/504, ko 0/200, катакана 0/160.
ВЫВЕДЕНО (не замер, помечаю честно):
- Что кап 200 и бюджет 800 встретятся с настоящим объёмом: экстраполяция со 102 строк на 25 главах на 2283 главы.
- Что потеря липкости между правочными единицами даёт дрейф в тексте: замерена только экспозиция (86 %), инцидентов ноль.
- Что вторая передача распространена в отгруженном тексте: 13–16 % сняты на стенде БЕЗ канона; тем же прибором по подписанному прогону не ходили.
- Что голоса входят в приоритет №1: канон и ратификация расходятся — поэтому это ваш вопрос, а не вывод.
ЧЕГО ПЯТЬ ЧИТАТЕЛЕЙ НЕ СПРОСИЛИ:
- Полисемия по книге. Банк — один исходный термин, один перевод, замороженный на прогон. Сцена, где 气 не «ци», в модели банка не существует, и ни один прибор её не ищет. Для 2283 глав это не теоретический класс.
- Ёмкость человека. Весь механизм консистентности упирается в вашу подпись, а сколько предложений на главу выдаст майнер на полной книге и сколько это минут — не смоделировано никем; в реестре рисков эта позиция стоит с пометкой «дыра» и не имеет носителя ни в одном трекере.
- Цена самого свода. Работу из §2.1 все оценивают «день», но время прохода по 5071 чанку полной книги никто не прикинул.
- Вторая книга той же пары. Классификатор типа термина — тот, что решает «транслитерировать или переводить» — обучен на каноне 蛊真人 прямо в общем промте пары (
backend/prompts/zh-ru/classifier.md, шесть книжных поверхностей плюс два few-shot-ответа). Смещение на другой zh→ru книге не мерил никто. - Ретроактивность подписи. Два прогона ОДНОЙ книги разошлись в самом каноне — 元石 «первокамень» против «первобытный камень», 真元 «истинная энергия» против «истинная ци», обе записи подписаны. Прибор удостоверяет верность тому канону, который загрузили, а не стабильность канона. Что делать с главами, отгруженными до того, как вы поменяли подпись на 300-й главе, — не спросил никто.