История одной кнопки. Внедряем AI с пользой, быстро и без data science

в 12:19, , рубрики: AI, ai-решение, анкета, маркетплейс, нейросеть, промптинг, техписы, форма

Если вы хоть раз работали с такими сервисами, как Notion, Figma или Miro, то наверняка замечали (а может, и использовали) кнопку со звездочками и надписью «Create with AI». Она генерирует презентации, планы встреч, схемы и всячески упрощает жизнь пользователя. Но может ли такая фича помочь в решении более глобальных задач? Например, развитии сервиса или бизнес-процессов? Эту гипотезу мы и решили проверить. 

Меня зовут Даша Ронжина, я технический писатель Маркетплейса Cloud.ru. Наша команда внедрила нейросеть, чтобы помочь вендорам презентовать свои продукты на нашей витрине. В статье делюсь опытом, как можно быстро внедрить AI-решение путем промптинга, без датасетов и обучения модели. А также рассказываю, какие этапы мы прошли от идеи до выхода в прод. 

Заглядывайте под кат — если в вашем продукте тоже есть анкеты или формы, будет особенно интересно.

История одной кнопки. Внедряем AI с пользой, быстро и без data science - 1

Что такое Маркетплейс и при чем тут AI

Маркетплейс — это витрина цифровых решений. Наша команда размещает и поддерживает образы виртуальных машин с операционными системами и готовыми стеками для разработки, ML-модели, датасеты, плагины Kubernetes и сервисы, которые можно развернуть в облаке Cloud.ru.

Так выглядит витрина Маркетплейса на сайте 

Так выглядит витрина Маркетплейса на сайте 

На витрине можно:

  • выбрать нужный сервис, подключить и использовать для своих задач в облаке;

  • присоединиться к партнерской программе Маркетплейса, публиковать решения и получать вознаграждение.

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

Анкета сервиса, на основе которой собирается карточка для витрины

Анкета сервиса, на основе которой собирается карточка для витрины

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

История одной кнопки. Внедряем AI с пользой, быстро и без data science - 4

Этап 1. Прикинули механику

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

  • передают информацию об общем назначении и возможностях сервиса,

  • не требуют глубоких технических или уникальных знаний о сервисе.

Для таких полей нейросети будет проще составить релевантный текст, а количество ошибок снизится. Логичный вопрос: почему? Чтобы создать описание сервиса, в большинстве случаев достаточно почитать сайт вендора (нужны общие, поверхностные знания). А чтобы написать инструкцию по подключению, нужно зарегистрироваться в сервисе, почитать документацию, понять пользовательский путь, пройти по нему в интерфейсе (нужны технические знания и более глубокая экспертиза). Нейронка может почитать сайт, но не может потыкать интерфейс. Поэтому нейросети можно доверить описание сервиса, но не стоит доверять написание инструкций.

В итоге мы выбрали три поля, которые потенциально могла бы заполнять нейросеть: «Краткое описание», «Развернутое описание сервиса», «Преимущества сервиса». 

После выбора полей стали продумывать, как добавить AI в анкету и заставить работать. Самым простым и быстрым решением (а мы искали именно такое) оказалось — подключиться к существующей модели по API, написать промпты и положить их «под капот» кнопки. Пример такой реализации показала на схеме:

История одной кнопки. Внедряем AI с пользой, быстро и без data science - 5

Также решили, что работа с кнопкой будет устроена вот так:

  • Кнопка становится кликабельной, если заполнено поле «Название сервиса». Если поле пустое, кнопка некликабельна, т. к. без названия сервиса модель не сможет выдать для него описание.

  • Когда нажимаешь кнопку, срабатывает заданный промпт, в который подставляется значение из поля «Название сервиса». В промптах оно обозначено как {product_name}.

  • Промпт уже учитывает требования к содержанию контента, оформлению и количеству символов.

Дальше нас ждало самое интересное — промпт-инжиниринг.

История одной кнопки. Внедряем AI с пользой, быстро и без data science - 6

Этап 2. Составили и протестировали промпты

Мы выбрали две языковые модели, которые рассматривали в качестве кандидатов на внедрение. Конечно, можно было проанализировать рынок, выделить самую популярную модель и сразу приступить к промптингу в ней. Но мы пошли чуть дальше: решили посмотреть, как отличается ответ модели, которая по большей части обучалась на англоязычном датасете, от ответа модели, которая больше обучалась на русскоязычном датасете. Это было важно для нас, потому что на витрине маркетплейса размещаются как отечественные сервисы, так и зарубежные.

