Модерация
AITUNNEL предоставляет доступ к OpenAI Moderation API — инструменту для классификации текста на предмет нарушений политики использования.
Бесплатно
Модерация предоставляется бесплатно и не списывает средства с вашего баланса.
Эндпоинт
POST https://api.aitunnel.ru/v1/moderationsЗапрос
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
input | string | string[] | MultiModalInput[] | Да | Текст, массив текстов или массив мультимодальных объектов |
model | string | Нет | Модель модерации. По умолчанию 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"]
}
}
]
}