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 { 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]; };