English translation is not available yet. Showing Russian content.
Спроектировать partial failure UI
ТЕХНИЧЕСКОЕ ЗАДАНИЕ: Спроектировать partial failure UI
1. Цель задачи
Спроектировать пользовательский интерфейс для RAG-системы, корректно отображающий ситуацию, когда модуль retrieval не нашел релевантных документов в векторной базе знаний, но LLM сгенерировал ответ на основе своей внутренней памяти (общих знаний). Пользователь должен явно видеть, что ответ не подкреплён источниками из предоставленной базы знаний, и понимать лимиты системы.
Ключевой результат Прототип UI (макет или интерактивный прототип) с явной индикацией partial failure, понятной пользователю за 3 секунды.
2. Исходные данные
Перед началом необходимо иметь:
| Что нужно | Откуда взять |
|---|---|
| RAG-система с возможностью получать метаданные retrieval | Пет-проект или заглушка с эндпоинтом, возвращающим статус retrieval (found/not_found) и сам ответ |
| Гайдлайны по UI/UX для индикации состояний (ошибки, варнинги, успех) | Figma-компоненты, Material Design, Bootstrap или своя дизайн-система |
| Примеры failure-сообщений в современных AI чатах (ChatGPT, Perplexity, Claude) | Скриншоты или описания |
| Инструмент для прототипирования | Figma, Sketch, Penpot, Axure, или простой HTML/CSS/JS прототип |
Если нет реального инструмента — симулируем:
- Создать простой REST API на Python (Flask/FastAPI), который принимает запрос, имитирует retrieval (с вероятностью 30% возвращает "not_found") и возвращает JSON с полями
retrieval_status: "found" | "not_found", answer: str,sources: list[str]. - Развернуть локально статический HTML-файл с встроенным JS, который отправляет запросы на этот API и отображает ответ.
- Использовать готовые библиотеки CSS (например, Tailwind) для стилизации индикаторов.
3. Технологический стек
| Компонент | Инструменты | Назначение |
|---|---|---|
| Backend (имитация RAG) | Python (FastAPI/Flask) | Симуляция ответа с метаданными retrieval |
| Frontend (прототип) | HTML + CSS + JavaScript или Figma | Сборка/дизайн UI |
| Стилизация | Tailwind CSS / Materialize / Bootstrap | Быстрая реализация индикаторов |
| Инструмент прототипирования | Figma / Penpot | Создание макетов (альтернатива коду) |
| Версионирование | Git + GitHub/GitLab | Хранение кода и макетов |
4. Этапы выполнения
Этап 1: Анализ требований и исследование пользователей (30–45 минут)
Действия
-
Изучить существующие UX-паттерны для обозначения неопределённости или отсутствия источников:
- ChatGPT: сноски "AI may produce inaccurate information"
- Perplexity: явные ссылки на источники; если нет — "No sources found". Как они показывают?
- Claude: может сказать "I don't have specific information on that"
- Поискать best practices по отображению "partial failure" в документации.
-
Определить требования к индикации
- Сигнал должен быть заметным, но не пугающим (например, жёлтый/оранжевый предупреждающий блок).
- Должен быть текст: "Ответ основан на общей информации, так как релевантные документы не найдены. Проверьте данные в базе знаний."
- Должен быть визуальный элемент: иконка, изменённый фон сообщения.
- Не должен блокировать взаимодействие.
-
Определить метрики успеха UX
- Пользователь в тесте замечает индикатор за < 3 секунд.
- Пользователь верно интерпретирует (опрос: "Что означает этот индикатор?").
- Время на понимание: < 5 секунд.
Ожидаемый результат этапа Документ с выводами исследования и список UX-требований.
Этап 2: Проектирование макетов (1–2 часа)
Действия
-
Нарисовать 3 варианта UI для отображения partial failure:
- Вариант A (полоска предупреждения сверху): Вместо обычного ответа — карточка с жёлтой полосой слева и текстом: "Информация без подтверждения из базы знаний. [Подробнее]".
- Вариант B (иконка статуса): Рядом с ответом иконка (например, "глаз" с перечёркиванием) и тултип "Ответ не основан на документах".
- Вариант C (разделение на две области): Верхняя часть — чёткое предупреждение с фоном warn, нижняя — сам ответ, но с пометкой "Источники: отсутствуют".
-
Создать mockup в Figma для всех вариантов, включая состояния:
- Успешный retrieval (зелёный индикатор, источники видны).
- Partial failure (жёлтый, текст "Ответ не основан на документах").
- Полный failure (красный, "Не удалось найти информацию").
-
Добавить интерактивность в Figma (prototype mode): нажатие на "Подробнее" показывает всплывающее окно с объяснением.
Ожидаемый результат этапа 3 макета в Figma (или скетчи в другом инструменте) с различными подходами.
Этап 3: Реализация интерактивного прототипа (2–3 часа)
Действия
-
Создать простой HTML/CSS/JS прототип на основе одного выбранного варианта (лучшего по результатам этапа 2).
-
Реализовать backend-заглушку (FastAPI или Flask) с одним эндпоинтом
/ask: -
Frontend
- Отправляет запрос при вводе вопроса.
- Показывает спиннер загрузки.
- В зависимости от статуса отображает соответствующий UI.
- Для
partial_failure: обязательный жёлтый баннер с текстом, иконка предупреждения. - Для
success: зелёный индикатор и список источников.
-
Добавить пояснительный текст при клике на "Почему так?" (модальное окно или спойлер).
Ожидаемый результат этапа Рабочий HTML-прототип с серверной частью, демонстрирующий partial failure UI.
Этап 4: Юзабилити-тестирование (30–60 минут)
Действия
-
Подготовить 3–5 тестовых сценариев
- "Найди информацию по теме X (она есть в базе)".
- "Задай вопрос по теме Y (её нет в базе)".
- "Как система показывает, что ответ не из документов?"
-
Пригласить 2–3 коллег (или друзей) в роли тестировщиков.
- Попросить их выполнить сценарии.
- Записывать экран и действия.
-
Замерить
- Время до первого замечания индикатора partial failure.
- Понимание сообщения (спросить после теста: "Что означает жёлтый баннер?").
- Общее впечатление.
-
Собрать фидбек что непонятно, что раздражает, что можно улучшить.
Ожидаемый результат этапа Записанные сессии, заметки с фидбеком, числовые метрики.
Этап 5: Итерация и финализация (1–2 часа)
Действия
-
На основе фидбека доработать прототип
- Изменить цвет, расположение, текст.
- Добавить/убрать элементы.
- Улучшить анимацию (например, плавное появление баннера).
-
Подготовить финальный отчёт с описанием UI, скриншотами, результатами тестирования.
-
Создать документацию по компоненту (для разработчиков и дизайнеров): как использовать, когда показать, какие сообщения.
Ожидаемый результат этапа Финальный прототип, отчёт, документация.
5. Критерии приемки (Definition of Done)
- Прототип (HTML/Figma) содержит не менее двух состояний: success и partial_failure.
- Partial failure UI явно отличается от success: другой цвет, иконка, текст.
- Текст индикации поясняет пользователю, что ответ не основан на документах из базы знаний.
- Пользователь может кликнуть / навести, чтобы получить более детальное объяснение.
- В юзабилити-тестировании не менее 2 из 3 пользователей правильно интерпретировали индикатор.
- Среднее время замечания индикатора не превышает 5 секунд.
- Код прототипа (если реализован) опубликован в репозитории с README.
- Документация описывает, как компонент интегрируется в существующий чат-интерфейс.
6. Ожидаемый результат
Файлы/артефакты
partial_failure_ui.figили ссылка на Figma-прототип с 3 вариантами.- index.html,
app.js,backend.py— интерактивный прототип (если код). README.mdс инструкцией по запуску и демонстрации.report.md— отчёт о юзабилити-тестировании (скриншоты, цитаты, метрики).component_docs.md— документация для разработчиков.
Содержание отчёта
- Описание выбранного варианта UI и обоснование.
- Результаты тестирования (таблица с метриками).
- Фидбек и изменения.
Опционально GIF-демонстрация поведения.
7. Возможные сложности и их решение
| Сложность | Решение |
|---|---|
| Пользователи не замечают индикатор | Использовать контрастный цвет (жёлтый/оранжевый), анимацию появления, разместить в верхней части ответа, а не в углу. |
| Пользователи пугаются оранжевого/жёлтого как ошибки | Использовать синий или нейтральный серый с иконкой "i". Добавить успокаивающий текст: "Ответ не из базы знаний, но может быть полезным". |
| Нет доступа к реальной RAG-системе | Создать симулятор на Flask с рандомизацией статуса (30% partial_failure). Документация описана в этапе 2. |
| Отсутствие дизайн-инструментов (Figma) | Использовать бесплатный Penpot или сразу писать HTML/CSS прототип. |
| Трудно измерить понимание пользователя | Провести короткое интервью после теста: показать скриншоты разных состояний и спросить, что они означают. Записывать ответы. |
8. Бюджет времени (оценка)
| Этап | Время |
|---|---|
| Этап 1: Анализ и исследование | 45 мин |
| Этап 2: Проектирование макетов | 1.5 часа |
| Этап 3: Реализация прототипа | 2.5 часа |
| Этап 4: Юзабилити-тестирование | 1 час |
| Этап 5: Итерация и финализация | 1.5 часа |
| Итого | ~7 часов |
Примечание Для первого выполнения с изучением инструментов время может увеличиться до 10 часов. Рекомендуется работать в паре (дизайнер + разработчик).
9. Связанные вопросы из базы знаний
| Вопрос | Тема |
|---|---|
| 12 | Принципы юзабилити (Nielsen) |
| 34 | UX-тестирование: метрики |
| 56 | Индикация состояний загрузки и ошибок |
| 78 | Проектирование сообщений об ошибках в AI-системах |
| 101 | Partial failure в распределённых системах (UX аспект) |
| 145 | Использование цветов для обратной связи (успех/ошибка) |
| 203 | RAG: обработка ситуации отсутствия документов |
| 267 | Интерактивное прототипирование в Figma |
| 312 | Юзабилити-тестирование: сценарии и модерация |
| 401 | Адаптивный дизайн для чат-интерфейсов |
10. Чек-лист самопроверки
- Я проверил, что в прототипе partial failure UI заметно отличается от успешного.
- Я проверил, что текст индикации понятен и не вызывает ложной тревоги.
- Я провёл хотя бы одно короткое юзабилити-тестирование и записал результаты.
- Я подготовил документацию, которая позволит разработчику воспроизвести поведение.
- Я сравнил свой дизайн с существующими практиками в ChatGPT/Perplexity и убедился, что он не хуже.
- Я убедился, что прототип работает на мобильном экране (адаптивный).
- Я загрузил код и макеты в репозиторий с README.