Как играм следует обрабатывать личные данные в полях свободного ввода текста
Когда игрок вводит в игре обычные личные подробности, наиболее безопасный подход к проектированию — собирать только то, что необходимо для работы функции, не допускать попадания исходного текста в вымышленный мир и общий контекст персонажа, а также предоставить игроку наглядный способ удаления сохраненных материалов. Для команды разработчиков практическая задача состоит в том, чтобы отследить путь одного текстового сообщения в свободной форме от ввода до хранения, обработки и удаления — и на каждом шаге решать, нужен ли этот текст игре вообще.
Начните с определения того, что действительно нужно функции
Поле свободного ввода текста может провоцировать пользователя предоставить больше информации, чем требуется игре. Игрок может написать: «Обычно я еду домой на автобусе и захожу в пекарню», запрашивая при этом сцену с выбором выпечки. Для сцены может потребоваться выбор выпечки или место действия; сохранять привычный маршрут игрока вовсе не нужно. Если рассматривать все сообщение целиком как полезные игровые данные, личные подробности легко могут выйти далеко за рамки требований функции.
Прежде чем создавать процесс ввода данных, сформулируйте его назначение простыми словами: например, «использовать выбранное игроком место действия для персонализации этой сцены». Затем определите минимальный объем информации, который может решить эту задачу. Это применение принципа минимизации данных в продуктовом дизайне: Управление комиссара по информации Великобритании (ICO) описывает использование данных по умолчанию как ограниченное тем, что необходимо для каждой конкретной цели, и рекомендует учитывать конфиденциальность с этапа проектирования и на протяжении всего жизненного цикла продукта (ICO: Data protection by design and by default).
Полезный вопрос при проектировании: если исходное сообщение исчезнет сразу после текущего ответа, что потеряет игра? Если ответ — «ничего», не превращайте его в сохраненную настройку. Если что-то понадобится позже, подумайте, может ли игрок выбрать короткую явную настройку — например, «включать локации с пекарней» — вместо того чтобы игра сохраняла целое предложение, которое может содержать лишние подробности. Такая настройка — это предлагаемый паттерн проектирования, а не утверждение о какой-либо конкретной игровой функции.
Держите текст игрока за пределами вымышленной памяти
Отделяйте текст, вводимый игроком, от фактов, определяющих вымышленный мир. Игре может требоваться постоянное состояние сюжета, например «персонаж посетил пекарню» или «следующая сцена происходит на рынке». Эти факты относятся к сюжету. Предложение о реальном распорядке дня игрока не становится памятью вымышленного персонажа лишь потому, что оно появилось в промпте.
Один из практических подходов — назначить каждому типу информации отдельное место назначения: временный ввод для текущей генерации, явное состояние сюжета для вымышленных событий и опциональная, контролируемая игроком настройка для повторяющихся выборов. Не копируйте исходное сообщение автоматически в профиль персонажа, саммари, долгосрочную память, аналитическое событие или общий контекст. Если игре необходимо передать предшествующий контекст в следующую сцену, передавайте только выбранные сюжетные факты или настройки, требуемые функцией.
Это разделение — архитектурная рекомендация, основанная на принципах конфиденциальности на этапе проектирования (privacy-by-design), а не описание конкретной платформы. NIST Privacy Framework — это добровольный инструмент, который организации могут адаптировать к своему контексту обработки данных; его руководство подчеркивает важность выбора релевантных результатов на основе экосистемы обработки данных и потребностей людей в конфиденциальности (NIST: Getting Started with the Privacy Framework). Для команды игры полезный шаг — составить карту перемещения текста и назначить каждому месту назначения четкую цель.
Сделайте публикацию отдельным и явным выбором
Свободный текст, введенный для личного игрового взаимодействия, не должен негласно становиться общедоступной деталью персонажа. Если игрок хочет опубликовать карточку персонажа, отрывок сюжета или пост в сообществе, покажите в точности то, что будет опубликовано, и дайте игроку отредактировать это перед отправкой. Предложение, написанное для формирования личной сцены, не должно по умолчанию появляться в профиле, таблице лидеров или публичном стриме.
Это важно, поскольку в рамках обычных продуктовых операций игровой текст может пересекать границы контекстов. В политике конфиденциальности Ubisoft, например, описывается обработка записей чата и пользовательского контента в связи с социальными функциями, а также отмечается, что некоторые имена пользователей и текст могут отображаться в таблицах лидеров или контекстах стриминга (Ubisoft: Privacy Policy). Эта политика служит примером сервисов Ubisoft, а не универсальным описанием всех игр. Она иллюстрирует, почему дизайнерам следует четко определять, какая функция получает текст, и делать любое изменение аудитории явным.
Для каждого пути публикации показывайте аудиторию непосредственно в момент действия: видна только в этой сцене, видна выбранным друзьям или публична. Располагайте элемент управления рядом с действием, меняющим видимость. Не полагайтесь на общую страницу настроек для объяснения разового выбора публикации.
Объясняйте, что происходит с введенными данными
Понятный интерфейс должен сообщать игрокам, используется ли сообщение только для формирования текущего ответа, сохраняется ли для будущих сцен или отправляется во внешний сервис. Сделайте объяснение кратким и разместите его рядом с полем ввода текста. Если разные функции ведут себя по-разному, сообщайте об этом у каждой конкретной функции, вместо того чтобы создавать впечатление, что одно правило распространяется на любой ввод.
Причина носит практический характер: собственное хранилище игры — лишь один из возможных этапов на пути обработки. Например, документация API OpenAI разделяет логи мониторинга злоупотреблений и состояние приложения, а также описывает различия в сроках хранения в зависимости от эндпоинта и функции. Заявленные элементы управления и ограничения применяются к этому конкретному API, а не ко всем провайдерам или играм (OpenAI: Data controls in the OpenAI platform). Команде игры следует проверять фактические настройки и условия того провайдера, которого она использует, а затем точно объяснять результирующее поведение.
Не помечайте функцию как «временную» только потому, что игра не сохраняет сообщение в профиле игрока. Проверьте, может ли текст оставаться в логах запросов, выводе отладки, отчетах о сбоях, аналитике, инструментах модерации или сохраненном контексте разговора. Если какому-либо месту назначения текст требуется по определенной операционной причине, задокументируйте этот поток и срок его хранения внутри компании и избегайте попадания исходного текста в системы, которым он не нужен.
Предоставьте игрокам инструмент удаления, затрагивающий сохраненные копии
Если игра сохраняет многократно используемую настройку или контекст диалога, предоставьте игроку наглядный инструмент для ее просмотра и удаления. Разместите этот элемент управления там, где игроки управляют соответствующей функцией, — например, на экране «Сохраненные настройки сюжета» с кнопкой удаления рядом с каждым сохраненным элементом. Подтверждайте действие понятным языком и показывайте, когда удаление завершено.
Действие по удалению должно охватывать копии, контролируемые игрой, а не просто скрывать строку в интерфейсе. В качестве контрольного списка для проектирования проследите сохраненный элемент через хранилище профилей, саммари сюжета, поисковый индекс или хранилище извлечения данных (retrieval store), а также любой кэш, способный его восстановить. Определите, как истекает срок действия резервных копий и операционных записей, и сообщите игрокам, если для некоторых записей действует отдельный график хранения. Ядро системы конфиденциальности NIST относит доступ для просмотра, изменения и удаления к результатам управления данными и включает тестирование технических мер в число обязательных действий (NIST Privacy Framework Core).
Протестируйте процесс удаления на простом вымышленном примере: сохраните предпочтение локаций с пекарней, убедитесь, что оно может влиять на последующую сцену, удалите его, а затем убедитесь, что оно больше не отображается в окне сохраненных настроек и не передается в контекст последующей сцены. Это предлагаемый продуктовый тест, а не отчет о результатах. Если удаление происходит асинхронно, покажите его статус и избегайте отображения незавершенного запроса как выполненного.
Проводите быструю проверку перед релизом текстовой функции
Для каждой функции со свободным вводом текста команда может пройтись по четырем вопросам: какой минимальный ввод необходим; какие системы получают исходный текст; какие части, если таковые имеются, становятся постоянным состоянием игры; и где игрок может просмотреть или удалить это сохраненное состояние? Проследите путь одного тестового сообщения по реальному маршруту продукта, включая внешние сервисы, и убедитесь, что объяснение, предоставляемое игроку, полностью ему соответствует.
Целевой пользовательский опыт предельно прост: игрок может использовать привычные личные предпочтения для формирования сцены без того, чтобы игра тайком превращала целое предложение в долговременную память персонажа. Ограничение объема исходных данных, отделение фактов сюжета от деталей игрока, явное управление публикацией и предоставление доступного инструмента удаления превратят эту цель в понятные решения, которые команда дизайнеров и инженеров сможет реализовать и проверить.
