Ralph loop, оракул и право на мутацию: как не путать execution loop с evolution loop

Ralph loop, оракул и право на мутацию: как не путать execution loop с evolution loop

Споры вокруг понятия "Ralph loop" всё чаще напоминают сцену из Spider-Verse: все говорят об одном и том же, но каждый уверен, что именно его версия — настоящая. На деле под этим термином скрываются разные архитектуры, а иногда и противоположные подходы. Пора разобраться, что есть что.

Что общего у всех Ralph-подобных циклов?

На первый взгляд все реализации похожи: есть цикл, борьба с "протуханием" контекста (context rot), критерии успеха и верификатор — "погонщик" цикла. Но при ближайшем рассмотрении различия становятся критичными.

Ключевые различия:

  • Цикл: внутренний, внешний или их комбинация.
  • Память: от простого удаления логов до глубокого анализа причин неудач.
  • Критерии успеха: описаны вербально, в тестах, "зашиты" в среду или сочетают несколько подходов.
  • Верификатор: внешний или внутренний, независимый или номинальный. Иногда реальный оракул — источник решения "можно выходить из цикла" — остаётся внутри самого агента.

Верификатор и оракул: в чём разница?

Верификатор — технический механизм проверки: запуск тестов, линтеров, API. Он отвечает за сигнал "приблизились ли мы к цели?" Без него итерационный цикл превращается в самообман.

Оракул — источник истины о том, решена ли задача. Это может быть человек, бенчмарк, платформа или среда. Верификатор — лишь способ получить доступ к оракулу.

Например: запуск тестов — верификатор, интерпретация их результатов — оракул. Бенчмарк — оракул, а evaluation pipeline — способ его вычисления.

Системный промпт и артефакты

Системный промпт задаёт роль агента, его ограничения, приоритеты и формат сигнала о завершении. Он может быть зашит в код, собираться программно или комбинироваться с внешними артефактами.

Артефакты — внешние объекты, сохраняемые между итерациями: сжатые логи, правила, знания, извлечённые из анализа предыдущих шагов.

1. Same-prompt Ralph

Один и тот же промпт перезапускается, пока модель не скажет "готово", а внешняя проверка не подтвердит ожидаемый токен. Управление циклом формально внешнее, но решение о завершении — внутри модели.

Пример: плагин Ralph у Anthropic. Claude работает над задачей, хук перехватывает выход и перезапускает промпт до появления "DONE" или лимита итераций.

Проблемы:

  1. Зависимость проверки от качества промта: если тесты не описаны детально, проверка номинальна.
  2. Проверка и построение в одном контексте: модель подгоняет тесты под задачу, снижая когнитивные навыки.
  3. Работа в одной сессии: контекст накапливается, растёт стоимость и риск галлюцинаций.
  4. Оракул внутри цикла: решение о завершении принимает перегруженная модель, что ухудшает качество.

2. External verifier Ralph

Агент перезапускается, пока внешний верификатор не скажет "готово". Проверка вынесена в отдельный блок, что даёт больше контроля.

Пример: Ralph у Vercel. Внешний цикл с verifyCompletion проверяет результат после каждой итерации и при неудаче передаёт фидбек. Внутренний цикл использует инструменты (tools) до лимита или до "семантической готовности".

Проблемы:

  1. Вся задача может решаться во внутреннем цикле с накоплением контекста.
  2. Качество зависит от реализации верификатора: слабый — не гарантирует корректного решения.
  3. Оракул остаётся внутри: модель сама решает, что задача решена, что часто ложно.

3. Artifact-evolving Ralph

Между итерациями меняются части инструкций. Цикл аналогичен предыдущим, но артефакты эволюционируют.

Пример 1. Оригинальный Ralph loop (Geoffrey Huntley)

Инструкции меняются от итерации к итерации на основе взаимодействия с реальностью. Промт включает:

  • AGENTS.md — команды проверки (build/test/lint).
  • IMPLEMENTATION_PLAN.md — задачи, статус, баги, открытия.
  • PROMPT.md — дисциплина: работать над одной задачей, тесты должны проходить, обновить план, выйти.

Агент может эволюционировать:

  • План — помечает задачи, добавляет проблемы.
  • Слой валидации — дополняет правила проверки.
  • Критерии успеха — при несоответствии спецификациям, после ручной проверки оператором.

Проблемы:

  1. Мутабельность критериев — риск дрейфа, особенно в безопасности и качестве кода.
  2. Извлечение артефактов во внутреннем цикле — контекст засорён, выводы некачественные.
  3. Мутабельность воркфлоу — небезопасно.
  4. Воркфлоу размыт по файлам — минус для безопасности.
  5. Верификатор во внутреннем цикле — зависит от промта, риск подмены.
  6. Человек как оракул — агент не автономен.

