DEV Community

Cover image for Chat-Moderation mit OpenAI

Chat-Moderation mit OpenAI

Jede Anwendung, die einen In-App-Chat enthält, benötigt eine Möglichkeit, die Nachrichten, die Nutzer austauschen können, zu regulieren und zu moderieren. Da es nicht möglich ist, alle unangemessenen Inhalte durch menschliche Moderatoren zu moderieren, muss das Moderationssystem automatisch sein. Da Nutzer häufig versuchen werden, die Moderation zu umgehen, sind maschinelles Lernen, generative KI und große Sprachmodelle (LLMs) [und GPT-Modelle wie GPT-3 und GPT-4] beliebte Methoden zur Moderation von Inhalten.

Moderation ist ein komplexes Thema, und PubNub bietet verschiedene Lösungen, um alle Anwendungsfälle unserer Entwickler zu erfüllen.

Der Open AI Moderationsendpunkt

Dieser Artikel befasst sich mit der Moderation API von OpenAI, einer REST-API, die mithilfe von künstlicher Intelligenz (KI) feststellt, ob der bereitgestellte Text potenziell schädliche Begriffe enthält. Die API soll es Entwicklern ermöglichen, schädliche Inhalte zu filtern oder zu entfernen, und wird zum Zeitpunkt der Erstellung dieses Artikels kostenlos zur Verfügung gestellt, unterstützt jedoch nur Englisch.

Das Modell hinter der Moderations-API kategorisiert den bereitgestellten Text wie folgt (aus der API-Dokumentation):

  • Hass: Inhalte, die Hass aufgrund von Rasse, Geschlecht, ethnischer Zugehörigkeit, Religion, Nationalität, sexueller Orientierung, Behinderungsstatus oder Kaste ausdrücken, dazu auffordern oder fördern. Hassvolle Inhalte, die sich gegen nicht geschützte Gruppen richten (z. B. Schachspieler), gelten als Belästigung.

  • Hass / Bedrohung: Hassvolle Inhalte, die auch Gewalt oder ernsthaften Schaden gegenüber der Zielgruppe aufgrund von Rasse, Geschlecht, ethnischer Herkunft, Religion, Nationalität, sexueller Orientierung, Behinderung oder Kaste beinhalten.

  • Belästigung: Inhalte, die eine belästigende Sprache gegenüber einer beliebigen Zielperson ausdrücken, dazu auffordern oder fördern.

  • Belästigung/Bedrohung: Belästigende Inhalte, die auch Gewalt oder ernsthaften Schaden für eine beliebige Zielgruppe beinhalten.

  • Selbstbeschädigung: Inhalte, die zu selbstbeschädigenden Handlungen wie Selbstmord, Schneiden und Essstörungen auffordern, ermutigen oder diese darstellen.

  • Selbstbeschädigung/Absicht: Inhalte, in denen der Sprecher zum Ausdruck bringt, dass er selbstschädigende Handlungen wie Selbstmord, Schneiden und Essstörungen vornimmt oder vorhat, diese vorzunehmen.

  • Selbstbeschädigung/Anweisungen: Inhalte, die zu selbstschädigenden Handlungen wie Selbstmord, Schneiden und Essstörungen ermutigen oder Anweisungen oder Ratschläge geben, wie man solche Handlungen vornimmt.

  • Sexuell: Inhalte, die sexuelle Erregung hervorrufen sollen, wie z. B. die Beschreibung sexueller Aktivitäten, oder die für sexuelle Dienstleistungen werben (ausgenommen Sexualerziehung und Wellness).

  • Sexuell / Minderjährige: Sexuelle Inhalte, die eine Person unter 18 Jahren zeigen.

  • Gewalttätigkeit: Inhalte, in denen Tod, Gewalt oder körperliche Verletzungen dargestellt werden.

  • Gewalt/Grafik: Inhalte, die Tod, Gewalt oder Körperverletzung in grafischen Details darstellen.

Die Ergebnisse werden in einer JSON-Struktur wie folgt bereitgestellt (wiederum aus der API-Dokumentation entnommen):

