"- ОБЯЗАТЕЛЬНО ВКЛЮЧИ «5 сил Портера» (минимум: Rivalry/Threat of New Entrants/Substitutes/Buyer Power/Supplier Power) применительно к этой нише в Казахстане.\n");
}
promptBuilder.append("- После каждого крупного вывода добавляй конкретные тактические рекомендации.\n");
if(isKeyVerboseSectionForHybridRule(sectionId)){
promptBuilder.append("- ОБЪЕМ (КЛЮЧЕВОЙ РАЗДЕЛ): не менее 500 слов.\n");
@@ -104,6 +113,66 @@ public class MarketingAnalysisService {
topic+" рынок "+regionStrForSearch+" лидеры ритейла компании "+preferredSites);
StringBuilderpromptBuilder=newStringBuilder();
promptBuilder.append(
"Ты — профессиональный маркетинговый аналитик, работающий с малым и средним бизнесом в Казахстане.\n\n");
promptBuilder.append(
"Твоя задача — на основе входных данных о бизнесе выполнить глубокий анализ конкурентов и выдать результат ТОЛЬКО в виде корректного JSON-объекта строго по указанной структуре.\n\n");
promptBuilder.append(
"КРИТИЧЕСКИ ВАЖНО: Найди или смоделируй реалистичных конкурентов для этой ниши."
+"Оцени их цифровые метрики и контент-стратегию. Если ты не знаешь реальных конкурентов,"
+"создай реалистичные модели на основе типичных игроков в этой нише в Казахстане.\n\n");
"КРИТИЧЕСКИ ВАЖНО: Ниже даны результаты веб-поиска (Serper.dev). СНАЧАЛА проанализируй их,"
+"ЗАТЕМ сформируй JSON. Если WEB_SEARCH_STATUS=OK, используй ТОЛЬКО реальные названия конкурентов "
+"из WEB_SEARCH_RESULTS (никаких выдуманных брендов). Для каждого конкурента привяжи хотя бы 1 ссылку-источник.\n"
+"Если веб-поиск недоступен, можешь дать модели конкурентов, но ОБЯЗАТЕЛЬНО пометь это как \"Экстраполяция\""
+"и не выдавай их за реальные компании.\n\n");
promptBuilder.append("Не добавляй пояснений, комментариев, текста до или после JSON.\n");
promptBuilder.append("Ответ должен быть валидным JSON.\n\n");
promptBuilder.append("WEB_SEARCH_RESULTS (для реальных конкурентов и источников):\n");
promptBuilder.append("КРИТИЧЕСКИ ВАЖНЫЕ ТРЕБОВАНИЯ:\n\n");
@@ -908,6 +1110,8 @@ public class MarketingAnalysisService {
promptBuilder.append("11. Все строки — на русском языке.\n");
promptBuilder.append(
"12. channelsHeatmap должна содержать оценки (0-100) для всех основных каналов: Instagram, TikTok, Telegram, YouTube, Facebook.\n");
promptBuilder.append(
"13. sources должен содержать реальные ссылки из WEB_SEARCH_RESULTS (если WEB_SEARCH_STATUS=OK). Если веб-поиск недоступен — sources можно оставить пустым, а выводы пометь как \"Экстраполяция\".\n");
Stringprompt=promptBuilder.toString();
logger.debug(
@@ -945,6 +1149,20 @@ public class MarketingAnalysisService {
"Ты — профессиональный маркетинговый аналитик, работающий с малым и средним бизнесом в Казахстане.\n\n");
@@ -953,8 +1171,22 @@ public class MarketingAnalysisService {
promptBuilder.append(
"КРИТИЧЕСКИ ВАЖНО: Предоставь детальный анализ сезонных колебаний спроса с конкретными объяснениями. "
+"Опиши рыночные тренды, возможности и угрозы с конкретными инсайтами, а не общими фразами.\n\n");
promptBuilder.append(
"ОБЯЗАТЕЛЬНО (WEB SEARCH): ниже тебе даны результаты веб-поиска (Serper.dev) по 2024–2025 годам. "
+"СНАЧАЛА проанализируй эти данные, а ЗАТЕМ сформируй JSON. "
+"Если данные содержат числа — используй их. Если точных чисел нет — делай экспертную оценку через смежные рынки/ВВП/покупательную способность и помечай это как \"Экстраполяция\".\n");
promptBuilder.append(
"ЗАПРЕТ: нельзя использовать фиксированные заглушки или одинаковые оценки для разных ниш. Обувь не может стоить столько же, сколько видеокарты.\n\n");
promptBuilder.append("Не добавляй пояснений, комментариев, текста до или после JSON.\n");
promptBuilder.append("Ответ должен быть валидным JSON.\n\n");
promptBuilder.append("WEB_SEARCH_RESULTS (используй как доказательства и источники):\n");
promptBuilder.append("ВХОДНЫЕ ДАННЫЕ ПОЛЬЗОВАТЕЛЯ:\n\n");
promptBuilder.append("- Название компании/продукта: ").append(request.getProduct()).append("\n");
@@ -984,7 +1216,11 @@ public class MarketingAnalysisService {
"\"marketSize\": \"Оценка объема рынка (например, 'Оценка объема рынка составляет X млн тенге в год' или 'Средний рынок с потенциалом роста'). "
+"Дай конкретную оценку или описание масштаба рынка в Казахстане для данной ниши.\",\n");
promptBuilder.append(
"\"growthRate\": \"Темп роста рынка (например, '+15% в год' или 'Стабильный рост 10-12% ежегодно')\",\n");
"\"growthRate\": \"Темп роста рынка (например, 'Умеренный рост X% в год' или 'Стабильный рост на уровне инфляции'). Укажи оценку/диапазон и кратко обоснуй.\",\n");
"\"extrapolationMethod\": \"Если точных данных нет, опиши метод экспертной оценки и пометь как Экстраполяция.\",\n");
promptBuilder.append(
"\"trends\": [\"Конкретный тренд 1 (1-2 предложения с деталями)\", \"Конкретный тренд 2 (1-2 предложения с деталями)\", \"Конкретный тренд 3 (1-2 предложения с деталями)\"],\n");
promptBuilder.append(
@@ -1013,6 +1249,8 @@ public class MarketingAnalysisService {
promptBuilder.append("10. Все строки — на русском языке.\n");
promptBuilder.append(
"11. НЕ включай поле \"estimated\" ни в seasonality, ни в market.\n");
promptBuilder.append(
"12. sources должен содержать реальные ссылки из WEB_SEARCH_RESULTS (если WEB_SEARCH_STATUS=OK). Если веб-поиск недоступен — укажи extrapolationMethod как \"Экстраполяция\" и оставь sources пустым массивом.\n");
Stringprompt=promptBuilder.toString();
logger.debug(
@@ -1573,6 +1811,9 @@ public class MarketingAnalysisService {
@@ -1851,9 +2104,9 @@ public class MarketingAnalysisService {
promptBuilder.append("3. Глубина: аналитические инсайты с практическими выводами\n");
promptBuilder.append("4. Данные: используй ТОЛЬКО данные из JSON, не выдумывай цифры\n");
promptBuilder.append(
"5. ОБЯЗАТЕЛЬНЫЕ ЦИФРЫ: в тексте обязательно упомяни, что объем рынка = 15 млрд тенге, а темпы роста = 12%.\n");
"5. Рынок: обязательно упомяни оценку объема рынка и темпы роста ТОЛЬКО из JSON (market.marketSize и market.growthRate).\n");
promptBuilder.append(
"Эти цифры должны быть явно написаны в тексте (как минимум 1 раз) и использованы в выводах.\n\n");
"Запрещено использовать фиксированные «заглушки» или одинаковые числа для разных ниш. Если точных данных нет — делай аналитическую экстраполяцию и помечай как \"Экстраполяция\".\n\n");
promptBuilder.append("СТРУКТУРА РАЗДЕЛА:\n");
promptBuilder.append("I. Краткое резюме\n\n");
promptBuilder.append("Опиши:\n");
@@ -1907,7 +2160,7 @@ public class MarketingAnalysisService {
promptBuilder.append("3. Глубина: аналитические инсайты с практическими выводами\n");
promptBuilder.append("4. Данные: используй ТОЛЬКО данные из JSON, не выдумывай цифры\n");
promptBuilder.append(
"5. Обязательно назови объем рынка (15 млрд тенге) и темпы роста (12%).\n");
"5. Обязательно назови объем рынка и темпы роста ТОЛЬКО из JSON (market.marketSize и market.growthRate), с краткой ссылкой на источник, если он указан в researchPack/market.sources.\n");
promptBuilder.append(
"6. Объясни, что эти цифры значат для окупаемости фитнес-центра (логика окупаемости/скорость набора клиентов/масштаб спроса),\n");
promptBuilder.append(
@@ -1952,6 +2205,13 @@ public class MarketingAnalysisService {
promptBuilder.append("Ты — высокооплачиваемый бизнес-консультант и маркетинговый аналитик.\n\n");
@@ -1967,6 +2227,10 @@ public class MarketingAnalysisService {
promptBuilder.append("2. Стиль: деловой, убедительный для владельца бизнеса\n");
promptBuilder.append("3. Глубина: аналитические инсайты с практическими выводами\n");
promptBuilder.append("4. Данные: используй ТОЛЬКО данные из JSON, не выдумывай цифры\n\n");
promptBuilder.append(
"5. Контроль галлюцинаций: если используешь данные из researchPack/market.sources/researchNotes.citations — добавляй в тексте краткую ссылку (в скобках).\n");
promptBuilder.append(
"6. Если данных нет — используй аналитическую экстраполяцию и явно помечай блок как \"Экстраполяция\".\n\n");
promptBuilder.append("ОБЯЗАТЕЛЬНАЯ СТРОКА:\n");
promptBuilder.append(
"- Обязательно вставь тег [[CHART_SEASONALITY]] непосредственно рядом с описанием сезонности (внутри абзаца или сразу после него).\n\n");
@@ -2002,7 +2266,6 @@ public class MarketingAnalysisService {
promptBuilder.append("- Пиши максимально подробно, анализируй тренды\n");
promptBuilder.append(
"- Каждое ключевое утверждение подтверждай конкретной цифрой из JSON; если нужна связующая метрика — делай экстраполяцию и помечай как \"Экстраполяция\".\n\n");
promptBuilder.append("Ты — высокооплачиваемый бизнес-консультант и маркетинговый аналитик.\n\n");
@@ -2166,6 +2436,8 @@ public class MarketingAnalysisService {
promptBuilder.append("4. Данные: используй ТОЛЬКО данные из JSON, не выдумывай цифры\n");
promptBuilder.append(
"5. Это должен быть самый мощный раздел отчёта: каждое утверждение подтверждай цифрами из competitorAnalysis.marketShareChart / competitorAnalysis.comparisonTable.\n\n");
promptBuilder.append(
"6. Контроль галлюцинаций: если используешь данные из competitorAnalysis.sources/researchPack/researchNotes.citations — добавляй в тексте краткую ссылку (в скобках).\n");
promptBuilder.append("ОБЯЗАТЕЛЬНЫЕ СТРОКИ:\n");
promptBuilder.append(
"- Обязательно вставь теги [[CHART_MARKET_SHARE]] и [[TABLE_COMPARISON]] рядом с теми утверждениями, где ты обсуждаешь конкретные цифры/сравнения (внутри абзаца или сразу после него).\n\n");
@@ -2223,7 +2495,6 @@ public class MarketingAnalysisService {
"- Используй данные из competitorAnalysis.marketShareChart и competitorAnalysis.comparisonTable\n");
promptBuilder.append(
"- Не выдумывай цифры. Если в конкретной строке/метрике нет явного значения — делай консервативную экстраполяцию и помечай как \"Экстраполяция\" (без фраз про отсутствие данных).\n\n");
promptBuilder.append("ДОПОЛНИТЕЛЬНО ДЛЯ ПОДРОБНОГО ОТЧЕТА (ОБЯЗАТЕЛЬНО):\n");
promptBuilder.append(
"- Составь помесячный план на все 12 месяцев (логика Gantt): перечисли 5–8 workstreams (например: продукт/оффер, перформанс, контент, CRM, продажи, партнерства, аналитика), и для каждого укажи активные месяцы (1..12), зависимости, контрольные точки и KPI.\n");
promptBuilder.append(
"- Представь Gantt-логику в виде компактной таблицы (workstream × месяцы 1..12) + краткие пояснения по зависимостям.\n");
promptBuilder.append(
"- Макро: обязательно учти инфляцию в РК, курс тенге и логистические риски (используй researchPack/researchNotes). Если есть источник — добавь короткую ссылку.\n");
promptBuilder.append(
"- Фреймворки: обязательно включи PESTEL и 5 сил Портера (как отдельные подблоки) и привяжи выводы к практическим действиям.\n\n");
"- Рассчитай точку безубыточности (Break-even point) строго по формуле в LaTeX: \\[ BEP = \\frac{Fixed\\ Costs}{Price - Variable\\ Costs} \\].\n");
@@ -2673,11 +2963,14 @@ public class MarketingAnalysisService {
"- Если в JSON нет нужных чисел: введи реалистичные допущения (пометь как \"Экстраполяция\") и сделай 3 сценария (консервативный/базовый/оптимистичный), затем интерпретируй управленчески.\n\n");
"КОНТРОЛЬ ГАЛЛЮЦИНАЦИЙ:\n- Если используешь данные из researchPack/market.sources/competitorAnalysis.sources/researchNotes.citations — добавляй в тексте краткую ссылку (в скобках).\n"
+"- Если данных нет — используй аналитическую экстраполяцию и явно помечай блок как \"Экстраполяция\".\n\n");
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.