Пример 2 и 3. Плагин Cursor и реализация Snarktank

Более формализованные версии. Не меняют критерии успеха, но позволяют переписывать файлы с ними — уязвимо.

Оракул пытается стать внешним: проверяет сигнал "COMPLETE" или количество чекбоксов. Валидация через среду — по промтам, но воркфлоу размыт.

Преимущества:

  • Нет дрейфа критериев при нормальной работе.
  • Работает над одной задачей за итерацию, не в бесконечной сессии.

Недостатки:

  1. Нет защиты от несанкционированного переписывания критериев.
  2. Воркфлоу мутабелен.
  3. Оракл — модель, как у Anthropic: автономно, но небезопасно.

4. Artifact-evolving Ralph with external verifier

Эволюция артефактов, но право на успех — у внешнего валидатора. Валидация отделена от внутреннего цикла, повышая безопасность.

Чёткое разделение:

  • Критерии успеха (specs) — что считается правильным.
  • Исполнение (runtime) — попытка реализовать задачу.
  • Проверка (verification) — внешняя команда решает, соответствует ли результат.

Пример. Codex плагин (JH427)

Системный промт собирается программно, включая обновлённые артефакты. Оркестрация защищена от переписывания агентом.

Ключевое отличие — внешний проверяющий контур. Решение о успехе — не по отчёту модели, а по результату проверки: компиляция, тесты и др.

Безопасность: валидатор проверяет, не нарушен ли режим "только добавления", корректно ли изменён статус задачи. При несовпадении — откат через git.

Оракул — один из самых чистых: модель не может сама объявить задачу завершённой. Условие остановки двухуровневое:

  • Итерация: обновление артефактов + прохождение проверки.
  • Цикл: внешний контур подтверждает выполнение критериев.

Недостатки:

  1. Агент подстраивается под валидатор — дрифт критериев.
  2. Нет физической защиты от мутации валидатора — риск "побега из песочницы".
  3. Риск переписывания системного промта через артефакты — решается инструкциями игнорировать инъекции.

Извлечение артефактов: сравнение

Почему Huntley назвал его Ральфом? По аналогии с героем из Симпсонов: Ральф падает с горки, ставит табличку "съезжать", и в следующий раз не падает. Он извлекает знание и оставляет его на будущее.

У разных реализаций разная глубина извлечения:

  • Huntley: знание распределяется по артефактам — задачи, проверки, спецификации.
  • Cursor: парсер распознаёт инфраструктурные паттерны, но глубокий анализ — на агенте или человеке.
  • Snarktank: агент дописывает знания, паттерны, подводные камни, выносит переиспользуемое в артефакты верификации.
  • Codex: сохраняется только узкое наблюдение, без анализа причин — деградация в части эволюции.

Верификатор формирует результат даже сильнее, чем вербальные критерии.

5. Self-evolving agent

Агент может переписывать системный промт, план, инструменты, критерии — во внешнем цикле. Это уже не просто Ralph loop, а отдельный родственник.

Для безопасности нужна связка из четырёх агентов:

  • Решатель — выполняет задачу.
  • Верификатор — пишет и запускает тесты.
  • Анализатор — глубоко анализирует ошибки.
  • Модификатор — меняет решателя для лучшей адаптации.

Система неустойчива, но становится рабочей, если верификатор неизменяем: бенчмарк, реальность, платформа с 0/1.

Пример. Claude's sequential evolution

Победитель Enterprise RAG Challenge: Main Agent решает задачи, Analyzer разбирает провалы, Versioner выпускает новую версию промта. Верификатор — платформа, возвращающая 0 или 1.

Риски:

  1. Переобучение: агент запоминает ответы, а не обобщает.
  2. Оптимизация под бенчмарк, а не под суть задачи.
  3. Высокий риск безопасности при самопереписывании.
  4. Деградация интерпретируемости из-за накопления патчей.

Итог: как строить Ralph-like архитектуру?

Прежде чем говорить "давайте сделаем Ralph loop", задайте себе вопросы:

  1. Кто оракул?
  2. Где живут критерии завершения — в промте, коде, бенчмарке, тестах или человеке?
  3. Что переносится между итерациями — логи, фидбек, правила, план, анализ причин?
  4. Что может мутировать — ничего, промт, инструменты, план, всё?
  5. Это execution loop или evolution loop?
  6. Подходит ли схема без дешёвого машино-проверяемого фидбека?

И главное: какие trade-off и уязвимости вы хотите избежать? Только тогда разговор перестанет быть о костюме Человека-паука и начнётся о том, как он делает паутину, как движется и мутирует ли сам по ходу дела.

Ответив на эти вопросы, можно создать своего Ральфа — свою уникальную вселенную архитектуры с собственными правилами и источниками истины.

Читать оригинал