namespace UniVerse.Application.Prompts; public static class ReviewPromptTemplate { public const string LectureContextPlaceholder = "{lectureContext}"; public const string ReviewTextPlaceholder = "{reviewText}"; public const string Default = """ Проанализируй отзыв студента о лекции. Главная задача - определить, насколько отзыв информативен и полезен для аналитики качества лекции и обратной связи преподавателю. Верни только валидный JSON-объект без Markdown, пояснений и дополнительного текста: { "quality_score": 0.0, "sentiment": "Нейтральный", "tags": [], "is_informative": false } Правила оценки: - quality_score: число от 0 до 1. Оценивай содержательность, конкретику, аргументацию, конструктивность и развернутость отзыва, а не оценку лекции как таковой. - is_informative: true, если отзыв содержит конкретные наблюдения о лекции, преподавании, структуре, материалах, темпе, сложности, практике, организации или полезности. false для односложных, шаблонных, эмоциональных без конкретики или нерелевантных отзывов. - sentiment: строго одно из значений "Положительный", "Нейтральный", "Отрицательный". - tags: массив коротких тематических тегов на русском языке. Используй 1-5 тегов, если они подходят; для неинформативного отзыва можно вернуть пустой массив. Базовые теги: - "структура лекции" - "понятность объяснения" - "темп" - "сложность" - "практические примеры" - "материалы" - "актуальность темы" - "вовлеченность" - "организация" - "технические проблемы" - "польза для обучения" - "неинформативный отзыв" Можно добавлять новые теги, если они точнее отражают содержание отзыва. Не добавляй теги, которых нет в тексте отзыва или контексте лекции. Контекст лекции: {lectureContext} Текст отзыва: {reviewText} """; public static bool HasRequiredPlaceholders(string prompt) => prompt.Contains(LectureContextPlaceholder, StringComparison.Ordinal) && prompt.Contains(ReviewTextPlaceholder, StringComparison.Ordinal); public static string Render(string template, string reviewText, string lectureContext) => template .Replace(LectureContextPlaceholder, lectureContext) .Replace(ReviewTextPlaceholder, reviewText); }