This commit is contained in:
root
2025-12-28 10:13:08 +05:00
parent 7983a4b352
commit 8b73fbcc2c
2 changed files with 147 additions and 16 deletions
@@ -0,0 +1,94 @@
---
name: DetailLevel prompts
overview: Адаптировать генерацию промптов и выбор модели/лимитов по уровню DetailLevel для JSON-аналитики (get*Analysis) и текстовых секций (genSection*), сохранив текущий режим СТАНДАРТНО как baseline.
todos:
- id: inspect-json-methods
content: Пройти по getAudienceAnalysis/getCompetitorAnalysis/getSeasonalityAndMarket/getStrategyAndFunnel и определить точки для вставки detailLevel-ветвления + вынесения общих частей промпта
status: pending
- id: update-text-directives
content: Обновить appendDetailLevelDirectives/buildSystemPromptForSection под новые требования КРАТКО (150-250, bullet-only, soften placeholders) и ПОДРОБНО (1000-1500, академичность, 3 примера, смежные рынки, прогноз 3-5 лет, LaTeX формулы)
status: pending
- id: model-routing
content: "В genSection* и get*Analysis внедрить выбор модели по DetailLevel: КРАТКО→mini, ПОДРОБНО→text, СТАНДАРТНО→как сейчас"
status: pending
dependencies:
- update-text-directives
- inspect-json-methods
- id: max-tokens-detailed
content: Скорректировать maxTokensOverride для ПОДРОБНО в generateWithRetryForSection и добавить override в JSON get*Analysis вызовы (8000-12000, например 12000)
status: pending
dependencies:
- model-routing
- id: smoketest-3-levels
content: "Сделать короткий ручной smoketest: один запрос, три уровня, проверить объем/сегменты/плейсхолдеры/модель"
status: pending
dependencies:
- max-tokens-detailed
---
# План внедрения DetailLevel (КРАТКО/СТАНДАРТНО/ПОДРОБНО)
## Цели
- **КРАТКО**: экономим токены — краткие инструкции, меньше сегментов в JSON, текст 150–250 слов, только bullet points, модель всегда `miniModelName`.
- **СТАНДАРТНО**: **без изменений** (текущие промпты/модели/объемы принимаем baseline).
- **ПОДРОБНО**: максимальная глубина — больше сегментов в JSON + доп. поля (гипотезы/мини-кейсы), текст 1000–1500 слов, академические требования, больше формул LaTeX, модель всегда `textModelName`, увеличенный `maxTokens`.
## Где менять код
- Основная логика промптов и вызовов модели: [src/main/java/kz/konturai/parser/service/MarketingAnalysisService.java](/Users/magzhanzhumabaev/Desktop/kt%20cloud/parser/src/main/java/kz/konturai/parser/service/MarketingAnalysisService.java)
- API вызовы и параметры `max_tokens`: [src/main/java/kz/konturai/parser/service/OpenAIAnalyticsService.java](/Users/magzhanzhumabaev/Desktop/kt%20cloud/parser/src/main/java/kz/konturai/parser/service/OpenAIAnalyticsService.java)
- Источник уровня: `MarketingAnalysisRequest.getDetailLevelEnum()` в [src/main/java/kz/konturai/parser/dto/MarketingAnalysisRequest.java](/Users/magzhanzhumabaev/Desktop/kt%20cloud/parser/src/main/java/kz/konturai/parser/dto/MarketingAnalysisRequest.java)
## Изменения для текстовых секций (genSection*)
- **Централизовать требования по уровню** в `MarketingAnalysisService.appendDetailLevelDirectives(...)`:
- **КРАТКО**: добавить явное требование **150250 слов**, **только bullet points**, запрет вводных/«консалтинговых оборотов», и правило по плейсхолдерам: **вставлять `[[CHART_...]]/[[TABLE_...]] только если в JSON реально есть данные/раздел этого требует**.
- **ПОДРОБНО**: добавить жесткие требования:
- объем **10001500 слов**;
- «глубокий академический анализ»;
- **для каждого вывода — 3 конкретных примера реализации**;
- **смежные рынки** и **прогноз 35 лет**;
- больше расчетов в LaTeX: **CAC, LTV, ROI, Payback Period**.
- **Выбор модели по уровню** в каждом `genSection*` (там, где сейчас жестко задан `miniModelName` или mix):
- **КРАТКО → всегда `miniModelName`**
- **ПОДРОБНО → всегда `textModelName`**
- **СТАНДАРТНО → оставить текущую модельную логику как есть** (например, `genSectionSummary/product` сейчас на `miniModelName`, `market/audience/competitors/strategy` — на `textModelName`).
- Технически: добавить небольшой helper вроде `selectModelForTextSection(detailLevel, currentPrimaryModel, currentFallbackModel)` и использовать его при вызове `generateWithRetryForSection(...)`.
## Изменения для JSON-методов (get*Analysis)
Методы: `getAudienceAnalysis`, `getCompetitorAnalysis`, `getSeasonalityAndMarket`, `getStrategyAndFunnel`.
- Добавить `DetailLevel detailLevel = request.getDetailLevelEnum()` и ветвление (switch/if):
- **КРАТКО**:
- сократить инструкции;
- заменить «минимум 4 сегмента» → **«2–3 ключевых сегмента»**;
- заменить требования к полям (motivation/triggers/barriers/contentStrategy и т.п.) с 3–4 предложений → **1 емкое предложение**;
- модель **всегда `miniModelName`**.
- **СТАНДАРТНО**: оставить текущий prompt builder без изменений.
- **ПОДРОБНО**:
- требовать **56 сегментов** (где применимо) и более глубокую детализацию;
- расширить JSON-схему (без ломания текущих полей) добавив:
- top-level: `hypotheses[]`, `miniCases[]` внутри соответствующей секции (например `audienceAnalysis.hypotheses`, `competitorAnalysis.miniCases`);
- per-item: например `segments[].hypothesis`, `segments[].miniCase`, `competitorsDetails[].miniCase`;
- модель **всегда `textModelName`**.
- **Вынести базовые части промптов** в общие методы/константы, чтобы не дублировать текст:
- базовый «Ты — ...», правила «только JSON», блок входных данных;
- отдельные функции для добавления level-specific требований (segment count / sentence counts / extra fields).
## Max tokens для ПОДРОБНО
- Сейчас в `generateWithRetryForSection(...)` уже есть `maxTokensOverride` для `DetailLevel.ПОДРОБНО`, но он равен `REPORT_BASE_MAX_TOKENS * 2`.
- Привести к требованию: **установить override в диапазоне 800012000** (например, **12000**) для ПОДРОБНО, чтобы ответы не обрезались и не упираться в потенциальные лимиты модели.
- Для JSON-методов, которые вызывают `openAIAnalyticsService.generateWithInstructionWithModel(...)` без override, добавить `maxTokensOverride` (минимум для ПОДРОБНО), чтобы подробный JSON не резался.
## Проверка совместимости
- Убедиться, что существующие поля, которые используются в `genSection*` (например `audienceAnalysis.ageGroups`, `competitorAnalysis.marketShareChart`) **не меняются**, а новые поля добавляются как опциональные.
## Быстрый smoketest (локально)
- Прогнать генерацию отчета для 3 режимов на одном и том же входе и сравнить:
- модель (`gpt-4o-mini` vs `gpt-4o`),
- длину ответа (word count приблизительно),