Tool‑calling и агенты: как дать LLM доступ к CRM и не устроить катастрофу
Пошаговый гайд для CTO/CEO: как включить tool‑calling и агентные сценарии в CRM без риска — allowlist, sandbox, лимиты, человеческое подтверждение, аудит, идемпотентность и защита от повторов.
AI Safety
Автор:Команда CrmAI
Опубликовано:
Представьте: ваш AI‑агент, которому вы поручили «просто разобрать почту», случайно удалил базу контактов или отправил всем VIP‑клиентам тестовое сообщение «Привет, я робот». Звучит как ночной кошмар CTO, верно?
Агенты с функцией tool‑calling (вызова инструментов) — это уже не просто чат-боты, которые отвечают текстом. Это полноценные сотрудники, у которых есть «руки»: они могут читать карточки в CRM, ставить задачи, бронировать встречи в календаре и даже писать клиентам. Но давать LLM прямой доступ к продакшену без контроля — всё равно что пустить стажёра в серверную с правами админа. В этой статье мы разберём архитектуру безопасности, которую мы используем в CrmAI, чтобы спать спокойно: allowlist, песочницы, лимиты, human‑in‑the‑loop и защиту от дублей. Всё, чтобы дать модели свободу действий, но оставить пульт управления у бизнеса.
Главные принципы: строим «периметр безопасности»
Безопасность агента — это не одна настройка, а слоеный пирог. Если откажет один слой, должен сработать следующий. Вот 8 принципов, на которых мы строим защиту:
Allowlist (Белый список): Запрещено всё, что не разрешено. Мы явно прописываем: «этому агенту можно делать create_task, но нельзя delete_contact». Никаких SELECT *.
Sandbox (Песочница): У агента свои собственные права доступа. Он не работает под правами админа. Более того, у нас разделены среды: dev, stage и prod. Агент учится в песочнице, где ничего нельзя сломать.
Лимиты (Rate Limiting): Не даем агенту «сойти с ума». Максимум 5 действий за диалог, таймауты на выполнение, бюджет токенов. Если агент зациклился — система его остановит.
Human‑in‑the‑loop (Человек в контуре): «Красная кнопка» для важных действий. Хочешь отправить письмо клиенту? Создай черновик, а менеджер нажмет «Отправить». Это золотой стандарт для начала работы.
Тотальный аудит: Каждое, абсолютно каждое действие логируется. tool_call_id, кто вызвал, с какими данными, что ответила система. Это нужно для разбора полетов.
Идемпотентность: Если агент случайно нажмет кнопку дважды (или случится сетевой сбой и повтор запроса), система должна понять, что это то же самое действие, и не создавать две одинаковые задачи.
Защита от повторов (Replay Protection): Чтобы злоумышленник не мог перехватить запрос агента и «проиграть» его снова. Используем подписи и временные метки.
Fail‑safe (Безопасный отказ): Если что-то пошло не так (отвалилась база, непонятный ответ) — агент должен остановиться и позвать человека, а не пытаться «починить» всё случайными действиями.
Эталонная архитектура: как это работает под капотом
Представьте работу агента как проход в элитный клуб. Есть фейсконтроль, охрана и менеджер зала. Вот как выглядит путь запроса:
Intent Router (Фейсконтроль). Сначала мы понимаем, чего хочет пользователь. «Хочу отчет» и «Удали всё» — это разные сценарии. Роутер направляет запрос в нужный коридор, где действуют свои правила.
Policy Guard (Охрана). Проверяем пропуск. Есть ли у этого пользователя права на это действие? Не превышен ли лимит запросов? Соответствует ли запрос региону данных?
Tool Gateway (Входная дверь). Это единственный путь к CRM. Гейтвей очищает данные (маскирует телефоны, если надо), проверяет, что инструмент в белом списке, и добавляет ключ идемпотентности.
Human Approval (Менеджер). Если действие критичное (удаление, изменение статуса сделки, отправка письма), запрос ставится на паузу. Агент говорит: «Я подготовил черновик, посмотрите?». Человек подтверждает.
Execution & Audit (Выполнение). Только теперь действие реально выполняется. Всё записывается: время, параметры, результат.
Post-check (Контроль качества). Система проверяет, что всё прошло нормально. Если агент начал сбоить (3 ошибки подряд) — звучит сирена (алерт админам).
Allowlist: что можно, а что нельзя
Главное правило: минимизация привилегий. Агенту нужно ровно столько прав, сколько требуется для задачи, и ни байтом больше.
Действие
Ограничения данных
Предохранители
Чтение сделки
Только сводка: бюджет, стадия, ответственный. Никаких паспортных данных клиента.
Лимит: не чаще 3 раз в минуту. Фильтр по региону менеджера.
Создать задачу
Тема, дата, связь со сделкой. Без возможности писать поэмы в описании.
Статус "Черновик" по умолчанию. Защита от дублей.
Создать лид
Имя, компания, контакты. Источник помечаем как "AI-Agent".
Проверка на дубли (дедупликация) по телефону/email перед созданием. Лимит: 5 лидов в сутки.
Отправить сообщение
Только выбор шаблона + подстановка переменных (Имя, Дата). Никакого "отсебятины".
Обязательное подтверждение человеком. Проверка на стоп-слова.
Назначить встречу
Только свободные слоты. Ссылка на Zoom.
Бронь (Hold) на 30 мин до подтверждения. Двойная проверка занятости слота в момент записи.
Sandbox и защита от «эффекта обезьяны с гранатой»
Даже самый умный AI может ошибиться. Мы страхуемся технически:
Раздельные ключи: У агента свои ключи API. Если они утекут — мы отзовем только их, не ломая работу всей интеграции.
Жесткие тайм-ауты: Инструмент должен отработать за 5-10 секунд. Если дольше — обрываем, чтобы не вешать систему.
Идемпотентность (ещё раз): Это важно. Мы генерируем уникальный хеш (ключ) для каждого намерения. Если агент попробует создать задачу с тем же ключом второй раз — CRM просто вернет "ОК" (или "Уже создано"), но не создаст копию.
Принцип «Need to know»: Агент не видит всю БД. Он видит только то, что вы ему разрешили видеть через API.
Audit-ready: Мы храним не просто "было действие", а "дифф": состояние ДО и состояние ПОСЛЕ. Это спасает при разборе инцидентов.
5 безопасных сценариев для старта
Не нужно сразу пытаться заменить весь отдел продаж. Начните с простых, изолированных задач:
1. SDR: Квалификация лида
Агент задает вопросы по BANT (Бюджет, Полномочия, Потребность, Сроки). В конце создает задачу менеджеру «Позвонить».
Безопасно: создает только черновик задачи.
Человек валидирует квалификацию.
2. Ассистент: Здоровье аккаунта
Агент мониторит CRM: давно не писали, просочилась задача, упала активность. Формирует отчет.
Read-only режим (только чтение).
Ничего не меняет в базе, только алертит.
3. Поддержка: Черновик ответа
Читает тикет, ищет решение в базе знаний, генерирует ответ.
Менеджер должен нажать «Отправить».
Автоматическое удаление перс. данных.
4. Календарь: Запись на встречу
Агент предлагает слоты. Клиент выбирает.
Работает только со свободными слотами.
Создает черновик приглашения.
5. Риск-менеджер: "Забытая сделка"
Если по сделке нет активности 14 дней — уведомляет в Slack.
Лимит 1 алерт в неделю (чтобы не спамить).
Логирование всех находок.
Чеклист готовности к проду
Прежде чем «открыть шлюзы», пройдитесь по этому списку. Если хоть один пункт «нет» — вы не готовы.
Роли назначены: Кто отвечает, если агент «накосячит»? Есть ли дежурный инженер?
Allowlist задокументирован: Вы точно знаете, какие методы доступны. Тесты на попытку вызова запрещенного метода проходят.
Метрики настроены: Вы видите не только «всё работает», но и качество (groundedness), задержки, количество отказов.
Алерты подключены: Если посыплются ошибки 500 — вы узнаете об этом раньше клиентов.
Есть «Красная кнопка»: Вы можете отключить tool-calling одной командой, не останавливая остальную работу CRM.
Команда обучена: Менеджеры знают, что такое «черновик от агента» и как его валидировать.
FAQ: Частые вопросы CTO
В: Можно ли дать агенту доступ к полной карточке клиента, «чтобы он всё знал»?
О: В проде — категорически нет. Это нарушение принципа минимальных привилегий и огромный риск утечки PII (персональных данных). Давайте только агрегированные поля (сегмент, чек, стадия) и последние 3 активности.
В: Как избежать «бесконечного цикла», когда два агента начнут общаться друг с другом?
О: Жесткие лимиты на количество шагов (steps) в одном диалоге. Плюс детектор циклов (если агент вызывает один и тот же tool с теми же параметрами подряд — стоп).
В: Как быть с законом о защите данных (Закон РК о персональных данных, GDPR)?
О: Логируйте всё. Не передавайте в LLM «сырые» данные, используйте псевдонимизацию или маскирование. В логах аудита не должно быть чувствительных данных в открытом виде.
В: Агент иногда «галлюцинирует» и вызывает инструмент неправильно. Что делать?
О: Внедрите шаг «Reasoning» перед действием. Пусть агент сначала напишет план: «Я хочу вызвать инструмент X, потому что...», и только потом вызывает. И используйте строгую типизацию параметров (Pydantic/Zod), чтобы отсекать мусор на входе.
Хотите спать спокойно?
Безопасность AI в CRM — это наша специализация. Мы поможем спроектировать архитектуру агентов так, чтобы они приносили пользу, а не головную боль. Allowlist, песочницы, аудит — настроим всё под ваш стек (Bitrix24, AmoCRM, Salesforce).