{
  "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

Aufrufen der Open AI Moderation API von PubNub

Die*Integration der Moderations-API in eine beliebige PubNub-Anwendung ist mit Hilfe von PubNub-Funktionen ganz einfach*, wenn Sie dieser Schritt-für-Schritt-Anleitung folgen:

Funktionen ermöglichen es Ihnen, Echtzeit-Ereignisse auf der PubNub-Plattform zu erfassen, z. B. gesendete und empfangene Nachrichten; Sie können dann innerhalb dieser Funktionen benutzerdefinierten serverlosen Code schreiben, um Nachrichten nach Bedarf zu ändern, umzuleiten, zu ergänzen oder zu filtern.

Sie müssen den Ereignistyp "Before Publish or Fire" verwenden; dieser Funktionstyp wird aufgerufen , bevor die Nachricht zugestellt wird, und muss seine Ausführung beenden, bevor die Nachricht zur Zustellung an die Empfänger freigegeben wird. Die PubNub-Dokumentation bietet weitere Hintergründe und Details, aber zusammenfassend lässt sich sagen: "Before Publish or Fire" ist ein synchroner Aufruf, der eine Nachricht oder ihre Nutzlast ändern kann .

Erstellen Sie die PubNub-Funktion

  1. Loggen Sie sich in das PubNub-Administrationsportal ein und wählen Sie die Anwendung und das Keyset für die App aus, die Sie moderieren möchten.

  2. Wählen Sie "Funktionen", die Sie unter dem Reiter "Erstellen" finden.

  3. Wählen Sie '+ CREATE NEW MODULE' und geben Sie dem Modul einen Namen und eine Beschreibung

  4. Wählen Sie "+ NEUE FUNKTION ERSTELLEN" und geben Sie der Funktion einen Namen.

  5. Wählen Sie für den Ereignistyp "Vor Veröffentlichung oder Feuer".

  6. Geben Sie für den Kanalnamen * ein (in dieser Demo wird * verwendet, aber Ihre Anwendung kann hier nur die Kanäle angeben, die Sie moderieren möchten)

Nachdem Sie die PubNub-Funktion erstellt haben, müssen Sie Ihren Open AI API-Schlüssel als Geheimnis angeben.

  1. Wählen Sie 'MY SECRETS' und erstellen Sie einen neuen Schlüssel mit dem Namen 'OPENAI_API_KEY'.

  2. Generieren Sie einen Open AI API-Schlüssel und stellen Sie sicher, dass dieser Schlüssel Zugriff auf die moderate API hat.

  3. Geben Sie den generierten API-Schlüssel an das gerade erstellte PubNub-Funktionsgeheimnis weiter.

Der Körper der PubNub-Funktion sieht wie folgt aus:

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

Die Funktion selbst ist recht einfach:

Für jede empfangene Nachricht:

  • Übergeben Sie sie an die Open AI-Moderationsfunktion

  • Fügen Sie das zurückgegebene Moderationsobjekt als neuen Schlüssel an das Message (JSON) Objekt an.

Speichern Sie Ihre Funktion und stellen Sie sicher, dass Ihr Modul gestartet ist.

Latenzzeit

Die PubNub-Funktion, die Sie soeben erstellt haben, wird jedes Mal synchron ausgeführt, wenn eine Nachricht gesendet wird, und die Nachricht wird erst ausgeliefert, wenn die Funktion fertig ausgeführt ist. Da die Funktion einen Aufruf an eine externe API enthält, hängt die Auslieferungslatenz davon ab, wie schnell der API-Aufruf an Open AI zurückkommt, was außerhalb der Kontrolle von PubNub liegt und ziemlich hoch sein kann.

Es gibt mehrere Möglichkeiten, die Beeinträchtigung des Benutzererlebnisses abzumildern. Die meisten Implementierungen geben dem Absender eine sofortige Rückmeldung, dass die Nachricht gesendet wurde und verlassen sich dann auf Lesebestätigungen, um anzuzeigen, dass die Nachricht zugestellt (oder gemeldet) wurde.

Aktualisieren der Client-Anwendung

Betrachten wir, was erforderlich wäre, um den Moderations-Payload innerhalb Ihrer Anwendung zu handhaben, indem wir die Chat-Demo verwenden, die eine React-Anwendung ist, die das PubNub Chat SDK verwendet, um die meisten Funktionen einer typischen Chat-Anwendung zu zeigen.

Richten Sie ein Attribut ein, um zu verfolgen, ob eine potenziell schädliche Nachricht angezeigt werden soll oder nicht:

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

Und fügen Sie eine Logik hinzu, um eine potenziell schädliche Nachricht standardmäßig nicht anzuzeigen, in diesem Fall in 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

Beachten Sie, dass diese Änderungen nicht in der gehosteten Version der Chat-Demo enthalten sind, aber die ReadMe enthält vollständige Anweisungen, um sie selbst zu erstellen und von Ihrem eigenen Keyset aus auszuführen.

Einpacken

Und da haben Sie es, eine schnelle und einfache (und kostenlose) Möglichkeit, Ihrer Anwendung mit Open AI sowohl Moderation als auch Sentiment-Analyse hinzuzufügen.

Um mehr über die Integration von Open AI mit PubNub zu erfahren, schauen Sie sich diese anderen Ressourcen an:

Wenden Sie sich an das DevRel-Team unter devrel@pubnub.com oder an unser Support-Team, wenn Sie Hilfe zu einem beliebigen Aspekt Ihrer PubNub-Entwicklung benötigen.

Wie kann PubNub Ihnen helfen?

Dieser Artikel wurde ursprünglich auf PubNub.com veröffentlicht.

Unsere Plattform hilft Entwicklern bei der Erstellung, Bereitstellung und Verwaltung von Echtzeit-Interaktivität für Webanwendungen, mobile Anwendungen und IoT-Geräte.

Die Grundlage unserer Plattform ist das größte und am besten skalierbare Echtzeit-Edge-Messaging-Netzwerk der Branche. Mit über 15 Points-of-Presence weltweit, die 800 Millionen monatlich aktive Nutzer unterstützen, und einer Zuverlässigkeit von 99,999 % müssen Sie sich keine Sorgen über Ausfälle, Gleichzeitigkeitsgrenzen oder Latenzprobleme aufgrund von Verkehrsspitzen machen.

PubNub erleben

Sehen Sie sich die Live Tour an, um in weniger als 5 Minuten die grundlegenden Konzepte hinter jeder PubNub-gestützten App zu verstehen

Einrichten

Melden Sie sich für einen PubNub-Account an und erhalten Sie sofort kostenlosen Zugang zu den PubNub-Schlüsseln

Beginnen Sie

Mit den PubNub-Dokumenten können Sie sofort loslegen, unabhängig von Ihrem Anwendungsfall oder SDK

Top comments (0)