pseudex
ШЛЮЗ ПЕРСОНАЛЬНЫХ ДАННЫХ ДЛЯ LLM-АГЕНТОВ · 152-ФЗ

Модель не видит данных.Инструменты видят.

Агент звонит на настоящий номер и доставляет на настоящий адрес. Модель при этом работает только с подменой.

Контейнер стоит внутри вашего периметра. К нам уходят счётчики — ни текстов, ни значений.

НАЧАТЬ ЗА 15 МИНУТ ПОСМОТРЕТЬ ПОДМЕНУ →
$ docker run -d -p 8000:8000 cr.yandex/crpkutn2el1knpsbrs2d/pseudex:1.0.0
14 ДНЕЙ ПРОБЫ · КАРТА НЕ НУЖНА · ХОСТИНГ В РФ
ОДИН ЗАКАЗ, ЦЕЛИКОМ
Настоящие значения не выходили за периметр: модель работала с подменой, инструмент — с реальными данными.
Чат-боту достаточно спрятать данные: он только отвечает текстом. Агент вызывает инструменты — звонит, оформляет заказ, пишет в CRM, — и инструментам нужны настоящий номер и настоящий адрес.
Поэтому маскирование — половина задачи. Вторая половина — вернуть настоящие значения в вызов инструмента, не сломав работу агента: в любой форме, в которую их превратила модель, по-русски, с падежами и документами РФ.
Мы искали такое решение как покупатели. Не нашли — сделали сами.
ЕСЛИ ЗНАЕТЕ ВТОРОЕ ТАКОЕ РЕШЕНИЕ В СНГ — НАПИШИТЕ, ПРАВДА ИНТЕРЕСНО
99,7%НЕ ДОШЛО
Доля персональных значений, которые не дошли до модели на самых трудных формах. Остаток мы печатаем.
18ТИПОВ ПД
СНИЛС, ИНН, паспорт, ОМС, карта, счёт — четыре из них с проверкой контрольной суммы, а не по маске.
48ЧАСА АВТОНОМИИ
Аренда суточная, плюс 48 часов отсрочки, если недоступны мы: контейнер работает на предоплаченном резерве и предупреждает.
0ДАННЫХ У НАС
Ни текстов, ни токенов, ни значений. К нам уходят только счётчики — и счёт от них не зависит.
+0,2СЕКУНДЫ
Столько добавляется к вызову модели. На фоне 1,5–2 секунд самого вызова агент работает как раньше.
15МИНУТ
От ключа до первого замаскированного запроса. Код приложения не меняется — только переменная окружения.
РАЗНИЦА

Спрятать данные умеют все. Вернуть их в вызов инструмента — нет

Маскирование по дороге в модель — бесплатная функция шлюза. Работающему агенту нужна обратная операция, и она начинается там, где фильтр заканчивается.

ЧТО НУЖНО АГЕНТУ В ПРОДЕ
ТОЛЬКО МАСКИРОВАНИЕ
PSEUDEX
Спрятать телефон, email и ФИО от модели
да
да
Настоящее значение в аргументе вызова инструмента
нет
да
Один человек — один токен завтра и в соседнем диалоге
нет
да
СНИЛС, ИНН, паспорт, ОМС с проверкой контрольной суммы
нет
да
ФИО в падежах, отчества, уменьшительные имена
частично
да
Раскрыть значение по токену — с записью, кто и когда
нет
да
В левой колонке — маскирование как подход, а не конкретный продукт: односторонняя подмена без состояния между запросами.
СКОЛЬКО НЕ ДОХОДИТ ДО МОДЕЛИ

99,7% персональных значений не доходят до модели. Оставшиеся 0,3% мы печатаем

Меряем не на чистых шаблонах, а на том, как люди пишут в живых чатах и звонят в поддержку: опечатки, латинская раскладка, числа словами, падежи, уменьшительные имена, значение, размазанное по трём репликам.

Именно на таком тексте готовые библиотеки теряют больше всего: на чистом «Иванов Иван Иванович» работает любая, а реальные диалоги так не выглядят почти никогда.

Живые диалоги
Не чистые шаблоны, а формы из настоящих переписок поддержки и колл-центров: как люди пишут, а не как удобно детектору.
Грязный текст
Опечатки, перепутанная раскладка, распознанная речь, числа словами. Ни одной утечки и ни одного ложного срабатывания.
Документы РФ
СНИЛС, ИНН, паспорт, карта — по контрольной сумме, а не по маске. Номер, которого не бывает, в подмену не уйдёт.
Что осталось
Имена и улицы, которых нет ни в одном словаре. Их мы называем, а не округляем до ста процентов.
Формы, на которых детекция спотыкается
ПЕРЕКЛЮЧИТЕ ВКЛАДКУ
ЧТО НАПИСАЛ КЛИЕНТ
ЧТО УВИДИТ МОДЕЛЬ
Подмена формат-сохраняющая: модель видит такой же телефон, такой же адрес и такую же грамматику — и продолжает работать как обычно.
КАК РАБОТАЕТ

