DEV Community

Cover image for Moderacja czatu za pomocą OpenAI

Moderacja czatu za pomocą OpenAI

Każda aplikacja zawierająca czat w aplikacji musi w jakiś sposób regulować i moderować wiadomości, które użytkownicy mogą wymieniać. Ponieważ nie jest możliwe moderowanie wszystkich nieodpowiednich treści za pomocą ludzkich moderatorów, system moderacji musi być automatyczny. Ponieważ użytkownicy często próbują obejść moderację, uczenie maszynowe, generatywna sztuczna inteligencja i duże modele językowe (LLM) [oraz modele GPT, takie jak GPT-3 i GPT-4] są popularnymi sposobami moderowania treści.

Moderacja to złożony temat, a PubNub oferuje różne rozwiązania spełniające wszystkie przypadki użycia naszych deweloperów.

Punkt końcowy moderowania Open AI

W tym artykule przyjrzymy się OpenAI Moderation API, interfejsowi API REST, który wykorzystuje sztuczną inteligencję (AI) do określenia, czy dostarczony tekst zawiera potencjalnie szkodliwe terminy. Intencją API jest umożliwienie programistom filtrowania lub usuwania szkodliwych treści, a w chwili pisania tego tekstu jest on udostępniany bezpłatnie, choć obsługuje tylko język angielski.

Model stojący za Moderation API będzie kategoryzował dostarczony tekst w następujący sposób (zaczerpnięty z dokumentacji API):

  • Nienawiść: Treści, które wyrażają, podżegają lub promują nienawiść ze względu na rasę, płeć, pochodzenie etniczne, religię, narodowość, orientację seksualną, niepełnosprawność lub kastę. Nienawistne treści skierowane do grup nieobjętych ochroną (np. szachistów) stanowią nękanie.

  • Nienawiść / Groźby: Nienawistne treści, które obejmują również przemoc lub poważne obrażenia wobec grupy docelowej w oparciu o rasę, płeć, pochodzenie etniczne, religię, narodowość, orientację seksualną, status niepełnosprawności lub kastę.

  • Nękanie: Treści, które wyrażają, podżegają lub promują napastliwy język wobec dowolnej grupy docelowej.

  • Nękanie/groźby: Treści nękające, które obejmują również przemoc lub poważne obrażenia wobec dowolnej osoby.

  • Samookaleczenie: Treści, które promują, zachęcają lub przedstawiają akty samookaleczenia, takie jak samobójstwo, cięcie się i zaburzenia odżywiania.

  • Samookaleczenie / zamiar: Treści, w których osoba mówiąca wyraża, że angażuje się lub zamierza angażować się w akty samookaleczenia, takie jak samobójstwo, cięcie się i zaburzenia odżywiania.

  • Samookaleczenie / Instrukcje: Treści, które zachęcają do dokonywania aktów samookaleczenia, takich jak samobójstwo, cięcie się i zaburzenia odżywiania, lub które zawierają instrukcje lub porady dotyczące popełniania takich aktów.

  • Seksualne: Treści mające na celu wzbudzenie podniecenia seksualnego, takie jak opisy aktywności seksualnej lub promujące usługi seksualne (z wyłączeniem edukacji seksualnej i dobrego samopoczucia).

  • Seksualne / Nieletni: Treści o charakterze seksualnym przedstawiające osoby poniżej 18 roku życia.

  • Przemoc: Treści przedstawiające śmierć, przemoc lub obrażenia fizyczne.

  • Przemoc / Grafika: Treści przedstawiające śmierć, przemoc lub obrażenia fizyczne w szczegółach graficznych.

Wyniki są dostarczane w strukturze JSON w następujący sposób (ponownie zaczerpnięte z dokumentacji API):

