Skip to content

Модерация

AITUNNEL предоставляет доступ к OpenAI Moderation API — инструменту для классификации текста на предмет нарушений политики использования.

Бесплатно

Модерация предоставляется бесплатно и не списывает средства с вашего баланса.

Эндпоинт

POST https://api.aitunnel.ru/v1/moderations

Запрос

ПолеТипОбязательноОписание
inputstring | string[] | MultiModalInput[]ДаТекст, массив текстов или массив мультимодальных объектов
modelstringНетМодель модерации. По умолчанию omni-moderation-latest

Мультимодальный ввод (изображения)

Модель omni-moderation-latest поддерживает проверку изображений наряду с текстом. Для этого передайте массив объектов:

typescript
type TextInput = {
  type: "text";
  text: string;
};

type ImageInput = {
  type: "image_url";
  image_url: {
    url: string; // URL изображения или base64 data URL
  };
};

type MultiModalInput = TextInput | ImageInput;

Ответ

typescript
type ModerationResponse = {
  id: string;
  model: string;
  results: ModerationResult[];
};

type ModerationResult = {
  flagged: boolean;
  categories: {
    hate: boolean;
    "hate/threatening": boolean;
    harassment: boolean;
    "harassment/threatening": boolean;
    "self-harm": boolean;
    "self-harm/intent": boolean;
    "self-harm/instructions": boolean;
    illicit: boolean;
    "illicit/violent": boolean;
    sexual: boolean;
    "sexual/minors": boolean;
    violence: boolean;
    "violence/graphic": boolean;
  };
  category_scores: {
    hate: number;
    "hate/threatening": number;
    harassment: number;
    "harassment/threatening": number;
    "self-harm": number;
    "self-harm/intent": number;
    "self-harm/instructions": number;
    illicit: number;
    "illicit/violent": number;
    sexual: number;
    "sexual/minors": number;
    violence: number;
    "violence/graphic": number;
  };
  // Присутствует только в ответах omni-moderation-latest.
  // Показывает, какой тип входных данных (text / image) активировал каждую категорию.
  category_applied_input_types: {
    [category: string]: ("text" | "image")[];
  };
};

Поле flagged равно true, если модель обнаружила нарушение хотя бы в одной категории.

Примеры

javascript
const OpenAI = require("openai");

const client = new OpenAI({
  apiKey: "sk-aitunnel-xxx",
  baseURL: "https://api.aitunnel.ru/v1/",
});

const result = await client.moderations.create({
  input: "Текст для проверки",
});

console.log(result.results[0].flagged);        // true / false
console.log(result.results[0].categories);     // категории нарушений
console.log(result.results[0].category_scores); // оценки по каждой категории
python
from openai import OpenAI

client = OpenAI(
    api_key="sk-aitunnel-xxx",
    base_url="https://api.aitunnel.ru/v1/",
)

result = client.moderations.create(
    input="Текст для проверки",
)

print(result.results[0].flagged)          # True / False
print(result.results[0].categories)       # категории нарушений
print(result.results[0].category_scores)  # оценки по каждой категории
bash
curl https://api.aitunnel.ru/v1/moderations \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer sk-aitunnel-xxx" \
    -d '{
      "input": "Текст для проверки"
    }'

Проверка изображений

Используйте omni-moderation-latest и передайте массив мультимодальных объектов, чтобы проверить изображения вместе с текстом:

javascript
const result = await client.moderations.create({
  model: "omni-moderation-latest",
  input: [
    { type: "text", text: "Текст для проверки" },
    {
      type: "image_url",
      image_url: { url: "https://example.com/image.png" },
    },
  ],
});

console.log(result.results[0].flagged);
console.log(result.results[0].category_applied_input_types); // { violence: ["image"], ... }
python
result = client.moderations.create(
    model="omni-moderation-latest",
    input=[
        {"type": "text", "text": "Текст для проверки"},
        {"type": "image_url", "image_url": {"url": "https://example.com/image.png"}},
    ],
)

print(result.results[0].flagged)
print(result.results[0].category_applied_input_types)
bash
curl https://api.aitunnel.ru/v1/moderations \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer sk-aitunnel-xxx" \
    -d '{
      "model": "omni-moderation-latest",
      "input": [
        { "type": "text", "text": "Текст для проверки" },
        { "type": "image_url", "image_url": { "url": "https://example.com/image.png" } }
      ]
    }'

Проверка нескольких текстов

Передайте массив строк в поле input, чтобы проверить несколько текстов за один запрос. Поле results в ответе будет содержать отдельный объект для каждого текста.

javascript
const result = await client.moderations.create({
  input: ["Первый текст", "Второй текст", "Третий текст"],
});

for (const item of result.results) {
  console.log(item.flagged, item.categories);
}
python
result = client.moderations.create(
    input=["Первый текст", "Второй текст", "Третий текст"],
)

for item in result.results:
    print(item.flagged, item.categories)

Пример ответа

json
{
  "id": "modr-xxxxxxxxxxxx",
  "model": "omni-moderation-latest",
  "results": [
    {
      "flagged": false,
      "categories": {
        "hate": false,
        "hate/threatening": false,
        "harassment": false,
        "harassment/threatening": false,
        "self-harm": false,
        "self-harm/intent": false,
        "self-harm/instructions": false,
        "illicit": false,
        "illicit/violent": false,
        "sexual": false,
        "sexual/minors": false,
        "violence": false,
        "violence/graphic": false
      },
      "category_scores": {
        "hate": 0.000012,
        "hate/threatening": 0.000001,
        "harassment": 0.000045,
        "harassment/threatening": 0.000002,
        "self-harm": 0.000003,
        "self-harm/intent": 0.000001,
        "self-harm/instructions": 0.000001,
        "illicit": 0.000008,
        "illicit/violent": 0.000002,
        "sexual": 0.000021,
        "sexual/minors": 0.000001,
        "violence": 0.000015,
        "violence/graphic": 0.000003
      },
      "category_applied_input_types": {
        "hate": ["text"],
        "hate/threatening": ["text"],
        "harassment": ["text"],
        "harassment/threatening": ["text"],
        "self-harm": ["text", "image"],
        "self-harm/intent": ["text", "image"],
        "self-harm/instructions": ["text", "image"],
        "illicit": ["text"],
        "illicit/violent": ["text"],
        "sexual": ["text", "image"],
        "sexual/minors": ["text"],
        "violence": ["text", "image"],
        "violence/graphic": ["text", "image"]
      }
    }
  ]
}

AITUNNEL