На этой неделе в новостях про AI-инжиниринг было три истории, которые на первый взгляд не связаны. Я думаю, что это одна и та же ошибка: мы считаем то, что выдала модель или что она запомнила, доверенным вводом.
1. Slopsquatting. Модели придумывают имена пакетов, которых не существует, а атакующие регистрируют эти имена в npm и PyPI. Проблема настоящая, но, по-моему, для неё не нужен новый инструмент. Лок-файл и внимательный человек на ревью каждой новой зависимости закрывают большую часть риска. Дыра в командах, которые позволяют агенту добавлять зависимости, и никто на них не смотрит.
2. Отравление памяти. Агент читает письмо или веб-страницу, часть текста попадает в долгосрочную память, а в следующей сессии возвращается как факт. Агенты с памятью мне нужны. Но от памяти я хочу проверяемого происхождения. Фраза «пользователь мне сказал» и фраза «я прочитал это во входящем письме» не должны весить одинаково.
3. LLM-ревьюеры, которым нельзя доверять. Недавно у нас случилось что-то похожее. Наш ревью-агент неправильно понял задачу и стал сравнивать долгоживущих сабагентов вместо того, что должен был проверить. Вторая модель, которая оценивала бы первую, этого бы не поймала.
Поэтому я строю харнесс вокруг наших агентов и подключаю Harness² от Google Research. Он запускает разные варианты харнесса на одной задаче и улучшает его по различиям между запусками, и не нужен эталонный ответ. Я надеюсь, что он поймает неверно понятую задачу до того, как она превратится в вердикт, а рой агентов будет становиться лучше шаг за шагом, а не благодаря тому, что я переписываю промпты вручную. Рано говорить, работает ли это.
Общая мысль такая: ответ модели это заявление. Решает что-то детерминированное или человек, пропустить ли его дальше.
С чем из этого вы сталкивались на проде?