Игорь Градов
Игорь Градов
5 мин
ai

Незрячий автор навыка аудита доступности убрал ложные срабатывания ИИ-агента

Незрячий программист, автор навыка Accessibility Auditor Skill для ИИ-агентов, доработал его правила после серии ошибок на реальных проектах, и агент теперь проверяет библиотеку и общие компоненты прежде, чем объявить проблему.

Незрячий автор навыка аудита доступности убрал ложные срабатывания ИИ-агента

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

Почему это важно

Правила появились после конкретных исправлений в открытых проектах и проверки скринридером. Автор сам слышит, где лишняя озвучка мешает человеку. Один из таких PR в Nextcloud iOS приняли.

Accessibility Auditor Skill это навык (skill), то есть набор инструкций для ИИ-агента. ИИ-агент здесь означает программу на основе нейросети, которая сама выполняет цепочку действий, а не только отвечает на вопрос. Навык проверяет доступность интерфейсов по исходному коду и обследует сайты. Доступность означает, что интерфейсом могут пользоваться и люди с нарушениями зрения, в том числе со скринридером (программой, которая читает вслух происходящее на экране).

В ранних версиях агент объявлял проблемой отсутствие атрибута в одном файле, хотя нужное поведение уже обеспечивала библиотека. Ещё он предлагал правку, не проверив, где ещё используется общий компонент. Разбор автора «Как я дорабатывал навык аудита доступности: библиотеки, общие компоненты и ложные срабатывания» показывает, откуда взялось каждое правило.

Что понадобится для доработки аудита?

  • ИИ-агент с доступом к репозиторию проекта.
  • Исходный код компонентов и сведения о версии используемой библиотеки.
  • Автотесты, например Playwright (инструмент, который сам нажимает кнопки в браузере и проверяет результат).
  • Скринридер для финальной проверки в работающем приложении.

Пошаговая инструкция: от места использования к реализации

  1. Запретите агенту выносить вердикт по одному файлу. Сначала он смотрит реализацию компонента, библиотеку и общие обёртки. Общий компонент похож на типовую дверь в многоэтажке: поменяете её в одной квартире, и это затронет все.
  2. Заставьте проследить цепочку. Агент должен выяснить, какой элемент получает фокус и откуда берётся его доступное имя (то, что произносит скринридер). Ещё он проверяет, где создаются подпись, подсказка и ошибка, как передаются их идентификаторы и сохраняет ли компонент атрибуты от вызывающего кода.
  3. Проверяйте, что файл вообще работает. В репозитории остаются старые компоненты с похожими названиями, и правка в них на живой интерфейс не повлияет.
  4. Учитывайте уже заданные объявления. Роли status и alert сами определяют, как озвучиваются изменения. Для обычной подсказки не ставьте режим assertive или роль alert, потому что они прерывают текущую речь.
  5. Проверяйте потребителей общего интерфейса. Новое свойство не должно попадать в компоненты, которые его не понимают.
  6. Предпочитайте публичный API компонента, то есть его официальный «вход». Если приходится лезть во внутреннюю разметку библиотеки, добавьте регрессионный тест (автопроверку, что после обновлений ничего не сломалось).
  7. Требуйте честный отчёт: агент указывает, что выполнил сам. Анализ кода, тесты и проверка скринридером подтверждают разное.

Пример промпта по этим правилам:

