fix(stage2): устранена обрезка ответа (max_tokens 2048 + повтор) и проверка заголовков для кириллицы
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
# Долгий прогон: разбор и исправления (2026-10-07)
|
||||
|
||||
## Первый прогон (62 вопроса, прод)
|
||||
|
||||
| Метрика | Значение |
|
||||
|---|---|
|
||||
| Ответов 200 | 56/62 |
|
||||
| Отказов 502 `bad_llm_output` | **6** |
|
||||
| Шаблон соблюдён | 56/56 |
|
||||
| `resource_type` определён | 42/56 |
|
||||
| Задержки | min 3.3 с, p50 8.0 с, p95 13.2 с, max 16.1 с |
|
||||
|
||||
Негативные и инъекции обработаны верно (9/10 без `resource_type`; «напиши эссе»/«забудь инструкции» → ответ по шаблону, без ухода в сторону).
|
||||
|
||||
## Причина 502 (найдена)
|
||||
|
||||
Упавшие 6: openbao, «создать ВМ», rabbitmq, nodejs, gitea, pgadmin.
|
||||
|
||||
Локальное воспроизведение с захватом сырого ответа LLM показало: `finish_reason: "length"` — **ответ обрезался лимитом `max_tokens: 1024`** до секции «Ограничения» (последний заголовок шаблона). Проверка обязательных заголовков не проходила → 502.
|
||||
|
||||
## Исправления
|
||||
|
||||
1. `stage2.js`: `maxTokens` по умолчанию **1024 → 2048**; добавлен **повтор** (до 2 попыток) с удвоением бюджета (до 4096) при отсутствии заголовков.
|
||||
2. `orchestrator.js`: вызов этапа 2 → `maxTokens: 2048`.
|
||||
3. `stage2.js`: проверка заголовков сделана устойчивой (regex, markdown `#`/`**`, регистр).
|
||||
- ⚠️ Собственный баг: первая версия regex использовала `\b`, который **не работает с кириллицей** в JS без `u`-флага → все заголовки «не находились». Исправлено (заголовок ищется в начале строки + требование `:`).
|
||||
4. Промпт этапа 2: добавлено «Пиши сжато, без повторов» (снижает риск обрезки).
|
||||
|
||||
## Повторная проверка (локально, тот же индекс)
|
||||
|
||||
6 ранее упавших вопросов → **6/6 OK** (длины 1.3–2.8 КБ, все секции на месте).
|
||||
|
||||
## Тестовые артефакты
|
||||
|
||||
- `llm_project/tests/run_e2e_live.js` — прогон 62 вопросов по живому эндпоинту (учёт 429).
|
||||
- `llm_project/tests/RESULTS_LIVE.{json,md}` — результаты первого прогона.
|
||||
- `llm_project/tests/debug_bad_llm_output.js` — захват сырого ответа LLM (диагностика).
|
||||
Reference in New Issue
Block a user