42 lines
2.6 KiB
Markdown
42 lines
2.6 KiB
Markdown
# 2026-08-20 — LLM обрабатывает ВСЕ данные (чанкинг) — v0.0.57
|
|
|
|
## Задача
|
|
Пользователь: LLM должен обрабатывать ВСЕ данные, а не урезку 8000 символов.
|
|
Ветка сохранения пре-LLM конфигурации: `save-pre-llm-v0.0.56` (указывает на прежний master).
|
|
|
|
## Изменения (drhider/scanner.py)
|
|
`scan_llm_ner` переписан:
|
|
- Убраны глобальные урезки `t[:3000]` и `combined[:8000]`.
|
|
- Каждый файл обрабатывается ПОЛНОСТЬЮ: split_into_chunks(6000, overlap 500).
|
|
- Чанки файла — параллельно (ThreadPoolExecutor, concurrency 4), крупные файлы вперёд.
|
|
- Для каждого чанка — полный промпт + «Already captured by regex» (mapping).
|
|
- Дедуп найденного через normalize_entity (пробелы/регистр/кавычки/тире/ё).
|
|
- Верификация _verify_entity против ПОЛНОГО текста файла — отсекает галлюцинации LLM.
|
|
- regex-найденное не дублируется.
|
|
|
|
Новые хелперы (scanner.py):
|
|
- split_into_chunks(text, size=6000, overlap=500) — границы \n\n,\n,. ,? ,! ,; ,, ," "
|
|
- normalize_entity(s) — канонизация для дедупа
|
|
- _verify_entity(value, full_text) — точное/нормализованное вхождение
|
|
- _build_llm_prompt(text, already_found)
|
|
- _call_llm(text, llm_client) — вызов + разбор JSON (пусто при ошибке)
|
|
|
|
Параметры верхнего уровня (легко тюнить):
|
|
- _CHUNK_SIZE = 6000, _CHUNK_OVERLAP = 500, _LLM_CONCURRENCY = 4
|
|
|
|
## Ожидаемый эффект
|
|
- LLM покрывает все файлы целиком (в т.ч. хвосты и таблицы после 3000 символа).
|
|
- Время на ~300 файлов ≈ 3.5 мин при 4 потоках (~390 вызовов).
|
|
- Меньше галлюцинаций (верификация).
|
|
|
|
## Проверка
|
|
- py_compile OK.
|
|
- test_scanner 20/20.
|
|
- Юнит хелперов: split (12К→4 чанка ≤6100), verify (галлюцинация→False), normalize OK.
|
|
- Все 106 тестов OK.
|
|
- VERSION 0.0.57.
|
|
|
|
## Примечание
|
|
Реальная проверка LLM-покрытия и времени — на наборе T/ при прогоне на проде/локально
|
|
с ключом LLM (локально ключ отсутствует → LLM не выполняется, только regex).
|