Использование функции AWS Lambda для модерации сообщений чата Amazon IVS

Использование функции AWS Lambda для модерации сообщений чата Amazon IVS

14 января 2023 г.

В недавней публикации мы рассмотрели, как добавить чат в прямую трансляцию Amazon Interactive Video Service (Amazon IVS). Чаты являются важной частью создания интерактивных потокового вещания, но, к сожалению, они сопряжены с неизбежной возможностью того, что некоторые пользователи могут публиковать бестактные или иным образом оскорбительные сообщения. В этом посте я покажу вам очень простой, но эффективный способ модерации ваших чатов Amazon IVS, чтобы общение было веселым и дружелюбным.

Представляем обработчики проверки модерации чата

Существует два способа модерации чата: ручной и автоматический. Ручной метод, который мы рассмотрим в следующем посте, требует, чтобы модератор (вещательная компания или другой назначенный пользователь) «пометил» сообщение чата для удаления с помощью одного из SDK Amazon IVS Chat документы. Пометка сообщения отправляет событие всем подключенным клиентам WebSocket, которое можно использовать для обновления или удаления оскорбительного сообщения. Автоматизированный метод, который мы рассмотрим в этом посте, позволяет нам использовать функцию AWS Lambda для выполнения замен в сообщении чата или отклонения доставки в зависимости от бизнес-потребностей приложения.

У ручной и автоматической модерации есть как плюсы, так и минусы. Одним из «за» ручной модерации является то, что, поскольку она требует вмешательства человека, у вас меньше шансов получить «ложные срабатывания», которые возможны при автоматической модерации. Еще одним положительным моментом ручного вмешательства является то, что люди, как правило, лучше, чем машины, определяют сообщения, которые следует модерировать. Однако недостатком ручной модерации является то, что сообщения могут быть удалены только после их публикации в чате. А еще, как говорится, «зубную пасту обратно в тюбик не засунешь». Другими словами, потенциально оскорбительные сообщения уже были просмотрены вашими пользователями — вы не можете заставить их «скрыть» сообщение, которое они, возможно, уже видели.

С другой стороны, автоматическая модерация дает нам возможность отклонять (или подвергать цензуре) вредоносные сообщения до того, как они будут опубликованы в чате. Но, как упоминалось выше, сообщения чата действительно трудно должным образом модерировать машиной с большой точностью. Вы когда-нибудь были в чате или оставляли комментарий к сообщению в блоге, который был абсолютно невинным, и он был отклонен или подвергнут неправильной цензуре? Это может быть очень неприятно для пользователя чата, который отправляет сообщение «Этот человек будет настоящим активом для нашей команды» только для того, чтобы увидеть «Этот человек будет настоящим ***этом для нашей команды», опубликованным в чате ( или просто отклонено)!

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

Теперь, когда мы поговорили об обоих возможных подходах, давайте углубимся в то, как вы можете использовать функцию AWS Lambda для выполнения автоматической модерации в чат-комнате Amazon IVS.

Добавление обработчика просмотра сообщений

При создании (или обновлении) комнаты чата Amazon IVS с помощью консоли Amazon IVS, интерфейса командной строки AWS или одного из SDK Amazon IVS мы можем указать функцию AWS Lambda, которая будет служить обработчиком проверки сообщений. В этом посте мы сосредоточимся на использовании консоли Amazon IVS, но вы можете обратиться к соответствующей документации, если хотите использовать другой метод. Чтобы добавить обработчик, прокрутите вниз до раздела* Обработчик просмотра сообщений* при создании или редактировании комнаты чата Amazon IVS. По умолчанию будет выбран вариант «Отключено».

Message review handler options

Давайте изменим это, выбрав Обрабатывать с помощью AWS Lambda.

Select Handle with AWS Lambda

Это дает нам еще несколько вариантов. Первый вариант, Резервный результат, позволяет нам выбрать, как мы хотим обрабатывать недопустимые ответы, ошибки и тайм-ауты от нашей функции-обработчика. Опять же, это зависит от потребностей вашего бизнеса. Если в этом случае вы предпочитаете отклонять сообщения, выберите Отклонить. Если вы выберете Разрешить, потенциально опасные сообщения могут публиковаться в вашей комнате чата. Именно здесь комбинированный подход может предоставить вам «резервный план», чтобы модератор мог по-прежнему удалять сообщения, которые по какой-либо причине пропущены обработчиком. Для этой демонстрации я выберу Разрешить. Далее нам нужно указать функцию AWS Lambda, которая будет действовать как наш обработчик. Для этой демонстрации мы создадим новую функцию через консоль, поэтому давайте нажмем Создать лямбда-функцию.

