Files
multy-stub/server/routers/kfu-m-24-1/sber_mobile/chat-ai-agent/chat-moderation.ts
T
2025-06-14 23:35:48 +03:00

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