Агент — это модель плюс ваши функции. Данные нужны функциям, а не модели

Модель сама ничего не делает. Она читает переписку и решает, какую вашу функцию вызвать: «оформить доставку», «найти клиента в CRM». Звонит и привозит заказ ваш код — ему нужен настоящий номер и настоящий адрес.

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

КЛИЕНТ МОДЕЛЬ
Ставим подмену

Находим 18 типов данных — ФИО, адрес, СНИЛС, ИНН, паспорт, ОМС. Подмена того же рода, падежа и формата, поэтому модель не пытается её исправить и читает разговор как обычно. Полный список →

МОДЕЛЬ ВАШ КОД
Снимаем подмену

Модель вызывает вашу функцию и передаёт в неё подмену — в том виде, в каком написала сама. Мы узнаём своё значение в любой форме и подставляем настоящее: курьер едет по реальному адресу.

ВАШ КОД МОДЕЛЬ
Ставим ту же подмену

Функция вернула настоящие данные из CRM, и они снова идут в модель. Для неё это тот же Виктор Шилов — иначе агент за один разговор познакомился бы с клиентом дважды.

ЧТО ОСТАЁТСЯ В ВАШЕЙ БАЗЕ

Подмена без возврата заканчивается в вашей CRM

Маскирование задумано как операция в одну сторону: текст вошёл, подмена вышла. Дальше она живёт своей жизнью — в памяти диалога, в аргументе вызова и в записи, которую ваш агент создал.

Вот одна и та же заявка после обработки. Слева — если настоящие значения никто не вернул.

БЕЗ ОБРАТНОЙ ПОДСТАНОВКИ
ЗАЯВКА №A-4471
КЛИЕНТ
Виктор Шилов
такого человека нет
ТЕЛЕФОН
+7 903 557-19-42
номер не отвечает
АДРЕС ДОСТАВКИ
улица Грушевая, 63
нет в справочнике
Заказ оформлен, курьер назначен, клиент ждёт звонка. Ничего из этого не произойдёт — и узнаете вы об этом от клиента.
С PSEUDEX
ЗАЯВКА №A-4471
КЛИЕНТ
Иванов Пётр Сергеевич
как в вашей базе
ТЕЛЕФОН
+7 916 214-88-03
тот, с которого он написал
АДРЕС ДОСТАВКИ
Ленинский пр-т 42, кв. 118
есть в справочнике
Заявка рабочая. При этом модель не видела ни одного из этих значений — ни в запросе, ни в ответе инструмента.
Речь о свойстве подхода, а не о конкретных продуктах: односторонняя подмена не помнит, что подменяла, и не знает, куда подставлять обратно.
ПОЧЕМУ ПРОСТОЕ РЕШЕНИЕ НЕ РАБОТАЕТ

Заменить подмену обратно поиском по тексту — и курьер поедет по выдуманному адресу

Простое решение выглядит так: запомнили пару «настоящее ↔ подмена», модель ответила, нашли подмену в тексте и вернули настоящее. Это работает, пока модель повторяет подмену буква в букву. В аргументах вызова инструмента она этого почти никогда не делает.

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

ПОИСК ПО ТЕКСТУ · КАК ЭТО ЛОМАЕТСЯ
запомнили: Ленинский пр-т 42улица Грушевая, 63
модель написала в аргументе: «грушевую 63»
ищем «улица Грушевая, 63»не найдено
В CRM уходит «грушевую 63». Такого адреса нет — заказ уедет в никуда, и в базе останется человек, которого не существует.
PSEUDEX · КАК ЭТО РАБОТАЕТ
помним не строку, а какое значение чем подменили
в аргументе узнаём «грушевую 63» как ту же подмену
подставляем Ленинский пр-т 42 — в исходной форме
CRM получает адрес, который есть в справочнике. Модель этого адреса не видела ни на одном шаге.
ТАК ОНА ПИШЕТ НА САМОМ ДЕЛЕ · СЛУЧАИ ИЗ ПРАКТИКИ
Просклоняла подмену
«ленина пятидесяти»
поиск по тексту: не совпало
Ленина 50
Написала латиницей
BITYUKOVA
поиск по тексту: не совпало
Битюкова
Разнесла имя по трём полям
last / first / middle
поиск по тексту: совпала только фамилия
Три части одного человека
Сократила до инициалов
«Т. О.»
поиск по тексту: искать нечего
Тарасова Ольга
Склеила две подмены дефисом
«Мухина-Бирюкова»
поиск по тексту: не совпало ни с одной
Обе половины настоящими
Исправила опечатку клиента
«Мончегорская»
поиск по тексту: не совпало
Как пишет реестр
Каждый случай — класс ошибок, найденный измерением и закрытый. То, что не закрыто, мы публикуем тоже: остаются имена и улицы, которых нет ни в одном словаре.
ПОДМЕНА НЕ МЕШАЕТ МОДЕЛИ

