fix
This commit is contained in:
@@ -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`).
|
||||
|
||||
Reference in New Issue
Block a user