From 5bc75d0e9a328fccc62177a1ac8178b03507f0d1 Mon Sep 17 00:00:00 2001 From: "Claude (backend session)" Date: Sat, 11 Jul 2026 05:30:19 +0300 Subject: [PATCH] Pre-register exp13 translator bake-off: six arms, cross-family span-citing judges, output gates, frozen before paid calls --- docs/experiments/13-translator-bakeoff.md | 81 +++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 docs/experiments/13-translator-bakeoff.md diff --git a/docs/experiments/13-translator-bakeoff.md b/docs/experiments/13-translator-bakeoff.md new file mode 100644 index 0000000..a62f91f --- /dev/null +++ b/docs/experiments/13-translator-bakeoff.md @@ -0,0 +1,81 @@ +# Эксперимент 13. Бейк-офф ПЕРЕВОДЧИКОВ (蛊真人 zh→ru) + финализация сида v2 + +**Статус:** полигон-сессия exp13 (D30.6, приоритет №1). Пре-скрин пилота Ф2.5, безκ-режим, N-судьи + флагман-сверка владельца. Смену дефолта ратифицирует ОРКЕСТРАТОР (D-блоком) — не эта сессия. +**Мандат:** `docs/POLYGON_EXP13_SESSION_PROMPT.md` + D30.6/30.10. Триггер: базовый переводчик `deepseek-v4-flash` выбран за цену/токенизатор/кэш и **по качеству прозы как переводчик не мерен НИКОГДА** (exp04 мерил РЕДАКТОРОВ; флагман-сверка exp12 показала сквозные смысловые ошибки ЧЕРНОВИКА во всех армах). Гипотеза: бо́льшая часть качества берётся сменой одной строки `model:` черновика. +**Зона:** `eval/` + этот файл + PROGRESS «Полигон» + курация сида (вне git). Бэкенд не трогаю (пакет D15.2). Кап **$5**. +**Артефакты:** сэмплы/выходы/сырьё судей — `/home/ubuntu/books/gu-zhenren/diag/` (ВНЕ git; в доке — числа и цитаты ≤15 слов). Каждый платный скрипт персистит usage/cost (D30.10). + +--- + +## 0. Онбординг-факты (контракт, на которых стоит дизайн) + +- **D30.6 (ратификация):** exp13 приоритет №1; армы mistral-large-2512 / glm-5 / deepseek-v4-pro / **grok-4.3 reasoning-ON** (единственный CJK-чистый замер 10/10 exp10; ключ разблокирован D27); qwen — опционально, гейт на DashScope-ключ владельца; deepseek — thinking ON (эхо-мина). Судьи span-цитирующие reasoning-ON (урок exp12) + флагман-сверка владельца monitor-паттерном. +- **D30.1 (флип D1):** редактор пере-прогона — БИЛИНГВАЛЬНЫЙ glm-5; re-gate верности обязателен. Пере-прогон 25 глав = {переводчик по exp13} → glm-5-билингв → reflow → сид v2 → санитайзер. Т.е. exp13 выбирает ТОЛЬКО стадию черновика; downstream-редактор чинит вёрстку и стиль. +- **D30.2 (reflow):** «Сохраняй разбивку на абзацы» снимается из `translator.md:9`/`editor.md:8`. Пакет бэкенда D15.2 НЕ залендён на момент exp13 (translator.md ещё несёт строку 9) → армы строят промпт переводчика в eval-коде, **удаляя строку 9 согласно ратифицированному D30.2** (не изобретаю новую строку; PROGRESS-пинг оркестратору на сверку финальной прод-редакции). Влияние на РАНЖИРОВАНИЕ мало: reflow-вёрстку downstream делает билингв-редактор (D30.1), не черновик. +- **Draft-стадия РЕАЛЬНО инъектит глоссарий** (`chunkrun.go:68` `translatorInjection = renderGlossaryBlock`) → армы несут ТОТ ЖЕ блок инъекции (`blocks.json[chunk].bilingual_glossary`, «src → dst», V1-сид приёмки), идентичный по чанку у ВСЕХ армов. Единственная варьируемая переменная — модель переводчика. +- **exp04 (D3):** мерил РЕДАКТОРОВ (билингв, PD-классика). Переводчики как таковые не меряны никем. deepseek выбран за цену/токенизатор/кэш (Р4), не за качество прозы. +- **grok-биллинг:** reasoning-ON = additive (xAI отдаёт `reasoning_tokens` отдельным полем; в eval даём max_tokens с запасом, считаем по usage). deepseek: thinking ON, reasoning ⊆ completion (subset). glm: thinking off (`extra_body {thinking:{type:disabled}}`). mistral: не reasoning-модель. Пруф-слаги/цены — models.yaml, prices_checked 2026-07-10. + +--- + +## 1. ПРЕ-РЕГИСТРАЦИЯ (заморожена ДО платных вызовов; коммит до первого платного вызова — D30.10) + +Всё ниже зафиксировано до генерации армов и оценки. Промпт переводчика **заморожен** — никакого промпт-инжиниринга по ходу (урок exp04: сломанная слепота однажды уже дала дефолт-редактора). + +### 1.1. Материал — те же 3 чистые главы/6 чанков, что exp12 (сравнимость) + +Frame и выбор — унаследованы из exp12 §1.1 (детерминированная формула диалого-плотности `D`, не черри-пик): **гл. 7** (диалого-плотная, D=0.490), **гл. 5** (смешанная = медиана, D=0.222), **гл. 14** (экспозиция, D=0.022). По 2 чанка на главу → 6 источников. Источник zh и его V1-инъекция — из приёмочного store (`diag/chunks.json`, `diag/blocks.json`), общие для всех армов. + +### 1.2. Армы-переводчики (варьируется ТОЛЬКО модель черновика) + +Каждый арм: `system(translator.md reflow-edition, brief-filled)` → `system(инъекция = blocks[chunk].bilingual_glossary)` [если непусто] → `user("Переведи следующий фрагмент:\n\n{source}")`. Layout = `MessagesWithInjection` (render.go). Brief-vars из `acceptance/book.yaml`: source_lang=zh, target_lang=ru, genre=вебновелла, audience=взрослые читатели вебновелл, title=蛊真人, honorifics=keep, transcription=palladius, venuti=0.6, footnotes=minimal. Decoding: **temperature 0.3** (прод draft-стадия), max_tokens 8000 (запас под thinking-модели; счёт по usage). + +| Арм | Модель | Провайдер | reasoning-постура | Источник | Прайм-цена $/1M (in/out) | +|---|---|---|---|---|---| +| **T1** | deepseek-v4-flash (=база) | deepseek | thinking ON (эхо-мина; прод no-op «off») | **store, $0** (`chunks.json.draft`) | 0.14 / 0.28 | +| **T2** | mistral-large-2512 | mistral | нет (не reasoning-модель) | live | 0.5 / 1.5 | +| **T3** | glm-5 | zai | thinking OFF (`{thinking:{type:disabled}}`, = прод draft-постура) | live | 1.0 / 3.2 | +| **T4** | deepseek-v4-pro | deepseek | thinking ON (эхо-мина; subset) | live | 0.435 / 0.87 | +| **T5** | grok-4.3 **reasoning-ON** | xai | reasoning ON (default low; additive) — МАНДАТ D30.6 (reasoning-off = доказанный no-op) | live | 1.25 / 2.50 | +| **T6** | qwen-flash | dashscope | нет | **ТОЛЬКО если владелец даст DashScope-ключ** (спрошено 1 раз, не блокируюсь) | — | + +Постуры зафиксированы как прод-draft-постура каждой модели (draft-стадия шлёт reasoning «off»), КРОМЕ T5: reasoning-off grok = доказанный no-op (exp12 §2.2), поэтому мандат меряет grok reasoning-ON — единственный содержательный замер grok-как-переводчика. + +### 1.3. Гейты на выходах (все армы; D30.10) + +- **Эхо-rate** (отдельная колонка; deepseek-прайор 25%): доля Han-символов в ru-выходе > порога ⇒ эхо/копия исходника. Порог: >10% Han (нормальный ru-перевод ≈0–2% Han на редких терминах; полное эхо ≈100%). Флаг + запись, не роняю. +- **Refusal:** маркеры отказа (не могу/не буду/as an AI) на не-18+ SFW-входе = дефект. +- **Объём-коридор:** `len(ru)/len(zh_source)` вне zh→ru-бандов приёмки `[2.2, 4.2]` ⇒ флаг (усечение/раздувание). +- **Полнота:** пустой выход / finish=length ⇒ дефект арма. + +### 1.4. Оценка (уроки exp12 — D30.1/30.10) + +**Судейская панель (кросс-семейная; НИ ОДИН арм не из семей судей → self-family exclusion соблюдён без исключений):** +- **J1 gemini-3.1-pro-preview** (Google; thinking mandatory = reasoning-ON), **J2 gpt-5-mini** (OpenAI; reasoning_effort=medium = ON), **J3 kimi-k2.6** (Moonshot; reasoning-ON, temp=1 форс, max_tokens 16000). Ни deepseek/mistral/glm/grok (все — армы) в судьи не берём. +- **Раздельные оси:** ВЕРНОСТЬ и СТИЛЬ — РАЗНЫМИ вызовами (урок exp12: смешанные скаляры слепы). Каждый вызов — ранжирование всех армов по одной оси на одном чанке. +- **Рационале обязательно:** JSON `{ranking:[labels best→worst], evidence_spans:[{label, quote(zh/ru ≤15 слов), note}]}`. Пустой evidence ⇒ вызов невалиден, повтор. +- **Слепота:** метки V1..VN, перемешанные СВОЕЙ перестановкой на каждый (чанк × ось × повтор); ключ — отдельный файл, не открывается до агрегации. +- **≥3 повтора** со свапом на (чанк × ось × судья). Агрегация — среднее место (Borda), устойчивость к leak — по разбросу. +- **Parse-чек полноты ранжирования:** `set(ranking)==set(labels)`; неполный вердикт выбрасывается (не доклеивается), дисклоуз в отчёте. +- **Флагман-сверка владельца:** тем же monitor-паттерном (слепые метки, ключ отдельно, оригинал+вариант на копирование во Fable 5/5.6). Сырьё флагманов → `diag/`. +- Судьи — вторичны к чтению владельца/флагманов (урок exp12: судейский слой давал ложные «единогласия»). + +### 1.5. Гигиена (D30.10) + +Каждый платный вызов персистит usage+cost в `diag/arms13/costs.jsonl`; финальная сумма — в отчёте. Хард-стоп на 80% капа ($4). Пре-регистрация коммитится ДО первого платного вызова. Аномалии провайдеров → вендор-дока, не гадание. + +### 1.6. Deliverable + +Таблица армов (стиль/верность со спанами/эхо-rate/цена за главу) → рекомендация переводчика для пере-прогона 25 глав (+ цена/25 глав) → финальный сид v2 со статусами после подписи владельца. **Перенос победителя на 18+ регистры требует ОТДЕЛЬНОЙ пробы** (D22/exp10-11): этот срез — ранние SFW-главы, канал-B ToS не активен здесь. + +### 1.7. Финализация сида v2 (D30.5, вторая половина сессии) + +- Спорные термины → `status:draft` (修炼/культивация, 人祖/Первопредок, род «гу», 花酒行者; тихие промоушены draft→approved откатить) → таблица на подпись владельцу → статусы после подписи. +- Влить обогащение мн.ч. (D24.4: 元石/凡人/蛊师-класс, все счётные) в ту же v2-итерацию. +- Дисклоузер-аддендум в exp12-док §4.2 (провенанс v2-сида и делегации — дефект провенанса из ревью D30.5). + +--- + +## 2. Результаты + +_(заполняется после исполнения; ничего выше не редактируется — пре-рег заморожен)_