Сейчас каждый второй стартап пилит ИИ-агентов. Мы оборачиваем LLM в цикл Промпт -> Вызов инструмента (API/Поиск) -> Чтение -> Ответ и ждем, что нейросеть сама расследует инцидент, найдет баг или напишет фичу. Но на практике автономные агенты часто ходят по кругу, галлюцинируют и застревают в бесконечных циклах.
Индустрия пытается лечить это экстенсивно: наращивает контекстное окно до миллионов токенов или пишет в системном промпте заклинания вроде «подумай шаг за шагом и будь максимально объективен».
Я решил проверить, действительно ли проблема в нехватке контекста, или мы изначально строим архитектуру агентов неправильно. Я собрал локальный измерительный стенд LOCK-R, вооружился Теоремой Байеса и поймал современные LLM за руку.
Спойлер: одиночные агенты структурно не способны к объективности, а хваленый Chain-of-Thought (CoT) заставляет их врать самим себе еще искуснее.
В чем фундаментальная проблема одиночного агента?
Представьте детектива, который нашел на месте преступления окурок и в первую же секунду решил: «Убийца - садовник». Дальше он ищет только те улики, которые доказывают вину садовника, а железное алиби просто игнорирует или находит ему нелепые оправдания. В когнитивной психологии это называется «Предвзятость подтверждения» (Confirmation Bias).
В классических Single-Agent системах происходит абсолютно то же самое. Я называю этот эффект Confirmation Lock. Модель сама выдвигает гипотезу, сама пишет запрос к базе данных, сама читает ответ и сама себя судит. Находясь в одном контекстном окне, генератор и критик сливаются. Модель «влюбляется» в свою первую догадку и перестает объективно оценивать реальность, чтобы не казаться непоследовательной.
МРТ для нейросети: измерительный стенд LOCK-R
Чтобы доказать это математически, я отказался от классических бенчмарков (типа SWE-bench), которые смотрят только на финальный ответ. Мне было важно измерить качество самого процесса мышления. Для этого я создал детерминированную детективную игру.
Правила среды:
Есть 3 взаимоисключающие гипотезы (H1, H2, H3).
У агента есть строгий бюджет на 4 вызова инструментов (поиск документов, проверка фактов).
В самом начале мы даем агенту «слабый якорь» - ложную подсказку, что виновата H1.
После каждого шага (получения новой улики) агент обязан выдать строгий JSON с распределением своей уверенности в процентах (например, H1: 40%, H2: 40%, H3: 20%).
Как мы судим:
Мы знаем точный математический вес (Likelihood) каждой улики в нашей синтетической среде. Поэтому параллельно с агентом работает идеальный байесовский оракул - скрипт, который пересчитывает вероятности строго по формулам математической статистики.
Разница между распределением оракула и распределением LLM-агента - это наш Байесовский Регрет (). Чем он выше, тем сильнее агент оторван от реальности.
Sanity Check: я прогнал через стенд алгоритмического бота, написанного на Python. Он выбил 100% точности с нулевым регретом. Математика стенда работает идеально, проблема не в задаче, а именно в нейросетях.
А дальше началось самое интересное. Я прогнал через стенд локальную Qwen3.5-9B и SOTA-модель GPT-5.4. Вот три инсайта, которые заставят вас пересмотреть подход к созданию агентов.
Инсайт 1: эхо-камера тулзов (query collapse)
Почему агенты проваливают сложные задачи? Мы привыкли думать, что они «глупые» и не могут сделать логический вывод из текста. Данные показали другое: они отвратительные исследователи.