Женское имя подменяется женским, улица — улицей, падеж сохраняется, у СНИЛС сходится контрольная сумма. Рассогласованную подмену модель замечает и начинает править сама — и вот тогда агент действительно ломается.

А МОДЕЛЬ НЕ МЕШАЕТ НАМ

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

ЭТО И ЕСТЬ ВСЯ РАБОТА

Обе половины — про русский язык, падежи и документы РФ. Готового решения для этого мы не нашли, поэтому сделали сами. Если знаете второе — напишите, правда интересно.

Что у вас в переписке

ОТМЕТКА = ЗАЯВКА НА ТИП

Отметьте свои группы данных. Скажем, что находим сегодня, что в разработке и чего не планируем — последнее честнее первого. Отметки складываются в счётчик спроса: по нему мы строим очередь работ.

Полный список типов и то, чем каждый держится →

Быстрый старт

КЛЮЧ ДО ОПЛАТЫ · 14 ДНЕЙ

После регистрации приходит письмо со ссылкой: по ней ключ выпускается и показывается один раз, до всякой оплаты. Команда запуска придёт уже с подставленным ключом.

Карта не спрашивается. Ключ работает сразу и 14 дней бесплатно.
CLAUDE CODE · CODEX · CURSOR · ЛЮБОЙ

Пусть агент подключит всё сам

Он сам найдёт, куда проект ходит за моделью, поднимет контейнер, переключит переменную окружения и проверит, что маскирование сработало. Если нет — остановится и скажет.

Реальный экран без монтажа: подключение, проверка, что модель не видит данных, и круг с вызовом инструмента.
ИЛИ РУКАМИ · КУДА ВЫ ХОДИТЕ ЗА МОДЕЛЬЮ
02


        
03


        
04

Убедиться, что работает

curl localhost:8000/health
docker logs pseudex | grep 'интерфейс' -A2
# → http://localhost:8081/?token=9f3c1a…

Цены

ЦЕНА НА САЙТЕ · БЕЗ «СВЯЖИТЕСЬ С НАМИ»

Абонплата по числу контейнеров, сверх включённого — по запросам. Запрос виден в логе вашего же шлюза, поэтому наш счёт можно сверить со своей записью.

СТАРТ
990 ₽
в месяц · 1 контейнер
10 000 запросов включено
дальше 79 ₽ за 1000
2 ключа доступа
Подходит: один бот или сервис в проде
НАЧАТЬ ПРОБУ
РАБОЧИЙ
3 900 ₽
в месяц · 4 контейнера
100 000 запросов включено
дальше 31 ₽ за 1000
4 ключа доступа
Подходит: прод, стенд и запас — или несколько команд
НАЧАТЬ ПРОБУ
ПРОМЫШЛЕННЫЙ
11 900 ₽
в месяц · 12 контейнеров
1 000 000 запросов включено
дальше 9,50 ₽ за 1000
10 ключей доступа
Подходит: несколько продуктов и отказоустойчивость
НАЧАТЬ ПРОБУ
Запрос — один вызов модели через шлюз. В агентском цикле одно сообщение клиента обычно даёт несколько вызовов: считайте по вызовам, а не по диалогам.
Ставка убывает с тарифом, поэтому перейти на больший всегда дешевле, чем расти перерасходом. Превышение — это счёт, а не рубильник.
Счёт выставляется в конце периода: срок оплаты 7 дней, и ещё 3 дня идут запасом — платёж по безналу в пятницу вечером не должен останавливать прод в субботу. Акты и закрывающие — в кабинете.

Вопросы

Поддержка — на почте, отвечаем сами в рабочие часы по Москве. Настоящие значения клиентов присылать не нужно: они нам не видны, достаточно токена из журнала и времени.

Что вы видите со своей стороны?

