78 lines
3.5 KiB
TypeScript
78 lines
3.5 KiB
TypeScript
import { z } from "zod";
|
|
import gigachat from './gigachat';
|
|
|
|
export interface ModerationResult {
|
|
comment: string;
|
|
isApproved: boolean;
|
|
success: boolean;
|
|
error?: string;
|
|
}
|
|
|
|
export class ChatModerationAgent {
|
|
private moderationLlm: any;
|
|
|
|
constructor(GIGA_AUTH) {
|
|
// Создаем структурированный вывод для модерации
|
|
this.moderationLlm = gigachat(GIGA_AUTH).withStructuredOutput(z.object({
|
|
comment: z.string(),
|
|
isApproved: z.boolean(),
|
|
}) as any);
|
|
}
|
|
|
|
private getSystemPrompt(): string {
|
|
return `Ты модерируешь сообщения в чате. Твоя задача - проверить сообщение на нецензурную лексику, брань и неприемлемый контент.
|
|
|
|
Твои задачи:
|
|
1. Проверь сообщение на наличие нецензурной лексики, мата, ругательств и брани.
|
|
2. Проверь на оскорбления, угрозы и агрессивное поведение.
|
|
3. Проверь на спам и рекламу.
|
|
4. Проверь на неприемлемый контент (дискриминация, экстремизм и т.д.).
|
|
|
|
- Если сообщение не содержит запрещенного контента, оно одобряется (isApproved: true).
|
|
- Если сообщение содержит запрещенный контент, оно отклоняется (isApproved: false).
|
|
|
|
Правила написания комментария:
|
|
- Если сообщение одобряется, оставь поле comment пустым.
|
|
- Если сообщение отклоняется, пиши комментарий со следующей формулировкой:
|
|
"Сообщение удалено. Причина: (укажи конкретную причину: нецензурная лексика, оскорбления, спам и т.д.)"`;
|
|
}
|
|
|
|
public async moderateMessage(message: string): Promise<ModerationResult> {
|
|
try {
|
|
const prompt = `${this.getSystemPrompt()}
|
|
|
|
Сообщение: ${message}`;
|
|
|
|
const result = await this.moderationLlm.invoke(prompt);
|
|
|
|
// Дополнительная проверка
|
|
if (!result.isApproved && result.comment.trim() === '') {
|
|
result.comment = 'Сообщение удалено. Причина: нарушение правил чата.';
|
|
}
|
|
|
|
return {
|
|
comment: result.comment,
|
|
isApproved: result.isApproved,
|
|
success: true
|
|
};
|
|
|
|
} catch (error) {
|
|
console.error('❌ [Chat Moderation] Ошибка при модерации:', error);
|
|
|
|
// В случае ошибки одобряем сообщение
|
|
return {
|
|
comment: '',
|
|
isApproved: true,
|
|
success: false,
|
|
error: error instanceof Error ? error.message : 'Неизвестная ошибка'
|
|
};
|
|
}
|
|
}
|
|
}
|
|
|
|
// Экспортируем функцию для обратной совместимости
|
|
export const moderationText = async (title: string, body: string, GIGA_AUTH): Promise<[string, boolean, string]> => {
|
|
const agent = new ChatModerationAgent(GIGA_AUTH);
|
|
const result = await agent.moderateMessage(body);
|
|
return [result.comment, result.isApproved, body];
|
|
}; |