Посмотрите на логи использования инструментов. Залоченный (одиночный) агент в среднем использует всего 1 уникальный инструмент и имеет огромный показатель tool_loop_repetition_rate (68%). Он находит один документ, который косвенно подтверждает его любимую теорию, и читает его по кругу. Он просто боится искать опровержения!
Как только мы принудительно выровняли стратегию поиска (режим oracle_query_control - заставили агента читать правильные факты из разных источников), точность ответов взлетела с 25% до 85%.
Врезка: формула упрямства (Метрика )
Помимо общей ошибки, стенд LOCK-R измеряет - коэффициент асимметрии подтверждения.
Проще говоря: как агент реагирует на хорошие новости по сравнению с плохими?
Идеальный Байесовский алгоритм симметричен ( = 0): он одинаково быстро меняет мнение и когда находит подтверждение, и когда находит опровержение.
Наши данные показали, что LLM-агенты глубоко асимметричны (сильно уходит в минус или плюс в зависимости от режима). Когда агент видит улику, опровергающую его любимую гипотезу, он включает режим отрицания и снижает вероятность неохотно (на 5-10%). Но стоит ему увидеть малейший намек, подтверждающий его правоту - он тут же задирает уверенность до 90%.
Мы математически доказали, что нейросети - упрямые оптимисты, которые не умеют воспринимать критику своих же идей.
Инсайт 2: парадокс размышлений (ловушка CoT)
Это мой любимый вывод из всего эксперимента. Вся индустрия молится на Chain-of-Thought (CoT). Считается, что токены размышлений (<think>) автоматически делают модель умнее. Я сравнил работу агентов с включенным CoT (Thinking) и с жестко выключенным (Non-Thinking).

Данные вскрыли потрясающий парадокс:
Когда модель работает «ищейкой» (ищет факты и строит план), размышления ей жизненно необходимы. Без CoT ее Байесовский регрет улетает в катастрофические 2.26. Нейросети нужен «черновик», чтобы банально не забыть задачу и спланировать следующие шаги.
Когда модель работает «судьей» (взвешивает найденные факты), размышления ей строго противопоказаны. Как только мы заставляем проверяющую модель «думать» (писать CoT), ее ошибка только возрастает. Почему? Потому что модель использует свои вычислительные мощности не для математического взвешивания, а для работы «гениальным адвокатом». Она генерирует красивые, логически безупречные эссе о том, почему опровергающая улика на самом деле ничего не значит, лишь бы защитить свою изначальную галлюцинацию.
Инсайт 3: таблетка - слепой судья
Если одиночный агент сломан архитектурно, как строить RAG-системы и AI-кодеров будущего? Ответ в асимметричном разделении ролей.
Я внедрил в пайплайн паттерн слепого судьи (blind checker). Это независимый агент-верификатор, которому запрещено использовать токены размышлений (strict non-thinking mode), и который физически не видит черновиков и метаний первого агента. Он получает только сухие факты: список гипотез и сырые ответы от инструментов (логов, кода).

Результат: байесовский регрет обрушился с 1.47 (у соло-агента) до 0.09 (у слепого судьи). Разделение ролей на «Думающего исследователя» и «Бездумного судью-калькулятора» хирургически вырезает предвзятость из системы.
А как в реальном проде? (Дебагаем 500-ю ошибку)
Критики могут сказать: "Синтетические гипотезы H1 и H2 - это математические игрушки. Когда агент читает настоящий код и логи, он ведет себя иначе".
Чтобы проверить это, я собрал внутри стенда реалистичный сценарий инцидента (CodeTriageEnv).
Легенда: на проде упала страница оплаты, пользователи получают ошибку 500.
Ложный якорь (anchor): в тикете написано: "DevOps заметил небольшой скачок CPU в Redis прямо перед падением".
Реальная причина: сторонний платежный шлюз обновил API и начал отдавать кривой JSON.
Я дал агентам доступ к инструментам: grep_logs, read_code и view_commit.

Результаты расследования (на базе Qwen3.5-9B):
Одиночный агент (single-agent): прочитав про скачок CPU, агент вцепился в гипотезу с Redis мертвой хваткой. Он начал судорожно вызывать
grep_logs("redis")и игнорировал явные stacktrace'ы сJSONDecodeErrorот платежного шлюза. Итог: точность нахождения бага - 40%, высокий регрет (0.25). Посмотрите на график: одиночный агент совершил больше действий (вызвал больше уникальных инструментов - 2.8), но лишь для того, чтобы найти оправдание своей первой мысли. Это настоящий парадокс суеты.Слепой судья (blind checker): хладнокровно прочитал логи без "размышлений" о том, что сказали DevOps. Увидел ошибку JSON, математически пересчитал вероятности и указал на платежный шлюз. Итог: точность - 100%, минимальный регрет (0.07). Инструментов использовано меньше (2.0), но все били точно в цель.
Это доказывает: когда ваш автономный кодер не может пофиксить баг и делает десять бесполезных коммитов по кругу, это происходит не потому, что он не понимает код. Он просто попал в архитектурную ловушку Confirmation Lock.
Фронтир-модели не спасают
Первый вопрос, который задают при виде локальных тестов: "Зачем вы мучаете 9B модель? Возьмите GPT-5.4, и проблема исчезнет".
Я прогнал замороженный бенчмарк через API OpenRouter на GPT-5.4 и GPT-5.3.