Только тело отчёта, показанное выше: идентификатор организации и инстанса, число запросов и счётчики по типам сущностей. Ни текстов, ни токенов, ни значений — их физически нет на нашей стороне.

Чем это отличается от бесплатного маскирования в шлюзе?

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

Что с производительностью?

Само маскирование — единицы миллисекунд: детекция около 2 мс, подмена 0,4 мс, восстановление 2 мс. Сквозная надбавка больше, потому что запрос идёт лишним сетевым плечом: в наших замерах медиана выросла с 1 696 до 1 880 мс, у клиентов на своих стендах — до +0,5 секунды.

Сколько ресурсов нужно машине?

По одному рабочему процессу на ядро, каждый держит стек морфологии: на восьмиядерной машине это 2–2,5 ГБ памяти. Рабочих можно ограничить — PSEUDEX_WORKERS=2 даёт около 400 МБ и справляется с потоком небольшого бота. Ориентир: 2 ядра и 1 ГБ на старте, 4 ядра и 4 ГБ под нагрузку.

Можно ли on-prem без интернета?

Пока нет. Контейнеру нужен исходящий HTTPS до лицензионного сервера: он берёт словари детекции в аренду и пополняет ёмкость. При нашей недоступности он работает на предоплаченном запасе примерно шесть часов вашего обычного трафика — это покрывает наши сбои, но не изолированный контур. Нужен такой режим — напишите, обсудим отдельно.

Какие модели поддерживаются?

Любые, к которым вы ходите по HTTP: OpenAI-совместимые API, Anthropic, LiteLLM как прокси, собственный шлюз. Pseudex стоит до модели и ничего о ней не знает.

Как вы считаете объём, если контейнер стоит у меня?

Мы не берём число, которое сообщает ваш контейнер. Он обслуживает столько запросов, на сколько мы выдали ёмкость, и за следующей порцией обязан прийти к нам. Ваш отчёт о фактическом расходе работает в обратную сторону — уменьшает начисление до фактического, то есть это ваша защита, а не наша.

Чего мы не обещаем: что это невозможно обойти. Учёт исполняет код на вашем оборудовании. Мы не утверждаем, что его нельзя изменить — мы делаем так, чтобы это требовало правки релизного бинарника и оставляло у нас датированный след.

Где стоят ваши серверы и почему это важно?

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

Но у нас есть свои персональные данные — ваши: почта администратора кабинета, реквизиты для счёта, ФИО подписанта. Это ПД по 152-ФЗ, и ст. 18 ч. 5 требует, чтобы их запись, систематизация и хранение шли в базах на территории России. Поэтому витрина, лицензионный сервер и их база размещены в России, и по-другому быть не может.

Практическое следствие для вас: работая с нами, вы не создаёте себе трансграничной передачи — ни своей, ни своих клиентов.

Какие куки вы ставите?

Две строго необходимые: сессионная — чтобы вы оставались в кабинете после входа, и CSRF — чтобы форму нельзя было отправить с чужого сайта. Обе помечены HttpOnly и SameSite=Lax, сессионная живёт 12 часов.

Чужих счётчиков на сайте нет — ни Метрики, ни Google Analytics, ни пикселей. Есть наша собственная аналитика (Rybbit, открытый код), развёрнутая на нашем сервере в России: данные о посещениях не уходят ни в чьё облако. Она сохраняет в браузере идентификатор посетителя и записывает, куда вы нажимаете, поэтому мы спрашиваем согласия баннером — и «не считать» там такая же кнопка, как «согласен». Поля ввода в записи маскируются всегда: то, что вы печатаете в форму, в запись не попадает. На страницах кабинета аналитики нет вовсе.

Подробнее — в политике обработки.

Как отозвать согласие на обработку?

Письмом на адрес, указанный в политике, с почты, на которую зарегистрирован аккаунт. Отзыв означает прекращение обработки и удаление аккаунта; данные, которые мы обязаны хранить по закону (бухгалтерские документы по оплаченным счетам), хранятся установленный срок и не используются ни для чего другого.

Ваш волт с настоящими значениями к нам не относится — он на вашем железе, и удаление аккаунта его не трогает.

Как отказаться?

Не оплачивать следующий счёт: карта не сохраняется, автосписаний нет. Ключ работает до конца оплаченного периода, потом сервис останавливается fail-closed. Данные остаются у вас — они и так никогда не были у нас.

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

14 ДНЕЙ ПРОБЫ · КАРТА НЕ СПРАШИВАЕТСЯ · ХОСТИНГ В РФ
СОЗДАТЬ АККАУНТ