{
  "id": "modr-XXXXX",
  "model": "text-moderation-007",
  "results": [
    {
      "flagged": true,
      "categories": {
        "sexual": false,
        "hate": false,
        "harassment": false,
        "self-harm": false,
        "sexual/minors": false,
        "hate/threatening": false,
        "violence/graphic": false,
        "self-harm/intent": false,
        "self-harm/instructions": false,
        "harassment/threatening": true,
        "violence": true
      },
      "category_scores": {
        //  Out of scope for this article
      }
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Wywoływanie Open AI Moderation API z PubNub

Integracja interfejsu API Moderation z dowolną aplikacją PubNub jest łatwa przy użyciu funkcji PubNub, postępując zgodnie z tym samouczkiem krok po kroku:

Funkcje umożliwiają przechwytywanie zdarzeń w czasie rzeczywistym zachodzących na platformie PubNub, takich jak wysyłane i odbierane wiadomości; można następnie napisać niestandardowy kod bezserwerowy w ramach tych funkcji, aby modyfikować, przekierowywać, rozszerzać lub filtrować wiadomości w razie potrzeby.

Będziesz musiał użyć typu zdarzenia "Before Publish or Fire"; ten typ funkcji zostanie wywołany przed dostarczeniem wiadomości i musi zakończyć wykonywanie, zanim wiadomość zostanie zwolniona, aby mogła zostać dostarczona do odbiorców. Dokumentacja PubNub zawiera więcej informacji i szczegółów, ale w skrócie: "Before Publish or Fire" to wywołanie synchroniczne, które może zmienić wiadomość lub jej ładunek.

Tworzenie funkcji PubNub

  1. Zaloguj się do portalu administracyjnego PubNub i wybierz aplikację oraz zestaw kluczy dla aplikacji, którą chcesz moderować.

  2. Wybierz "Functions", które można znaleźć w zakładce "Build".

  3. Wybierz "+ CREATE NEW MODULE" i nadaj modułowi nazwę i opis.

  4. Wybierz "+ CREATE NEW FUNCTION" i nadaj funkcji nazwę.

  5. Jako typ zdarzenia wybierz "Before Publish or Fire".

  6. Jako nazwę kanału wpisz * (w tym demo użyjemy *, ale twoja aplikacja może określić tutaj tylko kanały, które chcesz moderować).

Po utworzeniu funkcji PubNub musisz podać swój klucz API Open AI jako sekret.

  1. Wybierz "MOJE SEKRETY" i utwórz nowy klucz o nazwie "OPENAI_API_KEY".

  2. Wygenerujklucz API Open AI i upewnij się, że klucz ma dostęp do umiarkowanego API.

  3. Podaj wygenerowany klucz API do właśnie utworzonego sekretu funkcji PubNub.

Treść funkcji PubNub będzie wyglądać następująco:

const xhr  = require('xhr');
const vault = require('vault');

export default request => {
  if (request.message && request.message.text)
  {
    let messageText = request.message.text
    return getOpenaiApiKey().then(apiKey => {
      return openAIModeration(messageText).then(aiResponse => {
        //  Append the response to the message
        request.message.openAiModeration = aiResponse;
        //  If the message was harmful, you might also choose to report the message here.
        return request.ok();
      })
    })
  }
  return request.ok();
};

let OPENAI_API_KEY = null;
function getOpenaiApiKey() {
  // Use cached key
  if (OPENAI_API_KEY) {
      return new Promise(resolve => resolve(OPENAI_API_KEY));
  }
  // Fetch key from vault
  return vault.get("OPENAI_API_KEY").then(apikey => {
      OPENAI_API_KEY = apikey;
      return new Promise(resolve => resolve(OPENAI_API_KEY));
  });
}

function openAIModeration(messageText) {
  const url = 'https://api.openai.com/v1/moderations';
  const http_options = {
    'method': 'POST',
    'headers': {
      "Content-Type": "application/json",
      "Authorization": `Bearer ${OPENAI_API_KEY}`,
    },
    'body': JSON.stringify({
      "input": messageText
    }),
    timeout: 9500,
    retries: 0
  };
  return xhr.fetch(url, http_options)
    .then((resp) => {
      const body = JSON.parse(resp.body);
      return body;
    })
    .catch((err) => {
      console.log(err);
      return "Open AI Timed out";
    });
}
Enter fullscreen mode Exit fullscreen mode

Sama funkcja jest dość prosta:

Dla każdej otrzymanej wiadomości:

  • Przekaż ją do funkcji moderacji Open AI

  • Dołącz zwrócony obiekt moderacji jako nowy klucz do obiektu Message (JSON).

Zapisz funkcję i upewnij się, że moduł jest uruchomiony.

Opóźnienie

Funkcja PubNub, którą właśnie utworzyłeś, będzie wykonywana synchronicznie za każdym razem, gdy wiadomość zostanie wysłana, a wiadomość ta nie zostanie dostarczona, dopóki funkcja nie zakończy wykonywania. Ponieważ funkcja zawiera wywołanie zewnętrznego interfejsu API, opóźnienie dostarczenia będzie zależeć od szybkości powrotu wywołania API do Open AI, co jest poza kontrolą PubNub i może być dość wysokie.

Istnieje kilka sposobów na złagodzenie pogorszenia wrażeń użytkownika. Większość wdrożeń zapewnia natychmiastową informację zwrotną dla nadawcy, że wiadomość została wysłana, a następnie polega na potwierdzeniach odczytu, aby wskazać, że wiadomość została dostarczona (lub zgłoszona).

Aktualizacja aplikacji klienckiej

Rozważmy, co byłoby wymagane do obsługi ładunku moderacji w aplikacji przy użyciu Chat Demo, która jest aplikacją React wykorzystującą PubNub Chat SDK do pokazania większości funkcji typowej aplikacji czatu.

Skonfiguruj atrybut, aby śledzić, czy potencjalnie szkodliwa wiadomość powinna zostać wyświetlona:

 const [showHarmfulMessage, setShowHarmfulMessage] = useState(false)
Enter fullscreen mode Exit fullscreen mode

I dodać trochę logiki, aby domyślnie nie wyświetlać potencjalnie szkodliwej wiadomości, w tym przypadku w message.tsx:

{(
  !message.content.openAiModeration || 
  !message.content.openAiModeration?.results[0].flagged || 
  showHarmfulMessage) && (message.content.text
)}
{
  !showHarmfulMessage && 
  message.content.openAiModeration?.results[0].flagged && 
  <span>Message contains potentially harmful content 
    <span className="text-blue-400 cursor-pointer" 
    onClick={() => {setShowHarmfulMessage(true)}}>(Reveal)
    </span>
  </span>
}
Enter fullscreen mode Exit fullscreen mode

Chat Moderation with OpenAI - Image

Zauważ, że te zmiany nie są obecne w hostowanej wersji Chat Demo, ale ReadMe zawiera pełne instrukcje, jak ją zbudować i uruchomić z własnego zestawu kluczy.

Podsumowanie

Oto szybki i łatwy (oraz darmowy) sposób na dodanie zarówno moderacji, jak i analizy sentymentu do aplikacji przy użyciu Open AI.

Aby dowiedzieć się więcej o integracji Open AI z PubNub, zapoznaj się z innymi zasobami:

Zachęcamy do skontaktowania się z zespołem DevRel pod adresem devrel@pubnub.com lub z naszym zespołem pomocy technicznej w celu uzyskania pomocy w dowolnym aspekcie rozwoju PubNub.

Jak PubNub może ci pomóc?

Ten artykuł został pierwotnie opublikowany na PubNub.com

Nasza platforma pomaga programistom tworzyć, dostarczać i zarządzać interaktywnością w czasie rzeczywistym dla aplikacji internetowych, aplikacji mobilnych i urządzeń IoT.

Fundamentem naszej platformy jest największa w branży i najbardziej skalowalna sieć przesyłania wiadomości w czasie rzeczywistym. Dzięki ponad 15 punktom obecności na całym świecie obsługującym 800 milionów aktywnych użytkowników miesięcznie i niezawodności na poziomie 99,999%, nigdy nie będziesz musiał martwić się o przestoje, limity współbieżności lub jakiekolwiek opóźnienia spowodowane skokami ruchu.

Poznaj PubNub

Sprawdź Live Tour, aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut.

Rozpocznij konfigurację

Załóż konto PubNub, aby uzyskać natychmiastowy i bezpłatny dostęp do kluczy PubNub.

Rozpocznij

Dokumenty PubNub pozwolą Ci rozpocząć pracę, niezależnie od przypadku użycia lub zestawu SDK.

Top comments (0)