``` Прежде чем объявить проблему доступности, проверь реализацию компонента, библиотеку установленной версии и общие обёртки. Убедись, что файл участвует в рабочем сценарии. Не добавляй атрибуты, которые уже создаёт библиотека. Для обычной подсказки не используй assertive и роль alert. В отчёте отдельно укажи: что проверено по коду, что тестами, что требует проверки скринридером. :::

Как это применить

В проекте Vets-Who-Code чинили связь текстового поля с сообщением обратной связи через свойство feedbackId. Его добавили слишком широко, и оно досталось компонентам, которые не умели его обрабатывать. Агент разделил общий интерфейс и свойства текстовых полей и добавил проверки пользовательского feedbackId для Input и Textarea.

После этого автор попросил дополнить навык: при добавлении свойства агент выясняет, какие компоненты его поддерживают. Он проверяет и автоматический идентификатор, и переданный вручную. Иначе типовой пример работает, а форма с собственным ID теряет связь с сообщением.

Частые ошибки
  • Дублировать связь aria-describedby (атрибут, который привязывает поле к поясняющему тексту), если её уже создаёт компонент формы.
  • Затирать существующие подсказки, когда чините связь поля с ошибкой и ставите aria-invalid (отметку «поле заполнено неверно»).
  • Давать индикатору загрузки то же доступное имя, что у текста рядом. В PR №1603 проекта RTL индикатор скрыли от скринридера, а текст оставили в области статуса. Этот PR закрыли без слияния.
  • Забывать про пользовательский элемент, который передают через slot или render prop (способы подставить свой элемент в готовый компонент). Библиотека может настроить свой input и не передать атрибуты вашему.
  • Считать проверку завершённой без полного прогона. В suitenumerique/docs агент добавил проверки aria-hidden и tabindex в тест Playwright, но e2e-прогон (проверка сценария целиком) тогда не выполняли.

Что делать с этим прямо сейчас, по ролям

Автору Дзена: если ведёте сайт или канал с формами подписки, не принимайте отчёт нейросети на веру. Спросите, проверила ли она библиотеку, а не один файл.

Маркетологу: ложная находка в аудите стоит денег, потому что разработчик тратит время на правку, которая ничего не меняет. Требуйте от подрядчика отчёт с разделением «проверено по коду, тестами, скринридером».

Предпринимателю из РФ и СНГ: правила оформлены как текст инструкций, их можно вставить в промпт любого ИИ-ассистента. Из доступных в РФ вариантов это YandexGPT и GigaChat. Насколько хорошо они разберут код ваших компонентов, источник не проверял.

Совет редакции dzen.guru

На мой взгляд, главное здесь не список атрибутов, а привычка: после каждой ошибки агента автор просил переписать инструкцию, чтобы правило подходило другим проектам. Так навык копит опыт и не требует объяснять одно и то же заново. Честная оговорка: замера доли ложных находок до и после у автора нет, он показывает правила и случаи, из которых они выросли. В Nextcloud iOS, PR №4111, агент исправил подписи папок в окне выбора места сохранения: раньше пользователь VoiceOver, скринридера на iOS, попадал на строку папки без нужного доступного имени. Эту правку приняли. Последнее слово всё равно за человеком со скринридером, и я бы строил любой аудит именно так.

Соберите свой промпт для проверки текстов и страниц

В dzen.guru собраны инструменты и инструкции, которые помогают авторам работать с нейросетями без лишних ошибок.

Попробовать
Поделиться:TelegramVK
Игорь Градов
Игорь Градов

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».

Комментарии

Читайте также

Что такое ИИ-агент в команде: pepper-orchestrator делит большой проект и проверяет каждого
ai

Что такое ИИ-агент в команде: pepper-orchestrator делит большой проект и проверяет каждого

Основатель студии ITSalt Максим Никитин выпустил для Claude Code и Codex плагин pepper-orchestrator, раздающий большую задачу нескольким ИИ-агентам, потому что…

5 мин
Плагиат и кража в геймдеве: ИИ-«рекомпы» старых игр выходят нечитаемыми
ai

Плагиат и кража в геймдеве: ИИ-«рекомпы» старых игр выходят нечитаемыми

Автор колонки на Хабре предупредил о тёмной стороне нейросетевого моддинга: ИИ-инструменты уже выдают нечитаемые «рекомпы» старых игр и присваивают чужие…

5 мин
ai

Что такое ИИ-агент в деньгах: ответ от 0,94 до 121,57 рубля, цену задают инструменты

Каталог Agents Place разобрал 69 ИИ-агентов в срезе цен на 5 ноября 2026 и показал, что ответ стоит примерно от 0,94 до 121,57 рубля, а дорожает он из-за…

4 мин