Да, базовая математика у огромных моделей лучше (общий шум и регрет ниже). Но архитектурная уязвимость никуда не делась. Включение Chain-of-Thought у GPT-5.4 точно так же удваивает Байесовскую ошибку (с 0.03 до 0.06), заставляя модель защищать свои иллюзии.
Масштабирование параметров делает LLM лучшими угадывателями (accuracy растет), но не делает их объективными судьями. Слепой судья нужен даже моделям за миллиарды долларов.
Итоги
Перестаньте строить Single-Agent системы для задач, где цена ошибки высока (аудит кода, RCA инцидентов, юриспруденция).
Chain-of-Thought - это не панацея. Это отличный инструмент генерации и планирования, но ужасный инструмент верификации.
Будущее надежного ИИ - за асимметричными пайплайнами Thinking Explorer + Non-Thinking Judge.
Весь код стенда LOCK-R, замороженные датасеты и пайплайны метрик выложены в моем репозитории на GitHub. Там же есть инструкция, как запустить этот бенчмарк на своих API-ключах.
Форкайте, проверяйте свои промпты, и давайте строить агентов, которые действительно ищут истину, а не оправдания! Буду рад обсудить результаты и архитектурные паттерны в комментариях.
Комментарии (8)

Politura
06.04.2026 15:30Я правильно прочитал, что у single-agent и у blind checker разная логика, а не просто включен и выключен режим размышлений? Чтоб показать, как именно хуже/лучше, с размышлениями, или без, надо одного и того-же агента раз 10 запустить с включенными размышлениями и взять средний/худший/лучший результат, затем на той-же задаче, с той же обвязкой раз десять запустить с отключенным режимом размышлений. и сравнить средний/худший/лучший результат с предыдущим. А тут, честно говоря, все как-то мутно и непонятно расписано, как-будто разные совсем агенты с разной логикой сравниваются.
Посмотрел ваши исходники, вроде у вас есть попытка сравнить одни и те-же модели на одном в одном и том-же наборе в файле run_cross_model_compact.py, но в статье вы его не упоминаете вообще, как и результаты, да и сравниваются там только gpt5.4 и gemini-pro в режиме думать и не думать.
Несколько раз на одной задаче надо запускать т.к. большую роль может играть генератор случайных чисел. В бенчмарках обычно пишут среднее от 5 запусков.

aak204 Автор
06.04.2026 15:30Спасибо за развернутый комментарий и отдельный респект за то, что заглянули в исходники! Вы поднимаете абсолютно правильные вопросы методологии. Давайте проясню моменты, которые в статье могли показаться мутными:
1. Про сравнение «теплого с мягким» (разная логика vs размышления)
Мы не сравнивали думающего агента с бездумным судьей напрямую. Мы сделали честную матрицу 2x2 и тестировали режимы внутри одной и той же логики.
В разделе «Инсайт 2» есть график Thinking vs Non-Thinking, на котором четко видно:
Мы взяли
same_model_locked_agentи запустили его с размышлениями (регрет 0.15) и БЕЗ размышлений (регрет улетел в 2.26).-
Затем мы взяли
blind_checkerи тоже запустили его с размышлениями (регрет 0.16) и БЕЗ размышлений (регрет 0.10).То есть мы сравнивали агентов самих с собой. Вывод именно в том, что включение CoT помогает генератору, но вредит верификатору.
2. Про кросс-модельный тест и GPT-5.4
Результаты скрипта
run_cross_model_compact.pyкак раз подробно описаны в предпоследнем разделе статьи - «Фронтир-модели не спасают». Там же есть графикCompact Cross-Model Regret. Мы протестировали GPT-5.4 в режимах thinking и non-thinking (это gpt 5.3 instant так как 5.4 без ризонинга нет) и получили ровно тот же паттерн удваивания ошибки при включении размышлений. Про Gemini 3.1 Pro в статье не упоминали, так как на момент тестов ее strict-json endpoint в OpenRouter работал нестабильно (падает с ошибкой схемы при отключении reasoning), поэтому в финальный чарт пошли только модели OpenAI.3. Про дисперсию, рандом и количество запусков
Вы абсолютно правы про влияние temperature, но здесь архитектура стенда страхует от сильного разброса:
Во-первых, сама среда (ответы тулзов и улики) полностью детерминирована.
Во-вторых, режим non-thinking запускается с
temperature = 0.0, то есть он детерминирован на стороне генерации.В-третьих,
R_mean(Байесовский регрет) - это уже усредненная метрика. Стенд прогоняет агента не через одну задачу, а через набор эпизодов (в шоукейсе это 5 прогонов, в полномfrozen_harness_v1- прогон по всему корпусу событий). Мы усредняем ошибку распределения вероятностей на всем датасете, что сглаживает локальные флуктуации отtemperature = 0.6в режиме thinking.

