Почему в AI CareerBot не отключили контекст ради PII
В AI CareerBot пользователи вставляют резюме с ФИО, телефонами и адресами. Рассказываем, почему не стали отключать контекст и как фильтруем PII перед GigaChat API.

Полностью выключить контекст из-за PII — слишком грубое решение.
В AI CareerBot пользователи приносят в чат куски резюме. Часто вместе с полезным содержанием туда попадает всё, что в резюме обычно лежит сверху: ФИО, телефон, адрес. Для карьерного помощника это нормальный ввод: человек не будет вручную чистить документ перед тем, как попросить переписать опыт или адаптировать формулировку.
Нам нужно было привести обработку персональных данных к политике по 152-ФЗ и при этом не превратить диалог в одноразовую форму. Бот должен помнить, о чём шла речь, иначе follow-up теряет смысл.
Что было очевидным вариантом
Первый вариант выглядел максимально безопасно: не сохраняем контекст диалога. Каждый запрос обрабатываем отдельно, в GigaChat API отправляем только текущее сообщение после фильтрации PII.
На бумаге аккуратно. Нет длинной истории — меньше риск, что персональные данные поедут дальше по цепочке. Если пользователь вставил резюме с телефоном, фильтр убрал телефон, модель ответила, контекст сбросили.
Но для AI CareerBot это ломает основной сценарий. Пользователь редко формулирует задачу одним идеальным сообщением. После первого ответа идут короткие команды: «сделай короче», «перепиши под вакансию продакта», «оставь больше фактов про продажи», «а теперь на английском». Без сохранённого контекста бот не понимает, что именно нужно менять.
Самый неприятный момент был именно в этом: если контекст отключить, пользователь начинает заново вставлять тот же фрагмент резюме. То есть безопасный вариант провоцирует повторную отправку персональных данных в чат. Мы убрали бы память у системы, но не убрали бы привычку пользователя копировать резюме целиком.
Почему фильтровать весь диалог сложнее, чем одно сообщение
PII в таком сценарии живёт не только в первом сообщении. Пользователь может дописать телефон позже, уточнить адрес, вставить новый фрагмент резюме или процитировать старый кусок уже после ответа бота.
Поэтому фильтр нельзя привязать только к первому вводу. Перед каждым вызовом внешней модели нужно собирать контекст и очищать именно ту версию, которая уйдёт в GigaChat API. В рабочем контексте остаётся смысл диалога: опыт, должности, навыки, запрос пользователя. Персональные поля — ФИО, телефоны, адреса — не должны попадать в запрос к модели.
Здесь пришлось провести границу. Если выкинуть слишком много, бот начнёт отвечать общими фразами: ему не хватит материала из резюме. Если оставить лишнее, нарушается сама цель политики обработки PII. Поэтому фильтрация строилась вокруг конкретных типов персональных данных, которые реально встречались во вводе пользователей: имена, контакты, адреса.
Что выбрали вместо отключения контекста
Мы оставили диалоговый контекст, потому что без него карьерный бот становится раздражающим редактором одного сообщения. Но перед передачей данных в GigaChat API добавили слой фильтрации PII по политике, соответствующей 152-ФЗ.
Схема получилась такой:
- пользователь пишет в AI CareerBot и может вставить фрагмент резюме;
- контекст диалога сохраняется, чтобы follow-up работал осмысленно;
- перед вызовом GigaChat API формируется очищенная версия контекста;
- из неё удаляются персональные данные: ФИО, телефоны, адреса;
- модель получает карьерный смысл запроса, но не получает персональные поля.
Важный компромисс: мы не пытаемся заставить пользователя заранее готовить «безопасную» версию резюме. Это почти всегда проигрышный UX. Вместо этого система принимает ввод таким, каким его прислали, а границу для внешнего API проводит сама.
Для карьерных диалогов это критично. Фраза «адаптируй мой опыт под вакансию» должна работать через несколько сообщений после вставки резюме. При этом следующий запрос в GigaChat API уходит уже без ФИО, телефона и адреса.