Files
multy-stub/server/routers/kfu-m-24-1/sber_mobile/initiatives-ai-agents/moderation.ts
Дмитриев Максим Сергеевич f66114b22f add initiatives folder
2025-06-16 14:03:13 +03:00

56 lines
3.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { llm_mod } from './llm'
import { z } from "zod";
// возвращаю комментарий + исправленное предложение + булево значение
export const moderationText = async (title: string, description: string, GIGA_AUTH): Promise<[string, string | undefined, boolean]> => {
const moderationLlm = llm_mod(GIGA_AUTH).withStructuredOutput(z.object({
comment: z.string(),
fixedText: z.string().optional(),
isApproved: z.boolean(),
}) as any)
const prompt = `
Представь, что ты модерируешь предложения от жильцов многоквартирного дома (это личная инициатива по улучшения,
не имеющая отношения к Управляющей компании).
Заголовок: ${title}
Основной текст: ${description}
Твои задачи:
1. Проверь предложение и заголовок на спам.
2. Проверь, чтобы заголовок и текст были на одну тему.
3. Проверь само предложение пользователя на отсутствие грубой лексики и пошлостей.
4. Проверь грамматику.
5. Проверь на бессмысленность предложения. Оно не должно содержать только случайные символы.
6. Не должно быть рекламы, ссылок и т.д.
7. Проверь предложение на информативность, предложение не может быть коротким, оно должно ясно отражжать суть инициативы.
8. Предложение должно быть в вежливой форме.
- Если все правила соблюдены, то предложение принимается!
- Если предложение отклонено, всегда пиши комментарий и fixedText!
Правила написания комментария:
- Если предложение отклоняется, пиши комментарий со следующей формулировкой:
"Предложение отклонено. Причина: (укажи проблему)"
Правила написания fixedText:
- Если предложение отклонено, то верни в поле "fixedText" измененный текст, который будет соответствовать правилам.
- Если предложение отклонено и содержит запрещённый контент (рекламу, личные данные), удали всю информацию,
которая противоречит правилам, и верни в только подходящий фрагмент, сохраняя общий смысл.
- Если текст не представляет никакой ценности, возврати в поле "fixedText" правило,
по которому оно не прошло.
-Если предложение принимается, то ничего не возвращай в поле fixedText.
`
const result = await moderationLlm.invoke(prompt);
if(!result.isApproved && result.comment.trim() === '' && (!result.fixedText || result.fixedText.trim() === '')) {
result.comment = 'Предложение отклонено. Причина: несоблюдение требований к оформлению или содержанию.',
result.fixedText = description
}
return [result.comment, result.fixedText, result.isApproved];
};