Create Lambda function button

Нажав на эту кнопку, мы перейдем к списку наших текущих функций. На этой странице нажмите Создать функцию.

Create function button

На следующей странице введите имя ivs-chat-moderation-function, оставьте значения по умолчанию для остальных параметров и нажмите Создать функцию.

Create function button

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

{
  "Content": "string",
  "MessageId": "string",
  "RoomArn": "string",
  "Attributes": {"string": "string"},
  "Sender": {
    "Attributes": { "string": "string" },
    "UserId": "string",
    "Ip": "string"
  }
}

Чтобы вернуть значение из нашей функции с помощью Node, мы должны использовать асинхронную функцию (см. документацию AWS Lambda для получения дополнительной информации). Возвращаемый объект должен иметь следующий формат:

{
 "Content": "string",
 "ReviewResult": "string",
 "Attributes": {"string": "string"},
}

Значение, которое мы устанавливаем для ReviewResult, должно быть ALLOW или DENY и будет определять, будет ли сообщение доставлено в комнату чата. Мы можем изменить Содержание сообщения по мере необходимости, то есть мы можем удалить или заменить потенциально оскорбительный или нечувствительный контент и РАЗРЕШИТЬ сообщение для публикации. Любые дополнительные атрибуты можно передать с помощью Attributes. Если вы решите отправить ReviewResult DENY, вы можете передать атрибут Reason, который будет использоваться для возврата 406 Not Acceptable ответ клиенту, включая значение, указанное в качестве Reason.

<цитата>

Обратитесь к чату. Документация обработчика просмотра сообщений для получения дополнительной информации, включая ограничения длины и допустимые значения.

Теперь мы можем изменить код функции, заменив «плохое слово» во входящем контенте на звездочки.

exports.handler = async (event) => {
  return {
    ReviewResult: 'ALLOW',
    Content: event.Content.replace(/bad word/ig, '*** ****'),
    Attributes: {
      username: event.Attributes.username
    }
  };
};

Вернемся в наш чат, обновим список функций, выберем новую функцию и нажмем Сохранить изменения.

Saving the chat room

Теперь мы можем опубликовать сообщение в нашем чате и посмотреть, что произойдет.

Posting a message with a bad word in it

Отлично! Наш обработчик сообщений в чате был правильно запущен, а наше «нецензурное слово» было удалено до того, как оно было опубликовано в чате.

На самом деле вам нужно использовать гораздо более сложное решение для замены вредоносного текста, чем простое регулярное выражение, которое я использую выше. Я протестировал библиотеку @2toad/profanity и обнаружил, что она отлично справляется с цензурой и идентификацией ненормативной лексики. слов во входящем сообщении. Не стесняйтесь использовать любое решение, которое вам подходит, но имейте в виду, что ваша функция должна возвращать ответ в течение 200 мс, иначе время ожидания истечет, поэтому о сторонних вызовах API не может быть и речи.

Вот пример обработчика, использующего библиотеку @2toad/profanity для цензуры вредоносных слов:

exports.censorChat = async (event) => {
  console.log('censorChat:', JSON.stringify(event, null, 2));
  return {
    ReviewResult: 'ALLOW',
    Content: profanity.censor(event.Content),
    Attributes: {
      username: event.Attributes.username
    }
  };
};

И пример отклонения сообщения вместо цензуры.

exports.rejectInappropriateChat = async (event) => {
  console.log('rejectInappropriateChat:', JSON.stringify(event, null, 2));
  const profane = profanity.exists(event.Content);
  return {
    ReviewResult: profane ? 'DENY' : 'ALLOW',
    Content: profane ? '' : event.Content,
    Attributes: {
      username: event.Attributes.username
    }
  };
};

Обзор

В этом посте мы узнали о двух разных подходах к модерации сообщений чата: ручном и автоматическом. Затем мы создали функцию AWS Lambda и связали ее с комнатой чата Amazon IVS для выполнения автоматической модерации чата. В следующем посте мы рассмотрим, как можно использовать SDK Amazon IVS Chat для ручной модерации сообщений чата. Если у вас есть какие-либо вопросы, оставьте комментарий или свяжитесь со мной в Twitter.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE