# История попыток Как CM пришла к текущему механизму ([HOW-IT-WORKS.md](HOW-IT-WORKS.md)) и что по пути не сработало. Все серии — живые сессии GPT-6 Luna (reasoning low) на копиях проекта Geo Dash с независимой проверкой правок. Наборы задач в разных сериях разные, поэтому проценты между строками напрямую не сравниваются; сравнение корректно только внутри одной серии. Документы, скрипты и сырые данные прошлых серий удалены из рабочего дерева и доступны в истории git на коммите [`0119b57`](https://github.com/kobubu/Rag-Coding/tree/0119b57): документы в `docs/`, данные в `evaluation/`. ## Сводка | # | Подход | Сессий | Качество: CM / без CM | Токены к без CM | Время к без CM | Итог | |---|---|---:|---|---:|---:|---| | 1 | Лексический поиск, четыре инструмента | 28 | 14/14 / 13/14 | +6,2% | — | Неудача | | 2 | Векторы + авто-контекст до первого шага | 32 | 12/16 / 9/16 | −69,4% | +8,9% | Экономия, но медленнее | | 3 | Дробление: целые функции / окна / AST | 24 | равное | +6…+47% | — | Неудача | | 4 | Граф и маршрутизация | 48 | 12/12 / 10/12 | −51,6% | медленнее | Экономия, но медленнее | | 5 | HNSW вместо точного поиска | 36 | 12/12 / 9/12 | −54…−59% | ANN +2,7% к exact | ANN не нужен | | 6 | Быстрые маршруты 0.7.0 | 36 | 12/12 / 11/12 | −48,1% | −20,4% | Первый выигрыш по обоим | | 7 | Codex и Claude Code через MCP | 96 | ≈ равное | от −7,5% до +28% | от −2,7% до +35% | Неудача | | 8 | Текущий механизм в Harness | 36 × 3 | 36/36 / 35/36 | −45…−66% | −18…−37% | Выигрыш, повторён трижды | | 9 | Хук в Codex и Claude Code | 36 + 36 | 24/24 / 23/24 | −42% / −30% | −5% / +3% | Выигрыш по токенам | | 10 | Демон для хука, Codex | 36 + 90 | 29/30 / 29/30 | −32% | −10% | Выигрыш по времени, тенденция | ## 1. Лексический поиск и четыре инструмента 13 октября. CM давала модели четыре инструмента: поиск символов, поиск кода, получение контекста по ID, обход графа. Векторов не было. 7 внесённых ошибок × 2 повтора × 2 варианта = 28 сессий. Результат: +6,2% токенов, +2,4% цены; правильных правок 14/14 против 13/14. Почему не сработало: модель должна была сама вызывать инструменты, делала это в несколько шагов, а потом всё равно читала файлы. Каждый шаг CM добавлял вызов модели вместо того, чтобы убирать. ## 2. Векторы и авто-контекст 13 октября. Добавлены локальные эмбеддинги MiniLM (384 измерения, LanceDB), гибридный поиск «имена + слова + векторы» и режим `compact`: один инструмент `cm_retrieve_context`, а главное — **контекст до первого вызова модели**. Код читается через файловую систему Harness и регистрируется как прочитанный, чтобы правка шла без `read`. Результат, 32 сессии: −69,4% токенов, −56,9% цены, 12/16 правильных против 9/16. Средняя сессия 32,11 с против 29,48 с — медленнее. Вывод: экономия появляется, когда CM отдаёт код заранее, а не ждёт вызова. Этот принцип сохранился до сих пор. ## 3. Варианты дробления кода 13 октября. Задачи на оптимизацию исправного кода (поведение + реальное ускорение CPU). Сравнивались единицы поиска: целые функции, окна по 768 байт и группы инструкций по AST. 24 сессии. | Вариант | Токены к без CM | Поведение | Ускорение целевой функции | |---|---:|---:|---:| | Целые функции | +38,5% | 6/6 | 3/6 | | Окна | +47,2% | 6/6 | 3/6 | | AST | +6,2% | 6/6 | 3/6 | Неудача: ни один вариант не сэкономил и не дал больше полезных оптимизаций; вызывающий код заметно не ускорился. Дробление мельче функции не помогло — оставлены целые функции. ## 4. Граф и маршрутизация Версия 0.6.0. Каталог компилятора: имена, пути, связи `calls`. Политика `graph` добавляет к словам и векторам поддержку соседей по вызовам; `adaptive` при найденном имени пропускает векторный поиск. Контекст строится как функция плюс замыкание зависимостей с бюджетом и явными пропусками. Одновременно добавлено живое обновление индекса с фоновым наблюдателем. Результат, 48 сессий: граф 12/12 против 10/12, −51,6% токенов, −42,5% цены; к прежнему гибридному поиску −20,2% токенов. Сессии стали медленнее: пересборка в фоне и тяжёлый старт. ## 5. HNSW Версии 0.5.0–0.6.1. В LanceDB построен индекс IVF_HNSW_SQ. Сам векторный поиск на 7 503 векторах ускорился в 3,12–3,37 раза при recall@24 100% и 99,91%. В модельной серии, 36 сессий: exact и ANN 12/12, без CM 9/12; токены −54,1% и −58,5%, но начальный контекст в обоих вариантах совпал во всех 12 задачах, а сессии ANN шли на 2,73% дольше exact. Вывод: векторный поиск — доли секунды и не узкое место; точный перебор оставлен по умолчанию. ## 6. Быстрые маршруты 0.7.0 Маршрут «текущий файл» (небольшой названный файл читается с диска без индекса), именованный маршрут без векторов, облегчённый запуск MiniLM через ONNX Runtime напрямую (старт модели в 1,77 раза быстрее) и обновление индекса по требованию перед запросом вместо фонового наблюдателя. Результат, 36 сессий: 12/12 против 11/12, −48,1% токенов, −35,1% цены, **−20,4% времени** — впервые быстрее и дешевле одновременно. К варианту 4 время −58,6%, но токены +3,1%: целые небольшие файлы иногда дороже короткого графового контекста. Без первой тройки сессий выигрыш по времени 9,7%. ## 7. Codex и Claude Code через MCP Версии 0.8.0–0.8.1, 96 сессий. CM подключается как MCP-сервер stdio через установщик; модель сама решает, вызывать ли его. | Серия | Клиент | Токены к без CM | Время | Качество | CM вызван | |---|---|---:|---:|---|---| | Стандартное подключение, 48 | Codex | +28,2% | +29,5% | 11/12 = 11/12 | 7/12 | | | Claude Code | +5,7% | 0% | 11/12 против 12/12 | 0/12 | | Явное правило «сначала CM», 24 | Codex | +7,9% | +9,5% | 6/6 против 5/6 | 4/6 | | | Claude Code | +13,8% | +7,2% | 6/6 = 6/6 | 6/6 | | После исправления 0.8.1, 24 | Codex | +17,1% | +34,6% | 6/6 = 6/6 | 2/6 | | | Claude Code | −7,5% | −2,7% | 5/6 против 6/6 | — | В 0.8.0 Claude Code получал от MCP только метаданные: исходник лежал в другой части ответа. В 0.8.1 код стал приходить в `structuredContent`. Экономии всё равно нет: без автоматического контекста модель либо не вызывает CM, либо вызывает и потом читает файлы. ## 8. Текущий механизм Подробно — [EFFICIENCY-AB.md](EFFICIENCY-AB.md). Шесть задач серии 0.7.0, три варианта: без CM, CM 0.8.1 и новая сборка; по два повтора. | Шаг | Что изменилось | Почему | |---|---|---| | Пилот 0.8.1 | — | Поиск уходил в чужие файлы из-за инструкций агента в тексте задачи; модель перечитывала файлы из-за слова «partial» | | Этап 1 | Очистка запроса, целые короткие файлы, точная концовка контекста | Серия 1: −40% токенов к без CM, но 11/12 и не быстрее | | Этап 2 | Места вызова, ссылка вместо повторного `read`, инструкция | Серия 2: 12/12, −65,5% токенов, −37,2% времени | | Загрузка | Быстрая проверка UTF-8, отметка о проверке индекса | Серия 3: 12/12, −60,9% токенов, −29,8% времени | | Рассуждение | «Сначала продумай поведение»; ленивый TypeScript | Серия 4: 12/12, −44,7% токенов, −18,3% времени | Что не сработало на этом пути: - **Подмена сообщений перед вызовом модели.** Harness замораживает собранный запрос, а переписывание истории ломало бы кеш. Сделано через замену результата инструмента. - **Граф функций для мест вызова.** Терял вызовы на уровне модуля и сообщал бы «вызовов нет». Заменён прямыми связями `calls`. - **Убрать «правь сразу» из инструкции.** Проверка на 5 повторах: стало хуже (134К против 98К токенов). - **Серия 4 против 0.8.1.** На неоднозначной задаче wallet-delta новая сборка оказалась дороже (94,7К против 48,3К), и суммарно на 14% дороже 0.8.1 в этой серии; без этой задачи — на 14% дешевле. ## 9. Хук в Codex и Claude Code Вывод из попытки 7 — без автоматического контекста модель не пользуется CM — проверен на тех же шести задачах, что и текущий механизм. Хук `UserPromptSubmit` подаёт контекст CM до первого вызова модели. Codex с GPT-6 Luna: −42,3% токенов, −22,7% цены, −4,6% времени, 12/12 против 11/12. Claude Code с Sonnet 5.5: −29,6% токенов, −13,6% цены, время +3,1% (медиана −19%), 12/12 = 12/12. CM 0.8.1 через MCP в обеих сериях не был вызван ни разу. Подробно — [NATIVE-CLIENTS.md](NATIVE-CLIENTS.md). ## 10. Демон для хука Идея из опыта Netflix с движком IntelliJ: держать индекс прогретым, а не загружать его заново на каждый запрос. Хук спрашивает демон через локальный сокет; запрос на Geo Dash — 0,39–0,63 с вместо 3,5 с. Первая серия Codex (36 сессий) показала сокращение времени хука с 27,9 до 4,8 с, но на итоговом времени это утонуло в разбросе. Прямое сравнение в одной серии из 90 сессий: с демоном к варианту без CM −31,6% токенов, −16,1% цены, −9,7% времени, медиана сессии 12,2 с против 19,1 с; без демона время было +2,1%. Выигрыш демона по времени — около 2 с на сессию, быстрее в 20 парах из 30; 95%-й интервал ещё захватывает ноль. Подробно — [NATIVE-CLIENTS.md](NATIVE-CLIENTS.md#codex-хук-с-демоном-и-без-90-сессий). ## Очистка репозитория, 18 октября 2026 Удалены невостребованный старый A/B-раннер и три неиспользуемые функции: действующие серии используют `efficiency_ab.ts` и `native_ab.ts`. Сохранены вспомогательные функции запуска Harness, учёта токенов и подготовки корпуса, а также опубликованные результаты серий. Векторный поиск, граф, MCP и Atlas продолжают работать по прежнему алгоритму; новых измерений экономии эта очистка не даёт. React и ReactDOM перенесены в зависимости для разработки: Vite уже включает их в статическую сборку Atlas. Отдельная установка готового пакета не должна требовать эти библиотеки. TypeScript теперь проверяет неиспользуемые локальные объявления и параметры при сборке. ## Что отложено - Отдельная графовая база (Neo4j и подобные): граф на 130 тысяч связей помещается в памяти, экономию даёт отбор контекста, а не хранилище. - Компактный формат индекса: JSON 92 МБ разбирается ~0,8 с в каждой сессии. - Другие языки, кроме JavaScript и TypeScript.