API de Moderación de ZPK - Documentación técnica
Una API para detectar textos nocivos mediante inteligencia artificial, capaz de detectar amenazas, o mensajes de incitación o soporte al odio.
Una API que permite detectar mensajes nocivos escritos en aplicaciones o sitios web. No es solo un filtrado de textos, se usa inteligencia artificial para contextualizar los mensajes y determinar mejor posibles comportamientos dañinos.
Minimizando falsos positivos: Esta API pude discernir con mayor éxito que los sitemas tradicionales entre mensajes que mencionan actitudes peligrosas, y mensajes que incitan a esas actitudes peligrosas, minimizando los falsos positivos.
Minimizando falsos negativos: La inteligencia artificial permite también detectar mensajes nocivos aún cuando estos no estén usando palabras 'filtradas', detectando por ejemplo amenazas veladas, o insultos que no usan directamente un lenguaje malsonante.
Conectando a la API
Servidor y protocolos para la conexión
Servidor: | https://zpk.systems |
---|---|
Esquema: | HTTPS, solo conexiones seguras SSL. |
Protocolo: |
JSON recomendado
Enviando un JSON en el body del request, y especificando una cabecera Content-Type: application/json en el request Si envia ficheros como imágenes o documentos, estos deberán estar codificados en base64. Form-Data no recomendado
Formato usado en los formularios web, no recomendado. Al enviar una solicitud tipo form_data puede enviar todos los campos como parámetros POST separados. Sin embargo si la solicitud es muy grande recomendamos que envie el contenido de la peticion en un único campo de texto llamado _json (con un guión bajo). Este parametro especial sera procesado por nuestro backend como si se tratase de una solicitud JSON habitual. |
El servidor dónde enviar las solicitudes es https://zpk.systems mediante una conexión HTTPS segura.
El tipo de comunicación recomendado es JSON, en cuyo caso especificaremos en la conexión un Content-Type: application/json, y enviaremos el body de la solicitud como un string JSON válido.
Analizando mensajes
Parámetro | Descripción | ||||||||
---|---|---|---|---|---|---|---|---|---|
application_id |
alfanumérico requerido Una id de aplicación, puede obtener la id de una aplicación haciendo click en 'detalles' en su panel |
||||||||
api_key |
alfanumérico requerido La API KEY de la aplicación que efectúa la llamada a esta API, puede obtenerla en su panel, haciendo click en 'detalles' de una aplicación |
||||||||
messages |
array requerido Max: 30 Un array de elementos conteniendo cada uno un elemento a analizar, estos elementos deben contener como mínimo el texto a analizar, y opcionalmente un identificador de fuente y/o identificador de mensaje.
|
Respuesta de análisis
Estructura de una respuesta
El servidor retornará un JSON, con un boleano success si la solicitud de envío se procesó correctamente.
Adicionalmente en el JSON se retornará la lista de elementos results, y cada elemento contendra el mensaje original a analizar y un resultado de ese análisis.
Como en el resto de las peticiones a APIS de ZPK Systems, se dispone un parámetro cost indicando el coste total de la solicitud a la API.
Parámetro | Descripción |
---|---|
success |
boleano
Un boleano con valor true si se pudo procesar su solicitud. O false, en caso de errores. |
messages |
array
Un array que contendrá todos los elementos que se solicitaron analizar, con una puntuación en diferentes categorias indicando posibles alertas. Consulte la siguiente tabla para detalles sobre los elementos de este array. |
cost |
float
El coste de la solicitud |
Parámetro | Descripción |
---|---|
input |
string
El texto que usted envió |
source_id |
string
opcional
Si se envió un identificador de fuente source_id, contendrá el identificador source_id enviado. |
message_id |
string
opcional
Si se envió un identificador de mensaje message_id_id, contendrá el identificador message_id enviado. |
categories |
Array de categorias
Un array conteniendo por cada categoría un identificador de esa categoría, una puntuación, y un flag de alerta si se detecto texto que active esa catagoría en concreto. Las categorias retornadas son:
Cada categoria dispone a su vez de:
|
Ejemplo de respuesta con envío correcto.
En este ejemplo podemos ver dos mensajes distintos después de procesarse.
El primer mensaje es de un usuario que afirma que esta jugando a un videojuego de disparos, y avisa de que va a disparar a todos los enemigos. En este mensaje la alerta de 'violencia' es disparada, sin embargo la API no detectó odio ni amenzas.
El segundo mensaje también afirma que disparará pero en otro contexto, en esta caso la api de moderación detecta una amenaza mucho mas alta, y vemos como ademas de 'violencia' se activa el detector de 'odio' y el de 'amenaza'.
{
"success": true,
"messages": [
{
"input": {
"text": "Estoy jugando al videojuego este, pero los enemigos no paran de matarme xd los matare a todos",
"source_id": "test",
"message_id": ""
},
"categories": {
"hate": {
"id": "hate",
"score": "0.000185327",
"danger": false
},
"hate_threatening": {
"id": "hate_threatening",
"score": "0.000000335",
"danger": false
},
"self_harm": {
"id": "self_harm",
"score": "0.000000909",
"danger": false
},
"sexual": {
"id": "sexual",
"score": "0.000002828",
"danger": false
},
"sexual_minors": {
"id": "sexual_minors",
"score": "0.000000048",
"danger": false
},
"violence": {
"id": "violence",
"score": "0.767623782",
"danger": true
},
"violence_graphic": {
"id": "violence_graphic",
"score": "0.000000240",
"danger": false
}
}
},
{
"input": {
"text": "Los matare a todos",
"source_id": "test",
"message_id": ""
},
"categories": {
"hate": {
"id": "hate",
"score": "0.960755408",
"danger": true
},
"hate_threatening": {
"id": "hate_threatening",
"score": "0.702908933",
"danger": true
},
"self_harm": {
"id": "self_harm",
"score": "0.000000001",
"danger": false
},
"sexual": {
"id": "sexual",
"score": "0.000002006",
"danger": false
},
"sexual_minors": {
"id": "sexual_minors",
"score": "0.000000261",
"danger": false
},
"violence": {
"id": "violence",
"score": "0.997496307",
"danger": true
},
"violence_graphic": {
"id": "violence_graphic",
"score": "0.000001936",
"danger": false
}
}
}
],
"cost": 0.003
}
Ejemplo de respuesta con error general
Ejemplo con un envío incorrecto que NO será procesado.
{
"success": false,
"errors": [
{
"id": "INVALID_PARAMETER",
"message": "Messages array is empty.",
"on": "messages"
}
]
}
Sobre puntuaciones y alertas
Como detectar y filtrar amenazas y mensajes nocivos.
Esta API asigna a cada mensaje una puntuación score y una alerta danger.
Las alertas suelen activarse cuando la puntuación se acerca a 0.7, sin embargo la IA puede decidir si disparar la alerta o no dependiendo se un analisis de contextualización del mensaje.
Por ejemplo: Un mensaje podría contener texto hablando sobre la violencia y por lo tanto tener una puntuación de violence.score relativamente alta, pero la IA podría decidir no disparar una alerta violence.danger si ese mensaje hace referencia a un videojuego de disparos y no a una amenaza real.
En todo caso, es usted el que debe determinar cual es el umbral de cada categoría que su aplicación debe tolerar, puesto que habitualmente no se aplicaran las mismas restricciones en una comunidad de publico adulto donde todos los usuarios son mayores de edad, o en una comunidad apta para todos los publicos.
Fuentes, definición y funcionamiento
Asignando puntuaciones a usuarios, chats, hilos, o cualquier otra fuente de mensajes.
La API de moderación de ZPK asignará aquellos analisis en los que se haya especificado un source_id a una fuente concreta.
Cuando se analiza una fuente, o cuando se consulta el endpoint de estado de fuente, se retorna una puntuación media total que usted puede usar para determinar la actitud 'global' del emisor de los mensajes.
Una fuente puede ser cualquier origen de mensaje que su aplicación determine, por ejemplo, un usuario concreto, o una conversación de chat concreta.
Consultando penalizadores y datos de una fuente
Este endpoint retornará para una fuente concreta, la puntuación actual asociada a esa fuente en cada categoría peligrosa.
Retorna además información sobre número de mensajes procesados, y una puntuación de actitud 'global'.
Endpoint de consulta
Parámetro | Descripción |
---|---|
application_id |
alfanumérico requerido Una ID de aplicación, puede obtener la id de una aplicación haciendo click en 'detalles' en su panel |
api_key |
alfanumérico requerido La API KEY de la aplicación que efectúa la llamada a esta API, puede obtenerla en su panel, haciendo click en 'detalles' de una aplicación |
source_id |
alfanumérico opcional Un identificador único de la fuente a consultar. |
Estructura de la respuesta
Parámetro | Descripción |
---|---|
success |
boleano
Un boleano con valor true si se pudo procesar su solicitud. O false, en caso de errores. |
scores |
array
Un array asociativo que contendrá las medias para cada categoría de amenaza. Cada elemento de esta lista contendrá:
|
cost |
float
El coste de la solicitud |
Ejemplo de respuesta, medias de fuente.
{
"success": true,
"source_id": "test",
"scores": {
"hate": {
"average_score": 0.3245996,
"percentage_total_messages": 29.63
},
"hate_threatening": {
"average_score": 0.1642738,
"percentage_total_messages": 29.63
},
"self_harm": {
"average_score": 0.0004603,
"percentage_total_messages": 0
},
"sexual": {
"average_score": 0.0018926,
"percentage_total_messages": 0
},
"sexual_minors": {
"average_score": 0.0001772,
"percentage_total_messages": 0
},
"violence": {
"average_score": 0.5734031,
"percentage_total_messages": 44.44
},
"violence_graphic": {
"average_score": 0.0218495,
"percentage_total_messages": 0
}
},
"cost": 0.005
}
Precios
Esta API se factura por demanda, y usted solo pagará según el número de mensajes analizados. No hay descuentos por volumen porque nuestra API tiene el mejor precio desde el primer request.
Precio por mensaje analizado: 0.001 € por cada 500 caracteres, redondeado a la alza.
Precio por estadísticas de fuente: 0.005 €
Integración con PHP
SDK en PHP para detectar mensajes peligrosos
ZPK-PHP es una librería de código abierto instalable mediante composer que le permitirá integrar nuestras APIs en su proyecto PHP con un mínimo esfuerzo.
Documentación del SDK para PHPInstalando ZPK-PHP con composer
composer require zpksystems/phpzpk
Ejemplo de request para analizar mensajes
<?php
$application = new zpkApplication('app_id','api_key');
$moderator = new zpkModerator($application);
$moderator->addText( ['text'=>'I want to k**l myself.'] );
echo json_encode($moderator->scan(),
JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);
Regístrese para probar esta API
Regístrese para obtener crédito gratuito y probar esta y otras APIs de ZPK