import { Agent } from 'node:https'; import { GigaChat } from "langchain-gigachat"; import { z } from "zod"; const httpsAgent = new Agent({ rejectUnauthorized: false, }); const llm = new GigaChat({ credentials: "MGIzODY1N2MtYzMwMS00N2I4LWI1YzQtM2U4NzAxZGI5NmMzOjJmNzcyYzBmLWU0NjUtNGNmZC1iMDM2LTRjNmY0N2JhNDdiOA==", temperature: 0.2, model: 'GigaChat-2', httpsAgent, }); // возвращаю комментарий + булево значение (удалять или нет) + финальный текст сообщения const moderationLlm = llm.withStructuredOutput(z.object({ comment: z.string(), isApproved: z.boolean(), }) as any) export const moderationText = async (title: string, body: string): Promise<[string, boolean, string]> => { const startTime = Date.now(); const messagePreview = body.length > 50 ? body.substring(0, 50) + '...' : body; console.log(`🤖 [AI Agent] Начинаем анализ сообщения: "${messagePreview}"`); console.log(`🤖 [AI Agent] Длина сообщения: ${body.length} символов`); console.log(`🤖 [AI Agent] Модель: GigaChat-2, Temperature: 0.2`); const prompt = ` Ты модерируешь сообщения в чате. Твоя задача - проверить сообщение на нецензурную лексику, брань и неприемлемый контент. Сообщение: ${body} Твои задачи: 1. Проверь сообщение на наличие нецензурной лексики, мата, ругательств и брани. 2. Проверь на оскорбления, угрозы и агрессивное поведение. 3. Проверь на спам и рекламу. 4. Проверь на неприемлемый контент (дискриминация, экстремизм и т.д.). - Если сообщение не содержит запрещенного контента, оно одобряется (isApproved: true). - Если сообщение содержит запрещенный контент, оно отклоняется (isApproved: false). Правила написания комментария: - Если сообщение одобряется, оставь поле comment пустым. - Если сообщение отклоняется, пиши комментарий со следующей формулировкой: "Сообщение удалено. Причина: (укажи конкретную причину: нецензурная лексика, оскорбления, спам и т.д.)" ` try { console.log(`🤖 [AI Agent] Отправляем запрос к GigaChat...`); const result = await moderationLlm.invoke(prompt); const processingTime = Date.now() - startTime; console.log(`🤖 [AI Agent] Получен ответ от GigaChat за ${processingTime}мс`); console.log(`🤖 [AI Agent] Результат анализа:`, { isApproved: result.isApproved, comment: result.comment || 'нет комментария', hasComment: !!result.comment }); // Дополнительная проверка if(!result.isApproved && result.comment.trim() === '') { console.log(`⚠️ [AI Agent] Сообщение отклонено, но комментарий пустой. Добавляем стандартный комментарий.`); result.comment = 'Сообщение удалено. Причина: нарушение правил чата.' } // Определяем итоговый текст сообщения let finalMessage = body; if (!result.isApproved) { finalMessage = '[Удалено модератором]'; console.log(`🚫 [AI Agent] Сообщение будет заменено на: "${finalMessage}"`); } else { console.log(`✅ [AI Agent] Сообщение одобрено, остается без изменений`); } console.log(`🤖 [AI Agent] Анализ завершен. Общее время: ${Date.now() - startTime}мс`); return [result.comment, result.isApproved, finalMessage]; } catch (error) { const processingTime = Date.now() - startTime; console.error(`❌ [AI Agent] Ошибка при анализе сообщения (${processingTime}мс):`, error); console.error(`❌ [AI Agent] Сообщение будет одобрено из-за ошибки модерации`); // В случае ошибки одобряем сообщение return ['', true, body]; } };