Перевёз ИИ-агентов на российский сервер. Оказалось, полмира с ним разговаривать не хочет
После переезда выяснилось, что многие внешние сервисы работают с российским сервером только в одном направлении. Docker Hub ограничивал загрузку образов, Anthropic возвращал 403 ещё до проверки ключа, а Telegram не доставлял вебхуки и не забирал изображения с двух российских хостингов. Для сборки понадобились зеркала реестра, для запросов к Claude — другая точка выхода, для Telegram — длинный опрос вместо вебхуков и внешнее хранилище медиа.
Размещение приложения в России само по себе не решает вопрос персональных данных, поскольку запросы всё равно уходят во внешнюю модель. Автор заменяет телефоны, имена, почту и документы нумерованными плейсхолдерами, хранит таблицу соответствий только в памяти
российского сервера и восстанавливает значения перед ответом пользователю. Маскировать нужно сначала длинные и специфичные форматы, а корректность проверять круговым тестом; распознавание телефонов, произнесённых словами, в описанной реализации пока не закрыто.
Переезд снизил задержку голосового агента, использующего Яндекс SpeechKit, сделал расходы на сервер предсказуемее и уменьшил число внешних точек отказа. Практический принцип архитектуры — инициировать соединения со своей стороны, заранее проверять API, вебхуки, загрузку файлов и сборку контейнеров, а также определить срок хранения диалогов и удалять их после достижения цели обработки.
Коротко
- Код 401 обычно указывает на проблему с авторизацией, а мгновенный 403 без упоминания ключа — на блокировку запроса по IP или стране.
- Telegram не доставлял вебхуки на московский VPS, поэтому автор заменил входящие вызовы на long polling и полностью отключил старый автодеплой.
- Telegram также не забирал изображения с двух российских хостингов, но успешно загружал те же файлы из зарубежного публичного хранилища.
- Персональные данные маскируются до обращения к Claude, а нумерованные плейсхолдеры позволяют корректно восстановить несколько разных значений.
- После обработки заявки недостаточно обезличить данные: нужно заранее определить срок хранения переписки и удалить её после достижения цели.
FAQ
Зачем автор перенёс ИИ-агентов с зарубежной PaaS-платформы на российский VPS, хотя языковая модель Claude осталась внешней?
Целью были локальное хранение клиентских персональных данных и снижение зависимости от зарубежной платформы. Перед отправкой в Claude данные дополнительно обезличиваются.
Как сохранить работу внешней языковой модели и при этом не передавать ей реальные телефоны, имена, адреса почты и документы?
Перед запросом значения заменяются уникальными плейсхолдерами, а таблица соответствий остаётся в памяти российского сервера. После ответа плейсхолдеры разворачиваются обратно.
Почему Telegram-бот может быть доступен пользователям, но при этом не получать вебхуки и не отдавать опубликованные по ссылке изображения?
Доступность сервера для обычных пользователей не гарантирует доступ из дата-центров Telegram. В описанном кейсе помогли long polling и размещение медиа во внешнем хранилище.
Читайте также
Бот в MAX молчит: четыре проблемы Bot API, о которых не пишут в документации
Публичность или небытие: как ИИ меняет цену знания
Как автор снизил стоимость обработки данных с помощью ИИ в 12 раз
Локальный запуск LLM для SOC: сколько GPU действительно нужно?
Meta* обсуждает продажу Anthropic вычислительных мощностей на сумму до $10 млрд
- Проектирование интеграций по принципу outbound-first: При размещении сервисов на российских IP нельзя считать входящие вебхуки и обратные вызовы гарантированно доступными, даже если сервер открывается из браузера и внешних проверочных сервисов. Критичные интеграции лучше проектировать так, чтобы соединение инициировал собственный сервер: использовать polling, исходящие API-запросы и управляемые точки выдачи файлов.
[Архитектура интеграций]
Зарегистрированные пользователи видят только два тезиса.
Зарегистрироваться
Автор перенёс ИИ-агентов на Claude с зарубежной PaaS-платформы на московский VPS ради локального хранения персональных данных и большей устойчивости. Сам перенос занял день, но устранение инфраструктурных ограничений — ещё неделю.