Сравнивали модели, которые обучались на разных объемах русско- и англоязычных данных

Сравнивали модели, которые обучались на разных объемах русско- и англоязычных данных

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

  • 15 вариантов промптов для тестирования в моделях,

  • {product_name} — названия существующих продуктов для подстановки в промпты,

  • ответы модели A и модели B на тестируемые промпты.

В результате получилось три сводных таблицы — по одной для каждого поля.

Пример таблицы с текстами для подстановки в поле «Короткое описание сервиса»

Пример таблицы с текстами для подстановки в поле «Короткое описание сервиса»

Когда мы завершили подготовку, осталось проанализировать качество ответов и определиться с моделью. 

Этап 3. Провели исследование и выбрали модель

Чтобы проверить качество ответов и финально выбрать модель для внедрения, провели коридорное исследование. Взяли описания пяти сервисов, которые выдали модели А и В.
И попросили коллег из разных команд сравнить их и оценить. Ниже пример задания из исследования.

Пример описания, где ответы моделей оценили одинаково

Пример описания, где ответы моделей оценили одинаково

В результате голосование завершилось со счетом 3:1 в пользу модели A и мы перешли непосредственно к подключению.

Этап 4. Подключились к gRPC API модели

У модели, которую мы выбрали, есть подробная документация, где описаны возможные интеграции через REST и gRPC. Наши разработчики изучили доку и реализовали подключение к модели через gRPC, поскольку это основной способ взаимодействия между сервисами внутренней архитектуры. Вот пример запроса и ответа в Postman:

По кнопке мы передаем название сервиса и промпт, а в ответ получаем описание сервиса

По кнопке мы передаем название сервиса и промпт, а в ответ получаем описание сервиса

В результате мы интегрировали кнопку в анкете с выбранной моделью и спрятали промпт «под капот». В завершение протестировали интеграцию на тестовом стенде и убедились, что модель отвечает корректно.

Результат

В анкете рядом с полями теперь есть кнопка «Ответ AI», которая позволяет быстро сгенерировать текст для описания сервиса. Когда пользователь заполняет название сервиса и нажимает кнопку, под капотом срабатывает промпт и моделька выдает контент с описанием сервиса. Если название не указано, мы выводим подсказку.

Когда контент сгенерирован, можно нажать «Применить ответ» и текст подставится в поле. Затем его можно отредактировать, оформить через маркдаун, заменить следующим вариантом от AI или удалить. 

Пример генерации описания для Nginx в поле «Краткое описание»

Пример генерации описания для Nginx в поле «Краткое описание»
Пример генерации описания для Nginx в поле «Развернутое описание сервиса»

Пример генерации описания для Nginx в поле «Развернутое описание сервиса»
Пример генерации описания для Nginx в поле «Преимущества сервиса»

Пример генерации описания для Nginx в поле «Преимущества сервиса»

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

Если у вас тоже есть анкеты или формы, можно повторить наш путь, адаптировать промпты под ваши задачи и добавить кнопку с AI в помощь пользователям. На этот случай ниже собрала несколько моментов, которые стоит учесть при работе с промптами и публичным API.

Уроки, выводы и рекомендации

Может показаться, что все прошло гладко: проблема, механика, промпты, исследование, подключение. И вот — идеальное решение в проде, пользователи счастливы, метрики полетели вверх. По факту сложности были, и основная их часть таилась в промптах и особенностях публичного API модели. Ниже выделила несколько основных «граблей» и нюансов, которые стоит учесть перед началом промпт-инжиниринга.

История одной кнопки. Внедряем AI с пользой, быстро и без data science - 14

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

Нейросеть может игнорировать часть требований в промпте. Иногда для промптов приходится долго подбирать формулировки, тестировать разную структуру, жалобно просить «пожалуйста, не добавляй двоеточия» или яро требовать «!!! не игнорируй». Лучше заложить на подбор промптов большую часть времени, потому что модели ведут себя по-разному и рабочие в формулировки в одном запросе могут совсем не работать в другом.

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

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

Интересное в блоге:

Автор: DashBash

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js