Защита от зацикливания¶
Иногда модель застревает: раз за разом повторяет один и тот же текст, рассуждение или вызов инструмента с теми же аргументами и результатом, но задача не двигается. Чтобы сессия не тратила время и токены впустую, Koda распознаёт такие повторы и вмешивается.
Как распознаётся повтор¶
Koda следит за потоком ответа модели и сравнивает его с недавней историей. Повтором считается, если подряд воспроизводится одно и то же:
- фрагмент обычного текста длиной не меньше 100 символов — пять раз;
- фрагмент рассуждений — по той же проверке;
- вызов инструмента с тем же именем и аргументами — на пятый раз, если совпадают и результаты предыдущих вызовов;
- последовательность вызовов инструментов или смешанный блок текста, рассуждений и действий — пять раз.
Незначительные различия в пробелах не мешают распознаванию, а изменившийся результат инструмента разрывает повтор — значит, работа идёт. Параллельные вызовы, результаты которых ещё неизвестны, зацикливанием не считаются.
Что происходит при повторе¶
На первом срабатывании Koda прерывает текущую попытку и просит модель продолжить задачу другим способом, учитывая уже полученные результаты. Ещё не выполненный вызов инструмента отменяется и не исполняется. Если модель снова возвращается к повторам, Koda останавливает запуск.
При остановке выполненные действия и их результаты сохраняются, а Koda предлагает выход: сжать контекст командой /compress, начать новую сессию с кратким описанием задачи, разбить задачу на части или выбрать другую модель.
Где это работает¶
Защита действует в интерактивной сессии, в неинтерактивном режиме и в ACP-сессиях. Это же правило применяется и к фоновым субагентам: повтор у субагента прерывается, а при возврате к нему задача останавливается.
В ACP-клиенте остановка по зацикливанию приходит как end_turn с пометкой в _meta, а не очередным абзацем от модели — подробнее в спецификации ACP-сервера.