Комментарии 5
Нормуль разбор, слои защиты.. Но меня зацепил Слой 2 (Валидатор). Ты возвращаешь payload на ретрай во второй экземпляр агента с system_kick. Получается, при каждом таком тупике заново скармливается модели весь контекст диалога + системный промпт на 6400 токенов ради короткого ответа?7... Не думал в ветке ретрая динамически подменять системный промпт на сильно урезанную версию (чисто под Ступень 4), чтобы не переплачивать за prompt-токены на повторных генерациях? Или контекстный кэш опенроутер здесь всё равно полностью нивелирует траты на повторный прогон?
Спасибо за коммент) отличный вопрос - видно что прочитали внимательно статью)) Наверное могу сказать что прямо в корень зрите! Отвечу вкратце: я по началу думал про урезание промпта на ретрае, но тут как раз решает контекстный кэш оpenrouter, который я в таблице показывал. Поскольку базовые 6,4 к. токенов на 90% сидят в кэше, повторный прогон стоит копейки. Да и блин, если я начну на ходу подменять системный промпт на "лёгкую" версию, я просто собью кэш и заплачу за этот "лёгкий" промпт полную стоимость, что экономически невыгодно (хоть и не мои деньги то, баланс не к моим картам привязан - но заказчик их контролит знатно). да и в рамках n8n + LangChain передавать "пинок" через payload в system_kick банально проще архитектурно, чем городить ветвление с подменой текстовых шаблонов в системной ноде. Но опять же - выше сказал своё ведение и решение ) За мысль спасибо, честно))
Почему автотесты это не поймают баг
Почему нельзя? Более того, он у вас уже есть - тот самый промпт на котором генерился пустой ответ.
Спасибо за комментарий) Поясню: в том-то и засада, что LLM стохастичны. Если температура выше нуля, модель на один и тот же промпт может 9 раз ответить нормально, а на 10-й уйти в глухую защиту и выдать пустоту. Всунуть этот кейс в автотест можно, но он будет так сказать, "мигать": тесты покажут зелёный свет, а в проде баг всё равно выстрелит. К тому же, если начать крутить системный промпт ради одной этой фразы, итогом будет сместить баланс запретов, и модель начнёт выдавать Reasoning Lock на сотне других живых диалогов, которых в тестах ещё нет.К сожалению классический QA тут сливается, эту дичь ловить приходится только динамически и прямо на лету, как раз через валидатор.
А если температуру 0 поставить воспроизводится? А если неколько раз прогнать и порог частоты воспроизведения подобрать и необходимое число испытаний? Взять в охапку ChatGPT и подумать с ней как здесь могут помочь матстат и теория надёжности.
покажут зелёный свет, а в проде баг всё равно выстрелит
Aways has been. И это ника не отменяет необходимость делать тесты, тобы не получилось почти как в анекдоте, выкатили новую версию с фиксами, пришёл чувак с тем же запросам и все опять упало) А потом ещё и выяснится что на том самом poison message новый солюшн даже и не проверяли...
ловить приходится только динамически и прямо на лету, как раз через валидатор.
Так это не отменяет необходимость QAить динамический валидатор, а тут и тот самый промпт пригодится

Reasoning Lock: ИИ‑агент в проде тратит токены и молчит — живой разбор бага