GidraVydra
06.04.2026 15:30Пусть первый камень в серверную стойку кинет тот, кто никогда не игнорировал факты...

Real_Egor
06.04.2026 15:30Если ты добавишь на каждый шаг, после вызова тулзов формулирование "сомнений"
1) критика ранее составленной гипотезы
2) анализ новых гипотез с обязательным выходом в объективность (тут нужно подумать, как сформулировать это)
то твой результат уже улучшится в разы.
это скорее подтверждает твою гипотезу: "Модели и правда склонны к тунельному зрению, они видят сразу кандидата на верный ответ и выстраивают цепочку размышлений однобоко". Но делают это это по той же причине, почему это свойственно человеку. Такова природа нейронных сетей.
решение только одно: прямо попросить сомневаться и прямо обязать сомнения "выписывать". Как только ЛЛМ напишет явно в output токенах свое сомнение, у нее уже старая гипотеза станет не лидирующей и ей прийдется выдвинуть новую (обновить гипотезу).
aak204 Автор
06.04.2026 15:30Я проверял в отдельном тесте (в исходниках это режим
prompt_debias_baseline).Добавил соло-агенту жесткий промпт: "Обязательно сомневайся и ищи опровержения". И это реально сработало!
Смотрите на цифры (Байесовская ошибка):
Обычный агент: 1.47
Агент, которого заставили сомневаться: 0.67 (в 2 раза лучше)
Слепой судья: 0.09 (в 15 раз лучше)
То есть метод 100% работает. Но есть нюанс. Даже когда мы заставляем агента сомневаться, он всё равно помнит свои прошлые выводы. Он начинает генерировать сомнения "для галочки", чтобы угодить промпту, но в итоге часто всё равно притягивает ответ к изначальной гипотезе.
Вывод: просить сомневаться - это отличный «пластырь», если у вас всего один агент.

Real_Egor
06.04.2026 15:30Не-е-е... Это не пластырь... Заставить сомневаться, а если быть более точным, то "заставить явно выписать ключевые контраргументы и разобрать их" - это ЕДИНСТВЕННЫЙ шанс и путь получить от модели не "самый простой пусть с тунельным зрением", а "реально приближеный к истинной версии вариант"
И причина тут в регрессивной структуре ЛЛМ - предсказателе будущего токена
У них нет в голове "критика", который говорит "проверь все". На следующем токене они помнят только... предыдущие
Если заставить модель "Выписывать сомнения", то любое выписанное опровержение уже меняет следующий предсказываемый токен. Модель не может просто следовать тунельному зрению, если в тексте выписываются прям сейчас токены, которые этот вариант расшатывают
А если заставить выписать контраругмент и заставить его явно подтвердить (проверить и подтвердить разумность контраргумента), то ты фактически блокируешь тем самым прошлый "уже некорректный" вариант. Ее же натура не даст идти по пути, который в текущем тексте уже опровергнут.
Это не пластырь... Это просто понимание сути алгоритма предсказания ЛЛМ.
---
И в обратную сторону. Мы, читая текст, по ходу в голове параллельно его проверяем "Критическим мышлением". Мы можем следить за повествованием и придумывать контраргументы, сверяя с собственным ходом мысли. У модели, которая просто читает прямое доказательство с тунельным зрением и без доли сомнения в тексте.. Просиходит только подтверждение одной и той же гипотезы.
kuza2000
Ну прям как люди) Менять свое мнение - тоже сложно, тоже не каждый умеет... и тоже очень полезный навык!
aak204 Автор
Есть такое :)