This commit is contained in:
arys
2026-01-19 16:05:13 +05:00
parent 19925ca5b4
commit 60e475b9ce
@@ -649,7 +649,7 @@ public class MarketingAnalysisService {
// 3. Формирование промпта (Безопасный метод!)
String systemPrompt = buildSystemPromptForKazakhstan();
String instruction = buildDetailedInstruction(request, competitorCompanies, structureExampleJson);
String instruction = buildDetailedInstruction(request, structureExampleJson);
String contextJson = objectMapper.writeValueAsString(Map.of(
"request", request,
@@ -703,11 +703,12 @@ public class MarketingAnalysisService {
"- Запрещено возвращать null в полях (особенно income_by_age) — делай экстраполяцию если нет точных данных.\n";
}
private String buildDetailedInstruction(MarketingAnalysisRequest request, List<String> competitorCompanies, String structureExampleJson) {
private String buildDetailedInstruction(MarketingAnalysisRequest request, String structureExampleJson) {
String regionsList = (request.getRegion() != null && !request.getRegion().isEmpty())
? String.join(", ", request.getRegion())
: "Алматы, Астана, Шымкент"; String ageRangesInstruction = "";
: "Алматы, Астана, Шымкент";
String ageRangesInstruction = "";
if (request.getTargetAudience() != null && request.getTargetAudience().containsKey("ageRanges")) {
@SuppressWarnings("unchecked")
List<String> ranges = (List<String>) request.getTargetAudience().get("ageRanges");
@@ -716,6 +717,7 @@ public class MarketingAnalysisService {
}
}
// Шаблон с плейсхолдерами {{KEY}} вместо %s
String template = """
Твоя задача: Провести глубокий маркетинговый анализ и вернуть его СТРОГО в формате JSON.
@@ -732,19 +734,23 @@ public class MarketingAnalysisService {
- Значения (0-100) должны быть разными и неровными (например, 87, 64, 43).
2. КОНКУРЕНТЫ (competitive_environment):
- Найди в `evidence` РЕАЛЬНЫХ лидеров (сети, крупные игроки из 2GIS/Kaspi).
- Найди в `evidence` РЕАЛЬНЫХ лидеров рынка (сети, крупные игроки из 2GIS/Kaspi).
- Игнорируй мелкие ИП или выдуманные названия.
- Заполни `digital_visibility_benchmarks` реальными именами.
3. КАНАЛЫ (acquisition_channels):
- Приоритет в РК: Instagram (Reels), TikTok, Kaspi Marketing, 2GIS.
- Яндекс.Директ и VK ставь ниже (Low/Medium), если это B2C.
- Указывай стоимость лида (CPL) неровными числами (напр. 2350 KZT).
- Указывай стоимость лида (CPL) строкой с валютой (напр. "2350 KZT").
4. ЦИФРЫ И ГРАФИКИ:
- ЗАПРЕЩЕНО использовать круглые числа (20%, 50%, 1000). Пиши: 18.7%, 42.3%, 1240.
- income_by_age: Заполни реальными доходами в KZT по возрастам (из evidence).
- monthly_online_index: График должен быть "живым" (не прямая линия).
4. ЦИФРЫ И ТИПЫ ДАННЫХ (КРИТИЧНО!):
- `income_by_age` (TargetAudience): ЭТО ЧИСЛОВОЕ ПОЛЕ (Integer).
Пиши ТОЛЬКО ГОЛЫЕ ЦИФРЫ. Без кавычек, без запятых, без пробелов, без "KZT".
ПРАВИЛЬНО: 342500
ОШИБКА: "342,500", "342 500", "342500 KZT".
- `monthly_online_index`: Дробные числа (0.0 - 1.0).
- `marketSize` (String): Пиши текстом с валютой ("500 млн KZT").
- ЗАПРЕЩЕНО использовать круглые числа в статистике (20%, 50%, 1000). Пиши: 18.7%, 42.3%, 1240.
5. ИСТОЧНИКИ:
- Собери ВСЕ ссылки из `evidence` в ОДИН СПИСОК в самом конце (поле `recommendations.conclusion`).