← Все статьи

«Облако мыслей»: как построить память о пользователе, которая сводит людей и не сливает приватность

«Облако мыслей»: как построить память о пользователе, которая сводит людей и не сливает приватность

Коротко о главном (BLUF)

Память о пользователе — задача с двойным дном: сводить людей по их мыслям полезно, но одна утечка убивает доверие к продукту навсегда. Показываем, как устроены слои «Облака мыслей», почему fail-closed важнее, чем кажется, и какие каналы раскрытия строже остальных.

Про сам продукт — «Облако мыслей» в NeuralSpace — мы уже рассказывали: система собирает, что знает о тебе, и по обоюдному согласию сводит тех, у кого совпадают интересы («ищу 3D-моделлера» ↔ «делаю 3D»). Здесь — про инженерную сторону: как сделать так, чтобы полезная память о пользователе не превратилась в утечку. Это оказалось интереснее самой фичи.

Задача с двойным дном

Хочется двух вещей одновременно, и они противоречат друг другу:

  1. Богатый профиль. Чтобы сводить людей, надо знать факты: чем занимается, что ищет, что предлагает.
  2. Приватность по умолчанию. Никто не соглашался, что его переписка станет публичной. Утечка = потеря доверия и нарушение 152-ФЗ.

Наивная реализация («соберём всё и будем матчить») ломает пункт 2 мгновенно. Правильная архитектура строится вокруг fail-closed: по умолчанию закрыто, раскрытие — только по явному согласию, и это проверяется на уровне кода, а не «мы обещаем».

Слои

Fail-closed: факты без согласия физически не попадают в профиль, а не «попадают и прячутся»
Fail-closed: факты без согласия физически не попадают в профиль, а не «попадают и прячутся»

1. Сбор фактов. Два источника: структурные факты (типы генераций, активность — обезличенное) и извлечение из переписки чата. Второе — самое чувствительное, поэтому гейтится отдельным тумблером памяти чата у пользователя. Выключил — извлечение из переписки не идёт вообще. Важно: этот гейт не привязан к подписке на платные функции — приватность не должна продаваться.

2. Категории под запретом. Системный запрос сбора исключает чувствительные категории по 152-ФЗ (здоровье, политические и религиозные взгляды и пр.) — они не попадают в облако, даже если всплыли в разговоре. Это не пост-фильтр, а правило на этапе извлечения.

3. Матчинг с двойным согласием. Два человека совпали по интересам — система не показывает контакты автоматически. Она предлагает знакомство обеим сторонам; контакт раскрывается, только когда оба согласились. Это защищает от сценария «мой запрос в чате всплыл у незнакомца вместе с моим телефоном».

4. Исключение для явных объявлений. Тонкий момент. Если человек сам, публично, в чате говорит «продаю услугу, кому надо — пишите @ник» — спрашивать согласие второй раз абсурдно, он уже его дал. Такой публично разрешённый контакт распознаётся отдельно и раскрывается сразу заинтересованному. Контакт при этом распознаётся широко (телеграм с @ и без, телефон в любом формате, ссылки), но условие раскрытия — именно явное публичное разрешение, а не просто наличие контакта в тексте.

Почему fail-closed важнее, чем кажется

Соблазн — сделать защиту флагом «показывать / не показывать» на уровне интерфейса. Это неверно: любой баг в UI-логике = утечка. Мы сделали иначе — факты, на которые нет согласия, физически не попадают в профиль на этапе его сборки. Нет согласия — тексты запросов и референсы в письмо и матчинг не попадают вовсе, а не «попадают, но мы их прячем». Разница фундаментальная: в первом случае забытая проверка = утечка, во втором — просто отсутствие данных.

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

Каналы раскрытия — разной строгости

  • В чате, по запросу самого пользователя — обезличенные факты и уже публичные лиды доступны легче: человек сам спросил.
  • Проактивная почта (система сама пишет «есть совпадение») — строже, только по подписке и двойному согласию.

Логика простая: чем менее пользователь ожидает раскрытия, тем выше планка согласия.

Итог

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

Fail-closed: facts without consent never enter the profile, instead of entering and being hidden
Fail-closed: facts without consent never enter the profile, instead of entering and being hidden

Часто задаваемые вопросы (FAQ)

Вопрос: Как получить лучший результат от нейросети?
Ответ: Используйте подробные промпты (описания) на английском языке, задавайте стиль и детали сцены.

Вопрос: Можно ли использовать эти материалы в коммерческих целях?
Ответ: Да, сгенерированный контент полностью принадлежит вам.