Обновить

Агент написал себе навык и соврал, что тот работает

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели6.4K
Всего голосов 2: ↑1 и ↓1+2
Комментарии8

Комментарии 8

Проблема глубже: я не знал, как у этого скилла выглядит «нет».

Один скилл на неизвестный метод кидает NotFound. Другой возвращает пустую строку. Третий — {"error": "..."} со статусом 200. Четвёртый вообще отвечает "ok", потому что автор не заморачивался. Я не могу отличить «метод отработал» от «метода нет», пока не знаю диалект конкретного скилла.

Так миллениалы узнали о преимуществах стандартизации.

Справедливо, я тут пошёл не с той стороны. Стандарт думал написать документацией — «всякий скилл обязан отвечать NotFound на неизвестный метод», — а её соблюдение всё равно пришлось бы проверять вызовом. Очередное заявление о себе, с которых статья и началась.

Правильная форма другая. У меня в SDK трейт с двумя независимыми членами: один возвращает список методов, второй их обрабатывает. Компилятор требует реализовать оба и никогда не сверит, что они про одно и то же. Если заменить это на регистрацию, где обработчик передаётся вместе с описанием, — объявить, не реализовав, станет нельзя. Не «ловится проверкой», а перестаёт быть выразимым.

Валидатор всё равно останется: протокол открытый, скилл можно написать без SDK на чём угодно. Но для своих проверка станет не нужна.

Так что не столько преимущества стандартизации, сколько преимущества стандарта, который нельзя нарушить.

Хмм не знаю как устроен ваш агент, но у меня к примеру само проверка работает, и всегда ловит ошибки, к тому же проверяет не только сами ошибки но и достигнута ли поставленная задача в полной мере, или агент написал какую то ерунду которая только делает вид что работает.

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

У меня сканер состава продуктов, и там годами жила ровно ваша болезнь: я не знал, как у моей же системы выглядит «нет». Товара нет в базе — «нет данных». Штрихкод не прочитался — «нет данных». Товар непищевой и мы его в принципе не оцениваем — сюрприз, «нет данных». Три совершенно разные ситуации, один ответ на экране, и в логах их тоже не различить. Пользователь при этом честно считает, что приложение сломано.

Лечится это ровно вашим третьим исходом. «Не знаю такой товар», «не смог прочитать» и «такое я не оцениваю» — три разных ответа, и различать их должна не только система внутри, но и человек на экране. Зелёная галочка, за которой пустота, у меня выглядела как бодрое «нет данных» на туалетную бумагу.

Свой способ проверять код, который писал не я: канареечная запись прямо в данных. В базе лежит заведомо невозможный товар и ходит тем же путём, что и настоящие. Если он вдруг получил осмысленный вердикт — значит, кто-то по дороге заботливо подставил дефолт вместо честного «нет». Тот же forgotten, только этажом ниже, на уровне данных, а не методов.

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

там годами жила ровно ваша болезнь: я не знал, как у моей же системы выглядит «нет». Товара нет в базе — «нет данных». Штрихкод не прочитался — «нет данных». Товар непищевой и мы его в принципе не оцениваем — сюрприз, «нет данных». Три совершенно разные ситуации, один ответ на экране, и в логах их тоже не различить.

Так миллениалы узнали, что unhappy path тоже надо тестировать.

Канарейка в данных — забираю, у меня этого слоя нет. Мой контроль ловит метод, который не подключён, но не ловит метод, который подключён и на любой ввод возвращает заглушку. То есть ровно ваш случай, только у меня он ещё впереди.

Причём я как раз выяснил, что «объявлен и не реализован» у меня чинится вообще без проверки — если в SDK объявление и реализация станут одним действием, эта ошибка перестанет быть выразимой. А ваша остаётся: метод зарегистрирован, вызывается, и внутри честная заглушка. Никакой типизацией это не ловится, только канарейкой в потоке данных.

Про три исхода на экране, а не только внутри — согласен, и это больнее, чем кажется. У меня «пропущено» видно в отчёте валидатора, а до пользователя доезжает та же зелёная строка, что и при «годен». Разделять надо не только внутри системы.

Ещё можно прочитать код например...

Сама идея была в том, чтобы максимально достичь автоматизации этих процессов, без вмешательства пользователя. Однако, конечно же, у пользователя есть возможность полностью самому написать скилл, предварительно подключив к нему SDK агента.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации