«Пришлите выгрузку CRM, иначе нам не на чем проверять интеграцию». После этой просьбы проект часто замирает. Заказчик не хочет передавать переписку и сведения о клиентах. Разработчик опасается, что на вымышленных примерах всё заработает, а реальные обращения сразу сломают сценарий. Обе стороны видят проблему, но обсуждают её как выбор между полной выгрузкой и работой вслепую.
Для значительной части разработки можно подготовить отдельную предметную среду: придуманные компании, связанные заказы, документы, сообщения и управляемые ответы внешних сервисов. Разберём, как сделать такой набор полезным для интегратора и где заканчиваются его возможности. Все компании и ситуации в примерах ниже условные.

Синтетические данные — сведения, созданные специально для выбранной задачи. В нашем случае они нужны для разработки интеграции ИИ, а не для обучения базовой модели или исследования клиентского рынка. Это различие определяет требования: важнее сохранить отношения между объектами и трудные условия работы, чем воспроизвести все особенности настоящей базы.
Допустим, агент принимает запрос на обслуживание, находит оборудование клиента и создаёт заявку. Для проверки нужны организация, контакт, единица оборудования, договор и входящее сообщение. Если агент ещё ищет условия обслуживания в документах, потребуется вымышленный договор с нужным пунктом. Случайная таблица из тысячи фамилий эту задачу не решит.
Запишите несколько проверяемых результатов: правильное оборудование найдено, чужой объект не выбран, повторная заявка распознана, сообщение без номера требует уточнения. Под каждый результат создаётся небольшая история. Такой подход помогает обсуждать данные через рабочие ситуации, а не через спор о размере выгрузки.
Если в настоящей базе заменить фамилии и названия компаний, получится преобразованная копия исходных записей. В ней могут остаться адреса в комментариях, редкие комбинации событий, суммы, документы и фрагменты переписки. Сам факт замены имён не даёт оснований считать набор полностью безопасным для любой передачи.
Для стартовой разработки проще создавать объекты заново по описанной схеме. Бизнес сообщает структуру сущностей и правила: у компании несколько площадок, договор действует на определённое оборудование, контакт может представлять несколько подразделений. Разработчик придумывает экземпляры, которые этим правилам подчиняются. Реальные клиентские истории для этого обычно не нужны.
Если позже понадобится перенести особенности производственного потока, решение принимают отдельно. Определяют, какие сведения действительно нужны, кому они доступны и как будет проверен подготовленный материал. Не называйте любой обработанный файл синтетическим: точное название помогает заказчику понимать, что именно команда получила и откуда оно взялось.
Представим вымышленную компанию «Контурный цех». У неё две площадки и три устройства. На первое распространяется действующий договор, второе обслуживается по отдельной заявке, третье уже передано другой организации. Один сотрудник пишет за обе площадки, но не вправе согласовывать работы по любому устройству.
Этой истории достаточно для нескольких содержательных проверок. Агент должен различать организацию, площадку и оборудование, учитывать состояние договора и понимать полномочия контакта. Если все названия уникальны и все документы действуют, важные ошибки просто не проявятся. Добавьте похожие названия устройств и старый адрес площадки, сохранив однозначные идентификаторы.
Создавайте записи в зависимости друг от друга. Сначала организация, затем её площадки, потом оборудование и обращения. У каждого внешнего ключа должен быть существующий объект, кроме специально помеченных примеров нарушенной связи. Иначе тест будет падать из-за случайно испорченного набора, а команда потратит время на поиск несуществующей ошибки интеграции.
У синтетической среды есть собственные правила целостности. Заказ ссылается на клиента, позиция заказа — на товар, документ — на конкретную редакцию условий. Эти правила полезно проверить до запуска агента. Иначе нельзя понять, кто ошибся: система или автор примера.
Намеренные нарушения оформляйте отдельно. В одном сценарии ссылка ведёт на удалённую запись. В другом два контакта имеют одинаковое имя. В третьем письмо ссылается на заказ, который принадлежит другой организации. У каждого случая должны быть название, причина включения и ожидаемое поведение агента.
Не пытайтесь сделать все данные грязными одновременно. Если в одном примере неверны адрес, договор, идентификатор и права, неясно, какую ошибку система должна обнаружить первой. Начните с одной сложности на сценарий. Комбинации добавляйте позже, когда понятны отдельные реакции. Это делает неудачный прогон объяснимым, а исправление — проверяемым.

Библиотека Faker помогает создавать вымышленные имена, адреса и другие типовые значения. Её документация описывает воспроизводимую генерацию через seed и предупреждает, что обновления библиотеки могут менять результаты: для точного повторения нужно закреплять версию. Это удобно, когда разработчику требуется одинаковый набор в нескольких окружениях.
Однако генератор имён не знает условий вашего договора. Он не обеспечит правильную связь между правом на обслуживание и конкретным устройством, пока команда не задаст эту логику. Поэтому полезно разделить основу набора и дополнительный объём. Основу составляют вручную спроектированные истории, объём создаётся генератором по установленным правилам.
Например, пять важных сценариев остаются неизменными, а вокруг них добавляются сотни обычных объектов. Так проверяют, способен ли поиск выбрать нужное устройство среди похожих. Числа здесь условные: масштаб определяется задачей. Большой файл сам по себе не делает проверку сильнее. Иногда одна продуманная неоднозначность полезнее десяти тысяч одинаково простых записей.
Правдоподобный адрес электронной почты, сгенерированный случайно, может существовать на самом деле. То же относится к телефонному номеру. Поэтому вымышленные данные не должны автоматически получать доступ к настоящей отправке писем, сообщений и звонков.
Для документационных примеров IANA поддерживает зарезервированные домены, в том числе example.com и example.org. Их удобно использовать в видимых адресах учебных записей. Но выбранный домен не заменяет управление исходящими действиями. Тестовый почтовый шлюз должен принимать сообщения внутрь стенда, а телефонный сценарий — работать с заглушкой или специально контролируемым тестовым каналом.
Зафиксируйте разрешённые направления отправки на уровне интеграции. Отдельно проверьте вложения, уведомления ответственным и сообщения об ошибке: они тоже могут уходить наружу. Видимая надпись «тест» на карточке помогает человеку, но не блокирует работающий коннектор. Полезное упражнение перед первым запуском — показать, куда фактически попадёт каждое исходящее действие агента.
Наша система сама подберет вам исполнителей на услуги, связанные с разработкой сайта или приложения, поисковой оптимизацией, контекстной рекламой, маркетингом, SMM и PR.
Заполнить заявку
13795 тендеров
проведено за восемь лет работы нашего сайта.
Если агент читает базу знаний, таблиц недостаточно. Подготовьте несколько коротких вымышленных документов: действующие условия, отменённую редакцию и приложение для отдельной площадки. Пусть они используют одинаковые термины, но имеют разные области действия. Так можно проверить выбор источника без передачи настоящих договоров.
Не ограничивайтесь идеально оформленным текстом. Один документ может содержать таблицу, другой — примечание в конце, третий — исправление к предыдущему правилу. При этом автор набора должен точно знать правильный результат. Нечитаемый скан без установленного ответа проверяет терпение разработчика, а не качество агента.
Языковую модель можно попросить подготовить варианты писем на основе сценария. Например, клиент путает название модели или ссылается на прошлое обращение. Но итоговый пример проверяет человек: условия должны оставаться согласованными с карточками. Если модель случайно добавила новый номер заказа, этот факт либо становится частью сценария, либо удаляется.
Каждому значимому сценарию нужен эталон поведения. Это не обязательно точный текст ответа. Чаще достаточно указать выбранный объект, разрешённое действие, необходимое уточнение и изменения, которых быть не должно. Формулировки агента могут различаться, пока сохраняется смысл операции.
Для случая с одинаковыми именами ожидаемый результат может выглядеть так: агент запрашивает номер заказа, не выбирает клиента по одному имени и не раскрывает сведения о второй компании. Для истёкшего договора — сообщает о необходимости уточнить условия и не создаёт заявку с неподтверждённым признаком бесплатного обслуживания.
Эталон согласовывает владелец бизнес-процесса. Разработчик может проверить структуру запроса, но не должен самостоятельно решать, кому положено обслуживание. Если стороны не могут договориться об ожидаемом результате, проблему нужно разрешить до оценки агента. Синтетическая история в этом случае полезна как конкретный предмет обсуждения, а не только как технический тест.
Даже хороший набор записей не покажет, как интеграция переживает задержку ответа. Нужна управляемая замена внешнего API, которая возвращает заранее выбранный результат. Документация WireMock описывает настройку задержек и имитацию разных сбоев. Это позволяет создавать трудные условия по команде, а не ждать их случайного появления.
Для выбранного сценария подготовьте обычный ответ, отсутствие объекта, отказ в доступе и слишком долгое ожидание. Если операция меняет данные, отдельно смоделируйте ситуацию, когда действие выполнено, но подтверждение не дошло. Ожидаемый результат здесь особенно важно определить заранее: повторная отправка может создать вторую заявку.
Не превращайте заглушку в фантастическую систему, которая всегда отвечает удобным для разработчика способом. Она должна повторять согласованный контракт реального сервиса: обязательные поля, коды состояний и особенности идентификаторов. Если эти сведения ещё не получены, пометьте предположение. Иначе успешная работа на стенде создаст ложное впечатление готовой интеграции.
Вымышленная компания не обязана повторять конкретного клиента, но её записи должны быть возможными в вашем процессе. Если обычный заказ содержит несколько позиций, а на стенде всегда одну, ошибка суммирования останется незамеченной. Если в работе встречаются разные часовые пояса, одинаковое время во всех событиях скроет проблемы определения последовательности.
Попросите сотрудника бизнеса посмотреть на набор без запуска ИИ. Пусть он назовёт невозможные сочетания и недостающие обычные случаи. Для этого не нужна передача базы: достаточно проверить правила и несколько придуманных историй. Особенно полезны ограничения вроде допустимого количества активных договоров, связи валюты с суммой и порядка изменения статусов.
При этом не выдавайте выбранные пропорции за статистику клиентов. Если половина учебных обращений содержит исключение, это решение автора проверки, а не утверждение о реальном потоке. Частоту сложных случаев можно намеренно увеличить ради диагностики. В отчёте стоит прямо указать такой принцип отбора, чтобы результат не превратился в необоснованный прогноз качества.
Сегодня тест проходит, завтра падает, хотя разработчик не менял код. Причина может оказаться в новой версии генератора, изменившейся текущей дате или исправленном документе. Поэтому полезный синтетический набор должен быть воспроизводимым целиком, а не только примерно похожим на вчерашний.
Сохраняйте сценарии, исходное число генератора, версии зависимостей, правила создания связей и подготовленные файлы. Для проверок сроков используйте фиксированную дату сценария или управляемые часы стенда. Иначе договор, который вчера был действующим, завтра естественно станет просроченным и изменит ожидаемый ответ.
После прогона среду нужно возвращать в исходное состояние. Созданная заявка не должна случайно влиять на следующий тест, если это не задумано специально. Хорошее описание набора отвечает на три вопроса: как его собрать, как проверить целостность и как восстановить после выполнения. Это экономит время при передаче проекта другому специалисту.
Синтетический стенд хорошо проверяет известные условия и связи. Но он не показывает автоматически, какие обращения чаще приходят в реальном бизнесе, насколько разнообразно люди формулируют проблему и какие особенности документов команда пока не учла. Успех на вымышленном наборе не равен измеренному качеству на производственном потоке.
Поэтому результаты стоит разделить. Для разработанных сценариев фиксируется проверенное поведение. Для реального распределения запросов остаётся отдельная задача оценки на подходящих материалах и в согласованном режиме. На этом этапе могут понадобиться специально отобранные примеры, подготовленные с учётом требований заказчика к доступу и содержанию.
Обнаруженные новые ситуации затем переводят в синтетические истории, если их смысл можно воспроизвести без исходных сведений. Так набор постепенно становится богаче. В нём сохраняется причина ошибки и проверка исправления, а конкретная клиентская переписка не превращается в обязательную зависимость каждого разработчика.
Начните с одной операции и короткой встречи бизнеса с интегратором. Перечислите участвующие сущности, выберите несколько нормальных и спорных ситуаций, согласуйте ожидаемые действия. Затем создайте связанные записи, документы и варианты входящих сообщений. Проверьте набор вручную до подключения агента.
Следующий шаг — закрыть настоящие исходящие каналы и подключить управляемые ответы сервисов. Выполните сценарии, сохраните результаты и исправьте неоднозначные эталоны. Только после этого имеет смысл увеличивать объём данных. Такой порядок помогает не путать проблемы бизнес-логики, ошибки набора и дефекты интеграции.
На ближайшей встрече вместо просьбы «дайте всю базу» предложите заказчику составить одну вымышленную историю с неудобным исключением. Если команда сможет однозначно описать её объекты, документы и правильный результат, появится основа рабочего стенда. Если не сможет, станет видно, какие решения и сведения нужны проекту в первую очередь.